tumbledemerald-legacy/asm/macros/contest_ai_script.inc
2022-05-19 17:14:13 +00:00

872 lines
16 KiB
PHP

@ A large number of the Contest AI commands go unused, so their corresponding macros in this file are similarly unused
@ Add a positive/negative value to the score of the move being evaluated.
.macro score score:req
.byte 0x00
.byte \score
.endm
.macro get_appeal_num
.byte 0x01
.endm
.macro if_appeal_num_less_than num:req, destination:req
.byte 0x02
.byte \num
.4byte \destination
.endm
.macro if_appeal_num_more_than num:req, destination:req
.byte 0x03
.byte \num
.4byte \destination
.endm
.macro if_appeal_num_eq num:req, destination:req
.byte 0x04
.byte \num
.4byte \destination
.endm
.macro if_appeal_num_not_eq num:req, destination:req
.byte 0x05
.byte \num
.4byte \destination
.endm
.macro if_last_appeal destination:req
if_appeal_num_eq CONTEST_LAST_APPEAL, \destination
.endm
.macro if_not_last_appeal destination:req
if_appeal_num_not_eq CONTEST_LAST_APPEAL, \destination
.endm
@ audience excitement
.macro get_excitement
.byte 0x06
.endm
.macro if_excitement_less_than num:req, destination:req
.byte 0x07
.byte \num
.4byte \destination
.endm
.macro if_excitement_more_than num:req, destination:req
.byte 0x08
.byte \num
.4byte \destination
.endm
.macro if_excitement_eq num:req, destination:req
.byte 0x09
.byte \num
.4byte \destination
.endm
.macro if_excitement_not_eq num:req, destination:req
.byte 0x0A
.byte \num
.4byte \destination
.endm
@ the order that the user goes in the current appeal
.macro get_user_order
.byte 0x0B
.endm
.macro if_user_order_less_than num:req, destination:req
.byte 0x0C
.byte \num
.4byte \destination
.endm
.macro if_user_order_more_than num:req, destination:req
.byte 0x0D
.byte \num
.4byte \destination
.endm
.macro if_user_order_eq num:req, destination:req
.byte 0x0E
.byte \num
.4byte \destination
.endm
.macro if_user_order_not_eq num:req, destination:req
.byte 0x0F
.byte \num
.4byte \destination
.endm
@ user condition
.macro get_user_condition
.byte 0x10
.endm
.macro if_user_condition_less_than num:req, destination:req
.byte 0x11
.byte \num
.4byte \destination
.endm
.macro if_user_condition_more_than num:req, destination:req
.byte 0x12
.byte \num
.4byte \destination
.endm
.macro if_user_condition_eq num:req, destination:req
.byte 0x13
.byte \num
.4byte \destination
.endm
.macro if_user_condition_not_eq num:req, destination:req
.byte 0x14
.byte \num
.4byte \destination
.endm
@ appeal points
.macro get_point_total
.byte 0x15
.endm
.macro if_points_less_than num:req, destination:req
.byte 0x16
.byte \num
.4byte \destination
.endm
.macro if_points_more_than num:req, destination:req
.byte 0x17
.byte \num
.4byte \destination
.endm
.macro if_points_eq num:req, destination:req
.byte 0x18
.byte \num
.4byte \destination
.endm
.macro if_points_not_eq num:req, destination:req
.byte 0x19
.byte \num
.4byte \destination
.endm
@ preliminary (pre-appeal) judging points
.macro get_preliminary_points
.byte 0x1A
.endm
.macro if_preliminary_points_less_than num:req, destination:req
.byte 0x1B
.byte \num
.4byte \destination
.endm
.macro if_preliminary_points_more_than num:req, destination:req
.byte 0x1C
.byte \num
.4byte \destination
.endm
.macro if_preliminary_points_eq num:req, destination:req
.byte 0x1D
.byte \num
.4byte \destination
.endm
.macro if_preliminary_points_not_eq num:req, destination:req
.byte 0x1E
.byte \num
.4byte \destination
.endm
@ contest type
.macro get_contest_type
.byte 0x1F
.endm
.macro if_contest_type_eq type:req, destination:req
.byte 0x20
.byte \type
.4byte \destination
.endm
.macro if_contest_type_not_eq type:req, destination:req
.byte 0x21
.byte \type
.4byte \destination
.endm
@ move excitement (change in excitement due to move)
.macro get_move_excitement
.byte 0x22
.endm
.macro if_move_excitement_less_than num:req, destination:req
.byte 0x23
.byte \num
.4byte \destination
.endm
.macro if_move_excitement_more_than num:req, destination:req
.byte 0x24
.byte \num
.4byte \destination
.endm
.macro if_move_excitement_eq num:req, destination:req
.byte 0x25
.byte \num
.4byte \destination
.endm
.macro if_move_excitement_not_eq num:req, destination:req
.byte 0x26
.byte \num
.4byte \destination
.endm
@ move effect
.macro get_effect
.byte 0x27
.endm
.macro if_effect_eq effect:req, destination:req
.byte 0x28
.byte \effect
.4byte \destination
.endm
.macro if_effect_not_eq effect:req, destination:req
.byte 0x29
.byte \effect
.4byte \destination
.endm
@ move effect type
.macro get_effect_type
.byte 0x2A
.endm
.macro if_effect_type_eq type:req, destination:req
.byte 0x2B
.byte \type
.4byte \destination
.endm
.macro if_effect_type_not_eq type:req, destination:req
.byte 0x2C
.byte \type
.4byte \destination
.endm
@ whether the current move is the most appealing in the user's moveset
.macro check_most_appealing_move
.byte 0x2D
.endm
.macro if_most_appealing_move destination:req
.byte 0x2E
.4byte \destination
.endm
@ whether the current move is the most jamming in the user's moveset
.macro check_most_jamming_move
.byte 0x2F
.endm
.macro if_most_jamming_move destination:req
.byte 0x30
.4bye \destination
.endm
@ number of hearts the current move's appeal would provide
.macro get_num_move_hearts
.byte 0x31
.endm
.macro if_num_move_hearts_less_than num:req, destination:req
.byte 0x32
.byte \num
.4byte \destination
.endm
.macro if_num_move_hearts_more_than num:req, destination:req
.byte 0x33
.byte \num
.4byte \destination
.endm
.macro if_num_move_hearts_eq num:req, destination:req
.byte 0x34
.byte \num
.4byte \destination
.endm
.macro if_num_move_hearts_not_eq num:req, destination:req
.byte 0x35
.byte \num
.4byte \destination
.endm
@ number of hearts the current move's jam would remove
.macro get_num_move_jam_hearts
.byte 0x36
.endm
.macro if_num_move_jam_hearts_less_than num:req, destination:req
.byte 0x37
.byte \num
.4byte \destination
.endm
.macro if_num_move_jam_hearts_more_than num:req, destination:req
.byte 0x38
.byte \num
.4byte \destination
.endm
.macro if_num_move_jam_hearts_eq num:req, destination:req
.byte 0x39
.byte \num
.4byte \destination
.endm
.macro if_num_move_jam_hearts_not_eq num:req, destination:req
.byte 0x3A
.byte \num
.4byte \destination
.endm
@ number of times current move has been used
.macro get_move_used_count
.byte 0x3B
.endm
.macro if_move_used_count_less_than num:req, destination:req
.byte 0x3C
.byte \num
.4byte \destination
.endm
.macro if_move_used_count_more_than num:req, destination:req
.byte 0x3D
.byte \num
.4byte \destination
.endm
.macro if_move_used_count_eq num:req, destination:req
.byte 0x3E
.byte \num
.4byte \destination
.endm
.macro if_move_used_count_not_eq num:req, destination:req
.byte 0x3F
.byte \num
.4byte \destination
.endm
@ whether the current move is a combo starter (with another move in the moveset)
.macro check_combo_starter
.byte 0x40
.endm
.macro if_combo_starter destination:req
.byte 0x41
.4byte \destination
.endm
.macro if_not_combo_starter destination:req
.byte 0x42
.4byte \destination
.endm
@ whether the current move is a combo finisher (with another move in the moveset)
.macro check_combo_finisher
.byte 0x43
.endm
.macro if_combo_finisher destination:req
.byte 0x44
.4byte \destination
.endm
.macro if_not_combo_finisher destination:req
.byte 0x45
.4byte \destination
.endm
@ whether the current move would finish a combo
.macro check_would_finish_combo
.byte 0x46
.endm
.macro if_would_finish_combo destination:req
.byte 0x47
.4byte \destination
.endm
.macro if_would_not_finish_combo destination:req
.byte 0x48
.4byte \destination
.endm
@ condition of mon (indexed by order)
.macro get_condition mon:req
.byte 0x49
.byte \mon
.endm
.macro if_condition_less_than mon:req, num:req destination:req
.byte 0x4A
.byte \mon
.byte \num
.4byte \destination
.endm
.macro if_condition_more_than mon:req, num:req, destination:req
.byte 0x4B
.byte \mon
.byte \num
.4byte \destination
.endm
.macro if_condition_eq mon:req, num:req, destination:req
.byte 0x4C
.byte \mon
.byte \num
.4byte \destination
.endm
.macro if_condition_not_eq mon:req, num:req, destination:req
.byte 0x4D
.byte \mon
.byte \num
.4byte \destination
.endm
@ whether the mon used a combo starter move
@ Even though this value is always 1 or 0 (i.e. TRUE/FALSE),
@ there are less-than and greater-than comparison operations for some reason.
.macro get_used_combo_starter mon:req
.byte 0x4E
.byte \mon
.endm
.macro if_used_combo_starter_less_than mon:req, num:req, destination:req
.byte 0x4F
.byte \mon
.byte \num
.4byte \destination
.endm
.macro if_used_combo_starter_more_than mon:req, num:req, destination:req
.byte 0x50
.byte \mon
.byte \num
.4byte \destination
.endm
.macro if_used_combo_starter_eq mon:req, num:req, destination:req
.byte 0x51
.byte \mon
.byte \num
.4byte \destination
.endm
.macro if_used_combo_starter_not_eq mon:req, num:req, destination:req
.byte 0x52
.byte \mon
.byte \num
.4byte \destination
.endm
.macro if_used_combo_starter mon:req, destination:req
if_used_combo_starter_eq \mon, TRUE, \destination
.endm
.macro if_not_used_combo_starter mon:req, destination:req
if_used_combo_starter_eq \mon, FALSE, \destination
.endm
@ whether the mon can make an appeal
.macro check_can_participate mon:req
.byte 0x53
.byte \mon
.endm
.macro if_can_participate mon:req, destination:req
.byte 0x54
.byte \mon
.4byte \destination
.endm
.macro if_cannot_participate mon:req, destination:req
.byte 0x55
.byte \mon
.4byte \destination
.endm
@ whether the mon just completed a combo
.macro get_completed_combo mon:req
.byte 0x56
.byte \mon
.4byte \destination
.endm
.macro if_completed_combo mon:req, destination:req
.byte 0x57
.byte \mon
.4byte \destination
.endm
.macro if_not_completed_combo mon:req destination:req
.byte 0x58
.byte \mon
.4byte \destination
.endm
@ comparing appeal points to another mon
.macro get_points_diff mon:req
.byte 0x59
.byte \mon
.endm
.macro if_points_more_than_mon mon:req, destination:req
.byte 0x5A
.byte \mon
.4byte \destination
.endm
.macro if_points_less_than_mon mon:req, destination:req
.byte 0x5B
.byte \mon
.4byte \destination
.endm
.macro if_points_eq_mon mon:req, destination:req
.byte 0x5C
.byte \mon
.4byte \destination
.endm
.macro if_points_not_eq_mon mon:req, destination:req
.byte 0x5D
.byte \mon
.4byte \destination
.endm
@ comparing preliminary judging points to another mon
.macro get_preliminary_points_diff mon:req
.byte 0x5E
.byte \mon
.endm
.macro if_preliminary_points_more_than_mon mon:req, destination:req
.byte 0x5F
.byte \mon
.4byte \destination
.endm
.macro if_preliminary_points_less_than_mon mon:req, destination:req
.byte 0x60
.byte \mon
.4byte \destination
.endm
.macro if_preliminary_points_eq_mon mon:req, destination:req
.byte 0x61
.byte \mon
.4byte \destination
.endm
.macro if_preliminary_points_not_eq_mon mon:req, destination:req
.byte 0x62
.byte \mon
.4byte \destination
.endm
@ checking move history for move effect
.macro get_used_moves_effect mon:req, round:req
.byte 0x63
.byte \mon
.byte \round
.endm
.macro if_used_moves_effect_less_than mon:req, round:req, effect:req, destination:req
.byte 0x64
.byte \mon
.byte \round
.byte \effect
.4byte \destination
.endm
.macro if_used_moves_effect_more_than mon:req, round:req, effect:req, destination:req
.byte 0x65
.byte \mon
.byte \round
.byte \effect
.4byte \destination
.endm
.macro if_used_moves_effect_eq mon:req, round:req, effect:req, destination:req
.byte 0x66
.byte \mon
.byte \round
.byte \effect
.4byte \destination
.endm
.macro if_used_moves_effect_not_eq mon:req, round:req, effect:req, destination:req
.byte 0x67
.byte \mon
.byte \round
.byte \effect
.4byte \destination
.endm
@ checking move history for excitement
.macro get_used_moves_excitement mon:req, round:req
.byte 0x68
.byte \mon
.byte \round
.endm
.macro if_used_moves_excitement_less_than mon:req, round:req, num:req, destination:req
.byte 0x69
.byte \mon
.byte \round
.byte \num
.4byte \destination
.endm
.macro if_used_moves_excitement_more_than mon:req, round:req, num:req, destination:req
.byte 0x6A
.byte \mon
.byte \round
.byte \num
.4byte \destination
.endm
.macro if_used_moves_excitement_eq mon:req, round:req, num:req, destination:req
.byte 0x6B
.byte \mon
.byte \round
.byte \num
.4byte \destination
.endm
.macro if_used_moves_excitement_not_eq mon:req, round:req, num:req, destination:req
.byte 0x6C
.byte \mon
.byte \round
.byte \num
.4byte \destination
.endm
@ checking move history for effect type
.macro get_used_moves_effect_type mon:req, round:req
.byte 0x6D
.byte \mon
.byte \round
.endm
.macro if_used_moves_effect_type_eq mon:req, round:req, type:req, destination:req
.byte 0x6E
.byte \mon
.byte \round
.byte \type
.4byte \destination
.endm
.macro if_used_moves_effect_type_not_eq mon:req, round:req, type:req, destination:req
.byte 0x6F
.byte \mon
.byte \round
.byte \type
.4byte \destination
.endm
@ generic commands
.macro save_result varId:req
.byte 0x70
.byte \varId
.endm
.macro setvar varId:req, num:req
.byte 0x71
.byte \varId
.2byte \num
.endm
.macro add varId:req, num:req
.byte 0x72
.byte \varId
.2byte \num
.endm
.macro addvar varId1:req, varId2:req
.byte 0x73
.byte \varId1
.byte \varId2
.endm
@ Duplicate of above
.macro addvar_duplicate varId1:req, varId2:req
.byte 0x74
.byte \varId1
.byte \varId2
.endm
.macro if_less_than varId:req, num:req, destination:req
.byte 0x75
.byte \varId
.2byte \num
.4byte \destination
.endm
.macro if_greater_than varId:req, num:req, destination:req
.byte 0x76
.byte \varId
.2byte \num
.4byte \destination
.endm
.macro if_eq varId:req, num:req, destination:req
.byte 0x77
.byte \varId
.2byte \num
.4byte \destination
.endm
.macro if_not_eq varId:req, num:req, destination:req
.byte 0x78
.byte \varId
.2byte \num
.4byte \destination
.endm
.macro if_less_than_var varId1:req, varId2:req, destination:req
.byte 0x79
.byte \varId1
.byte \varId2
.4byte \destination
.endm
.macro if_greater_than_var varId1:req, varId2:req, destination:req
.byte 0x7A
.byte \varId1
.byte \varId2
.4byte \destination
.endm
.macro if_eq_var varId1:req, varId2:req, destination:req
.byte 0x7B
.byte \varId1
.byte \varId2
.4byte \destination
.endm
.macro if_not_eq_var varId1:req, varId2:req, destination:req
.byte 0x7C
.byte \varId1
.byte \varId2
.4byte \destination
.endm
@ NOTE: The random commands are broken (see ContestAICmd_if_random_less_than)
.macro if_random_less_than num:req, destination:req
.byte 0x7D
.byte \num
.4byte \destination
.endm
.macro if_random_greater_than num:req, destination:req
.byte 0x7E
.byte \num
.4byte \destination
.endm
.macro goto destination:req
.byte 0x7F
.4byte \destination
.endm
.macro call destination:req
.byte 0x80
.4byte \destination
.endm
.macro end
.byte 0x81
.endm
.macro check_user_has_exciting_move
.byte 0x82
.endm
.macro if_user_has_exciting_move destination:req
.byte 0x83
.4byte \destination
.endm
.macro if_user_doesnt_have_exciting_move destination:req
.byte 0x84
.4byte \destination
.endm
@ This is used incorrectly to check for an effect; see ContestAICmd_check_user_has_move
.macro check_user_has_move move:req
.byte 0x85
.2byte \move
.endm
.macro if_user_has_move move:req, destination:req
.byte 0x86
.2byte \move
.4byte \destination
.endm
.macro if_user_doesnt_have_move move:req, destination:req
.byte 0x87
.2byte \move
.4byte \destination
.endm