pokecrystal-board/engine/scripting.asm
2018-01-02 13:26:18 +01:00

3047 lines
50 KiB
NASM

; 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 ; unused
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