Script_RunImmediatelyUntilEffect runs a script until either a specified effect may occur or it reaches an end. All existing script commands and natives, and some specials, call Script_RequestEffects which allows us to analyze them. Any downstream script commands/natives/specials will be statically known not to call Script_RequestEffects and treated as if they have all effects. Manually tagging them with requests_effects=1 and calling Script_RequestEffects will make them analyzable. Using these, we're able to execute scripts until they either exit with no effect, or would possibly have an effect. This allows us to: 1. Not run on frame map scripts or triggers if they would have no effect. 2. Immediately run triggers if they only affect flags/vars. This removes the lag frames when biking into the Cycling Road, for example. 3. Migrate on load/on transition/on resume/on return to field/on dive warp scripts onto the global script context if they would block (approximated via SCREFF_HARDWARE). 4. Support arbitrary control flow in trainer scripts. The trainer does not see the player if the script has no effect, and the trainer will use whichever trainerbattle command is branched to. 5. Support arbitrary scripts in trainer scripts. cant_see and cant_see_if_* commands have been introduced so that scripts are able to do something when the player interacts with the trainer even if that trainer wouldn't see them.
246 lines
15 KiB
PHP
246 lines
15 KiB
PHP
@ 'requests_effects' should be set to 1 if the command contains a call
|
|
@ to 'Script_RequestEffects', which allows it to be analyzed with
|
|
@ 'RunScriptImmediatelyUntilEffect'.
|
|
.macro cmd func:req, requests_effects=0
|
|
.if \requests_effects == 0
|
|
.4byte \func
|
|
.else
|
|
.4byte \func + ROM_SIZE
|
|
.endif
|
|
.endm
|
|
|
|
.align 2
|
|
gScriptCmdTable::
|
|
cmd ScrCmd_nop, requests_effects=1 @ 0x00
|
|
cmd ScrCmd_nop1, requests_effects=1 @ 0x01
|
|
cmd ScrCmd_end, requests_effects=1 @ 0x02
|
|
cmd ScrCmd_return, requests_effects=1 @ 0x03
|
|
cmd ScrCmd_call, requests_effects=1 @ 0x04
|
|
cmd ScrCmd_goto, requests_effects=1 @ 0x05
|
|
cmd ScrCmd_goto_if, requests_effects=1 @ 0x06
|
|
cmd ScrCmd_call_if, requests_effects=1 @ 0x07
|
|
cmd ScrCmd_gotostd, requests_effects=1 @ 0x08
|
|
cmd ScrCmd_callstd, requests_effects=1 @ 0x09
|
|
cmd ScrCmd_gotostd_if, requests_effects=1 @ 0x0a
|
|
cmd ScrCmd_callstd_if, requests_effects=1 @ 0x0b
|
|
cmd ScrCmd_returnram, requests_effects=1 @ 0x0c
|
|
cmd ScrCmd_endram, requests_effects=1 @ 0x0d
|
|
cmd ScrCmd_setmysteryeventstatus, requests_effects=1 @ 0x0e
|
|
cmd ScrCmd_loadword, requests_effects=1 @ 0x0f
|
|
cmd ScrCmd_loadbyte, requests_effects=1 @ 0x10
|
|
cmd ScrCmd_setptr, requests_effects=1 @ 0x11
|
|
cmd ScrCmd_loadbytefromptr, requests_effects=1 @ 0x12
|
|
cmd ScrCmd_setptrbyte, requests_effects=1 @ 0x13
|
|
cmd ScrCmd_copylocal, requests_effects=1 @ 0x14
|
|
cmd ScrCmd_copybyte, requests_effects=1 @ 0x15
|
|
cmd ScrCmd_setvar, requests_effects=1 @ 0x16
|
|
cmd ScrCmd_addvar, requests_effects=1 @ 0x17
|
|
cmd ScrCmd_subvar, requests_effects=1 @ 0x18
|
|
cmd ScrCmd_copyvar, requests_effects=1 @ 0x19
|
|
cmd ScrCmd_setorcopyvar, requests_effects=1 @ 0x1a
|
|
cmd ScrCmd_compare_local_to_local, requests_effects=1 @ 0x1b
|
|
cmd ScrCmd_compare_local_to_value, requests_effects=1 @ 0x1c
|
|
cmd ScrCmd_compare_local_to_ptr, requests_effects=1 @ 0x1d
|
|
cmd ScrCmd_compare_ptr_to_local, requests_effects=1 @ 0x1e
|
|
cmd ScrCmd_compare_ptr_to_value, requests_effects=1 @ 0x1f
|
|
cmd ScrCmd_compare_ptr_to_ptr, requests_effects=1 @ 0x20
|
|
cmd ScrCmd_compare_var_to_value, requests_effects=1 @ 0x21
|
|
cmd ScrCmd_compare_var_to_var, requests_effects=1 @ 0x22
|
|
cmd ScrCmd_callnative, requests_effects=1 @ 0x23
|
|
cmd ScrCmd_gotonative, requests_effects=1 @ 0x24
|
|
cmd ScrCmd_special, requests_effects=1 @ 0x25
|
|
cmd ScrCmd_specialvar, requests_effects=1 @ 0x26
|
|
cmd ScrCmd_waitstate, requests_effects=1 @ 0x27
|
|
cmd ScrCmd_delay, requests_effects=1 @ 0x28
|
|
cmd ScrCmd_setflag, requests_effects=1 @ 0x29
|
|
cmd ScrCmd_clearflag, requests_effects=1 @ 0x2a
|
|
cmd ScrCmd_checkflag, requests_effects=1 @ 0x2b
|
|
cmd ScrCmd_initclock, requests_effects=1 @ 0x2c
|
|
cmd ScrCmd_dotimebasedevents, requests_effects=1 @ 0x2d
|
|
cmd ScrCmd_gettime, requests_effects=1 @ 0x2e
|
|
cmd ScrCmd_playse, requests_effects=1 @ 0x2f
|
|
cmd ScrCmd_waitse, requests_effects=1 @ 0x30
|
|
cmd ScrCmd_playfanfare, requests_effects=1 @ 0x31
|
|
cmd ScrCmd_waitfanfare, requests_effects=1 @ 0x32
|
|
cmd ScrCmd_playbgm, requests_effects=1 @ 0x33
|
|
cmd ScrCmd_savebgm, requests_effects=1 @ 0x34
|
|
cmd ScrCmd_fadedefaultbgm, requests_effects=1 @ 0x35
|
|
cmd ScrCmd_fadenewbgm, requests_effects=1 @ 0x36
|
|
cmd ScrCmd_fadeoutbgm, requests_effects=1 @ 0x37
|
|
cmd ScrCmd_fadeinbgm, requests_effects=1 @ 0x38
|
|
cmd ScrCmd_warp, requests_effects=1 @ 0x39
|
|
cmd ScrCmd_warpsilent, requests_effects=1 @ 0x3a
|
|
cmd ScrCmd_warpdoor, requests_effects=1 @ 0x3b
|
|
cmd ScrCmd_warphole, requests_effects=1 @ 0x3c
|
|
cmd ScrCmd_warpteleport, requests_effects=1 @ 0x3d
|
|
cmd ScrCmd_setwarp, requests_effects=1 @ 0x3e
|
|
cmd ScrCmd_setdynamicwarp, requests_effects=1 @ 0x3f
|
|
cmd ScrCmd_setdivewarp, requests_effects=1 @ 0x40
|
|
cmd ScrCmd_setholewarp, requests_effects=1 @ 0x41
|
|
cmd ScrCmd_getplayerxy, requests_effects=1 @ 0x42
|
|
cmd ScrCmd_getpartysize, requests_effects=1 @ 0x43
|
|
cmd ScrCmd_additem, requests_effects=1 @ 0x44
|
|
cmd ScrCmd_removeitem, requests_effects=1 @ 0x45
|
|
cmd ScrCmd_checkitemspace, requests_effects=1 @ 0x46
|
|
cmd ScrCmd_checkitem, requests_effects=1 @ 0x47
|
|
cmd ScrCmd_checkitemtype, requests_effects=1 @ 0x48
|
|
cmd ScrCmd_addpcitem, requests_effects=1 @ 0x49
|
|
cmd ScrCmd_checkpcitem, requests_effects=1 @ 0x4a
|
|
cmd ScrCmd_adddecoration, requests_effects=1 @ 0x4b
|
|
cmd ScrCmd_removedecoration, requests_effects=1 @ 0x4c
|
|
cmd ScrCmd_checkdecor, requests_effects=1 @ 0x4d
|
|
cmd ScrCmd_checkdecorspace, requests_effects=1 @ 0x4e
|
|
cmd ScrCmd_applymovement, requests_effects=1 @ 0x4f
|
|
cmd ScrCmd_applymovementat, requests_effects=1 @ 0x50
|
|
cmd ScrCmd_waitmovement, requests_effects=1 @ 0x51
|
|
cmd ScrCmd_waitmovementat, requests_effects=1 @ 0x52
|
|
cmd ScrCmd_removeobject, requests_effects=1 @ 0x53
|
|
cmd ScrCmd_removeobjectat, requests_effects=1 @ 0x54
|
|
cmd ScrCmd_addobject, requests_effects=1 @ 0x55
|
|
cmd ScrCmd_addobjectat, requests_effects=1 @ 0x56
|
|
cmd ScrCmd_setobjectxy, requests_effects=1 @ 0x57
|
|
cmd ScrCmd_showobjectat, requests_effects=1 @ 0x58
|
|
cmd ScrCmd_hideobjectat, requests_effects=1 @ 0x59
|
|
cmd ScrCmd_faceplayer, requests_effects=1 @ 0x5a
|
|
cmd ScrCmd_turnobject, requests_effects=1 @ 0x5b
|
|
cmd ScrCmd_trainerbattle, requests_effects=1 @ 0x5c
|
|
cmd ScrCmd_dotrainerbattle, requests_effects=1 @ 0x5d
|
|
cmd ScrCmd_gotopostbattlescript, requests_effects=1 @ 0x5e
|
|
cmd ScrCmd_gotobeatenscript, requests_effects=1 @ 0x5f
|
|
cmd ScrCmd_checktrainerflag, requests_effects=1 @ 0x60
|
|
cmd ScrCmd_settrainerflag, requests_effects=1 @ 0x61
|
|
cmd ScrCmd_cleartrainerflag, requests_effects=1 @ 0x62
|
|
cmd ScrCmd_setobjectxyperm, requests_effects=1 @ 0x63
|
|
cmd ScrCmd_copyobjectxytoperm, requests_effects=1 @ 0x64
|
|
cmd ScrCmd_setobjectmovementtype, requests_effects=1 @ 0x65
|
|
cmd ScrCmd_waitmessage, requests_effects=1 @ 0x66
|
|
cmd ScrCmd_message, requests_effects=1 @ 0x67
|
|
cmd ScrCmd_closemessage, requests_effects=1 @ 0x68
|
|
cmd ScrCmd_lockall, requests_effects=1 @ 0x69
|
|
cmd ScrCmd_lock, requests_effects=1 @ 0x6a
|
|
cmd ScrCmd_releaseall, requests_effects=1 @ 0x6b
|
|
cmd ScrCmd_release, requests_effects=1 @ 0x6c
|
|
cmd ScrCmd_waitbuttonpress, requests_effects=1 @ 0x6d
|
|
cmd ScrCmd_yesnobox, requests_effects=1 @ 0x6e
|
|
cmd ScrCmd_multichoice, requests_effects=1 @ 0x6f
|
|
cmd ScrCmd_multichoicedefault, requests_effects=1 @ 0x70
|
|
cmd ScrCmd_multichoicegrid, requests_effects=1 @ 0x71
|
|
cmd ScrCmd_drawbox, requests_effects=1 @ 0x72
|
|
cmd ScrCmd_erasebox, requests_effects=1 @ 0x73
|
|
cmd ScrCmd_drawboxtext, requests_effects=1 @ 0x74
|
|
cmd ScrCmd_showmonpic, requests_effects=1 @ 0x75
|
|
cmd ScrCmd_hidemonpic, requests_effects=1 @ 0x76
|
|
cmd ScrCmd_showcontestpainting, requests_effects=1 @ 0x77
|
|
cmd ScrCmd_braillemessage, requests_effects=1 @ 0x78
|
|
cmd ScrCmd_nop1, requests_effects=1 @ 0x79
|
|
cmd ScrCmd_giveegg, requests_effects=1 @ 0x7a
|
|
cmd ScrCmd_setmonmove, requests_effects=1 @ 0x7b
|
|
cmd ScrCmd_checkpartymove, requests_effects=1 @ 0x7c
|
|
cmd ScrCmd_bufferspeciesname, requests_effects=1 @ 0x7d
|
|
cmd ScrCmd_bufferleadmonspeciesname, requests_effects=1 @ 0x7e
|
|
cmd ScrCmd_bufferpartymonnick, requests_effects=1 @ 0x7f
|
|
cmd ScrCmd_bufferitemname, requests_effects=1 @ 0x80
|
|
cmd ScrCmd_bufferdecorationname, requests_effects=1 @ 0x81
|
|
cmd ScrCmd_buffermovename, requests_effects=1 @ 0x82
|
|
cmd ScrCmd_buffernumberstring, requests_effects=1 @ 0x83
|
|
cmd ScrCmd_bufferstdstring, requests_effects=1 @ 0x84
|
|
cmd ScrCmd_bufferstring, requests_effects=1 @ 0x85
|
|
cmd ScrCmd_pokemart, requests_effects=1 @ 0x86
|
|
cmd ScrCmd_pokemartdecoration, requests_effects=1 @ 0x87
|
|
cmd ScrCmd_pokemartdecoration2, requests_effects=1 @ 0x88
|
|
cmd ScrCmd_playslotmachine, requests_effects=1 @ 0x89
|
|
cmd ScrCmd_setberrytree, requests_effects=1 @ 0x8a
|
|
cmd ScrCmd_choosecontestmon, requests_effects=1 @ 0x8b
|
|
cmd ScrCmd_startcontest, requests_effects=1 @ 0x8c
|
|
cmd ScrCmd_showcontestresults, requests_effects=1 @ 0x8d
|
|
cmd ScrCmd_contestlinktransfer, requests_effects=1 @ 0x8e
|
|
cmd ScrCmd_random, requests_effects=1 @ 0x8f
|
|
cmd ScrCmd_addmoney, requests_effects=1 @ 0x90
|
|
cmd ScrCmd_removemoney, requests_effects=1 @ 0x91
|
|
cmd ScrCmd_checkmoney, requests_effects=1 @ 0x92
|
|
cmd ScrCmd_showmoneybox, requests_effects=1 @ 0x93
|
|
cmd ScrCmd_hidemoneybox, requests_effects=1 @ 0x94
|
|
cmd ScrCmd_updatemoneybox, requests_effects=1 @ 0x95
|
|
cmd ScrCmd_getpokenewsactive, requests_effects=1 @ 0x96
|
|
cmd ScrCmd_fadescreen, requests_effects=1 @ 0x97
|
|
cmd ScrCmd_fadescreenspeed, requests_effects=1 @ 0x98
|
|
cmd ScrCmd_setflashlevel, requests_effects=1 @ 0x99
|
|
cmd ScrCmd_animateflash, requests_effects=1 @ 0x9a
|
|
cmd ScrCmd_messageautoscroll, requests_effects=1 @ 0x9b
|
|
cmd ScrCmd_dofieldeffect, requests_effects=1 @ 0x9c
|
|
cmd ScrCmd_setfieldeffectargument, requests_effects=1 @ 0x9d
|
|
cmd ScrCmd_waitfieldeffect, requests_effects=1 @ 0x9e
|
|
cmd ScrCmd_setrespawn, requests_effects=1 @ 0x9f
|
|
cmd ScrCmd_checkplayergender, requests_effects=1 @ 0xa0
|
|
cmd ScrCmd_playmoncry, requests_effects=1 @ 0xa1
|
|
cmd ScrCmd_setmetatile, requests_effects=1 @ 0xa2
|
|
cmd ScrCmd_resetweather, requests_effects=1 @ 0xa3
|
|
cmd ScrCmd_setweather, requests_effects=1 @ 0xa4
|
|
cmd ScrCmd_doweather, requests_effects=1 @ 0xa5
|
|
cmd ScrCmd_setstepcallback, requests_effects=1 @ 0xa6
|
|
cmd ScrCmd_setmaplayoutindex, requests_effects=1 @ 0xa7
|
|
cmd ScrCmd_setobjectsubpriority, requests_effects=1 @ 0xa8
|
|
cmd ScrCmd_resetobjectsubpriority, requests_effects=1 @ 0xa9
|
|
cmd ScrCmd_createvobject, requests_effects=1 @ 0xaa
|
|
cmd ScrCmd_turnvobject, requests_effects=1 @ 0xab
|
|
cmd ScrCmd_opendoor, requests_effects=1 @ 0xac
|
|
cmd ScrCmd_closedoor, requests_effects=1 @ 0xad
|
|
cmd ScrCmd_waitdooranim, requests_effects=1 @ 0xae
|
|
cmd ScrCmd_setdooropen, requests_effects=1 @ 0xaf
|
|
cmd ScrCmd_setdoorclosed, requests_effects=1 @ 0xb0
|
|
cmd ScrCmd_addelevmenuitem, requests_effects=1 @ 0xb1
|
|
cmd ScrCmd_showelevmenu, requests_effects=1 @ 0xb2
|
|
cmd ScrCmd_checkcoins, requests_effects=1 @ 0xb3
|
|
cmd ScrCmd_addcoins, requests_effects=1 @ 0xb4
|
|
cmd ScrCmd_removecoins, requests_effects=1 @ 0xb5
|
|
cmd ScrCmd_setwildbattle, requests_effects=1 @ 0xb6
|
|
cmd ScrCmd_dowildbattle, requests_effects=1 @ 0xb7
|
|
cmd ScrCmd_setvaddress, requests_effects=1 @ 0xb8
|
|
cmd ScrCmd_vgoto, requests_effects=1 @ 0xb9
|
|
cmd ScrCmd_vcall, requests_effects=1 @ 0xba
|
|
cmd ScrCmd_vgoto_if, requests_effects=1 @ 0xbb
|
|
cmd ScrCmd_vcall_if, requests_effects=1 @ 0xbc
|
|
cmd ScrCmd_vmessage, requests_effects=1 @ 0xbd
|
|
cmd ScrCmd_vbuffermessage, requests_effects=1 @ 0xbe
|
|
cmd ScrCmd_vbufferstring, requests_effects=1 @ 0xbf
|
|
cmd ScrCmd_showcoinsbox, requests_effects=1 @ 0xc0
|
|
cmd ScrCmd_hidecoinsbox, requests_effects=1 @ 0xc1
|
|
cmd ScrCmd_updatecoinsbox, requests_effects=1 @ 0xc2
|
|
cmd ScrCmd_incrementgamestat, requests_effects=1 @ 0xc3
|
|
cmd ScrCmd_setescapewarp, requests_effects=1 @ 0xc4
|
|
cmd ScrCmd_waitmoncry, requests_effects=1 @ 0xc5
|
|
cmd ScrCmd_bufferboxname, requests_effects=1 @ 0xc6
|
|
cmd ScrCmd_nop1, requests_effects=1 @ 0xc7
|
|
cmd ScrCmd_nop1, requests_effects=1 @ 0xc8
|
|
cmd ScrCmd_nop1, requests_effects=1 @ 0xc9
|
|
cmd ScrCmd_nop1, requests_effects=1 @ 0xca
|
|
cmd ScrCmd_nop1, requests_effects=1 @ 0xcb
|
|
cmd ScrCmd_nop1, requests_effects=1 @ 0xcc
|
|
cmd ScrCmd_setmodernfatefulencounter, requests_effects=1 @ 0xcd
|
|
cmd ScrCmd_checkmodernfatefulencounter, requests_effects=1 @ 0xce
|
|
cmd ScrCmd_trywondercardscript, requests_effects=1 @ 0xcf
|
|
cmd ScrCmd_nop1, requests_effects=1 @ 0xd0
|
|
cmd ScrCmd_warpspinenter, requests_effects=1 @ 0xd1
|
|
cmd ScrCmd_setmonmetlocation, requests_effects=1 @ 0xd2
|
|
cmd ScrCmd_moverotatingtileobjects, requests_effects=1 @ 0xd3
|
|
cmd ScrCmd_turnrotatingtileobjects, requests_effects=1 @ 0xd4
|
|
cmd ScrCmd_initrotatingtilepuzzle, requests_effects=1 @ 0xd5
|
|
cmd ScrCmd_freerotatingtilepuzzle, requests_effects=1 @ 0xd6
|
|
cmd ScrCmd_warpmossdeepgym, requests_effects=1 @ 0xd7
|
|
cmd ScrCmd_selectapproachingtrainer, requests_effects=1 @ 0xd8
|
|
cmd ScrCmd_lockfortrainer, requests_effects=1 @ 0xd9
|
|
cmd ScrCmd_closebraillemessage, requests_effects=1 @ 0xda
|
|
cmd ScrCmd_messageinstant, requests_effects=1 @ 0xdb
|
|
cmd ScrCmd_fadescreenswapbuffers, requests_effects=1 @ 0xdc
|
|
cmd ScrCmd_buffertrainerclassname, requests_effects=1 @ 0xdd
|
|
cmd ScrCmd_buffertrainername, requests_effects=1 @ 0xde
|
|
cmd ScrCmd_pokenavcall, requests_effects=1 @ 0xdf
|
|
cmd ScrCmd_warpwhitefade, requests_effects=1 @ 0xe0
|
|
cmd ScrCmd_buffercontestname, requests_effects=1 @ 0xe1
|
|
cmd ScrCmd_bufferitemnameplural, requests_effects=1 @ 0xe2
|
|
cmd ScrCmd_dynmultichoice, requests_effects=1 @ 0xe3
|
|
cmd ScrCmd_dynmultipush, requests_effects=1 @ 0xe4
|
|
|
|
gScriptCmdTableEnd::
|
|
.4byte ScrCmd_nop
|