mirror of https://github.com/pret/pokecrystal.git
1137 lines
14 KiB
NASM
1137 lines
14 KiB
NASM
INCLUDE "includes.asm"
|
|
|
|
|
|
SECTION "Events", ROMX, BANK[EVENTS]
|
|
|
|
OverworldLoop:: ; 966b0
|
|
xor a
|
|
ld [MapStatus], a
|
|
.loop
|
|
ld a, [MapStatus]
|
|
ld hl, .jumps
|
|
rst JumpTable
|
|
ld a, [MapStatus]
|
|
cp 3 ; done
|
|
jr nz, .loop
|
|
.done
|
|
ret
|
|
|
|
.jumps
|
|
dw StartMap
|
|
dw EnterMap
|
|
dw HandleMap
|
|
dw .done
|
|
; 966cb
|
|
|
|
|
|
ClearAllScriptFlags3: ; 966cb
|
|
xor a
|
|
ld [ScriptFlags3], a
|
|
ret
|
|
; 966d0
|
|
|
|
SetAll_ScriptFlags3:: ; 966d0
|
|
ld a, $ff
|
|
ld [ScriptFlags3], a
|
|
ret
|
|
; 966d6
|
|
|
|
CheckBit5_ScriptFlags3: ; 966d6
|
|
ld hl, ScriptFlags3
|
|
bit 5, [hl]
|
|
ret
|
|
; 966dc
|
|
|
|
ResetBit2_ScriptFlags3: ; 966dc
|
|
ld hl, ScriptFlags3
|
|
res 2, [hl]
|
|
ret
|
|
; 966e2
|
|
|
|
ResetBit1_ScriptFlags3: ; 966e2
|
|
ld hl, ScriptFlags3
|
|
res 1, [hl]
|
|
ret
|
|
; 966e8
|
|
|
|
ResetBit0_ScriptFlags3: ; 966e8
|
|
ld hl, ScriptFlags3
|
|
res 0, [hl]
|
|
ret
|
|
; 966ee
|
|
|
|
ResetBit4_ScriptFlags3: ; 966ee
|
|
ld hl, ScriptFlags3
|
|
res 4, [hl]
|
|
ret
|
|
; 966f4
|
|
|
|
SetBit2_ScriptFlags3: ; 966f4
|
|
ld hl, ScriptFlags3
|
|
set 2, [hl]
|
|
ret
|
|
; 966fa
|
|
|
|
SetBit1_ScriptFlags3: ; 966fa
|
|
ld hl, ScriptFlags3
|
|
set 1, [hl]
|
|
ret
|
|
; 96700
|
|
|
|
SetBit0_ScriptFlags3: ; 96700
|
|
ld hl, ScriptFlags3
|
|
set 0, [hl]
|
|
ret
|
|
; 96706
|
|
|
|
SetBit4_ScriptFlags3: ; 96706
|
|
ld hl, ScriptFlags3
|
|
set 4, [hl]
|
|
ret
|
|
; 9670c
|
|
|
|
CheckBit2_ScriptFlags3: ; 9670c
|
|
ld hl, ScriptFlags3
|
|
bit 2, [hl]
|
|
ret
|
|
; 96712
|
|
|
|
CheckBit1_ScriptFlags3: ; 96712
|
|
ld hl, ScriptFlags3
|
|
bit 1, [hl]
|
|
ret
|
|
; 96718
|
|
|
|
CheckBit0_ScriptFlags3: ; 96718
|
|
ld hl, ScriptFlags3
|
|
bit 0, [hl]
|
|
ret
|
|
; 9671e
|
|
|
|
CheckBit4_ScriptFlags3: ; 9671e
|
|
ld hl, ScriptFlags3
|
|
bit 4, [hl]
|
|
ret
|
|
; 96724
|
|
|
|
|
|
StartMap: ; 96724
|
|
xor a
|
|
ld [ScriptVar], a
|
|
xor a
|
|
ld [ScriptRunning], a
|
|
ld hl, MapStatus
|
|
ld bc, $3e ; 62
|
|
call ByteFill
|
|
callba InitCallReceiveDelay
|
|
call ClearJoypad
|
|
; fallthrough
|
|
; 9673e
|
|
|
|
|
|
EnterMap: ; 9673e
|
|
xor a
|
|
ld [wd453], a
|
|
ld [wd454], a
|
|
call SetUpFiveStepWildEncounterCooldown
|
|
callba RunMapSetupScript
|
|
call ClearAllScriptFlags3
|
|
|
|
ld a, [hMapEntryMethod]
|
|
cp MAPSETUP_07
|
|
jr nz, .dontset
|
|
call SetAll_ScriptFlags3
|
|
.dontset
|
|
|
|
ld a, [hMapEntryMethod]
|
|
cp MAPSETUP_RELOADMAP
|
|
jr nz, .dontresetpoison
|
|
xor a
|
|
ld [PoisonStepCount], a
|
|
.dontresetpoison
|
|
|
|
xor a ; end map entry
|
|
ld [hMapEntryMethod], a
|
|
ld a, 2 ; HandleMap
|
|
ld [MapStatus], a
|
|
ret
|
|
; 9676d
|
|
|
|
|
|
Function9676d: ; 9676d
|
|
ld c, 30
|
|
call DelayFrames
|
|
ret
|
|
; 96773
|
|
|
|
|
|
HandleMap: ; 96773
|
|
call ResetOverworldDelay
|
|
call Function967c1
|
|
callba Function97e08
|
|
call MapEvents
|
|
|
|
; Not immediately entering a connected map will cause problems.
|
|
ld a, [MapStatus]
|
|
cp 2 ; HandleMap
|
|
ret nz
|
|
|
|
call Function967d1
|
|
call NextOverworldFrame
|
|
call Function967e1
|
|
call Function967f4
|
|
ret
|
|
; 96795
|
|
|
|
|
|
MapEvents: ; 96795
|
|
ld a, [MapEventStatus]
|
|
ld hl, .jumps
|
|
rst JumpTable
|
|
ret
|
|
|
|
.jumps
|
|
dw .events
|
|
dw .no_events
|
|
; 967a1
|
|
|
|
.events ; 967a1
|
|
call PlayerEvents
|
|
call ClearAllScriptFlags3
|
|
callba ScriptEvents
|
|
ret
|
|
; 967ae
|
|
|
|
.no_events ; 967ae
|
|
ret
|
|
; 967af
|
|
|
|
|
|
MaxOverworldDelay: ; 967af
|
|
db 2
|
|
; 967b0
|
|
|
|
ResetOverworldDelay: ; 967b0
|
|
ld a, [MaxOverworldDelay]
|
|
ld [OverworldDelay], a
|
|
ret
|
|
; 967b7
|
|
|
|
NextOverworldFrame: ; 967b7
|
|
ld a, [OverworldDelay]
|
|
and a
|
|
ret z
|
|
ld c, a
|
|
call DelayFrames
|
|
ret
|
|
; 967c1
|
|
|
|
Function967c1: ; 967c1
|
|
ld a, [MapEventStatus]
|
|
cp 1 ; no events
|
|
ret z
|
|
|
|
call UpdateTime
|
|
call GetJoypad
|
|
call TimeOfDayPals
|
|
ret
|
|
; 967d1
|
|
|
|
Function967d1: ; 967d1
|
|
callba Function576a
|
|
callba Functiond497
|
|
call Function96812
|
|
ret
|
|
; 967e1
|
|
|
|
Function967e1: ; 967e1
|
|
callba RefreshMapAppearDisappear
|
|
callba Functiond4d2
|
|
callba Functionb8098
|
|
ret
|
|
; 967f4
|
|
|
|
Function967f4: ; 967f4
|
|
ld a, [wd150]
|
|
bit 5, a
|
|
jr z, .events
|
|
bit 6, a
|
|
jr z, .noevents
|
|
bit 4, a
|
|
jr nz, .noevents
|
|
call SetAll_ScriptFlags3
|
|
|
|
.events
|
|
ld a, 0 ; events
|
|
ld [MapEventStatus], a
|
|
ret
|
|
|
|
.noevents
|
|
ld a, 1 ; no events
|
|
ld [MapEventStatus], a
|
|
ret
|
|
; 96812
|
|
|
|
Function96812: ; 96812
|
|
ld hl, wd150
|
|
bit 6, [hl]
|
|
ret z
|
|
|
|
callba Function81ca
|
|
ret
|
|
; 9681f
|
|
|
|
|
|
PlayerEvents: ; 9681f
|
|
|
|
xor a
|
|
; If there's already a player event, don't interrupt it.
|
|
ld a, [ScriptRunning]
|
|
and a
|
|
ret nz
|
|
|
|
call Dummy_CheckScriptFlags3Bit5 ; This is a waste of time
|
|
|
|
call CheckTrainerBattle3
|
|
jr c, .ok
|
|
|
|
call CheckTileEvent
|
|
jr c, .ok
|
|
|
|
call RunMemScript
|
|
jr c, .ok
|
|
|
|
call DoMapTrigger
|
|
jr c, .ok
|
|
|
|
call CheckTimeEvents
|
|
jr c, .ok
|
|
|
|
call OWPlayerInput
|
|
jr c, .ok
|
|
|
|
xor a
|
|
ret
|
|
|
|
|
|
.ok
|
|
push af
|
|
callba EnableScriptMode
|
|
pop af
|
|
|
|
ld [ScriptRunning], a
|
|
call DoPlayerEvent
|
|
ld a, [ScriptRunning]
|
|
cp 4
|
|
jr z, .ok2
|
|
cp 9
|
|
jr z, .ok2
|
|
|
|
xor a
|
|
ld [wc2da], a
|
|
|
|
.ok2
|
|
scf
|
|
ret
|
|
; 96867
|
|
|
|
|
|
CheckTrainerBattle3: ; 96867
|
|
nop
|
|
nop
|
|
call CheckTrainerBattle2
|
|
jr nc, .nope
|
|
|
|
ld a, 1
|
|
scf
|
|
ret
|
|
|
|
.nope
|
|
xor a
|
|
ret
|
|
; 96874
|
|
|
|
|
|
CheckTileEvent: ; 96874
|
|
; Check for warps, tile triggers or wild battles.
|
|
|
|
call CheckBit2_ScriptFlags3
|
|
jr z, .bit2
|
|
|
|
callba CheckMovingOffEdgeOfMap
|
|
jr c, .return4
|
|
|
|
call CheckWarpTile
|
|
jr c, .return6
|
|
|
|
.bit2
|
|
call CheckBit1_ScriptFlags3
|
|
jr z, .bit1
|
|
|
|
call CheckCurrentMapXYTriggers
|
|
jr c, .movement
|
|
|
|
.bit1
|
|
call CheckBit0_ScriptFlags3
|
|
jr z, .bit0
|
|
|
|
call CountStep
|
|
ret c
|
|
|
|
.bit0
|
|
call CheckBit4_ScriptFlags3
|
|
jr z, .ok
|
|
|
|
call RandomEncounter
|
|
ret c
|
|
jr .ok ; pointless
|
|
|
|
.ok
|
|
xor a
|
|
ret
|
|
|
|
.return4
|
|
ld a, 4
|
|
scf
|
|
ret
|
|
|
|
.return6
|
|
ld a, [PlayerStandingTile]
|
|
call CheckPitTile
|
|
jr nz, .pittile
|
|
ld a, 6
|
|
scf
|
|
ret
|
|
|
|
.pittile
|
|
ld a, 5
|
|
scf
|
|
ret
|
|
|
|
.movement
|
|
ld hl, MovementAnimation
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
call GetMapScriptHeaderBank
|
|
call CallScript
|
|
ret
|
|
; 968c7
|
|
|
|
|
|
CheckWildEncounterCooldown:: ; 968c7
|
|
ld hl, wWildEncounterCooldown
|
|
ld a, [hl]
|
|
and a
|
|
ret z
|
|
dec [hl]
|
|
ret z
|
|
scf
|
|
ret
|
|
; 968d1
|
|
|
|
SetUpFiveStepWildEncounterCooldown: ; 968d1
|
|
ld a, 5
|
|
ld [wWildEncounterCooldown], a
|
|
ret
|
|
; 968d7
|
|
|
|
ret_968d7: ; 968d7
|
|
ret
|
|
;968d8
|
|
|
|
SetMinTwoStepWildEncounterCooldown: ; 968d8
|
|
ld a, [wWildEncounterCooldown]
|
|
cp 2
|
|
ret nc
|
|
ld a, 2
|
|
ld [wWildEncounterCooldown], a
|
|
ret
|
|
; 968e4
|
|
|
|
Dummy_CheckScriptFlags3Bit5: ; 968e4
|
|
call CheckBit5_ScriptFlags3
|
|
ret z
|
|
call ret_2f3e
|
|
ret
|
|
; 968ec
|
|
|
|
DoMapTrigger: ; 968ec
|
|
ld a, [wCurrMapTriggerCount]
|
|
and a
|
|
jr z, .nope
|
|
|
|
ld c, a
|
|
call CheckTriggers
|
|
cp c
|
|
jr nc, .nope
|
|
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, wCurrMapTriggerHeaderPointer
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
rept 4
|
|
add hl,de
|
|
endr
|
|
|
|
call GetMapScriptHeaderBank
|
|
call GetFarHalfword
|
|
call GetMapScriptHeaderBank
|
|
call CallScript
|
|
|
|
ld hl, ScriptFlags
|
|
res 3, [hl]
|
|
|
|
callba EnableScriptMode
|
|
callba ScriptEvents
|
|
|
|
ld hl, ScriptFlags
|
|
bit 3, [hl]
|
|
jr z, .nope
|
|
|
|
ld hl, ScriptDelay + 2
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [ScriptDelay + 1]
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
.nope
|
|
xor a
|
|
ret
|
|
; 9693a
|
|
|
|
CheckTimeEvents: ; 9693a
|
|
ld a, [wLinkMode]
|
|
and a
|
|
jr nz, .nothing
|
|
|
|
ld hl, StatusFlags2
|
|
bit 2, [hl]
|
|
jr z, .do_daily
|
|
|
|
callba CheckBugContestTimer
|
|
jr c, .end_bug_contest
|
|
xor a
|
|
ret
|
|
|
|
.do_daily
|
|
callba CheckDailyResetTimer
|
|
callba CheckPokerusTrick
|
|
callba CheckPhoneCall
|
|
ret c
|
|
|
|
.nothing
|
|
xor a
|
|
ret
|
|
|
|
.end_bug_contest
|
|
ld a, BANK(BugCatchingContestOverScript)
|
|
ld hl, BugCatchingContestOverScript
|
|
call CallScript
|
|
scf
|
|
ret
|
|
; 96970
|
|
|
|
.unused ; 96970
|
|
ld a, 8
|
|
scf
|
|
ret
|
|
; 96974
|
|
|
|
|
|
OWPlayerInput: ; 96974
|
|
|
|
call PlayerMovement
|
|
ret c
|
|
and a
|
|
jr nz, .NoAction
|
|
|
|
; Can't perform button actions while sliding on ice.
|
|
callba Function80404
|
|
jr c, .NoAction
|
|
|
|
call CheckAPressOW
|
|
jr c, .Action
|
|
|
|
call CheckMenuOW
|
|
jr c, .Action
|
|
|
|
.NoAction
|
|
xor a
|
|
ret
|
|
|
|
.Action
|
|
push af
|
|
callba Function80422
|
|
pop af
|
|
scf
|
|
ret
|
|
; 96999
|
|
|
|
|
|
CheckAPressOW: ; 96999
|
|
ld a, [hJoyPressed]
|
|
and A_BUTTON
|
|
ret z
|
|
call TryObjectEvent
|
|
ret c
|
|
call TryReadSign
|
|
ret c
|
|
call CheckFacingTileEvent
|
|
ret c
|
|
xor a
|
|
ret
|
|
; 969ac
|
|
|
|
|
|
PlayTalkObject: ; 969ac
|
|
push de
|
|
ld de, SFX_READ_TEXT_2
|
|
call PlaySFX
|
|
pop de
|
|
ret
|
|
; 969b5
|
|
|
|
|
|
TryObjectEvent: ; 969b5
|
|
callba CheckFacingObject
|
|
jr c, .IsObject
|
|
xor a
|
|
ret
|
|
|
|
.IsObject
|
|
call PlayTalkObject
|
|
ld a, [hObjectStructIndexBuffer]
|
|
call GetObjectStruct
|
|
ld hl, OBJECT_MAP_OBJECT_INDEX
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld [hLastTalked], a
|
|
|
|
ld a, [hLastTalked]
|
|
call GetMapObject
|
|
ld hl, MAPOBJECT_COLOR
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and %00001111
|
|
|
|
; Bug: If IsInArray returns nc, data at bc will be executed as code.
|
|
push bc
|
|
ld de, 3
|
|
ld hl, .pointers
|
|
call IsInArray
|
|
jr nc, .nope_bugged
|
|
pop bc
|
|
|
|
inc hl
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
jp [hl]
|
|
|
|
.nope_bugged
|
|
xor a
|
|
ret
|
|
|
|
.pointers
|
|
dbw 0, .zero
|
|
dbw 1, .one
|
|
dbw 2, .two
|
|
dbw 3, .three
|
|
dbw 4, .four
|
|
dbw 5, .five
|
|
dbw 6, .six
|
|
db -1
|
|
; 96a04
|
|
|
|
.zero ; 96a04
|
|
ld hl, MAPOBJECT_SCRIPT_POINTER
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
call GetMapScriptHeaderBank
|
|
call CallScript
|
|
; ld a, -1
|
|
ret
|
|
; 96a12
|
|
|
|
.one ; 96a12
|
|
ld hl, MAPOBJECT_SCRIPT_POINTER
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
call GetMapScriptHeaderBank
|
|
ld de, EngineBuffer1
|
|
ld bc, 2
|
|
call FarCopyBytes
|
|
ld a, 3
|
|
scf
|
|
ret
|
|
; 96a29
|
|
|
|
.two ; 96a29
|
|
call Function3674
|
|
ld a, 2
|
|
scf
|
|
ret
|
|
; 96a30
|
|
|
|
.three ; 96a30
|
|
xor a
|
|
ret
|
|
; 96a32
|
|
|
|
.four ; 96a32
|
|
xor a
|
|
ret
|
|
; 96a34
|
|
|
|
.five ; 96a34
|
|
xor a
|
|
ret
|
|
; 96a36
|
|
|
|
.six ; 96a36
|
|
xor a
|
|
ret
|
|
; 96a38
|
|
|
|
|
|
TryReadSign: ; 96a38
|
|
call CheckFacingSign
|
|
jr c, .IsSign
|
|
xor a
|
|
ret
|
|
|
|
.IsSign
|
|
ld a, [wd040]
|
|
ld hl, .signs
|
|
rst JumpTable
|
|
ret
|
|
|
|
.signs
|
|
dw .read
|
|
dw .up
|
|
dw .down
|
|
dw .right
|
|
dw .left
|
|
dw .ifset
|
|
dw .ifnotset
|
|
dw .itemifset
|
|
dw .copy
|
|
; 96a59
|
|
|
|
.up
|
|
ld b, UP << 2
|
|
jr .checkdir
|
|
.down
|
|
ld b, DOWN << 2
|
|
jr .checkdir
|
|
.right
|
|
ld b, RIGHT << 2
|
|
jr .checkdir
|
|
.left
|
|
ld b, LEFT << 2
|
|
jr .checkdir
|
|
|
|
.checkdir
|
|
ld a, [PlayerDirection]
|
|
and %1100
|
|
cp b
|
|
jp nz, .dontread
|
|
|
|
.read
|
|
call PlayTalkObject
|
|
ld hl, wd041
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
call GetMapScriptHeaderBank
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
.itemifset
|
|
call CheckSignFlag
|
|
jp nz, .dontread
|
|
call PlayTalkObject
|
|
call GetMapScriptHeaderBank
|
|
ld de, EngineBuffer1
|
|
ld bc, 3
|
|
call FarCopyBytes
|
|
ld a, BANK(SignpostItemScript)
|
|
ld hl, SignpostItemScript
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
.copy
|
|
call CheckSignFlag
|
|
jr nz, .dontread
|
|
call GetMapScriptHeaderBank
|
|
ld de, EngineBuffer1
|
|
ld bc, 3
|
|
call FarCopyBytes
|
|
jr .dontread
|
|
|
|
.ifset
|
|
call CheckSignFlag
|
|
jr z, .dontread
|
|
jr .thenread
|
|
|
|
.ifnotset
|
|
call CheckSignFlag
|
|
jr nz, .dontread
|
|
|
|
.thenread
|
|
push hl
|
|
call PlayTalkObject
|
|
pop hl
|
|
rept 2
|
|
inc hl
|
|
endr
|
|
call GetMapScriptHeaderBank
|
|
call GetFarHalfword
|
|
call GetMapScriptHeaderBank
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
.dontread
|
|
xor a
|
|
ret
|
|
; 96ad8
|
|
|
|
|
|
CheckSignFlag: ; 96ad8
|
|
ld hl, wd041
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
push hl
|
|
call GetMapScriptHeaderBank
|
|
call GetFarHalfword
|
|
ld e, l
|
|
ld d, h
|
|
ld b, $2 ; check
|
|
call EventFlagAction
|
|
ld a, c
|
|
and a
|
|
pop hl
|
|
ret
|
|
; 96af0
|
|
|
|
|
|
PlayerMovement: ; 96af0
|
|
callba DoPlayerMovement
|
|
ld a, c
|
|
ld hl, .pointers
|
|
rst JumpTable
|
|
ld a, c
|
|
ret
|
|
; 96afd
|
|
|
|
.pointers
|
|
dw .zero
|
|
dw .one
|
|
dw .two
|
|
dw .three
|
|
dw .four
|
|
dw .five
|
|
dw .six
|
|
dw .seven
|
|
|
|
.zero
|
|
.four ; 96b0d
|
|
xor a
|
|
ld c, a
|
|
ret
|
|
; 96b10
|
|
|
|
.seven ; 96b10
|
|
call ret_968d7 ; mobile
|
|
xor a
|
|
ld c, a
|
|
ret
|
|
; 96b16
|
|
|
|
.one ; 96b16
|
|
ld a, 5
|
|
ld c, a
|
|
scf
|
|
ret
|
|
; 96b1b
|
|
|
|
.two ; 96b1b
|
|
ld a, 9
|
|
ld c, a
|
|
scf
|
|
ret
|
|
; 96b20
|
|
|
|
.three ; 96b20
|
|
; force the player to move in some direction
|
|
ld a, BANK(Script_ForcedMovement)
|
|
ld hl, Script_ForcedMovement
|
|
call CallScript
|
|
; ld a, -1
|
|
ld c, a
|
|
scf
|
|
ret
|
|
; 96b2b
|
|
|
|
.five
|
|
.six ; 96b2b
|
|
ld a, -1
|
|
ld c, a
|
|
and a
|
|
ret
|
|
; 96b30
|
|
|
|
|
|
CheckMenuOW: ; 96b30
|
|
xor a
|
|
ld [hMenuReturn], a
|
|
ld [$ffa1], a
|
|
ld a, [hJoyPressed]
|
|
|
|
bit 2, a ; SELECT
|
|
jr nz, .Select
|
|
|
|
bit 3, a ; START
|
|
jr z, .NoMenu
|
|
|
|
ld a, BANK(StartMenuScript)
|
|
ld hl, StartMenuScript
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
.NoMenu
|
|
xor a
|
|
ret
|
|
|
|
.Select
|
|
call PlayTalkObject
|
|
ld a, BANK(SelectMenuScript)
|
|
ld hl, SelectMenuScript
|
|
call CallScript
|
|
scf
|
|
ret
|
|
; 96b58
|
|
|
|
|
|
StartMenuScript: ; 96b58
|
|
callasm StartMenu
|
|
jump StartMenuCallback
|
|
; 96b5f
|
|
|
|
SelectMenuScript: ; 96b5f
|
|
callasm SelectMenu
|
|
jump SelectMenuCallback
|
|
; 96b66
|
|
|
|
StartMenuCallback:
|
|
SelectMenuCallback: ; 96b66
|
|
copybytetovar hMenuReturn
|
|
if_equal HMENURETURN_SCRIPT, .Script
|
|
if_equal HMENURETURN_ASM, .Asm
|
|
end
|
|
; 96b72
|
|
|
|
.Script ; 96b72
|
|
ptjump wQueuedScriptBank
|
|
; 96b75
|
|
|
|
.Asm ; 96b75
|
|
ptcallasm wQueuedScriptBank
|
|
end
|
|
; 96b79
|
|
|
|
|
|
CountStep: ; 96b79
|
|
; Don't count steps in link communication rooms.
|
|
ld a, [wLinkMode]
|
|
and a
|
|
jr nz, .done
|
|
|
|
; If there is a special phone call, don't count the step.
|
|
callba CheckSpecialPhoneCall
|
|
jr c, .doscript
|
|
|
|
; If Repel wore off, don't count the step.
|
|
call DoRepelStep
|
|
jr c, .doscript
|
|
|
|
; Count the step for poison and total steps
|
|
ld hl, PoisonStepCount
|
|
inc [hl]
|
|
ld hl, StepCount
|
|
inc [hl]
|
|
; Every 256 steps, increase the happiness of all your Pokemon.
|
|
jr nz, .skip_happiness
|
|
|
|
callba StepHappiness
|
|
|
|
.skip_happiness
|
|
; Every 256 steps, offset from the happiness incrementor by 128 steps,
|
|
; decrease the hatch counter of all your eggs until you reach the first
|
|
; one that is ready to hatch.
|
|
ld a, [StepCount]
|
|
cp $80
|
|
jr nz, .skip_egg
|
|
|
|
callba DoEggStep
|
|
jr nz, .hatch
|
|
|
|
.skip_egg
|
|
; Increase the EXP of (both) DayCare Pokemon by 1.
|
|
callba DaycareStep
|
|
|
|
; Every four steps, deal damage to all Poisoned Pokemon
|
|
ld hl, PoisonStepCount
|
|
ld a, [hl]
|
|
cp 4
|
|
jr c, .skip_poison
|
|
ld [hl], 0
|
|
|
|
callba DoPoisonStep
|
|
jr c, .doscript
|
|
|
|
.skip_poison
|
|
callba DoBikeStep
|
|
|
|
.done
|
|
xor a
|
|
ret
|
|
|
|
.doscript
|
|
ld a, -1
|
|
scf
|
|
ret
|
|
|
|
.hatch
|
|
ld a, 8
|
|
scf
|
|
ret
|
|
; 96bd3
|
|
|
|
|
|
.unreferenced: ; 96bd3
|
|
ld a, 7
|
|
scf
|
|
ret
|
|
; 96bd7
|
|
|
|
DoRepelStep: ; 96bd7
|
|
ld a, [wRepelEffect]
|
|
and a
|
|
ret z
|
|
|
|
dec a
|
|
ld [wRepelEffect], a
|
|
ret nz
|
|
|
|
ld a, BANK(RepelWoreOffScript)
|
|
ld hl, RepelWoreOffScript
|
|
call CallScript
|
|
scf
|
|
ret
|
|
; 96beb
|
|
|
|
DoPlayerEvent: ; 96beb
|
|
ld a, [ScriptRunning]
|
|
and a
|
|
ret z
|
|
cp -1 ; run script
|
|
ret z
|
|
cp 10
|
|
ret nc
|
|
|
|
ld c, a
|
|
ld b, 0
|
|
ld hl, ScriptPointers96c0c
|
|
rept 3
|
|
add hl,bc
|
|
endr
|
|
ld a, [hli]
|
|
ld [ScriptBank], a
|
|
ld a, [hli]
|
|
ld [ScriptPos], a
|
|
ld a, [hl]
|
|
ld [ScriptPos + 1], a
|
|
ret
|
|
; 96c0c
|
|
|
|
ScriptPointers96c0c: ; 96c0c
|
|
dba Invalid_0x96c2d
|
|
dba SeenByTrainerScript
|
|
dba TalkToTrainerScript
|
|
dba FindItemInBallScript
|
|
dba UnknownScript_0x96c4d
|
|
dba WarpToNewMapScript
|
|
dba FallIntoMapScript
|
|
dba UnknownScript_0x124c8
|
|
dba HatchEggScript
|
|
dba UnknownScript_0x96c4f
|
|
dba Invalid_0x96c2d
|
|
; 96c2d
|
|
|
|
Invalid_0x96c2d: ; 96c2d
|
|
end
|
|
; 96c2e
|
|
|
|
UnknownScript_0x96c2e: ; 96c2e
|
|
end
|
|
; 96c2f
|
|
|
|
HatchEggScript: ; 96c2f
|
|
callasm OverworldHatchEgg
|
|
end
|
|
; 96c34
|
|
|
|
WarpToNewMapScript: ; 96c34
|
|
warpsound
|
|
newloadmap MAPSETUP_05
|
|
end
|
|
; 96c38
|
|
|
|
FallIntoMapScript: ; 96c38
|
|
newloadmap MAPSETUP_06
|
|
playsound SFX_KINESIS
|
|
applymovement PLAYER, MovementData_0x96c48
|
|
playsound SFX_STRENGTH
|
|
scall LandAfterPitfallScript
|
|
end
|
|
; 96c48
|
|
|
|
MovementData_0x96c48: ; 96c48
|
|
skyfall
|
|
step_end
|
|
; 96c4a
|
|
|
|
LandAfterPitfallScript: ; 96c4a
|
|
earthquake 16
|
|
end
|
|
; 96c4d
|
|
|
|
UnknownScript_0x96c4d: ; 96c4d
|
|
reloadandreturn $f7
|
|
; 96c4f
|
|
|
|
UnknownScript_0x96c4f: ; 96c4f
|
|
deactivatefacing $3
|
|
callasm SetBit4_ScriptFlags3
|
|
end
|
|
; 96c56
|
|
|
|
INCLUDE "engine/scripting.asm"
|
|
INCLUDE "engine/events_2.asm"
|