mirror of https://github.com/pret/pokecrystal.git
3048 lines
50 KiB
NASM
3048 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:
|
|
; unused
|
|
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
|
|
|
|
|
|
; unused
|
|
ld a, [.byte]
|
|
ld [ScriptVar], a
|
|
ret
|
|
|
|
.byte
|
|
db 0
|