mirror of
https://github.com/thornAvery/jep-hack.git
synced 2025-09-17 02:30:50 +12:00

This adds Rock Climb functionality to Strong Arm and Dive functionality to Water Sport, as discussed in the server. HMs have been added, but we need 16bit Items to add Wind Ride, and I haven't finished their functionality.
The Rock Climb tile is a bit terrible, it's not easy to notice. Maybe change so that it works well with yellow or another colour?
This does not build due to issues with effect_commands.asm, but since Zeta is meant to be working on the mapping and Water Sport anyway, it seems to be up his alley.
I ported over much of the underwater assets Rangi was using as they looked very pretty. I imagine it'll be fun to utilise going forward. May as well, right?
I shall now lay down in a dark room.
Review: c21561ea71 (diff-5508f3b794fc68821ba35e94b6a293b2aaaa16c02a1b34fac70d03fd2f74c4b2R113)
2454 lines
40 KiB
NASM
2454 lines
40 KiB
NASM
; Event scripting commands.
|
|
|
|
EnableScriptMode::
|
|
push af
|
|
ld a, SCRIPT_READ
|
|
ld [wScriptMode], a
|
|
pop af
|
|
ret
|
|
|
|
ScriptEvents::
|
|
call StartScript
|
|
.loop
|
|
ld a, [wScriptMode]
|
|
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, wScriptDelay
|
|
dec [hl]
|
|
ret nz
|
|
|
|
farcall UnfreezeAllObjects
|
|
|
|
ld a, SCRIPT_READ
|
|
ld [wScriptMode], a
|
|
call StartScript
|
|
ret
|
|
|
|
WaitScriptMovement:
|
|
call StopScript
|
|
|
|
ld hl, wVramState
|
|
bit 7, [hl]
|
|
ret nz
|
|
|
|
farcall UnfreezeAllObjects
|
|
|
|
ld a, SCRIPT_READ
|
|
ld [wScriptMode], a
|
|
call StartScript
|
|
ret
|
|
|
|
RunScriptCommand:
|
|
call GetScriptByte
|
|
ld hl, ScriptCommandTable
|
|
rst JumpTable
|
|
ret
|
|
|
|
ScriptCommandTable:
|
|
; entries correspond to *_command constants (see macros/scripts/events.asm)
|
|
table_width 2, ScriptCommandTable
|
|
dw Script_scall ; 00
|
|
dw Script_farscall ; 01
|
|
dw Script_memcall ; 02
|
|
dw Script_sjump ; 03
|
|
dw Script_farsjump ; 04
|
|
dw Script_memjump ; 05
|
|
dw Script_ifequal ; 06
|
|
dw Script_ifnotequal ; 07
|
|
dw Script_iffalse ; 08
|
|
dw Script_iftrue ; 09
|
|
dw Script_ifgreater ; 0a
|
|
dw Script_ifless ; 0b
|
|
dw Script_jumpstd ; 0c
|
|
dw Script_callstd ; 0d
|
|
dw Script_callasm ; 0e
|
|
dw Script_special ; 0f
|
|
dw Script_memcallasm ; 10
|
|
dw Script_checkmapscene ; 11
|
|
dw Script_setmapscene ; 12
|
|
dw Script_checkscene ; 13
|
|
dw Script_setscene ; 14
|
|
dw Script_setval ; 15
|
|
dw Script_addval ; 16
|
|
dw Script_random ; 17
|
|
dw Script_checkver ; 18
|
|
dw Script_readmem ; 19
|
|
dw Script_writemem ; 1a
|
|
dw Script_loadmem ; 1b
|
|
dw Script_readvar ; 1c
|
|
dw Script_writevar ; 1d
|
|
dw Script_loadvar ; 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_givepokemail ; 2f
|
|
dw Script_checkpokemail ; 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_getmoney ; 3d
|
|
dw Script_getcoins ; 3e
|
|
dw Script_getnum ; 3f
|
|
dw Script_getmonname ; 40
|
|
dw Script_getitemname ; 41
|
|
dw Script_getcurlandmarkname ; 42
|
|
dw Script_gettrainername ; 43
|
|
dw Script_getstring ; 44
|
|
dw Script_itemnotify ; 45
|
|
dw Script_pocketisfull ; 46
|
|
dw Script_opentext ; 47
|
|
dw Script_refreshscreen ; 48
|
|
dw Script_closetext ; 49
|
|
dw Script_writeunusedbyte ; 4a
|
|
dw Script_farwritetext ; 4b
|
|
dw Script_writetext ; 4c
|
|
dw Script_repeattext ; 4d
|
|
dw Script_yesorno ; 4e
|
|
dw Script_loadmenu ; 4f
|
|
dw Script_closewindow ; 50
|
|
dw Script_jumptextfaceplayer ; 51
|
|
dw Script_farjumptext ; 52
|
|
dw Script_jumptext ; 53
|
|
dw Script_waitbutton ; 54
|
|
dw Script_promptbutton ; 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_loadtemptrainer ; 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_endifjustbattled ; 66
|
|
dw Script_checkjustbattled ; 67
|
|
dw Script_setlasttalked ; 68
|
|
dw Script_applymovement ; 69
|
|
dw Script_applymovementlasttalked ; 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_turnobject ; 76
|
|
dw Script_follownotexact ; 77
|
|
dw Script_earthquake ; 78
|
|
dw Script_changemapblocks ; 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_autoinput ; 89
|
|
dw Script_newloadmap ; 8a
|
|
dw Script_pause ; 8b
|
|
dw Script_deactivatefacing ; 8c
|
|
dw Script_sdefer ; 8d
|
|
dw Script_warpcheck ; 8e
|
|
dw Script_stopandsjump ; 8f
|
|
dw Script_endcallback ; 90
|
|
dw Script_end ; 91
|
|
dw Script_reloadend ; 92
|
|
dw Script_endall ; 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_verbosegiveitemvar ; 9f
|
|
dw Script_swarm ; a0
|
|
dw Script_halloffame ; a1
|
|
dw Script_credits ; a2
|
|
dw Script_warpfacing ; a3
|
|
dw Script_battletowertext ; a4
|
|
dw Script_getlandmarkname ; a5
|
|
dw Script_gettrainerclassname ; a6
|
|
dw Script_getname ; a7
|
|
dw Script_wait ; a8
|
|
dw Script_checksave ; a9
|
|
dw Script_trainerpic ; aa
|
|
dw Script_loadmonindex ; ab
|
|
dw Script_checkmaplockedmons ; ac
|
|
dw Script_divemap
|
|
dw Script_divewarp
|
|
assert_table_length NUM_EVENT_COMMANDS
|
|
|
|
StartScript:
|
|
ld hl, wScriptFlags
|
|
set SCRIPT_RUNNING, [hl]
|
|
ret
|
|
|
|
CheckScript:
|
|
ld hl, wScriptFlags
|
|
bit SCRIPT_RUNNING, [hl]
|
|
ret
|
|
|
|
StopScript:
|
|
ld hl, wScriptFlags
|
|
res SCRIPT_RUNNING, [hl]
|
|
ret
|
|
|
|
Script_callasm:
|
|
call GetScriptByte
|
|
ld b, a
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
ld a, b
|
|
rst FarCall
|
|
ret
|
|
|
|
Script_special:
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
farcall Special
|
|
ret
|
|
|
|
Script_memcallasm:
|
|
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:
|
|
ld a, [wScriptBank]
|
|
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:
|
|
ld a, [wScriptBank]
|
|
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
|
|
|
|
Script_farjumptext:
|
|
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
|
|
|
|
Script_writetext:
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
ld a, [wScriptBank]
|
|
ld b, a
|
|
call MapTextbox
|
|
ret
|
|
|
|
Script_farwritetext:
|
|
call GetScriptByte
|
|
ld b, a
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
call MapTextbox
|
|
ret
|
|
|
|
Script_repeattext:
|
|
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:
|
|
jp WaitButton
|
|
|
|
Script_promptbutton:
|
|
ldh a, [hOAMUpdate]
|
|
push af
|
|
ld a, $1
|
|
ldh [hOAMUpdate], a
|
|
call WaitBGMap
|
|
call PromptButton
|
|
pop af
|
|
ldh [hOAMUpdate], a
|
|
ret
|
|
|
|
Script_yesorno:
|
|
call YesNoBox
|
|
ld a, FALSE
|
|
jr c, .no
|
|
ld a, TRUE
|
|
.no
|
|
ld [wScriptVar], a
|
|
vc_hook Unknown_yesorno_ret
|
|
ret
|
|
|
|
Script_loadmenu:
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
ld de, LoadMenuHeader
|
|
ld a, [wScriptBank]
|
|
call Call_a_de
|
|
call UpdateSprites
|
|
ret
|
|
|
|
Script_closewindow:
|
|
call CloseWindow
|
|
call UpdateSprites
|
|
ret
|
|
|
|
Script_pokepic:
|
|
call LoadScriptPokemonID
|
|
ld [wCurPartySpecies], a
|
|
farcall Pokepic
|
|
ret
|
|
|
|
Script_closepokepic:
|
|
farcall ClosePokepic
|
|
ret
|
|
|
|
Script_verticalmenu:
|
|
ld a, [wScriptBank]
|
|
ld hl, VerticalMenu
|
|
rst FarCall
|
|
ld a, [wMenuCursorY]
|
|
jr nc, .ok
|
|
xor a
|
|
.ok
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script__2dmenu:
|
|
ld a, [wScriptBank]
|
|
ld hl, _2DMenu
|
|
rst FarCall
|
|
ld a, [wMenuCursorPosition]
|
|
jr nc, .ok
|
|
xor a
|
|
.ok
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_battletowertext:
|
|
call SetUpTextbox
|
|
call GetScriptByte
|
|
ld c, a
|
|
farcall BattleTowerText
|
|
ret
|
|
|
|
Script_verbosegiveitem:
|
|
call Script_giveitem
|
|
call CurItemName
|
|
ld de, wStringBuffer1
|
|
ld a, STRING_BUFFER_4
|
|
call CopyConvertedText
|
|
ld b, BANK(GiveItemScript)
|
|
ld de, GiveItemScript
|
|
jp ScriptCall
|
|
|
|
GiveItemScript_DummyFunction:
|
|
ret
|
|
|
|
GiveItemScript:
|
|
callasm GiveItemScript_DummyFunction
|
|
writetext .ReceivedItemText
|
|
iffalse .Full
|
|
waitsfx
|
|
specialsound
|
|
waitbutton
|
|
itemnotify
|
|
end
|
|
|
|
.Full:
|
|
promptbutton
|
|
pocketisfull
|
|
end
|
|
|
|
.ReceivedItemText:
|
|
text_far _ReceivedItemText
|
|
text_end
|
|
|
|
Script_verbosegiveitemvar:
|
|
call GetScriptByte
|
|
cp ITEM_FROM_MEM
|
|
jr nz, .ok
|
|
ld a, [wScriptVar]
|
|
.ok
|
|
ld [wCurItem], a
|
|
call GetScriptByte
|
|
call GetVarAction
|
|
ld a, [de]
|
|
ld [wItemQuantityChange], a
|
|
ld hl, wNumItems
|
|
call ReceiveItem
|
|
ld a, TRUE
|
|
jr c, .ok2
|
|
xor a
|
|
.ok2
|
|
ld [wScriptVar], a
|
|
call CurItemName
|
|
ld de, wStringBuffer1
|
|
ld a, STRING_BUFFER_4
|
|
call CopyConvertedText
|
|
ld b, BANK(GiveItemScript)
|
|
ld de, GiveItemScript
|
|
jp ScriptCall
|
|
|
|
Script_itemnotify:
|
|
call GetPocketName
|
|
call CurItemName
|
|
ld b, BANK(PutItemInPocketText)
|
|
ld hl, PutItemInPocketText
|
|
call MapTextbox
|
|
ret
|
|
|
|
Script_pocketisfull:
|
|
call GetPocketName
|
|
call CurItemName
|
|
ld b, BANK(PocketIsFullText)
|
|
ld hl, PocketIsFullText
|
|
call MapTextbox
|
|
ret
|
|
|
|
Script_specialsound:
|
|
farcall CheckItemPocket
|
|
ld a, [wItemAttributeValue]
|
|
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, [wItemAttributeValue]
|
|
dec a
|
|
ld hl, ItemPocketNames
|
|
maskbits NUM_POCKETS
|
|
add a
|
|
ld e, a
|
|
ld d, 0
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld d, [hl]
|
|
ld e, a
|
|
ld hl, wStringBuffer3
|
|
call CopyName2
|
|
ret
|
|
|
|
INCLUDE "data/items/pocket_names.asm"
|
|
|
|
CurItemName:
|
|
ld a, [wCurItem]
|
|
ld [wNamedObjectIndex], a
|
|
call GetItemName
|
|
ret
|
|
|
|
PutItemInPocketText:
|
|
text_far _PutItemInPocketText
|
|
text_end
|
|
|
|
PocketIsFullText:
|
|
text_far _PocketIsFullText
|
|
text_end
|
|
|
|
Script_pokemart:
|
|
call GetScriptByte
|
|
ld c, a
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
ld a, [wScriptBank]
|
|
ld b, a
|
|
farcall OpenMartDialog
|
|
ret
|
|
|
|
Script_elevator:
|
|
xor a
|
|
ld [wScriptVar], a
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
ld a, [wScriptBank]
|
|
ld b, a
|
|
farcall Elevator
|
|
ret c
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_trade:
|
|
call GetScriptByte
|
|
ld e, a
|
|
farcall NPCTrade
|
|
ret
|
|
|
|
Script_phonecall:
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
ld a, [wScriptBank]
|
|
ld b, a
|
|
farcall PhoneCall
|
|
ret
|
|
|
|
Script_hangup:
|
|
farcall HangUp
|
|
ret
|
|
|
|
Script_askforphonenumber:
|
|
call YesNoBox
|
|
jr c, .refused
|
|
call GetScriptByte
|
|
ld c, a
|
|
farcall AddPhoneNumber
|
|
jr c, .phonefull
|
|
xor a ; PHONE_CONTACT_GOT
|
|
jr .done
|
|
.phonefull
|
|
ld a, PHONE_CONTACTS_FULL
|
|
jr .done
|
|
.refused
|
|
call GetScriptByte
|
|
ld a, PHONE_CONTACT_REFUSED
|
|
.done
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_describedecoration:
|
|
call GetScriptByte
|
|
ld b, a
|
|
farcall DescribeDecoration
|
|
ld h, d
|
|
ld l, e
|
|
jp ScriptJump
|
|
|
|
Script_fruittree:
|
|
call GetScriptByte
|
|
ld [wCurFruitTree], a
|
|
ld b, BANK(FruitTreeScript)
|
|
ld hl, FruitTreeScript
|
|
jp ScriptJump
|
|
|
|
Script_swarm:
|
|
call GetScriptByte
|
|
ld c, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
call GetScriptByte
|
|
ld e, a
|
|
farcall StoreSwarmMapIndices
|
|
ret
|
|
|
|
Script_trainertext:
|
|
call GetScriptByte
|
|
ld c, a
|
|
ld b, 0
|
|
ld hl, wSeenTextPointer
|
|
add hl, bc
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [wSeenTrainerBank]
|
|
ld b, a
|
|
call MapTextbox
|
|
ret
|
|
|
|
Script_scripttalkafter:
|
|
ld hl, wScriptAfterPointer
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [wSeenTrainerBank]
|
|
ld b, a
|
|
jp ScriptJump
|
|
|
|
Script_trainerflagaction:
|
|
xor a
|
|
ld [wScriptVar], a
|
|
ld hl, wTempTrainerEventFlag
|
|
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 [wScriptVar], a
|
|
ret
|
|
|
|
Script_winlosstext:
|
|
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_endifjustbattled:
|
|
ld a, [wRunningTrainerBattleScript]
|
|
and a
|
|
ret z
|
|
jp Script_end
|
|
|
|
Script_checkjustbattled:
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ld a, [wRunningTrainerBattleScript]
|
|
and a
|
|
ret nz
|
|
xor a
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_encountermusic:
|
|
ld a, [wOtherTrainerClass]
|
|
ld e, a
|
|
farcall PlayTrainerEncounterMusic
|
|
ret
|
|
|
|
Script_playmapmusic:
|
|
call PlayMapMusic
|
|
ret
|
|
|
|
Script_playmusic:
|
|
ld de, MUSIC_NONE
|
|
call PlayMusic
|
|
xor a
|
|
ld [wMusicFade], a
|
|
call MaxVolume
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
call PlayMusic
|
|
ret
|
|
|
|
Script_musicfadeout:
|
|
call GetScriptByte
|
|
ld [wMusicFadeID], a
|
|
call GetScriptByte
|
|
ld [wMusicFadeID + 1], a
|
|
call GetScriptByte
|
|
and ~(1 << MUSIC_FADE_IN_F)
|
|
ld [wMusicFade], a
|
|
ret
|
|
|
|
Script_playsound:
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
call PlaySFX
|
|
ret
|
|
|
|
Script_waitsfx:
|
|
call WaitSFX
|
|
ret
|
|
|
|
Script_warpsound:
|
|
farcall GetWarpSFX
|
|
call PlaySFX
|
|
ret
|
|
|
|
Script_cry:
|
|
call LoadScriptPokemonID
|
|
call PlayMonCry
|
|
ret
|
|
|
|
GetScriptObject:
|
|
and a ; PLAYER?
|
|
ret z
|
|
cp LAST_TALKED
|
|
ret z
|
|
dec a
|
|
ret
|
|
|
|
Script_setlasttalked:
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
ldh [hLastTalked], a
|
|
ret
|
|
|
|
Script_applymovement:
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
ld c, a
|
|
|
|
ApplyMovement:
|
|
push bc
|
|
ld a, c
|
|
farcall FreezeAllOtherObjects
|
|
pop bc
|
|
|
|
push bc
|
|
call UnfreezeFollowerObject
|
|
pop bc
|
|
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
ld a, [wScriptBank]
|
|
ld b, a
|
|
call GetMovementData
|
|
ret c
|
|
|
|
ld a, SCRIPT_WAIT_MOVEMENT
|
|
ld [wScriptMode], a
|
|
call StopScript
|
|
ret
|
|
|
|
UnfreezeFollowerObject:
|
|
farcall _UnfreezeFollowerObject
|
|
ret
|
|
|
|
Script_applymovementlasttalked:
|
|
; apply movement to last talked
|
|
|
|
ldh a, [hLastTalked]
|
|
ld c, a
|
|
jp ApplyMovement
|
|
|
|
Script_faceplayer:
|
|
ldh a, [hLastTalked]
|
|
and a
|
|
ret z
|
|
ld d, $0
|
|
ldh a, [hLastTalked]
|
|
ld e, a
|
|
farcall GetRelativeFacing
|
|
ld a, d
|
|
add a
|
|
add a
|
|
ld e, a
|
|
ldh a, [hLastTalked]
|
|
ld d, a
|
|
call ApplyObjectFacing
|
|
ret
|
|
|
|
Script_faceobject:
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
cp LAST_TALKED
|
|
jr c, .ok
|
|
ldh a, [hLastTalked]
|
|
.ok
|
|
ld e, a
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
cp LAST_TALKED
|
|
jr nz, .ok2
|
|
ldh 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_turnobject:
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
cp LAST_TALKED
|
|
jr nz, .ok
|
|
ldh 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_F, [hl]
|
|
jr nz, .not_visible
|
|
pop de
|
|
ld a, e
|
|
call SetSpriteDirection
|
|
ld hl, wVramState
|
|
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:
|
|
call GetScriptByte
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, wVariableSprites
|
|
add hl, de
|
|
call GetScriptByte
|
|
ld [hl], a
|
|
ret
|
|
|
|
Script_appear:
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
call UnmaskCopyMapObjectStruct
|
|
ldh a, [hMapObjectIndex]
|
|
ld b, 0 ; clear
|
|
call ApplyEventActionAppearDisappear
|
|
ret
|
|
|
|
Script_disappear:
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
cp LAST_TALKED
|
|
jr nz, .ok
|
|
ldh a, [hLastTalked]
|
|
.ok
|
|
call DeleteObjectStruct
|
|
ldh a, [hMapObjectIndex]
|
|
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:
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
ld b, a
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
ld c, a
|
|
farcall StartFollow
|
|
ret
|
|
|
|
Script_stopfollow:
|
|
farcall StopFollow
|
|
ret
|
|
|
|
Script_moveobject:
|
|
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:
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
cp LAST_TALKED
|
|
jr nz, .ok
|
|
ldh a, [hLastTalked]
|
|
.ok
|
|
ld b, a
|
|
farcall WriteObjectXY
|
|
ret
|
|
|
|
Script_follownotexact:
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
ld b, a
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
ld c, a
|
|
farcall FollowNotExact
|
|
ret
|
|
|
|
Script_loademote:
|
|
call GetScriptByte
|
|
cp EMOTE_FROM_MEM
|
|
jr nz, .not_var_emote
|
|
ld a, [wScriptVar]
|
|
.not_var_emote
|
|
ld c, a
|
|
farcall LoadEmote
|
|
ret
|
|
|
|
Script_showemote:
|
|
call GetScriptByte
|
|
ld [wScriptVar], a
|
|
call GetScriptByte
|
|
call GetScriptObject
|
|
cp LAST_TALKED
|
|
jr z, .ok
|
|
ldh [hLastTalked], a
|
|
.ok
|
|
call GetScriptByte
|
|
ld [wScriptDelay], a
|
|
ld b, BANK(ShowEmoteScript)
|
|
ld de, ShowEmoteScript
|
|
jp ScriptCall
|
|
|
|
ShowEmoteScript:
|
|
loademote EMOTE_FROM_MEM
|
|
applymovementlasttalked .Show
|
|
pause 0
|
|
applymovementlasttalked .Hide
|
|
end
|
|
|
|
.Show:
|
|
show_emote
|
|
step_sleep 1
|
|
step_end
|
|
|
|
.Hide:
|
|
hide_emote
|
|
step_sleep 1
|
|
step_end
|
|
|
|
Script_earthquake:
|
|
ld hl, EarthquakeMovement
|
|
ld de, wEarthquakeMovementDataBuffer
|
|
ld bc, EarthquakeMovement.End - 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
|
|
.End
|
|
|
|
Script_loadpikachudata:
|
|
ld hl, PIKACHU
|
|
call GetPokemonIDFromIndex
|
|
ld [wTempWildMonSpecies], a
|
|
ld a, 5
|
|
ld [wCurPartyLevel], a
|
|
ret
|
|
|
|
Script_randomwildmon:
|
|
xor a
|
|
ld [wBattleScriptFlags], a
|
|
ret
|
|
|
|
Script_loadtemptrainer:
|
|
ld a, (1 << 7) | 1
|
|
ld [wBattleScriptFlags], a
|
|
ld a, [wTempTrainerClass]
|
|
ld [wOtherTrainerClass], a
|
|
ld a, [wTempTrainerID]
|
|
ld [wOtherTrainerID], a
|
|
ret
|
|
|
|
Script_loadwildmon:
|
|
ld a, (1 << 7)
|
|
ld [wBattleScriptFlags], a
|
|
call LoadScriptPokemonID
|
|
ld [wTempWildMonSpecies], a
|
|
call GetScriptByte
|
|
ld [wCurPartyLevel], a
|
|
ret
|
|
|
|
Script_loadtrainer:
|
|
ld a, (1 << 7) | 1
|
|
ld [wBattleScriptFlags], a
|
|
call GetScriptByte
|
|
ld [wOtherTrainerClass], a
|
|
call GetScriptByte
|
|
ld [wOtherTrainerID], a
|
|
ret
|
|
|
|
Script_startbattle:
|
|
call BufferScreen
|
|
predef StartBattle
|
|
ld a, [wBattleResult]
|
|
and ~BATTLERESULT_BITMASK
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_catchtutorial:
|
|
call GetScriptByte
|
|
ld [wBattleType], a
|
|
call BufferScreen
|
|
farcall CatchTutorial
|
|
jp Script_reloadmap
|
|
|
|
Script_reloadmapafterbattle:
|
|
ld hl, wBattleScriptFlags
|
|
ld d, [hl]
|
|
ld [hl], 0
|
|
ld a, [wBattleResult]
|
|
and ~BATTLERESULT_BITMASK
|
|
cp LOSE
|
|
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 BATTLERESULT_BOX_FULL, a
|
|
jr z, .done
|
|
ld b, BANK(Script_SpecialBillCall)
|
|
ld de, Script_SpecialBillCall
|
|
farcall LoadScriptBDE
|
|
.done
|
|
jp Script_reloadmap
|
|
|
|
Script_reloadmap:
|
|
xor a
|
|
ld [wBattleScriptFlags], a
|
|
ld a, MAPSETUP_RELOADMAP
|
|
ldh [hMapEntryMethod], a
|
|
ld a, MAPSTATUS_ENTER
|
|
call LoadMapStatus
|
|
call StopScript
|
|
ret
|
|
|
|
Script_scall:
|
|
ld a, [wScriptBank]
|
|
ld b, a
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
jr ScriptCall
|
|
|
|
Script_farscall:
|
|
call GetScriptByte
|
|
ld b, a
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
jr ScriptCall
|
|
|
|
Script_memcall:
|
|
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: ScriptCall can overflow wScriptStack and crash (see docs/bugs_and_glitches.md)
|
|
|
|
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, [wScriptBank]
|
|
ld [hli], a
|
|
ld a, [wScriptPos]
|
|
ld [hli], a
|
|
ld a, [wScriptPos + 1]
|
|
ld [hl], a
|
|
ld a, b
|
|
ld [wScriptBank], a
|
|
ld a, e
|
|
ld [wScriptPos], a
|
|
ld a, d
|
|
ld [wScriptPos + 1], a
|
|
ret
|
|
|
|
CallCallback::
|
|
ld a, [wScriptBank]
|
|
or $80
|
|
ld [wScriptBank], a
|
|
jp ScriptCall
|
|
|
|
Script_sjump:
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
ld a, [wScriptBank]
|
|
ld b, a
|
|
jp ScriptJump
|
|
|
|
Script_farsjump:
|
|
call GetScriptByte
|
|
ld b, a
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
jp ScriptJump
|
|
|
|
Script_memjump:
|
|
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:
|
|
ld a, [wScriptVar]
|
|
and a
|
|
jp nz, SkipTwoScriptBytes
|
|
jp Script_sjump
|
|
|
|
Script_iftrue:
|
|
ld a, [wScriptVar]
|
|
and a
|
|
jp nz, Script_sjump
|
|
jp SkipTwoScriptBytes
|
|
|
|
Script_ifequal:
|
|
call GetScriptByte
|
|
ld hl, wScriptVar
|
|
cp [hl]
|
|
jr z, Script_sjump
|
|
jr SkipTwoScriptBytes
|
|
|
|
Script_ifnotequal:
|
|
call GetScriptByte
|
|
ld hl, wScriptVar
|
|
cp [hl]
|
|
jr nz, Script_sjump
|
|
jr SkipTwoScriptBytes
|
|
|
|
Script_ifgreater:
|
|
ld a, [wScriptVar]
|
|
ld b, a
|
|
call GetScriptByte
|
|
cp b
|
|
jr c, Script_sjump
|
|
jr SkipTwoScriptBytes
|
|
|
|
Script_ifless:
|
|
call GetScriptByte
|
|
ld b, a
|
|
ld a, [wScriptVar]
|
|
cp b
|
|
jr c, Script_sjump
|
|
jr SkipTwoScriptBytes
|
|
|
|
Script_jumpstd:
|
|
call StdScript
|
|
jr ScriptJump
|
|
|
|
Script_callstd:
|
|
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 GetFarWord
|
|
ret
|
|
|
|
SkipTwoScriptBytes:
|
|
call GetScriptByte
|
|
call GetScriptByte
|
|
ret
|
|
|
|
ScriptJump:
|
|
ld a, b
|
|
ld [wScriptBank], a
|
|
ld a, l
|
|
ld [wScriptPos], a
|
|
ld a, h
|
|
ld [wScriptPos + 1], a
|
|
ret
|
|
|
|
Script_sdefer:
|
|
ld a, [wScriptBank]
|
|
ld [wDeferredScriptBank], a
|
|
call GetScriptByte
|
|
ld [wDeferredScriptAddr], a
|
|
call GetScriptByte
|
|
ld [wDeferredScriptAddr + 1], a
|
|
ld hl, wScriptFlags
|
|
set 3, [hl]
|
|
ret
|
|
|
|
Script_checkscene:
|
|
call CheckScenes
|
|
jr z, .no_scene
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
.no_scene
|
|
ld a, $ff
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_checkmapscene:
|
|
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 [wScriptVar], a
|
|
ret
|
|
|
|
.no_scene
|
|
ld a, $ff
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_setscene:
|
|
ld a, [wMapGroup]
|
|
ld b, a
|
|
ld a, [wMapNumber]
|
|
ld c, a
|
|
jr DoScene
|
|
|
|
Script_setmapscene:
|
|
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_readmem:
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
ld a, [hl]
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_writemem:
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
ld a, [wScriptVar]
|
|
ld [hl], a
|
|
ret
|
|
|
|
Script_loadmem:
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
call GetScriptByte
|
|
ld [hl], a
|
|
ret
|
|
|
|
Script_setval:
|
|
call GetScriptByte
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_addval:
|
|
call GetScriptByte
|
|
ld hl, wScriptVar
|
|
add [hl]
|
|
ld [hl], a
|
|
ret
|
|
|
|
Script_random:
|
|
call GetScriptByte
|
|
ld [wScriptVar], 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
|
|
ldh a, [hRandomAdd]
|
|
cp b
|
|
jr nc, .loop
|
|
jr .finish
|
|
|
|
.no_restriction
|
|
push bc
|
|
call Random
|
|
pop bc
|
|
ldh a, [hRandomAdd]
|
|
|
|
.finish
|
|
push af
|
|
ld a, [wScriptVar]
|
|
ld c, a
|
|
pop af
|
|
call SimpleDivide
|
|
ld [wScriptVar], 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_readvar:
|
|
call GetScriptByte
|
|
call GetVarAction
|
|
ld a, [de]
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_writevar:
|
|
call GetScriptByte
|
|
call GetVarAction
|
|
ld a, [wScriptVar]
|
|
ld [de], a
|
|
ret
|
|
|
|
Script_loadvar:
|
|
call GetScriptByte
|
|
call GetVarAction
|
|
call GetScriptByte
|
|
ld [de], a
|
|
ret
|
|
|
|
GetVarAction:
|
|
ld c, a
|
|
farcall _GetVarAction
|
|
ret
|
|
|
|
Script_checkver:
|
|
ld a, [.gs_version]
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
.gs_version:
|
|
db GS_VERSION
|
|
|
|
Script_getmonname:
|
|
call LoadScriptPokemonID
|
|
ld [wNamedObjectIndex], a
|
|
call GetPokemonName
|
|
ld de, wStringBuffer1
|
|
|
|
GetStringBuffer:
|
|
call GetScriptByte
|
|
cp NUM_STRING_BUFFERS
|
|
jr c, .ok
|
|
xor a
|
|
.ok
|
|
|
|
CopyConvertedText:
|
|
ld hl, wStringBuffer3
|
|
ld bc, STRING_BUFFER_LENGTH
|
|
call AddNTimes
|
|
call CopyName2
|
|
ret
|
|
|
|
Script_getitemname:
|
|
call GetScriptByte
|
|
and a ; USE_SCRIPT_VAR
|
|
jr nz, .ok
|
|
ld a, [wScriptVar]
|
|
.ok
|
|
ld [wNamedObjectIndex], a
|
|
call GetItemName
|
|
ld de, wStringBuffer1
|
|
jr GetStringBuffer
|
|
|
|
Script_getcurlandmarkname:
|
|
ld a, [wMapGroup]
|
|
ld b, a
|
|
ld a, [wMapNumber]
|
|
ld c, a
|
|
call GetWorldMapLocation
|
|
|
|
ConvertLandmarkToText:
|
|
ld e, a
|
|
farcall GetLandmarkName
|
|
ld de, wStringBuffer1
|
|
jp GetStringBuffer
|
|
|
|
Script_getlandmarkname:
|
|
call GetScriptByte
|
|
jr ConvertLandmarkToText
|
|
|
|
Script_gettrainername:
|
|
call GetScriptByte
|
|
ld c, a
|
|
call GetScriptByte
|
|
ld b, a
|
|
farcall GetTrainerName
|
|
jr GetStringBuffer
|
|
|
|
Script_getname:
|
|
call GetScriptByte
|
|
ld [wNamedObjectType], a
|
|
|
|
ContinueToGetName:
|
|
call GetScriptByte
|
|
ld [wCurSpecies], a
|
|
call GetName
|
|
ld de, wStringBuffer1
|
|
jp GetStringBuffer
|
|
|
|
Script_gettrainerclassname:
|
|
ld a, TRAINER_NAME
|
|
ld [wNamedObjectType], a
|
|
jr ContinueToGetName
|
|
|
|
Script_getmoney:
|
|
call ResetStringBuffer1
|
|
call GetMoneyAccount
|
|
ld hl, wStringBuffer1
|
|
lb bc, PRINTNUM_LEFTALIGN | 3, 6
|
|
call PrintNum
|
|
ld de, wStringBuffer1
|
|
jp GetStringBuffer
|
|
|
|
Script_getcoins:
|
|
call ResetStringBuffer1
|
|
ld hl, wStringBuffer1
|
|
ld de, wCoins
|
|
lb bc, PRINTNUM_LEFTALIGN | 2, 6
|
|
call PrintNum
|
|
ld de, wStringBuffer1
|
|
jp GetStringBuffer
|
|
|
|
Script_getnum:
|
|
call ResetStringBuffer1
|
|
ld de, wScriptVar
|
|
ld hl, wStringBuffer1
|
|
lb bc, PRINTNUM_LEFTALIGN | 1, 3
|
|
call PrintNum
|
|
ld de, wStringBuffer1
|
|
jp GetStringBuffer
|
|
|
|
ResetStringBuffer1:
|
|
ld hl, wStringBuffer1
|
|
ld bc, NAME_LENGTH
|
|
ld a, "@"
|
|
call ByteFill
|
|
ret
|
|
|
|
Script_getstring:
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
ld a, [wScriptBank]
|
|
ld hl, CopyName1
|
|
rst FarCall
|
|
ld de, wStringBuffer2
|
|
jp GetStringBuffer
|
|
|
|
Script_givepokemail:
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
ld a, [wScriptBank]
|
|
call GetFarByte
|
|
ld b, a
|
|
push bc
|
|
inc hl
|
|
ld bc, MAIL_MSG_LENGTH
|
|
ld de, wMonMailMessageBuffer
|
|
ld a, [wScriptBank]
|
|
call FarCopyBytes
|
|
pop bc
|
|
farcall GivePokeMail
|
|
ret
|
|
|
|
Script_checkpokemail:
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
ld a, [wScriptBank]
|
|
ld b, a
|
|
farcall CheckPokeMail
|
|
ret
|
|
|
|
Script_giveitem:
|
|
call GetScriptByte
|
|
cp ITEM_FROM_MEM
|
|
jr nz, .ok
|
|
ld a, [wScriptVar]
|
|
.ok
|
|
ld [wCurItem], a
|
|
call GetScriptByte
|
|
ld [wItemQuantityChange], a
|
|
ld hl, wNumItems
|
|
call ReceiveItem
|
|
jr nc, .full
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ret
|
|
.full
|
|
xor a
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_takeitem:
|
|
xor a
|
|
ld [wScriptVar], a
|
|
call GetScriptByte
|
|
ld [wCurItem], a
|
|
call GetScriptByte
|
|
ld [wItemQuantityChange], a
|
|
ld a, -1
|
|
ld [wCurItemQuantity], a
|
|
ld hl, wNumItems
|
|
call TossItem
|
|
ret nc
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_checkitem:
|
|
xor a
|
|
ld [wScriptVar], a
|
|
call GetScriptByte
|
|
ld [wCurItem], a
|
|
ld hl, wNumItems
|
|
call CheckItem
|
|
ret nc
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_givemoney:
|
|
call GetMoneyAccount
|
|
call LoadMoneyAmountToMem
|
|
farcall GiveMoney
|
|
ret
|
|
|
|
Script_takemoney:
|
|
call GetMoneyAccount
|
|
call LoadMoneyAmountToMem
|
|
farcall TakeMoney
|
|
ret
|
|
|
|
Script_checkmoney:
|
|
call GetMoneyAccount
|
|
call LoadMoneyAmountToMem
|
|
farcall CompareMoney
|
|
|
|
CompareMoneyAction:
|
|
jr c, .less
|
|
jr z, .exact
|
|
ld a, HAVE_MORE
|
|
jr .done
|
|
.exact
|
|
ld a, HAVE_AMOUNT
|
|
jr .done
|
|
.less
|
|
ld a, HAVE_LESS
|
|
.done
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
GetMoneyAccount:
|
|
call GetScriptByte
|
|
and a
|
|
ld de, wMoney ; YOUR_MONEY
|
|
ret z
|
|
ld de, wMomsMoney ; MOMS_MONEY
|
|
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:
|
|
call LoadCoinAmountToMem
|
|
farcall GiveCoins
|
|
ret
|
|
|
|
Script_takecoins:
|
|
call LoadCoinAmountToMem
|
|
farcall TakeCoins
|
|
ret
|
|
|
|
Script_checkcoins:
|
|
call LoadCoinAmountToMem
|
|
farcall CheckCoins
|
|
jr CompareMoneyAction
|
|
|
|
LoadCoinAmountToMem:
|
|
call GetScriptByte
|
|
ldh [hMoneyTemp + 1], a
|
|
call GetScriptByte
|
|
ldh [hMoneyTemp], a
|
|
ld bc, hMoneyTemp
|
|
ret
|
|
|
|
Script_checktime:
|
|
xor a
|
|
ld [wScriptVar], a
|
|
farcall CheckTime
|
|
call GetScriptByte
|
|
and c
|
|
ret z
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_checkpoke:
|
|
xor a
|
|
ld [wScriptVar], a
|
|
call LoadScriptPokemonID
|
|
ld hl, wPartySpecies
|
|
ld de, 1
|
|
call IsInArray
|
|
ret nc
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_addcellnum:
|
|
xor a
|
|
ld [wScriptVar], a
|
|
call GetScriptByte
|
|
ld c, a
|
|
farcall AddPhoneNumber
|
|
ret nc
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_delcellnum:
|
|
xor a
|
|
ld [wScriptVar], a
|
|
call GetScriptByte
|
|
ld c, a
|
|
farcall DelCellNum
|
|
ret nc
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_checkcellnum:
|
|
; returns false if the cell number is not in your phone
|
|
|
|
xor a
|
|
ld [wScriptVar], a
|
|
call GetScriptByte
|
|
ld c, a
|
|
farcall CheckCellNum
|
|
ret nc
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_specialphonecall:
|
|
call GetScriptByte
|
|
ld [wSpecialPhoneCallID], a
|
|
call GetScriptByte
|
|
ld [wSpecialPhoneCallID + 1], a
|
|
ret
|
|
|
|
Script_checkphonecall:
|
|
; returns false if no special phone call is stored
|
|
|
|
ld a, [wSpecialPhoneCallID]
|
|
and a
|
|
jr z, .ok
|
|
ld a, TRUE
|
|
.ok
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_givepoke:
|
|
call LoadScriptPokemonID
|
|
ld [wCurPartySpecies], a
|
|
call GetScriptByte
|
|
ld [wCurPartyLevel], a
|
|
call GetScriptByte
|
|
ld [wCurItem], a
|
|
call GetScriptByte
|
|
and a
|
|
ld b, a
|
|
jr z, .ok
|
|
ld hl, wScriptPos
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
call GetScriptByte
|
|
call GetScriptByte
|
|
call GetScriptByte
|
|
call GetScriptByte
|
|
.ok
|
|
farcall GivePoke
|
|
ld a, b
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_giveegg:
|
|
; if no room in the party, return 0 in wScriptVar; else, return 2
|
|
|
|
xor a ; PARTYMON
|
|
ld [wScriptVar], a
|
|
ld [wMonType], a
|
|
call LoadScriptPokemonID
|
|
ld [wCurPartySpecies], a
|
|
call GetScriptByte
|
|
ld [wCurPartyLevel], a
|
|
farcall GiveEgg
|
|
ret nc
|
|
ld a, 2
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_setevent:
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
ld b, SET_FLAG
|
|
call EventFlagAction
|
|
ret
|
|
|
|
Script_clearevent:
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
ld b, RESET_FLAG
|
|
call EventFlagAction
|
|
ret
|
|
|
|
Script_checkevent:
|
|
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 [wScriptVar], a
|
|
ret
|
|
|
|
Script_setflag:
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
ld b, SET_FLAG
|
|
call _EngineFlagAction
|
|
ret
|
|
|
|
Script_clearflag:
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
ld b, RESET_FLAG
|
|
call _EngineFlagAction
|
|
ret
|
|
|
|
Script_checkflag:
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
ld b, CHECK_FLAG
|
|
call _EngineFlagAction
|
|
ld a, c
|
|
and a
|
|
jr z, .false
|
|
ld a, TRUE
|
|
.false
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
_EngineFlagAction:
|
|
farcall EngineFlagAction
|
|
ret
|
|
|
|
Script_wildoff:
|
|
ld hl, wStatusFlags
|
|
set STATUSFLAGS_NO_WILD_ENCOUNTERS_F, [hl]
|
|
ret
|
|
|
|
Script_wildon:
|
|
ld hl, wStatusFlags
|
|
res STATUSFLAGS_NO_WILD_ENCOUNTERS_F, [hl]
|
|
ret
|
|
|
|
Script_xycompare:
|
|
call GetScriptByte
|
|
ld [wXYComparePointer], a
|
|
call GetScriptByte
|
|
ld [wXYComparePointer + 1], a
|
|
ret
|
|
|
|
Script_warpfacing:
|
|
call GetScriptByte
|
|
maskbits NUM_DIRECTIONS
|
|
ld c, a
|
|
ld a, [wPlayerSpriteSetupFlags]
|
|
set PLAYERSPRITESETUP_CUSTOM_FACING_F, a
|
|
or c
|
|
ld [wPlayerSpriteSetupFlags], a
|
|
; fallthrough
|
|
|
|
Script_warp:
|
|
; This seems to be some sort of error handling case.
|
|
call GetScriptByte
|
|
and a
|
|
jr z, .not_ok
|
|
ld [wMapGroup], a
|
|
call GetScriptByte
|
|
ld [wMapNumber], a
|
|
call GetScriptByte
|
|
ld [wXCoord], a
|
|
call GetScriptByte
|
|
ld [wYCoord], a
|
|
ld a, SPAWN_N_A
|
|
ld [wDefaultSpawnpoint], a
|
|
ld a, MAPSETUP_WARP
|
|
ldh [hMapEntryMethod], a
|
|
ld a, MAPSTATUS_ENTER
|
|
call LoadMapStatus
|
|
call StopScript
|
|
ret
|
|
|
|
.not_ok
|
|
call GetScriptByte
|
|
call GetScriptByte
|
|
call GetScriptByte
|
|
ld a, SPAWN_N_A
|
|
ld [wDefaultSpawnpoint], a
|
|
ld a, MAPSETUP_BADWARP
|
|
ldh [hMapEntryMethod], a
|
|
ld a, MAPSTATUS_ENTER
|
|
call LoadMapStatus
|
|
call StopScript
|
|
ret
|
|
|
|
Script_warpmod:
|
|
call GetScriptByte
|
|
ld [wBackupWarpNumber], a
|
|
call GetScriptByte
|
|
ld [wBackupMapGroup], a
|
|
call GetScriptByte
|
|
ld [wBackupMapNumber], a
|
|
ret
|
|
|
|
Script_blackoutmod:
|
|
call GetScriptByte
|
|
ld [wLastSpawnMapGroup], a
|
|
call GetScriptByte
|
|
ld [wLastSpawnMapNumber], a
|
|
ret
|
|
|
|
Script_dontrestartmapmusic:
|
|
ld a, TRUE
|
|
ld [wDontPlayMapMusicOnReload], a
|
|
ret
|
|
|
|
Script_writecmdqueue:
|
|
call GetScriptByte
|
|
ld e, a
|
|
call GetScriptByte
|
|
ld d, a
|
|
ld a, [wScriptBank]
|
|
ld b, a
|
|
farcall WriteCmdQueue ; no need to farcall
|
|
ret
|
|
|
|
Script_delcmdqueue:
|
|
xor a
|
|
ld [wScriptVar], a
|
|
call GetScriptByte
|
|
ld b, a
|
|
farcall DelCmdQueue ; no need to farcall
|
|
ret c
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_changemapblocks:
|
|
call GetScriptByte
|
|
ld [wMapBlocksBank], a
|
|
call GetScriptByte
|
|
ld [wMapBlocksPointer], a
|
|
call GetScriptByte
|
|
ld [wMapBlocksPointer + 1], a
|
|
call ChangeMap
|
|
call BufferScreen
|
|
ret
|
|
|
|
Script_changeblock:
|
|
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::
|
|
xor a
|
|
ldh [hBGMapMode], a
|
|
call OverworldTextModeSwitch
|
|
call GetMovementPermissions
|
|
farcall ReloadMapPart
|
|
call UpdateSprites
|
|
ret
|
|
|
|
Script_warpcheck:
|
|
call WarpCheck
|
|
ret nc
|
|
farcall EnableEvents
|
|
ret
|
|
|
|
Script_enableevents: ; unreferenced
|
|
farcall EnableEvents
|
|
ret
|
|
|
|
Script_newloadmap:
|
|
call GetScriptByte
|
|
ldh [hMapEntryMethod], a
|
|
ld a, MAPSTATUS_ENTER
|
|
call LoadMapStatus
|
|
call StopScript
|
|
ret
|
|
|
|
Script_reloadend:
|
|
call Script_newloadmap
|
|
jp Script_end
|
|
|
|
Script_opentext:
|
|
call OpenText
|
|
ret
|
|
|
|
Script_refreshscreen:
|
|
call RefreshScreen
|
|
call GetScriptByte
|
|
ret
|
|
|
|
Script_writeunusedbyte:
|
|
call GetScriptByte
|
|
ld [wUnusedScriptByte], a
|
|
ret
|
|
|
|
UnusedClosetextScript: ; unreferenced
|
|
closetext
|
|
|
|
Script_closetext:
|
|
call _OpenAndCloseMenu_HDMATransferTilemapAndAttrmap
|
|
call CloseText
|
|
ret
|
|
|
|
Script_autoinput:
|
|
call GetScriptByte
|
|
push af
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
pop af
|
|
call StartAutoInput
|
|
ret
|
|
|
|
Script_pause:
|
|
call GetScriptByte
|
|
and a
|
|
jr z, .loop
|
|
ld [wScriptDelay], a
|
|
.loop
|
|
ld c, 2
|
|
call DelayFrames
|
|
ld hl, wScriptDelay
|
|
dec [hl]
|
|
jr nz, .loop
|
|
ret
|
|
|
|
Script_deactivatefacing:
|
|
call GetScriptByte
|
|
and a
|
|
jr z, .no_time
|
|
ld [wScriptDelay], a
|
|
.no_time
|
|
ld a, SCRIPT_WAIT
|
|
ld [wScriptMode], a
|
|
call StopScript
|
|
ret
|
|
|
|
Script_stopandsjump:
|
|
call StopScript
|
|
jp Script_sjump
|
|
|
|
Script_end:
|
|
call ExitScriptSubroutine
|
|
jr c, .resume
|
|
ret
|
|
|
|
.resume
|
|
xor a
|
|
ld [wScriptRunning], a
|
|
ld a, SCRIPT_OFF
|
|
ld [wScriptMode], a
|
|
ld hl, wScriptFlags
|
|
res 0, [hl]
|
|
call StopScript
|
|
ret
|
|
|
|
Script_endcallback:
|
|
call ExitScriptSubroutine
|
|
jr c, .dummy
|
|
.dummy
|
|
ld hl, wScriptFlags
|
|
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 $7f
|
|
ld [wScriptBank], a
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld [wScriptPos], a
|
|
ld a, [hl]
|
|
ld d, a
|
|
ld [wScriptPos + 1], a
|
|
and a
|
|
ret
|
|
.done
|
|
scf
|
|
ret
|
|
|
|
Script_endall:
|
|
xor a
|
|
ld [wScriptStackSize], a
|
|
ld [wScriptRunning], a
|
|
ld a, SCRIPT_OFF
|
|
ld [wScriptMode], a
|
|
ld hl, wScriptFlags
|
|
res 0, [hl]
|
|
call StopScript
|
|
ret
|
|
|
|
Script_halloffame:
|
|
ld hl, wGameTimerPaused
|
|
res GAME_TIMER_PAUSED_F, [hl]
|
|
farcall StubbedTrainerRankings_HallOfFame
|
|
farcall StubbedTrainerRankings_HallOfFame2
|
|
farcall HallOfFame
|
|
ld hl, wGameTimerPaused
|
|
set GAME_TIMER_PAUSED_F, [hl]
|
|
jr ReturnFromCredits
|
|
|
|
Script_credits:
|
|
farcall RedCredits
|
|
ReturnFromCredits:
|
|
call Script_endall
|
|
ld a, MAPSTATUS_DONE
|
|
call LoadMapStatus
|
|
call StopScript
|
|
ret
|
|
|
|
Script_wait:
|
|
push bc
|
|
call GetScriptByte
|
|
.loop
|
|
push af
|
|
ld c, 6
|
|
call DelayFrames
|
|
pop af
|
|
dec a
|
|
jr nz, .loop
|
|
pop bc
|
|
ret
|
|
|
|
Script_checksave:
|
|
farcall CheckSave
|
|
ld a, c
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_checkver_duplicate: ; unreferenced
|
|
ld a, [.gs_version]
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
.gs_version:
|
|
db GS_VERSION
|
|
|
|
Script_trainerpic:
|
|
call GetScriptByte
|
|
ld [wTrainerClass], a
|
|
farcall Trainerpic
|
|
ret
|
|
|
|
Script_loadmonindex:
|
|
; script command 0xaa
|
|
call LoadScriptPokemonID
|
|
ld [wScriptVar], a
|
|
ld c, a
|
|
call GetScriptByte
|
|
dec a
|
|
cp NUM_MAP_LOCKED_MON_IDS
|
|
ret nc
|
|
if LOCKED_MON_ID_MAP_1 > 1
|
|
add a, LOCKED_MON_ID_MAP_1
|
|
elif LOCKED_MON_ID_MAP_1 == 1
|
|
inc a
|
|
endc
|
|
ld l, a
|
|
ld a, c
|
|
jp LockPokemonID
|
|
|
|
Script_checkmaplockedmons:
|
|
; script command 0xab
|
|
; check if the script variable's value is one of the reserved map indexes
|
|
ld a, [wScriptVar]
|
|
and a
|
|
ret z
|
|
cp MON_TABLE_ENTRIES + 1
|
|
ld c, 0
|
|
jr nc, .done
|
|
ld b, a
|
|
ldh a, [rSVBK]
|
|
push af
|
|
ld a, BANK(wPokemonIndexTable)
|
|
ldh [rSVBK], a
|
|
ld hl, wPokemonIndexTableLockedEntries + LOCKED_MON_ID_MAP_1
|
|
.loop
|
|
inc c
|
|
ld a, [hli]
|
|
cp b
|
|
jr z, .found
|
|
ld a, c
|
|
cp NUM_MAP_LOCKED_MON_IDS
|
|
jr c, .loop
|
|
ld c, 0
|
|
.found
|
|
pop af
|
|
ldh [rSVBK], a
|
|
.done
|
|
ld a, c
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
LoadScriptPokemonID:
|
|
call GetScriptByte
|
|
ld l, a
|
|
call GetScriptByte
|
|
ld h, a
|
|
or l
|
|
jp nz, GetPokemonIDFromIndex
|
|
ld a, [wScriptVar]
|
|
ret
|
|
|
|
Script_divemap:
|
|
call GetScriptByte
|
|
ld [wDiveMapGroup], a
|
|
call GetScriptByte
|
|
ld [wDiveMapNumber], a
|
|
call GetScriptByte
|
|
ld [wDiveDeltaX], a
|
|
call GetScriptByte
|
|
ld [wDiveDeltaY], a
|
|
ret
|
|
|
|
Script_divewarp:
|
|
ld a, [wDiveMapGroup]
|
|
ld [wMapGroup], a
|
|
ld a, [wDiveMapNumber]
|
|
ld [wMapNumber], a
|
|
ld a, [wXCoord]
|
|
ld b, a
|
|
ld a, [wDiveDeltaX]
|
|
add b
|
|
ld [wXCoord], a
|
|
ld a, [wYCoord]
|
|
ld b, a
|
|
ld a, [wDiveDeltaY]
|
|
add b
|
|
ld [wYCoord], a
|
|
ld a, -1
|
|
ld [wDefaultSpawnpoint], a
|
|
ld a, MAPSETUP_WARP
|
|
ld [hMapEntryMethod], a
|
|
ld a, 1
|
|
call LoadMapStatus
|
|
call StopScript
|
|
ret
|