ref: def3b6049387a6d2afab66780f7f09dbb61d6166
dir: /engine/scripting.asm/
; Event scripting commands. EnableScriptMode:: push af ld a, SCRIPT_READ ld [ScriptMode], a pop af ret ScriptEvents:: call StartScript .loop ld a, [ScriptMode] ld hl, .modes rst JumpTable call CheckScript jr nz, .loop ret .modes dw EndScript dw RunScriptCommand dw WaitScriptMovement dw WaitScript EndScript: call StopScript ret WaitScript: call StopScript ld hl, ScriptDelay dec [hl] ret nz farcall Function58b9 ld a, SCRIPT_READ ld [ScriptMode], a call StartScript ret WaitScriptMovement: call StopScript ld hl, VramState bit 7, [hl] ret nz farcall Function58b9 ld a, SCRIPT_READ ld [ScriptMode], a call StartScript ret RunScriptCommand: call GetScriptByte ld hl, ScriptCommandTable rst JumpTable ret ScriptCommandTable: ; entries correspond to macros/scripts/events.asm enumeration dw Script_scall ; 00 dw Script_farscall ; 01 dw Script_ptcall ; 02 dw Script_jump ; 03 dw Script_farjump ; 04 dw Script_ptjump ; 05 dw Script_if_equal ; 06 dw Script_if_not_equal ; 07 dw Script_iffalse ; 08 dw Script_iftrue ; 09 dw Script_if_greater_than ; 0a dw Script_if_less_than ; 0b dw Script_jumpstd ; 0c dw Script_callstd ; 0d dw Script_callasm ; 0e dw Script_special ; 0f dw Script_ptcallasm ; 10 dw Script_checkmapscene ; 11 dw Script_setmapscene ; 12 dw Script_checkscene ; 13 dw Script_setscene ; 14 dw Script_writebyte ; 15 dw Script_addvar ; 16 dw Script_random ; 17 dw Script_checkver ; 18 dw Script_copybytetovar ; 19 dw Script_copyvartobyte ; 1a dw Script_loadvar ; 1b dw Script_checkcode ; 1c dw Script_writevarcode ; 1d dw Script_writecode ; 1e dw Script_giveitem ; 1f dw Script_takeitem ; 20 dw Script_checkitem ; 21 dw Script_givemoney ; 22 dw Script_takemoney ; 23 dw Script_checkmoney ; 24 dw Script_givecoins ; 25 dw Script_takecoins ; 26 dw Script_checkcoins ; 27 dw Script_addcellnum ; 28 dw Script_delcellnum ; 29 dw Script_checkcellnum ; 2a dw Script_checktime ; 2b dw Script_checkpoke ; 2c dw Script_givepoke ; 2d dw Script_giveegg ; 2e dw Script_givepokeitem ; 2f dw Script_checkpokeitem ; 30 dw Script_checkevent ; 31 dw Script_clearevent ; 32 dw Script_setevent ; 33 dw Script_checkflag ; 34 dw Script_clearflag ; 35 dw Script_setflag ; 36 dw Script_wildon ; 37 dw Script_wildoff ; 38 dw Script_xycompare ; 39 dw Script_warpmod ; 3a dw Script_blackoutmod ; 3b dw Script_warp ; 3c dw Script_readmoney ; 3d dw Script_readcoins ; 3e dw Script_RAM2MEM ; 3f dw Script_pokenamemem ; 40 dw Script_itemtotext ; 41 dw Script_mapnametotext ; 42 dw Script_trainertotext ; 43 dw Script_stringtotext ; 44 dw Script_itemnotify ; 45 dw Script_pocketisfull ; 46 dw Script_textbox ; 47 dw Script_refreshscreen ; 48 dw Script_closetext ; 49 dw Script_loadbytec2cf ; 4a dw Script_farwritetext ; 4b dw Script_writetext ; 4c dw Script_repeattext ; 4d dw Script_yesorno ; 4e dw Script_loadmenudata ; 4f dw Script_closewindow ; 50 dw Script_jumptextfaceplayer ; 51 if _CRYSTAL dw Script_farjumptext ; 52 endc dw Script_jumptext ; 53 dw Script_waitbutton ; 54 dw Script_buttonsound ; 55 dw Script_pokepic ; 56 dw Script_closepokepic ; 57 dw Script__2dmenu ; 58 dw Script_verticalmenu ; 59 dw Script_loadpikachudata ; 5a dw Script_randomwildmon ; 5b dw Script_loadmemtrainer ; 5c dw Script_loadwildmon ; 5d dw Script_loadtrainer ; 5e dw Script_startbattle ; 5f dw Script_reloadmapafterbattle ; 60 dw Script_catchtutorial ; 61 dw Script_trainertext ; 62 dw Script_trainerflagaction ; 63 dw Script_winlosstext ; 64 dw Script_scripttalkafter ; 65 dw Script_end_if_just_battled ; 66 dw Script_check_just_battled ; 67 dw Script_setlasttalked ; 68 dw Script_applymovement ; 69 dw Script_applymovement2 ; 6a dw Script_faceplayer ; 6b dw Script_faceobject ; 6c dw Script_variablesprite ; 6d dw Script_disappear ; 6e dw Script_appear ; 6f dw Script_follow ; 70 dw Script_stopfollow ; 71 dw Script_moveobject ; 72 dw Script_writeobjectxy ; 73 dw Script_loademote ; 74 dw Script_showemote ; 75 dw Script_spriteface ; 76 dw Script_follownotexact ; 77 dw Script_earthquake ; 78 dw Script_changemap ; 79 dw Script_changeblock ; 7a dw Script_reloadmap ; 7b dw Script_reloadmappart ; 7c dw Script_writecmdqueue ; 7d dw Script_delcmdqueue ; 7e dw Script_playmusic ; 7f dw Script_encountermusic ; 80 dw Script_musicfadeout ; 81 dw Script_playmapmusic ; 82 dw Script_dontrestartmapmusic ; 83 dw Script_cry ; 84 dw Script_playsound ; 85 dw Script_waitsfx ; 86 dw Script_warpsound ; 87 dw Script_specialsound ; 88 dw Script_passtoengine ; 89 dw Script_newloadmap ; 8a dw Script_pause ; 8b dw Script_deactivatefacing ; 8c dw Script_priorityjump ; 8d dw Script_warpcheck ; 8e dw Script_ptpriorityjump ; 8f dw Script_return ; 90 dw Script_end ; 91 dw Script_reloadandreturn ; 92 dw Script_end_all ; 93 dw Script_pokemart ; 94 dw Script_elevator ; 95 dw Script_trade ; 96 dw Script_askforphonenumber ; 97 dw Script_phonecall ; 98 dw Script_hangup ; 99 dw Script_describedecoration ; 9a dw Script_fruittree ; 9b dw Script_specialphonecall ; 9c dw Script_checkphonecall ; 9d dw Script_verbosegiveitem ; 9e dw Script_verbosegiveitem2 ; 9f dw Script_swarm ; a0 dw Script_halloffame ; a1 dw Script_credits ; a2 dw Script_warpfacing ; a3 dw Script_battletowertext ; a4 dw Script_landmarktotext ; a5 dw Script_trainerclassname ; a6 dw Script_name ; a7 dw Script_wait ; a8 dw Script_check_save ; a9 StartScript: ld hl, ScriptFlags set SCRIPT_RUNNING, [hl] ret CheckScript: ld hl, ScriptFlags bit SCRIPT_RUNNING, [hl] ret StopScript: ld hl, ScriptFlags res SCRIPT_RUNNING, [hl] ret Script_callasm: ; script command 0xe ; parameters: ; asm (AsmPointerParam) call GetScriptByte ld b, a call GetScriptByte ld l, a call GetScriptByte ld h, a ld a, b rst FarCall ret Script_special: ; script command 0xf ; parameters: ; predefined_script (MultiByteParam) call GetScriptByte ld e, a call GetScriptByte ld d, a farcall Special ret Script_ptcallasm: ; script command 0x10 ; parameters: ; asm (PointerToAsmPointerParam) call GetScriptByte ld l, a call GetScriptByte ld h, a ld b, [hl] inc hl ld a, [hli] ld h, [hl] ld l, a ld a, b rst FarCall ret Script_jumptextfaceplayer: ; script command 0x51 ; parameters: ; text_pointer (RawTextPointerLabelParam) ld a, [ScriptBank] ld [wScriptTextBank], a call GetScriptByte ld [wScriptTextAddr], a call GetScriptByte ld [wScriptTextAddr + 1], a ld b, BANK(JumpTextFacePlayerScript) ld hl, JumpTextFacePlayerScript jp ScriptJump Script_jumptext: ; script command 0x53 ; parameters: ; text_pointer (RawTextPointerLabelParam) ld a, [ScriptBank] ld [wScriptTextBank], a call GetScriptByte ld [wScriptTextAddr], a call GetScriptByte ld [wScriptTextAddr + 1], a ld b, BANK(JumpTextScript) ld hl, JumpTextScript jp ScriptJump JumpTextFacePlayerScript: faceplayer JumpTextScript: opentext repeattext -1, -1 waitbutton closetext end if _CRYSTAL Script_farjumptext: ; script command 0x52 ; parameters: ; text_pointer (PointerLabelBeforeBank) call GetScriptByte ld [wScriptTextBank], a call GetScriptByte ld [wScriptTextAddr], a call GetScriptByte ld [wScriptTextAddr + 1], a ld b, BANK(JumpTextScript) ld hl, JumpTextScript jp ScriptJump endc Script_writetext: ; script command 0x4c ; parameters: ; text_pointer (RawTextPointerLabelParam) call GetScriptByte ld l, a call GetScriptByte ld h, a ld a, [ScriptBank] ld b, a call MapTextbox ret Script_farwritetext: ; script command 0x4b ; parameters: ; text_pointer (PointerLabelBeforeBank) call GetScriptByte ld b, a call GetScriptByte ld l, a call GetScriptByte ld h, a call MapTextbox ret Script_repeattext: ; script command 0x4d ; parameters: ; byte (SingleByteParam) ; byte (SingleByteParam) call GetScriptByte ld l, a call GetScriptByte ld h, a cp -1 jr nz, .done ld a, l cp -1 jr nz, .done ld hl, wScriptTextBank ld a, [hli] ld b, a ld a, [hli] ld h, [hl] ld l, a call MapTextbox ret .done ret Script_waitbutton: ; script command 0x54 jp WaitButton Script_buttonsound: ; script command 0x55 ld a, [hOAMUpdate] push af ld a, $1 ld [hOAMUpdate], a call WaitBGMap call ButtonSound pop af ld [hOAMUpdate], a ret Script_yesorno: ; script command 0x4e call YesNoBox ld a, FALSE jr c, .no ld a, TRUE .no ld [ScriptVar], a ret Script_loadmenudata: ; script command 0x4f ; parameters: ; data (MenuDataPointerParam) call GetScriptByte ld l, a call GetScriptByte ld h, a ld de, LoadMenuDataHeader ld a, [ScriptBank] call Call_a_de call UpdateSprites ret Script_closewindow: ; script command 0x50 call CloseWindow call UpdateSprites ret Script_pokepic: ; script command 0x56 ; parameters: ; pokemon (PokemonParam) call GetScriptByte and a jr nz, .ok ld a, [ScriptVar] .ok ld [CurPartySpecies], a farcall Pokepic ret Script_closepokepic: ; script command 0x57 farcall ClosePokepic ret Script_verticalmenu: ; script command 0x59 ld a, [ScriptBank] ld hl, VerticalMenu rst FarCall ld a, [wMenuCursorY] jr nc, .ok xor a .ok ld [ScriptVar], a ret Script__2dmenu: ; script command 0x58 ld a, [ScriptBank] ld hl, _2DMenu rst FarCall ld a, [wMenuCursorBuffer] jr nc, .ok xor a .ok ld [ScriptVar], a ret Script_battletowertext: ; script command 0xa4 ; parameters: ; pointer (PointerLabelBeforeBank) ; memory (SingleByteParam) call SetUpTextBox call GetScriptByte ld c, a farcall BattleTowerText ret Script_verbosegiveitem: ; script command 0x9e ; parameters: ; item (ItemLabelByte) ; quantity (DecimalParam) call Script_giveitem call CurItemName ld de, StringBuffer1 ld a, 1 call CopyConvertedText ld b, BANK(GiveItemScript) ld de, GiveItemScript jp ScriptCall ret_96f76: ret GiveItemScript: callasm ret_96f76 writetext ReceivedItemText iffalse .Full waitsfx specialsound waitbutton itemnotify end .Full: buttonsound pocketisfull end ReceivedItemText: text_jump UnknownText_0x1c4719 db "@" Script_verbosegiveitem2: ; script command 0x9f ; parameters: ; item (ItemLabelByte) ; var (SingleByteParam) call GetScriptByte cp -1 jr nz, .ok ld a, [ScriptVar] .ok ld [CurItem], a call GetScriptByte call GetVarAction ld a, [de] ld [wItemQuantityChangeBuffer], a ld hl, NumItems call ReceiveItem ld a, TRUE jr c, .ok2 xor a .ok2 ld [ScriptVar], a call CurItemName ld de, StringBuffer1 ld a, 1 call CopyConvertedText ld b, BANK(GiveItemScript) ld de, GiveItemScript jp ScriptCall Script_itemnotify: ; script command 0x45 call GetPocketName call CurItemName ld b, BANK(PutItemInPocketText) ld hl, PutItemInPocketText call MapTextbox ret Script_pocketisfull: ; script command 0x46 call GetPocketName call CurItemName ld b, BANK(PocketIsFullText) ld hl, PocketIsFullText call MapTextbox ret Script_specialsound: ; script command 0x88 farcall CheckItemPocket ld a, [wItemAttributeParamBuffer] cp TM_HM ld de, SFX_GET_TM jr z, .play ld de, SFX_ITEM .play call PlaySFX call WaitSFX ret GetPocketName: farcall CheckItemPocket ld a, [wItemAttributeParamBuffer] dec a ld hl, .Pockets and 3 add a ld e, a ld d, 0 add hl, de ld a, [hli] ld d, [hl] ld e, a ld hl, StringBuffer3 call CopyName2 ret .Pockets: dw .Item dw .Key dw .Ball dw .TM .Item: db "ITEM POCKET@" .Key: db "KEY POCKET@" .Ball: db "BALL POCKET@" .TM: db "TM POCKET@" CurItemName: ld a, [CurItem] ld [wd265], a call GetItemName ret PutItemInPocketText: text_jump UnknownText_0x1c472c db "@" PocketIsFullText: text_jump UnknownText_0x1c474b db "@" Script_pokemart: ; script command 0x94 ; parameters: ; dialog_id (SingleByteParam) ; mart_id (MultiByteParam) call GetScriptByte ld c, a call GetScriptByte ld e, a call GetScriptByte ld d, a ld a, [ScriptBank] ld b, a farcall OpenMartDialog ret Script_elevator: ; script command 0x95 ; parameters: ; floor_list_pointer (PointerLabelParam) xor a ld [ScriptVar], a call GetScriptByte ld e, a call GetScriptByte ld d, a ld a, [ScriptBank] ld b, a farcall Elevator ret c ld a, TRUE ld [ScriptVar], a ret Script_trade: ; script command 0x96 ; parameters: ; trade_id (SingleByteParam) call GetScriptByte ld e, a farcall NPCTrade ret Script_phonecall: ; script command 0x98 ; parameters: ; caller_name (RawTextPointerLabelParam) call GetScriptByte ld e, a call GetScriptByte ld d, a ld a, [ScriptBank] ld b, a farcall PhoneCall ret Script_hangup: ; script command 0x99 farcall HangUp ret Script_askforphonenumber: ; script command 0x97 ; parameters: ; number (SingleByteParam) call YesNoBox jr c, .refused call GetScriptByte ld c, a farcall AddPhoneNumber jr c, .phonefull xor a jr .done .phonefull ld a, 1 jr .done .refused call GetScriptByte ld a, 2 .done ld [ScriptVar], a ret Script_describedecoration: ; script command 0x9a ; parameters: ; byte (SingleByteParam) call GetScriptByte ld b, a farcall DescribeDecoration ld h, d ld l, e jp ScriptJump Script_fruittree: ; script command 0x9b ; parameters: ; tree_id (SingleByteParam) call GetScriptByte ld [CurFruitTree], a ld b, BANK(FruitTreeScript) ld hl, FruitTreeScript jp ScriptJump Script_swarm: ; script command 0xa0 ; parameters: ; flag (SingleByteParam) ; map_group (MapGroupParam) ; map_id (MapIdParam) call GetScriptByte ld c, a call GetScriptByte ld d, a call GetScriptByte ld e, a farcall StoreSwarmMapIndices ret Script_trainertext: ; script command 0x62 ; parameters: ; which_text (SingleByteParam) call GetScriptByte ld c, a ld b, 0 ld hl, WalkingX add hl, bc add hl, bc ld a, [hli] ld h, [hl] ld l, a ld a, [EngineBuffer1] ld b, a call MapTextbox ret Script_scripttalkafter: ; script command 0x65 ld hl, wScriptAfterPointer ld a, [hli] ld h, [hl] ld l, a ld a, [EngineBuffer1] ld b, a jp ScriptJump Script_trainerflagaction: ; script command 0x63 ; parameters: ; action (SingleByteParam) xor a ld [ScriptVar], a ld hl, wd041 ld e, [hl] inc hl ld d, [hl] call GetScriptByte ld b, a call EventFlagAction ld a, c and a ret z ld a, TRUE ld [ScriptVar], a ret Script_winlosstext: ; script command 0x64 ; parameters: ; win_text_pointer (TextPointerLabelParam) ; loss_text_pointer (TextPointerLabelParam) ld hl, wWinTextPointer call GetScriptByte ld [hli], a call GetScriptByte ld [hli], a ld hl, wLossTextPointer call GetScriptByte ld [hli], a call GetScriptByte ld [hli], a ret Script_end_if_just_battled: ; script command 0x66 ld a, [wRunningTrainerBattleScript] and a ret z jp Script_end Script_check_just_battled: ; script command 0x67 ld a, TRUE ld [ScriptVar], a ld a, [wRunningTrainerBattleScript] and a ret nz xor a ld [ScriptVar], a ret Script_encountermusic: ; script command 0x80 ld a, [OtherTrainerClass] ld e, a farcall PlayTrainerEncounterMusic ret Script_playmapmusic: ; script command 0x82 call PlayMapMusic ret Script_playmusic: ; script command 0x7f ; parameters: ; music_pointer (MultiByteParam) ld de, MUSIC_NONE call PlayMusic xor a ld [MusicFade], a call MaxVolume call GetScriptByte ld e, a call GetScriptByte ld d, a call PlayMusic ret Script_musicfadeout: ; script command 0x81 ; parameters: ; music (MultiByteParam) ; fadetime (SingleByteParam) call GetScriptByte ld [MusicFadeID], a call GetScriptByte ld [MusicFadeID + 1], a call GetScriptByte and $7f ld [MusicFade], a ret Script_playsound: ; script command 0x85 ; parameters: ; sound_pointer (MultiByteParam) call GetScriptByte ld e, a call GetScriptByte ld d, a call PlaySFX ret Script_waitsfx: ; script command 0x86 call WaitSFX ret Script_warpsound: ; script command 0x87 farcall GetWarpSFX call PlaySFX ret Script_cry: ; script command 0x84 ; parameters: ; cry_id (MultiByteParam) call GetScriptByte push af call GetScriptByte pop af and a jr nz, .ok ld a, [ScriptVar] .ok call PlayCry ret GetScriptObject: and a ; PLAYER? ret z cp LAST_TALKED ret z dec a ret Script_setlasttalked: ; script command 0x68 ; parameters: ; object id (SingleByteParam) call GetScriptByte call GetScriptObject ld [hLastTalked], a ret Script_applymovement: ; script command 0x69 ; parameters: ; object id (SingleByteParam) ; data (MovementPointerLabelParam) call GetScriptByte call GetScriptObject ld c, a ApplyMovement: push bc ld a, c farcall SetFlagsForMovement_1 pop bc push bc call SetFlagsForMovement_2 pop bc call GetScriptByte ld l, a call GetScriptByte ld h, a ld a, [ScriptBank] ld b, a call GetMovementData ret c ld a, SCRIPT_WAIT_MOVEMENT ld [ScriptMode], a call StopScript ret SetFlagsForMovement_2: farcall _SetFlagsForMovement_2 ret Script_applymovement2: ; apply movement to last talked ; script command 0x6a ; parameters: ; data (MovementPointerLabelParam) ld a, [hLastTalked] ld c, a jp ApplyMovement Script_faceplayer: ; script command 0x6b ld a, [hLastTalked] and a ret z ld d, $0 ld a, [hLastTalked] ld e, a farcall GetRelativeFacing ld a, d add a add a ld e, a ld a, [hLastTalked] ld d, a call ApplyObjectFacing ret Script_faceobject: ; script command 0x6c ; parameters: ; object1 (SingleByteParam) ; object2 (SingleByteParam) call GetScriptByte call GetScriptObject cp LAST_TALKED jr c, .ok ld a, [hLastTalked] .ok ld e, a call GetScriptByte call GetScriptObject cp LAST_TALKED jr nz, .ok2 ld a, [hLastTalked] .ok2 ld d, a push de farcall GetRelativeFacing pop bc ret c ld a, d add a add a ld e, a ld d, c call ApplyObjectFacing ret Script_spriteface: ; script command 0x76 ; parameters: ; object id (SingleByteParam) ; facing (SingleByteParam) call GetScriptByte call GetScriptObject cp LAST_TALKED jr nz, .ok ld a, [hLastTalked] .ok ld d, a call GetScriptByte add a add a ld e, a call ApplyObjectFacing ret ApplyObjectFacing: ld a, d push de call CheckObjectVisibility jr c, .not_visible ld hl, OBJECT_SPRITE add hl, bc ld a, [hl] push bc call DoesSpriteHaveFacings pop bc jr c, .not_visible ; STILL_SPRITE ld hl, OBJECT_FLAGS1 add hl, bc bit FIXED_FACING, [hl] jr nz, .not_visible pop de ld a, e call SetSpriteDirection ld hl, VramState bit 6, [hl] jr nz, .text_state call .DisableTextTiles .text_state call UpdateSprites ret .not_visible pop de scf ret .DisableTextTiles: call LoadMapPart hlcoord 0, 0 ld bc, SCREEN_WIDTH * SCREEN_HEIGHT .loop res 7, [hl] inc hl dec bc ld a, b or c jr nz, .loop ret Script_variablesprite: ; script command 0x6d ; parameters: ; byte (SingleByteParam) ; sprite (SingleByteParam) call GetScriptByte ld e, a ld d, $0 ld hl, VariableSprites add hl, de call GetScriptByte ld [hl], a ret Script_appear: ; script command 0x6f ; parameters: ; object id (SingleByteParam) call GetScriptByte call GetScriptObject call _CopyObjectStruct ld a, [hMapObjectIndexBuffer] ld b, 0 ; clear call ApplyEventActionAppearDisappear ret Script_disappear: ; script command 0x6e ; parameters: ; object id (SingleByteParam) call GetScriptByte call GetScriptObject cp LAST_TALKED jr nz, .ok ld a, [hLastTalked] .ok call DeleteObjectStruct ld a, [hMapObjectIndexBuffer] ld b, 1 ; set call ApplyEventActionAppearDisappear farcall _UpdateSprites ret ApplyEventActionAppearDisappear: push bc call GetMapObject ld hl, MAPOBJECT_EVENT_FLAG add hl, bc pop bc ld e, [hl] inc hl ld d, [hl] ld a, -1 cp e jr nz, .okay cp d jr nz, .okay xor a ret .okay call EventFlagAction ret Script_follow: ; script command 0x70 ; parameters: ; object2 (SingleByteParam) ; object1 (SingleByteParam) call GetScriptByte call GetScriptObject ld b, a call GetScriptByte call GetScriptObject ld c, a farcall StartFollow ret Script_stopfollow: ; script command 0x71 farcall StopFollow ret Script_moveobject: ; script command 0x72 ; parameters: ; object id (SingleByteParam) ; x (SingleByteParam) ; y (SingleByteParam) call GetScriptByte call GetScriptObject ld b, a call GetScriptByte add 4 ld d, a call GetScriptByte add 4 ld e, a farcall CopyDECoordsToMapObject ret Script_writeobjectxy: ; script command 0x73 ; parameters: ; object id (SingleByteParam) call GetScriptByte call GetScriptObject cp LAST_TALKED jr nz, .ok ld a, [hLastTalked] .ok ld b, a farcall WriteObjectXY ret Script_follownotexact: ; script command 0x77 ; parameters: ; object2 (SingleByteParam) ; object1 (SingleByteParam) call GetScriptByte call GetScriptObject ld b, a call GetScriptByte call GetScriptObject ld c, a farcall FollowNotExact ret Script_loademote: ; script command 0x74 ; parameters: ; bubble (SingleByteParam) call GetScriptByte cp -1 jr nz, .not_var_emote ld a, [ScriptVar] .not_var_emote ld c, a farcall LoadEmote ret Script_showemote: ; script command 0x75 ; parameters: ; bubble (SingleByteParam) ; object id (SingleByteParam) ; time (DecimalParam) call GetScriptByte ld [ScriptVar], a call GetScriptByte call GetScriptObject cp LAST_TALKED jr z, .ok ld [hLastTalked], a .ok call GetScriptByte ld [ScriptDelay], a ld b, BANK(ShowEmoteScript) ld de, ShowEmoteScript jp ScriptCall ShowEmoteScript: loademote EMOTE_MEM applymovement2 .Show pause 0 applymovement2 .Hide end .Show: show_emote step_sleep 1 step_end .Hide: hide_emote step_sleep 1 step_end Script_earthquake: ; script command 0x78 ; parameters: ; param (DecimalParam) ld hl, EarthquakeMovement ld de, wEarthquakeMovementDataBuffer ld bc, EarthquakeMovementEnd - EarthquakeMovement call CopyBytes call GetScriptByte ld [wEarthquakeMovementDataBuffer + 1], a and %00111111 ld [wEarthquakeMovementDataBuffer + 3], a ld b, BANK(.script) ld de, .script jp ScriptCall .script applymovement PLAYER, wEarthquakeMovementDataBuffer end EarthquakeMovement: step_shake 16 ; the 16 gets overwritten with the script byte step_sleep 16 ; the 16 gets overwritten with the lower 6 bits of the script byte step_end EarthquakeMovementEnd Script_loadpikachudata: ; script command 0x5a ld a, PIKACHU ld [TempWildMonSpecies], a ld a, 5 ld [CurPartyLevel], a ret Script_randomwildmon: ; script command 0x5b xor a ld [wBattleScriptFlags], a ret Script_loadmemtrainer: ; script command 0x5c ld a, (1 << 7) | 1 ld [wBattleScriptFlags], a ld a, [wTempTrainerClass] ld [OtherTrainerClass], a ld a, [wTempTrainerID] ld [OtherTrainerID], a ret Script_loadwildmon: ; script command 0x5d ; parameters: ; pokemon (PokemonParam) ; level (DecimalParam) ld a, (1 << 7) ld [wBattleScriptFlags], a call GetScriptByte ld [TempWildMonSpecies], a call GetScriptByte ld [CurPartyLevel], a ret Script_loadtrainer: ; script command 0x5e ; parameters: ; trainer_group (TrainerGroupParam) ; trainer_id (TrainerIdParam) ld a, (1 << 7) | 1 ld [wBattleScriptFlags], a call GetScriptByte ld [OtherTrainerClass], a call GetScriptByte ld [OtherTrainerID], a ret Script_startbattle: ; script command 0x5f call BufferScreen predef StartBattle ld a, [wBattleResult] and $3f ld [ScriptVar], a ret Script_catchtutorial: ; script command 0x61 ; parameters: ; byte (SingleByteParam) call GetScriptByte ld [BattleType], a call BufferScreen farcall CatchTutorial jp Script_reloadmap Script_reloadmapafterbattle: ; script command 0x60 ld hl, wBattleScriptFlags ld d, [hl] ld [hl], $0 ld a, [wBattleResult] and $3f cp $1 jr nz, .notblackedout ld b, BANK(Script_BattleWhiteout) ld hl, Script_BattleWhiteout jp ScriptJump .notblackedout bit 0, d jr z, .was_wild farcall MomTriesToBuySomething jr .done .was_wild ld a, [wBattleResult] bit 7, a jr z, .done ld b, BANK(Script_SpecialBillCall) ld de, Script_SpecialBillCall farcall LoadScriptBDE .done jp Script_reloadmap Script_reloadmap: ; script command 0x7b xor a ld [wBattleScriptFlags], a ld a, MAPSETUP_RELOADMAP ld [hMapEntryMethod], a ld a, $1 call LoadMapStatus call StopScript ret Script_scall: ; script command 0x0 ; parameters: ; pointer (ScriptPointerLabelParam) ld a, [ScriptBank] ld b, a call GetScriptByte ld e, a call GetScriptByte ld d, a jr ScriptCall Script_farscall: ; script command 0x1 ; parameters: ; pointer (ScriptPointerLabelBeforeBank) call GetScriptByte ld b, a call GetScriptByte ld e, a call GetScriptByte ld d, a jr ScriptCall Script_ptcall: ; script command 0x2 ; parameters: ; pointer (PointerLabelToScriptPointer) call GetScriptByte ld l, a call GetScriptByte ld h, a ld b, [hl] inc hl ld e, [hl] inc hl ld d, [hl] ; fallthrough ScriptCall: ; Bug: The script stack has a capacity of 5 scripts, yet there is ; nothing to stop you from pushing a sixth script. The high part ; of the script address can then be overwritten by modifications ; to ScriptDelay, causing the script to return to the rst/interrupt ; space. push de ld hl, wScriptStackSize ld e, [hl] inc [hl] ld d, $0 ld hl, wScriptStack add hl, de add hl, de add hl, de pop de ld a, [ScriptBank] ld [hli], a ld a, [ScriptPos] ld [hli], a ld a, [ScriptPos + 1] ld [hl], a ld a, b ld [ScriptBank], a ld a, e ld [ScriptPos], a ld a, d ld [ScriptPos + 1], a ret CallCallback:: ld a, [ScriptBank] or $80 ld [ScriptBank], a jp ScriptCall Script_jump: ; script command 0x3 ; parameters: ; pointer (ScriptPointerLabelParam) call GetScriptByte ld l, a call GetScriptByte ld h, a ld a, [ScriptBank] ld b, a jp ScriptJump Script_farjump: ; script command 0x4 ; parameters: ; pointer (ScriptPointerLabelBeforeBank) call GetScriptByte ld b, a call GetScriptByte ld l, a call GetScriptByte ld h, a jp ScriptJump Script_ptjump: ; script command 0x5 ; parameters: ; pointer (PointerLabelToScriptPointer) call GetScriptByte ld l, a call GetScriptByte ld h, a ld b, [hl] inc hl ld a, [hli] ld h, [hl] ld l, a jp ScriptJump Script_iffalse: ; script command 0x8 ; parameters: ; pointer (ScriptPointerLabelParam) ld a, [ScriptVar] and a jp nz, SkipTwoScriptBytes jp Script_jump Script_iftrue: ; script command 0x9 ; parameters: ; pointer (ScriptPointerLabelParam) ld a, [ScriptVar] and a jp nz, Script_jump jp SkipTwoScriptBytes Script_if_equal: ; script command 0x6 ; parameters: ; byte (SingleByteParam) ; pointer (ScriptPointerLabelParam) call GetScriptByte ld hl, ScriptVar cp [hl] jr z, Script_jump jr SkipTwoScriptBytes Script_if_not_equal: ; script command 0x7 ; parameters: ; byte (SingleByteParam) ; pointer (ScriptPointerLabelParam) call GetScriptByte ld hl, ScriptVar cp [hl] jr nz, Script_jump jr SkipTwoScriptBytes Script_if_greater_than: ; script command 0xa ; parameters: ; byte (SingleByteParam) ; pointer (ScriptPointerLabelParam) ld a, [ScriptVar] ld b, a call GetScriptByte cp b jr c, Script_jump jr SkipTwoScriptBytes Script_if_less_than: ; script command 0xb ; parameters: ; byte (SingleByteParam) ; pointer (ScriptPointerLabelParam) call GetScriptByte ld b, a ld a, [ScriptVar] cp b jr c, Script_jump jr SkipTwoScriptBytes Script_jumpstd: ; script command 0xc ; parameters: ; predefined_script (MultiByteParam) call StdScript jr ScriptJump Script_callstd: ; script command 0xd ; parameters: ; predefined_script (MultiByteParam) call StdScript ld d, h ld e, l jp ScriptCall StdScript: call GetScriptByte ld e, a call GetScriptByte ld d, a ld hl, StdScripts add hl, de add hl, de add hl, de ld a, BANK(StdScripts) call GetFarByte ld b, a inc hl ld a, BANK(StdScripts) call GetFarHalfword ret SkipTwoScriptBytes: call GetScriptByte call GetScriptByte ret ScriptJump: ld a, b ld [ScriptBank], a ld a, l ld [ScriptPos], a ld a, h ld [ScriptPos + 1], a ret Script_priorityjump: ; script command 0x8d ; parameters: ; pointer (ScriptPointerLabelParam) ld a, [ScriptBank] ld [wPriorityScriptBank], a call GetScriptByte ld [wPriorityScriptAddr], a call GetScriptByte ld [wPriorityScriptAddr + 1], a ld hl, ScriptFlags set 3, [hl] ret Script_checkscene: ; script command 0x13 call CheckScenes jr z, .no_scene ld [ScriptVar], a ret .no_scene ld a, $ff ld [ScriptVar], a ret Script_checkmapscene: ; script command 0x11 ; parameters: ; map_group (SingleByteParam) ; map_id (SingleByteParam) call GetScriptByte ld b, a call GetScriptByte ld c, a call GetMapSceneID ld a, d or e jr z, .no_scene ld a, [de] ld [ScriptVar], a ret .no_scene ld a, $ff ld [ScriptVar], a ret Script_setscene: ; script command 0x14 ; parameters: ; scene_id (SingleByteParam) ld a, [MapGroup] ld b, a ld a, [MapNumber] ld c, a jr DoScene Script_setmapscene: ; script command 0x12 ; parameters: ; map_group (MapGroupParam) ; map_id (MapIdParam) ; scene_id (SingleByteParam) call GetScriptByte ld b, a call GetScriptByte ld c, a DoScene: call GetMapSceneID ld a, d or e jr z, .no_scene call GetScriptByte ld [de], a .no_scene ret Script_copybytetovar: ; script command 0x19 ; parameters: ; address (RAMAddressParam) call GetScriptByte ld l, a call GetScriptByte ld h, a ld a, [hl] ld [ScriptVar], a ret Script_copyvartobyte: ; script command 0x1a ; parameters: ; address (RAMAddressParam) call GetScriptByte ld l, a call GetScriptByte ld h, a ld a, [ScriptVar] ld [hl], a ret Script_loadvar: ; script command 0x1b ; parameters: ; address (RAMAddressParam) ; value (SingleByteParam) call GetScriptByte ld l, a call GetScriptByte ld h, a call GetScriptByte ld [hl], a ret Script_writebyte: ; script command 0x15 ; parameters: ; value (SingleByteParam) call GetScriptByte ld [ScriptVar], a ret Script_addvar: ; script command 0x16 ; parameters: ; value (SingleByteParam) call GetScriptByte ld hl, ScriptVar add [hl] ld [hl], a ret Script_random: ; script command 0x17 ; parameters: ; input (SingleByteParam) call GetScriptByte ld [ScriptVar], a and a ret z ld c, a call .Divide256byC and a jr z, .no_restriction ; 256 % b == 0 ld b, a xor a sub b ld b, a .loop push bc call Random pop bc ld a, [hRandomAdd] cp b jr nc, .loop jr .finish .no_restriction push bc call Random pop bc ld a, [hRandomAdd] .finish push af ld a, [ScriptVar] ld c, a pop af call SimpleDivide ld [ScriptVar], a ret .Divide256byC: xor a ld b, a sub c .mod_loop inc b sub c jr nc, .mod_loop dec b add c ret Script_checkcode: ; script command 0x1c ; parameters: ; variable_id (SingleByteParam) call GetScriptByte call GetVarAction ld a, [de] ld [ScriptVar], a ret Script_writevarcode: ; script command 0x1d ; parameters: ; variable_id (SingleByteParam) call GetScriptByte call GetVarAction ld a, [ScriptVar] ld [de], a ret Script_writecode: ; script command 0x1e ; parameters: ; variable_id (SingleByteParam) ; value (SingleByteParam) call GetScriptByte call GetVarAction call GetScriptByte ld [de], a ret GetVarAction: ld c, a farcall _GetVarAction ret Script_checkver: ; script command 0x18 ld a, [Version] ld [ScriptVar], a ret Version: db VERSION Script_pokenamemem: ; script command 0x40 ; parameters: ; pokemon (PokemonParam); leave $0 to draw from script var ; memory (SingleByteParam) call GetScriptByte and a jr nz, .gotit ld a, [ScriptVar] .gotit ld [wd265], a call GetPokemonName ld de, StringBuffer1 ConvertMemToText: call GetScriptByte cp 3 jr c, .ok xor a .ok CopyConvertedText: ld hl, StringBuffer3 ld bc, StringBuffer4 - StringBuffer3 call AddNTimes call CopyName2 ret Script_itemtotext: ; script command 0x41 ; parameters: ; item (ItemLabelByte); use 0 to draw from ScriptVar ; memory (SingleByteParam) call GetScriptByte and a jr nz, .ok ld a, [ScriptVar] .ok ld [wd265], a call GetItemName ld de, StringBuffer1 jr ConvertMemToText Script_mapnametotext: ; script command 0x42 ; parameters: ; memory (SingleByteParam) ld a, [MapGroup] ld b, a ld a, [MapNumber] ld c, a call GetWorldMapLocation ConvertLandmarkToText: ld e, a farcall GetLandmarkName ld de, StringBuffer1 jp ConvertMemToText Script_landmarktotext: ; script command 0xa5 ; parameters: ; id (SingleByteParam) ; memory (SingleByteParam) call GetScriptByte jr ConvertLandmarkToText Script_trainertotext: ; script command 0x43 ; parameters: ; trainer_id (TrainerGroupParam) ; trainer_group (TrainerIdParam) ; memory (SingleByteParam) call GetScriptByte ld c, a call GetScriptByte ld b, a farcall GetTrainerName jr ConvertMemToText Script_name: ; script command 0xa7 ; parameters: ; type (SingleByteParam) ; id (SingleByteParam) ; memory (SingleByteParam) call GetScriptByte ld [wNamedObjectTypeBuffer], a ContinueToGetName: call GetScriptByte ld [CurSpecies], a call GetName ld de, StringBuffer1 jp ConvertMemToText Script_trainerclassname: ; script command 0xa6 ; parameters: ; id (SingleByteParam) ; memory (SingleByteParam) ld a, TRAINER_NAME ld [wNamedObjectTypeBuffer], a jr ContinueToGetName Script_readmoney: ; script command 0x3d ; parameters: ; account (SingleByteParam) ; memory (SingleByteParam) call ResetStringBuffer1 call GetMoneyAccount ld hl, StringBuffer1 lb bc, PRINTNUM_RIGHTALIGN | 3, 6 call PrintNum ld de, StringBuffer1 jp ConvertMemToText Script_readcoins: ; script command 0x3e ; parameters: ; memory (SingleByteParam) call ResetStringBuffer1 ld hl, StringBuffer1 ld de, Coins lb bc, PRINTNUM_RIGHTALIGN | 2, 6 call PrintNum ld de, StringBuffer1 jp ConvertMemToText Script_RAM2MEM: ; script command 0x3f ; parameters: ; memory (SingleByteParam) call ResetStringBuffer1 ld de, ScriptVar ld hl, StringBuffer1 lb bc, PRINTNUM_RIGHTALIGN | 1, 3 call PrintNum ld de, StringBuffer1 jp ConvertMemToText ResetStringBuffer1: ld hl, StringBuffer1 ld bc, NAME_LENGTH ld a, "@" call ByteFill ret Script_stringtotext: ; script command 0x44 ; parameters: ; text_pointer (EncodedTextLabelParam) ; memory (SingleByteParam) call GetScriptByte ld e, a call GetScriptByte ld d, a ld a, [ScriptBank] ld hl, CopyName1 rst FarCall ld de, StringBuffer2 jp ConvertMemToText Script_givepokeitem: ; script command 0x2f ; parameters: ; pointer (PointerParamToItemAndLetter) call GetScriptByte ld l, a call GetScriptByte ld h, a ld a, [ScriptBank] call GetFarByte ld b, a push bc inc hl ld bc, MAIL_MSG_LENGTH ld de, wd002 ld a, [ScriptBank] call FarCopyBytes pop bc farcall GivePokeItem ret Script_checkpokeitem: ; script command 0x30 ; parameters: ; pointer (PointerParamToItemAndLetter) call GetScriptByte ld e, a call GetScriptByte ld d, a ld a, [ScriptBank] ld b, a farcall CheckPokeItem ret Script_giveitem: ; script command 0x1f ; parameters: ; item (ItemLabelByte) ; quantity (SingleByteParam) call GetScriptByte cp ITEM_FROM_MEM jr nz, .ok ld a, [ScriptVar] .ok ld [CurItem], a call GetScriptByte ld [wItemQuantityChangeBuffer], a ld hl, NumItems call ReceiveItem jr nc, .full ld a, TRUE ld [ScriptVar], a ret .full xor a ld [ScriptVar], a ret Script_takeitem: ; script command 0x20 ; parameters: ; item (ItemLabelByte) ; quantity (DecimalParam) xor a ld [ScriptVar], a call GetScriptByte ld [CurItem], a call GetScriptByte ld [wItemQuantityChangeBuffer], a ld a, -1 ld [CurItemQuantity], a ld hl, NumItems call TossItem ret nc ld a, TRUE ld [ScriptVar], a ret Script_checkitem: ; script command 0x21 ; parameters: ; item (ItemLabelByte) xor a ld [ScriptVar], a call GetScriptByte ld [CurItem], a ld hl, NumItems call CheckItem ret nc ld a, TRUE ld [ScriptVar], a ret Script_givemoney: ; script command 0x22 ; parameters: ; account (SingleByteParam) ; money (MoneyByteParam) call GetMoneyAccount call LoadMoneyAmountToMem farcall GiveMoney ret Script_takemoney: ; script command 0x23 ; parameters: ; account (SingleByteParam) ; money (MoneyByteParam) call GetMoneyAccount call LoadMoneyAmountToMem farcall TakeMoney ret Script_checkmoney: ; script command 0x24 ; parameters: ; account (SingleByteParam) ; money (MoneyByteParam) call GetMoneyAccount call LoadMoneyAmountToMem farcall CompareMoney CompareMoneyAction: jr c, .two jr z, .one ld a, 0 jr .done .one ld a, 1 jr .done .two ld a, 2 .done ld [ScriptVar], a ret GetMoneyAccount: call GetScriptByte and a ld de, Money ret z ld de, wMomsMoney ret LoadMoneyAmountToMem: ld bc, hMoneyTemp push bc call GetScriptByte ld [bc], a inc bc call GetScriptByte ld [bc], a inc bc call GetScriptByte ld [bc], a pop bc ret Script_givecoins: ; script command 0x25 ; parameters: ; coins (CoinByteParam) call LoadCoinAmountToMem farcall GiveCoins ret Script_takecoins: ; script command 0x26 ; parameters: ; coins (CoinByteParam) call LoadCoinAmountToMem farcall TakeCoins ret Script_checkcoins: ; script command 0x27 ; parameters: ; coins (CoinByteParam) call LoadCoinAmountToMem farcall CheckCoins jr CompareMoneyAction LoadCoinAmountToMem: call GetScriptByte ld [hMoneyTemp + 1], a call GetScriptByte ld [hMoneyTemp], a ld bc, hMoneyTemp ret Script_checktime: ; script command 0x2b ; parameters: ; time (SingleByteParam) xor a ld [ScriptVar], a farcall CheckTime call GetScriptByte and c ret z ld a, TRUE ld [ScriptVar], a ret Script_checkpoke: ; script command 0x2c ; parameters: ; pkmn (PokemonParam) xor a ld [ScriptVar], a call GetScriptByte ld hl, PartySpecies ld de, 1 call IsInArray ret nc ld a, TRUE ld [ScriptVar], a ret Script_addcellnum: ; script command 0x28 ; parameters: ; person (SingleByteParam) xor a ld [ScriptVar], a call GetScriptByte ld c, a farcall AddPhoneNumber ret nc ld a, TRUE ld [ScriptVar], a ret Script_delcellnum: ; script command 0x29 ; parameters: ; person (SingleByteParam) xor a ld [ScriptVar], a call GetScriptByte ld c, a farcall DelCellNum ret nc ld a, TRUE ld [ScriptVar], a ret Script_checkcellnum: ; script command 0x2a ; parameters: ; person (SingleByteParam) ; returns false if the cell number is not in your phone xor a ld [ScriptVar], a call GetScriptByte ld c, a farcall CheckCellNum ret nc ld a, TRUE ld [ScriptVar], a ret Script_specialphonecall: ; script command 0x9c ; parameters: ; call_id (MultiByteParam) call GetScriptByte ld [wSpecialPhoneCallID], a call GetScriptByte ld [wSpecialPhoneCallID + 1], a ret Script_checkphonecall: ; script command 0x9d ; returns false if no special phone call is stored ld a, [wSpecialPhoneCallID] and a jr z, .ok ld a, TRUE .ok ld [ScriptVar], a ret Script_givepoke: ; script command 0x2d ; parameters: ; pokemon (PokemonParam) ; level (DecimalParam) ; item (ItemLabelByte) ; trainer (DecimalParam) ; trainer_name_pointer (MultiByteParam) ; pkmn_nickname (MultiByteParam) call GetScriptByte ld [CurPartySpecies], a call GetScriptByte ld [CurPartyLevel], a call GetScriptByte ld [CurItem], a call GetScriptByte and a ld b, a jr z, .ok ld hl, ScriptPos ld e, [hl] inc hl ld d, [hl] call GetScriptByte call GetScriptByte call GetScriptByte call GetScriptByte .ok farcall GivePoke ld a, b ld [ScriptVar], a ret Script_giveegg: ; script command 0x2e ; parameters: ; pkmn (PokemonParam) ; level (DecimalParam) ; if no room in the party, return 0 in ScriptVar; else, return 2 xor a ; PARTYMON ld [ScriptVar], a ld [MonType], a call GetScriptByte ld [CurPartySpecies], a call GetScriptByte ld [CurPartyLevel], a farcall GiveEgg ret nc ld a, 2 ld [ScriptVar], a ret Script_setevent: ; script command 0x33 ; parameters: ; bit_number (MultiByteParam) call GetScriptByte ld e, a call GetScriptByte ld d, a ld b, SET_FLAG call EventFlagAction ret Script_clearevent: ; script command 0x32 ; parameters: ; bit_number (MultiByteParam) call GetScriptByte ld e, a call GetScriptByte ld d, a ld b, RESET_FLAG call EventFlagAction ret Script_checkevent: ; script command 0x31 ; parameters: ; bit_number (MultiByteParam) call GetScriptByte ld e, a call GetScriptByte ld d, a ld b, CHECK_FLAG call EventFlagAction ld a, c and a jr z, .false ld a, TRUE .false ld [ScriptVar], a ret Script_setflag: ; script command 0x36 ; parameters: ; bit_number (MultiByteParam) call GetScriptByte ld e, a call GetScriptByte ld d, a ld b, SET_FLAG call _EngineFlagAction ret Script_clearflag: ; script command 0x35 ; parameters: ; bit_number (MultiByteParam) call GetScriptByte ld e, a call GetScriptByte ld d, a ld b, RESET_FLAG call _EngineFlagAction ret Script_checkflag: ; script command 0x34 ; parameters: ; bit_number (MultiByteParam) call GetScriptByte ld e, a call GetScriptByte ld d, a ld b, 2 ; check call _EngineFlagAction ld a, c and a jr z, .false ld a, TRUE .false ld [ScriptVar], a ret _EngineFlagAction: farcall EngineFlagAction ret Script_wildoff: ; script command 0x38 ld hl, wStatusFlags set 5, [hl] ret Script_wildon: ; script command 0x37 ld hl, wStatusFlags res 5, [hl] ret Script_xycompare: ; script command 0x39 ; parameters: ; pointer (MultiByteParam) call GetScriptByte ld [wXYComparePointer], a call GetScriptByte ld [wXYComparePointer + 1], a ret Script_warpfacing: ; script command 0xa3 ; parameters: ; facing (SingleByteParam) ; map_group (MapGroupParam) ; map_id (MapIdParam) ; x (SingleByteParam) ; y (SingleByteParam) call GetScriptByte and $3 ld c, a ld a, [wPlayerSpriteSetupFlags] set 5, a or c ld [wPlayerSpriteSetupFlags], a ; fall through Script_warp: ; script command 0x3c ; parameters: ; map_group (MapGroupParam) ; map_id (MapIdParam) ; x (SingleByteParam) ; y (SingleByteParam) ; This seems to be some sort of error handling case. call GetScriptByte and a jr z, .not_ok ld [MapGroup], a call GetScriptByte ld [MapNumber], a call GetScriptByte ld [XCoord], a call GetScriptByte ld [YCoord], a ld a, -1 ld [DefaultSpawnpoint], a ld a, MAPSETUP_WARP ld [hMapEntryMethod], a ld a, 1 call LoadMapStatus call StopScript ret .not_ok call GetScriptByte call GetScriptByte call GetScriptByte ld a, -1 ld [DefaultSpawnpoint], a ld a, MAPSETUP_BADWARP ld [hMapEntryMethod], a ld a, 1 call LoadMapStatus call StopScript ret Script_warpmod: ; script command 0x3a ; parameters: ; warp_id (SingleByteParam) ; map_group (MapGroupParam) ; map_id (MapIdParam) call GetScriptByte ld [BackupWarpNumber], a call GetScriptByte ld [BackupMapGroup], a call GetScriptByte ld [BackupMapNumber], a ret Script_blackoutmod: ; script command 0x3b ; parameters: ; map_group (MapGroupParam) ; map_id (MapIdParam) call GetScriptByte ld [wLastSpawnMapGroup], a call GetScriptByte ld [wLastSpawnMapNumber], a ret Script_dontrestartmapmusic: ; script command 0x83 ld a, 1 ld [wDontPlayMapMusicOnReload], a ret Script_writecmdqueue: ; script command 0x7d ; parameters: ; queue_pointer (MultiByteParam) call GetScriptByte ld e, a call GetScriptByte ld d, a ld a, [ScriptBank] ld b, a farcall WriteCmdQueue ; no need to farcall ret Script_delcmdqueue: ; script command 0x7e ; parameters: ; byte (SingleByteParam) xor a ld [ScriptVar], a call GetScriptByte ld b, a farcall DelCmdQueue ; no need to farcall ret c ld a, 1 ld [ScriptVar], a ret Script_changemap: ; script command 0x79 ; parameters: ; map_data_pointer (MapDataPointerParam) call GetScriptByte ld [MapBlockDataBank], a call GetScriptByte ld [MapBlockDataPointer], a call GetScriptByte ld [MapBlockDataPointer + 1], a call ChangeMap call BufferScreen ret Script_changeblock: ; script command 0x7a ; parameters: ; x (SingleByteParam) ; y (SingleByteParam) ; block (SingleByteParam) call GetScriptByte add 4 ld d, a call GetScriptByte add 4 ld e, a call GetBlockLocation call GetScriptByte ld [hl], a call BufferScreen ret Script_reloadmappart:: ; script command 0x7c xor a ld [hBGMapMode], a call OverworldTextModeSwitch call GetMovementPermissions farcall ReloadMapPart call UpdateSprites ret Script_warpcheck: ; script command 0x8e call WarpCheck ret nc farcall EnableEvents ret Script_enableevents: ; unreferenced farcall EnableEvents ret Script_newloadmap: ; script command 0x8a ; parameters: ; which_method (SingleByteParam) call GetScriptByte ld [hMapEntryMethod], a ld a, 1 call LoadMapStatus call StopScript ret Script_reloadandreturn: ; script command 0x92 call Script_newloadmap jp Script_end Script_textbox: ; script command 0x47 call OpenText ret Script_refreshscreen: ; script command 0x48 ; parameters: ; dummy (SingleByteParam) call RefreshScreen call GetScriptByte ret Script_loadbytec2cf: ; script command 0x4a ; parameters: ; byte (SingleByteParam) call GetScriptByte ld [wc2cf], a ret ld c, c ; XXX Script_closetext: ; script command 0x49 call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap call CloseText ret Script_passtoengine: ; script command 0x89 ; parameters: ; data_pointer (PointerLabelBeforeBank) call GetScriptByte push af call GetScriptByte ld l, a call GetScriptByte ld h, a pop af call StartAutoInput ret Script_pause: ; script command 0x8b ; parameters: ; length (DecimalParam) call GetScriptByte and a jr z, .loop ld [ScriptDelay], a .loop ld c, 2 call DelayFrames ld hl, ScriptDelay dec [hl] jr nz, .loop ret Script_deactivatefacing: ; script command 0x8c ; parameters: ; time (SingleByteParam) call GetScriptByte and a jr z, .no_time ld [ScriptDelay], a .no_time ld a, SCRIPT_WAIT ld [ScriptMode], a call StopScript ret Script_ptpriorityjump: ; script command 0x8f ; parameters: ; pointer (ScriptPointerLabelParam) call StopScript jp Script_jump Script_end: ; script command 0x91 call ExitScriptSubroutine jr c, .resume ret .resume xor a ld [ScriptRunning], a ld a, SCRIPT_OFF ld [ScriptMode], a ld hl, ScriptFlags res 0, [hl] call StopScript ret Script_return: ; script command 0x90 call ExitScriptSubroutine jr c, .dummy .dummy ld hl, ScriptFlags res 0, [hl] call StopScript ret ExitScriptSubroutine: ; Return carry if there's no parent to return to. ld hl, wScriptStackSize ld a, [hl] and a jr z, .done dec [hl] ld e, [hl] ld d, $0 ld hl, wScriptStack add hl, de add hl, de add hl, de ld a, [hli] ld b, a and " " ld [ScriptBank], a ld a, [hli] ld e, a ld [ScriptPos], a ld a, [hl] ld d, a ld [ScriptPos + 1], a and a ret .done scf ret Script_end_all: ; script command 0x93 xor a ld [wScriptStackSize], a ld [ScriptRunning], a ld a, SCRIPT_OFF ld [ScriptMode], a ld hl, ScriptFlags res 0, [hl] call StopScript ret Script_halloffame: ; script command 0xa1 ld hl, wGameTimerPause res 0, [hl] farcall TrainerRankings_HallOfFame farcall TrainerRankings_HallOfFame2 farcall HallOfFame ld hl, wGameTimerPause set 0, [hl] jr ReturnFromCredits Script_credits: ; script command 0xa2 farcall RedCredits ReturnFromCredits: call Script_end_all ld a, $3 call LoadMapStatus call StopScript ret Script_wait: ; script command 0xa8 ; parameters: ; unknown (SingleByteParam) push bc call GetScriptByte .loop push af ld c, 6 call DelayFrames pop af dec a jr nz, .loop pop bc ret Script_check_save: ; script command 0xa9 farcall CheckSave ld a, c ld [ScriptVar], a ret ; unreferenced ld a, [.byte] ld [ScriptVar], a ret .byte db 0