pokecrystal-board/engine/overworld/events.asm

1112 lines
15 KiB
NASM
Raw Normal View History

2018-01-08 21:36:15 -08:00
INCLUDE "constants.asm"
SECTION "Events", ROMX
OverworldLoop:: ; 966b0
xor a
2018-01-23 14:39:09 -08:00
ld [wMapStatus], a
2013-12-27 02:56:23 -08:00
.loop
2018-01-23 14:39:09 -08:00
ld a, [wMapStatus]
2013-12-27 02:56:23 -08:00
ld hl, .jumps
rst JumpTable
2018-01-23 14:39:09 -08:00
ld a, [wMapStatus]
cp 3 ; done
2013-12-27 02:56:23 -08:00
jr nz, .loop
.done
ret
2013-12-27 02:56:23 -08:00
.jumps
dw StartMap
dw EnterMap
dw HandleMap
dw .done
; 966cb
DisableEvents: ; 966cb
xor a
2018-01-23 14:39:09 -08:00
ld [wScriptFlags3], a
ret
; 966d0
EnableEvents:: ; 966d0
ld a, $ff
2018-01-23 14:39:09 -08:00
ld [wScriptFlags3], a
ret
; 966d6
CheckBit5_ScriptFlags3: ; 966d6
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
bit 5, [hl]
ret
; 966dc
DisableWarpsConnxns: ; 966dc
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
res 2, [hl]
ret
; 966e2
DisableCoordEvents: ; 966e2
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
res 1, [hl]
ret
; 966e8
DisableStepCount: ; 966e8
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
res 0, [hl]
ret
; 966ee
DisableWildEncounters: ; 966ee
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
res 4, [hl]
ret
; 966f4
EnableWarpsConnxns: ; 966f4
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
set 2, [hl]
ret
; 966fa
EnableCoordEvents: ; 966fa
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
set 1, [hl]
ret
; 96700
EnableStepCount: ; 96700
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
set 0, [hl]
ret
; 96706
EnableWildEncounters: ; 96706
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
set 4, [hl]
ret
; 9670c
CheckWarpConnxnScriptFlag: ; 9670c
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
bit 2, [hl]
ret
; 96712
CheckCoordEventScriptFlag: ; 96712
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
bit 1, [hl]
ret
; 96718
CheckStepCountScriptFlag: ; 96718
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
bit 0, [hl]
ret
; 9671e
CheckWildEncountersScriptFlag: ; 9671e
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags3
bit 4, [hl]
ret
; 96724
2013-12-27 02:56:23 -08:00
StartMap: ; 96724
xor a
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
xor a
2018-01-23 14:39:09 -08:00
ld [wScriptRunning], a
ld hl, wMapStatus
ld bc, wMapStatusEnd - wMapStatus
call ByteFill
2017-12-24 09:47:30 -08:00
farcall InitCallReceiveDelay
call ClearJoypad
2013-12-27 02:56:23 -08:00
EnterMap: ; 9673e
xor a
2016-01-12 09:46:18 -08:00
ld [wXYComparePointer], a
ld [wXYComparePointer + 1], a
call SetUpFiveStepWildEncounterCooldown
2017-12-24 09:47:30 -08:00
farcall RunMapSetupScript
call DisableEvents
2013-12-27 02:56:23 -08:00
ld a, [hMapEntryMethod]
2015-11-11 20:38:57 -08:00
cp MAPSETUP_CONNECTION
jr nz, .dont_enable
call EnableEvents
.dont_enable
2013-12-27 02:56:23 -08:00
ld a, [hMapEntryMethod]
2015-10-24 16:49:19 -07:00
cp MAPSETUP_RELOADMAP
jr nz, .dontresetpoison
xor a
2018-01-23 14:39:09 -08:00
ld [wPoisonStepCount], a
.dontresetpoison
2013-12-27 02:56:23 -08:00
2015-10-24 16:49:19 -07:00
xor a ; end map entry
ld [hMapEntryMethod], a
2013-12-27 02:56:23 -08:00
ld a, 2 ; HandleMap
2018-01-23 14:39:09 -08:00
ld [wMapStatus], a
ret
; 9676d
2015-12-17 12:14:51 -08:00
UnusedWait30Frames: ; 9676d
ld c, 30
call DelayFrames
ret
; 96773
2013-12-27 02:56:23 -08:00
HandleMap: ; 96773
call ResetOverworldDelay
2015-12-17 12:14:51 -08:00
call HandleMapTimeAndJoypad
2017-12-24 09:47:30 -08:00
farcall HandleCmdQueue ; no need to farcall
2013-12-27 02:56:23 -08:00
call MapEvents
; Not immediately entering a connected map will cause problems.
2018-01-23 14:39:09 -08:00
ld a, [wMapStatus]
2013-12-27 02:56:23 -08:00
cp 2 ; HandleMap
ret nz
2013-12-27 02:56:23 -08:00
call HandleMapObjects
call NextOverworldFrame
call HandleMapBackground
call CheckPlayerState
ret
; 96795
2013-12-27 02:56:23 -08:00
MapEvents: ; 96795
2018-01-23 14:39:09 -08:00
ld a, [wMapEventStatus]
2013-12-27 02:56:23 -08:00
ld hl, .jumps
rst JumpTable
ret
2013-12-27 02:56:23 -08:00
.jumps
dw .events
dw .no_events
; 967a1
2013-12-27 02:56:23 -08:00
.events ; 967a1
call PlayerEvents
call DisableEvents
2017-12-24 09:47:30 -08:00
farcall ScriptEvents
ret
; 967ae
2013-12-27 02:56:23 -08:00
.no_events ; 967ae
ret
; 967af
MaxOverworldDelay: ; 967af
db 2
; 967b0
ResetOverworldDelay: ; 967b0
ld a, [MaxOverworldDelay]
2018-01-23 14:39:09 -08:00
ld [wOverworldDelay], a
ret
; 967b7
NextOverworldFrame: ; 967b7
2018-01-23 14:39:09 -08:00
ld a, [wOverworldDelay]
and a
ret z
ld c, a
call DelayFrames
ret
; 967c1
2015-12-17 12:14:51 -08:00
HandleMapTimeAndJoypad: ; 967c1
2018-01-23 14:39:09 -08:00
ld a, [wMapEventStatus]
2013-12-27 02:56:23 -08:00
cp 1 ; no events
ret z
2013-12-27 02:56:23 -08:00
call UpdateTime
call GetJoypad
call TimeOfDayPals
ret
; 967d1
HandleMapObjects: ; 967d1
2017-12-24 09:47:30 -08:00
farcall HandleNPCStep ; engine/map_objects.asm
farcall _HandlePlayerStep
call _CheckObjectEnteringVisibleRange
ret
; 967e1
HandleMapBackground: ; 967e1
2017-12-24 09:47:30 -08:00
farcall _UpdateSprites
farcall ScrollScreen
farcall PlaceMapNameSign
ret
; 967f4
CheckPlayerState: ; 967f4
ld a, [wPlayerStepFlags]
bit 5, a ; in the middle of step
jr z, .events
bit 6, a ; stopping step
jr z, .noevents
bit 4, a ; in midair
jr nz, .noevents
call EnableEvents
.events
2013-12-27 02:56:23 -08:00
ld a, 0 ; events
2018-01-23 14:39:09 -08:00
ld [wMapEventStatus], a
ret
.noevents
2013-12-27 02:56:23 -08:00
ld a, 1 ; no events
2018-01-23 14:39:09 -08:00
ld [wMapEventStatus], a
ret
; 96812
_CheckObjectEnteringVisibleRange: ; 96812
ld hl, wPlayerStepFlags
bit 6, [hl]
ret z
2017-12-24 09:47:30 -08:00
farcall CheckObjectEnteringVisibleRange
ret
; 9681f
PlayerEvents: ; 9681f
xor a
2015-10-24 07:34:19 -07:00
; If there's already a player event, don't interrupt it.
2018-01-23 14:39:09 -08:00
ld a, [wScriptRunning]
and a
ret nz
2015-10-24 07:34:19 -07:00
call Dummy_CheckScriptFlags3Bit5 ; This is a waste of time
call CheckTrainerBattle3
jr c, .ok
call CheckTileEvent
jr c, .ok
2015-10-24 07:34:19 -07:00
call RunMemScript
jr c, .ok
call RunSceneScript
jr c, .ok
2015-10-24 07:34:19 -07:00
call CheckTimeEvents
jr c, .ok
call OWPlayerInput
jr c, .ok
xor a
ret
.ok
push af
2017-12-24 09:47:30 -08:00
farcall EnableScriptMode
pop af
2018-01-23 14:39:09 -08:00
ld [wScriptRunning], a
2015-10-24 16:49:19 -07:00
call DoPlayerEvent
2018-01-23 14:39:09 -08:00
ld a, [wScriptRunning]
2015-11-11 20:38:57 -08:00
cp PLAYEREVENT_CONNECTION
jr z, .ok2
2015-11-11 20:38:57 -08:00
cp PLAYEREVENT_JOYCHANGEFACING
jr z, .ok2
xor a
ld [wLandmarkSignTimer], a
.ok2
scf
ret
; 96867
CheckTrainerBattle3: ; 96867
nop
nop
call CheckTrainerBattle2
jr nc, .nope
2013-12-27 02:56:23 -08:00
2015-11-12 08:10:19 -08:00
ld a, PLAYEREVENT_SEENBYTRAINER
scf
ret
.nope
xor a
ret
; 96874
CheckTileEvent: ; 96874
; Check for warps, coord events, or wild battles.
call CheckWarpConnxnScriptFlag
jr z, .connections_disabled
2017-12-24 09:47:30 -08:00
farcall CheckMovingOffEdgeOfMap
2015-11-12 08:10:19 -08:00
jr c, .map_connection
2015-10-24 16:49:19 -07:00
call CheckWarpTile
2015-11-12 08:10:19 -08:00
jr c, .warp_tile
.connections_disabled
call CheckCoordEventScriptFlag
jr z, .coord_events_disabled
call CheckCurrentMapCoordEvents
jr c, .coord_event
.coord_events_disabled
call CheckStepCountScriptFlag
jr z, .step_count_disabled
call CountStep
ret c
.step_count_disabled
call CheckWildEncountersScriptFlag
jr z, .ok
call RandomEncounter
ret c
jr .ok ; pointless
.ok
xor a
ret
2015-11-12 08:10:19 -08:00
.map_connection
ld a, PLAYEREVENT_CONNECTION
scf
ret
2015-11-12 08:10:19 -08:00
.warp_tile
2018-01-23 14:39:09 -08:00
ld a, [wPlayerStandingTile]
call CheckPitTile
2015-11-12 08:10:19 -08:00
jr nz, .not_pit
ld a, PLAYEREVENT_FALL
scf
ret
2015-11-12 08:10:19 -08:00
.not_pit
ld a, PLAYEREVENT_WARP
scf
ret
.coord_event
2016-01-06 04:44:50 -08:00
ld hl, wCurCoordEventScriptAddr
ld a, [hli]
ld h, [hl]
ld l, a
call GetMapScriptsBank
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
2015-10-24 16:49:19 -07:00
ret_968d7: ; 968d7
ret
;968d8
SetMinTwoStepWildEncounterCooldown: ; 968d8
ld a, [wWildEncounterCooldown]
cp 2
ret nc
ld a, 2
ld [wWildEncounterCooldown], a
ret
; 968e4
2015-10-24 07:34:19 -07:00
Dummy_CheckScriptFlags3Bit5: ; 968e4
call CheckBit5_ScriptFlags3
ret z
2015-10-24 07:34:19 -07:00
call ret_2f3e
ret
; 968ec
RunSceneScript: ; 968ec
ld a, [wCurrMapSceneScriptCount]
and a
jr z, .nope
ld c, a
call CheckScenes
cp c
jr nc, .nope
ld e, a
ld d, 0
ld hl, wCurrMapSceneScriptsPointer
ld a, [hli]
ld h, [hl]
ld l, a
rept 4
2016-01-10 14:44:09 -08:00
add hl, de
endr
call GetMapScriptsBank
call GetFarHalfword
call GetMapScriptsBank
call CallScript
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags
res 3, [hl]
2017-12-24 09:47:30 -08:00
farcall EnableScriptMode
farcall ScriptEvents
2018-01-23 14:39:09 -08:00
ld hl, wScriptFlags
bit 3, [hl]
jr z, .nope
ld hl, wPriorityScriptAddr
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wPriorityScriptBank]
call CallScript
scf
ret
.nope
xor a
ret
; 9693a
2015-10-24 07:34:19 -07:00
CheckTimeEvents: ; 9693a
ld a, [wLinkMode]
and a
2014-07-24 20:19:56 -07:00
jr nz, .nothing
ld hl, wStatusFlags2
2018-01-22 12:40:43 -08:00
bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
2015-10-24 07:34:19 -07:00
jr z, .do_daily
2014-07-24 20:19:56 -07:00
2017-12-24 09:47:30 -08:00
farcall CheckBugContestTimer
2015-10-24 07:34:19 -07:00
jr c, .end_bug_contest
xor a
ret
2015-10-24 07:34:19 -07:00
.do_daily
2017-12-24 09:47:30 -08:00
farcall CheckDailyResetTimer
farcall CheckPokerusTick
farcall CheckPhoneCall
ret c
2014-07-24 20:19:56 -07:00
.nothing
xor a
ret
2015-10-24 07:34:19 -07:00
.end_bug_contest
ld a, BANK(BugCatchingContestOverScript)
ld hl, BugCatchingContestOverScript
call CallScript
scf
ret
; 96970
2015-10-24 07:34:19 -07:00
.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.
2017-12-24 09:47:30 -08:00
farcall CheckStandingOnIce
jr c, .NoAction
call CheckAPressOW
jr c, .Action
call CheckMenuOW
jr c, .Action
.NoAction:
xor a
ret
.Action:
push af
2017-12-24 09:47:30 -08:00
farcall StopPlayerForEvent
pop af
scf
ret
; 96999
CheckAPressOW: ; 96999
ld a, [hJoyPressed]
and A_BUTTON
ret z
call TryObjectEvent
ret c
call TryBGEvent
ret c
call TryTileCollisionEvent
ret c
xor a
ret
; 969ac
PlayTalkObject: ; 969ac
push de
ld de, SFX_READ_TEXT_2
call PlaySFX
pop de
ret
; 969b5
TryObjectEvent: ; 969b5
2017-12-24 09:47:30 -08:00
farcall CheckFacingObject
jr c, .IsObject
xor a
ret
.IsObject:
call PlayTalkObject
2015-11-02 08:15:32 -08:00
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
; pop bc
xor a
ret
.pointers
dbw OBJECTTYPE_SCRIPT, .script
dbw OBJECTTYPE_ITEMBALL, .itemball
dbw OBJECTTYPE_TRAINER, .trainer
; the remaining four are dummy events
dbw OBJECTTYPE_3, .three
dbw OBJECTTYPE_4, .four
dbw OBJECTTYPE_5, .five
dbw OBJECTTYPE_6, .six
db -1
; 96a04
.script ; 96a04
ld hl, MAPOBJECT_SCRIPT_POINTER
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
call GetMapScriptsBank
call CallScript
ret
; 96a12
2015-12-15 07:55:56 -08:00
.itemball ; 96a12
ld hl, MAPOBJECT_SCRIPT_POINTER
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
call GetMapScriptsBank
2018-01-23 14:39:09 -08:00
ld de, wEngineBuffer1
ld bc, 2
call FarCopyBytes
ld a, PLAYEREVENT_ITEMBALL
scf
ret
; 96a29
.trainer ; 96a29
call TalkToTrainer
ld a, PLAYEREVENT_TALKTOTRAINER
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
TryBGEvent: ; 96a38
call CheckFacingBGEvent
jr c, .is_bg_event
xor a
ret
.is_bg_event:
2018-01-23 14:39:09 -08:00
ld a, [wEngineBuffer3]
ld hl, .bg_events
rst JumpTable
ret
.bg_events
dw .read
dw .up
dw .down
dw .right
dw .left
dw .ifset
dw .ifnotset
dw .itemifset
dw .copy
; 96a59
.up
ld b, OW_UP
jr .checkdir
.down
ld b, OW_DOWN
jr .checkdir
.right
ld b, OW_RIGHT
jr .checkdir
.left
ld b, OW_LEFT
jr .checkdir
.checkdir
2018-01-23 14:39:09 -08:00
ld a, [wPlayerDirection]
and %1100
cp b
jp nz, .dontread
.read
call PlayTalkObject
2018-01-23 14:39:09 -08:00
ld hl, wEngineBuffer4
ld a, [hli]
ld h, [hl]
ld l, a
call GetMapScriptsBank
call CallScript
scf
ret
.itemifset
call CheckBGEventFlag
jp nz, .dontread
call PlayTalkObject
call GetMapScriptsBank
2018-01-23 14:39:09 -08:00
ld de, wEngineBuffer1
ld bc, 3
call FarCopyBytes
ld a, BANK(HiddenItemScript)
ld hl, HiddenItemScript
call CallScript
scf
ret
.copy
call CheckBGEventFlag
jr nz, .dontread
call GetMapScriptsBank
2018-01-23 14:39:09 -08:00
ld de, wEngineBuffer1
ld bc, 3
call FarCopyBytes
jr .dontread
.ifset
call CheckBGEventFlag
jr z, .dontread
jr .thenread
.ifnotset
call CheckBGEventFlag
jr nz, .dontread
.thenread
push hl
call PlayTalkObject
pop hl
inc hl
2015-12-26 18:59:03 -08:00
inc hl
call GetMapScriptsBank
call GetFarHalfword
call GetMapScriptsBank
call CallScript
scf
ret
.dontread
xor a
ret
; 96ad8
CheckBGEventFlag: ; 96ad8
2018-01-23 14:39:09 -08:00
ld hl, wEngineBuffer4
ld a, [hli]
ld h, [hl]
ld l, a
push hl
call GetMapScriptsBank
call GetFarHalfword
ld e, l
ld d, h
2015-11-12 08:10:19 -08:00
ld b, CHECK_FLAG
call EventFlagAction
ld a, c
and a
pop hl
ret
; 96af0
PlayerMovement: ; 96af0
2017-12-24 09:47:30 -08:00
farcall 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
2015-10-24 16:49:19 -07:00
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
2015-10-24 07:34:19 -07:00
ld [hMenuReturn], a
ld [hMenuReturn + 1], a
ld a, [hJoyPressed]
2017-12-30 09:35:50 -08:00
bit SELECT_F, a
jr nz, .Select
2017-12-30 09:35:50 -08:00
bit START_F, a
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
2015-01-20 00:01:23 -08:00
callasm StartMenu
jump StartMenuCallback
; 96b5f
SelectMenuScript: ; 96b5f
2015-01-20 00:01:23 -08:00
callasm SelectMenu
jump SelectMenuCallback
; 96b66
StartMenuCallback:
SelectMenuCallback: ; 96b66
2015-10-24 07:34:19 -07:00
copybytetovar hMenuReturn
2018-02-02 18:09:17 -08:00
ifequal HMENURETURN_SCRIPT, .Script
ifequal HMENURETURN_ASM, .Asm
end
; 96b72
.Script: ; 96b72
2015-11-01 09:44:30 -08:00
ptjump wQueuedScriptBank
; 96b75
.Asm: ; 96b75
2015-11-01 09:44:30 -08:00
ptcallasm wQueuedScriptBank
end
; 96b79
CountStep: ; 96b79
2015-10-24 07:34:19 -07:00
; Don't count steps in link communication rooms.
ld a, [wLinkMode]
and a
jr nz, .done
2015-10-24 07:34:19 -07:00
; If there is a special phone call, don't count the step.
2017-12-24 09:47:30 -08:00
farcall CheckSpecialPhoneCall
2015-10-24 07:34:19 -07:00
jr c, .doscript
2015-10-24 07:34:19 -07:00
; If Repel wore off, don't count the step.
call DoRepelStep
jr c, .doscript
2015-10-24 07:34:19 -07:00
; Count the step for poison and total steps
2018-01-23 14:39:09 -08:00
ld hl, wPoisonStepCount
inc [hl]
2018-01-23 14:39:09 -08:00
ld hl, wStepCount
inc [hl]
2015-10-24 07:34:19 -07:00
; Every 256 steps, increase the happiness of all your Pokemon.
jr nz, .skip_happiness
2017-12-24 09:47:30 -08:00
farcall StepHappiness
2015-10-24 07:34:19 -07:00
.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.
2018-01-23 14:39:09 -08:00
ld a, [wStepCount]
cp $80
2015-10-24 07:34:19 -07:00
jr nz, .skip_egg
2017-12-24 09:47:30 -08:00
farcall DoEggStep
2015-10-24 07:34:19 -07:00
jr nz, .hatch
2015-10-24 07:34:19 -07:00
.skip_egg
; Increase the EXP of (both) DayCare Pokemon by 1.
2017-12-24 09:47:30 -08:00
farcall DayCareStep
2015-10-24 07:34:19 -07:00
; Every four steps, deal damage to all Poisoned Pokemon
2018-01-23 14:39:09 -08:00
ld hl, wPoisonStepCount
ld a, [hl]
cp 4
2015-10-24 07:34:19 -07:00
jr c, .skip_poison
ld [hl], 0
2017-12-24 09:47:30 -08:00
farcall DoPoisonStep
2015-10-24 07:34:19 -07:00
jr c, .doscript
2015-10-24 07:34:19 -07:00
.skip_poison
2017-12-24 09:47:30 -08:00
farcall DoBikeStep
.done
xor a
ret
2015-10-24 07:34:19 -07:00
.doscript
ld a, -1
scf
ret
2015-10-24 07:34:19 -07:00
.hatch
ld a, 8
scf
ret
; 96bd3
; unused
.unreferenced ; 96bd3
ld a, 7
scf
ret
; 96bd7
2015-10-24 07:34:19 -07:00
DoRepelStep: ; 96bd7
ld a, [wRepelEffect]
and a
ret z
2015-09-09 16:27:07 -07:00
dec a
2015-10-24 07:34:19 -07:00
ld [wRepelEffect], a
ret nz
2015-09-09 16:27:07 -07:00
ld a, BANK(RepelWoreOffScript)
ld hl, RepelWoreOffScript
call CallScript
scf
ret
; 96beb
2015-10-24 16:49:19 -07:00
DoPlayerEvent: ; 96beb
2018-01-23 14:39:09 -08:00
ld a, [wScriptRunning]
and a
ret z
2015-11-11 20:38:57 -08:00
2015-11-05 12:08:00 -08:00
cp PLAYEREVENT_MAPSCRIPT ; run script
ret z
2015-11-11 20:38:57 -08:00
2015-11-05 12:08:00 -08:00
cp NUM_PLAYER_EVENTS
ret nc
ld c, a
ld b, 0
2015-11-05 12:08:00 -08:00
ld hl, PlayerEventScriptPointers
2016-01-10 14:44:09 -08:00
add hl, bc
add hl, bc
add hl, bc
ld a, [hli]
2018-01-23 14:39:09 -08:00
ld [wScriptBank], a
ld a, [hli]
2018-01-23 14:39:09 -08:00
ld [wScriptPos], a
ld a, [hl]
2018-01-23 14:39:09 -08:00
ld [wScriptPos + 1], a
ret
; 96c0c
2015-11-05 12:08:00 -08:00
PlayerEventScriptPointers: ; 96c0c
2015-11-11 20:38:57 -08:00
dba Invalid_0x96c2d ; 0
dba SeenByTrainerScript ; 1
dba TalkToTrainerScript ; 2
dba FindItemInBallScript ; 3
dba EdgeWarpScript ; 4
2015-11-11 20:38:57 -08:00
dba WarpToNewMapScript ; 5
dba FallIntoMapScript ; 6
dba Script_OverworldWhiteout ; 7
dba HatchEggScript ; 8
dba ChangeDirectionScript ; 9
2015-11-11 20:38:57 -08:00
dba Invalid_0x96c2d ; 10
; 96c2d
Invalid_0x96c2d: ; 96c2d
end
; 96c2e
2018-01-02 07:04:21 -08:00
; unused
end
; 96c2f
HatchEggScript: ; 96c2f
callasm OverworldHatchEgg
end
; 96c34
WarpToNewMapScript: ; 96c34
warpsound
2015-11-11 20:38:57 -08:00
newloadmap MAPSETUP_DOOR
end
; 96c38
FallIntoMapScript: ; 96c38
2015-11-11 20:38:57 -08:00
newloadmap MAPSETUP_FALL
playsound SFX_KINESIS
applymovement PLAYER, MovementData_0x96c48
playsound SFX_STRENGTH
2015-10-24 16:49:19 -07:00
scall LandAfterPitfallScript
end
; 96c48
MovementData_0x96c48: ; 96c48
skyfall
step_end
; 96c4a
2015-10-24 16:49:19 -07:00
LandAfterPitfallScript: ; 96c4a
earthquake 16
end
; 96c4d
EdgeWarpScript: ; 4
2015-11-11 20:38:57 -08:00
reloadandreturn MAPSETUP_CONNECTION
; 96c4f
ChangeDirectionScript: ; 9
deactivatefacing 3
callasm EnableWildEncounters
end
; 96c56
INCLUDE "engine/overworld/scripting.asm"
2018-01-11 20:50:44 -08:00
INCLUDE "engine/overworld/events_2.asm"