mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-01-23 09:16:20 -08:00
Merge events_2.asm with events.asm
(events_2.asm was only separate because scripting.asm intervenes; but other files have a similar "code / INCLUDE self-contained code / more code" structure to this)
This commit is contained in:
parent
67152eab98
commit
00c2dba157
@ -1025,4 +1025,614 @@ ChangeDirectionScript: ; 9
|
||||
|
||||
INCLUDE "engine/overworld/scripting.asm"
|
||||
|
||||
INCLUDE "engine/overworld/events_2.asm"
|
||||
WarpToSpawnPoint::
|
||||
ld hl, wStatusFlags2
|
||||
res STATUSFLAGS2_SAFARI_GAME_F, [hl]
|
||||
res STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
|
||||
ret
|
||||
|
||||
RunMemScript::
|
||||
; If there is no script here, we don't need to be here.
|
||||
ld a, [wMapReentryScriptQueueFlag]
|
||||
and a
|
||||
ret z
|
||||
; Execute the script at (wMapReentryScriptBank):(wMapReentryScriptAddress).
|
||||
ld hl, wMapReentryScriptAddress
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ld a, [wMapReentryScriptBank]
|
||||
call CallScript
|
||||
scf
|
||||
; Clear the buffer for the next script.
|
||||
push af
|
||||
xor a
|
||||
ld hl, wMapReentryScriptQueueFlag
|
||||
ld bc, 8
|
||||
call ByteFill
|
||||
pop af
|
||||
ret
|
||||
|
||||
LoadScriptBDE::
|
||||
; If there's already a script here, don't overwrite.
|
||||
ld hl, wMapReentryScriptQueueFlag
|
||||
ld a, [hl]
|
||||
and a
|
||||
ret nz
|
||||
; Set the flag
|
||||
ld [hl], 1
|
||||
inc hl
|
||||
; Load the script pointer b:de into (wMapReentryScriptBank):(wMapReentryScriptAddress)
|
||||
ld [hl], b
|
||||
inc hl
|
||||
ld [hl], e
|
||||
inc hl
|
||||
ld [hl], d
|
||||
scf
|
||||
ret
|
||||
|
||||
TryTileCollisionEvent::
|
||||
call GetFacingTileCoord
|
||||
ld [wEngineBuffer1], a
|
||||
ld c, a
|
||||
farcall CheckFacingTileForStdScript
|
||||
jr c, .done
|
||||
|
||||
call CheckCutTreeTile
|
||||
jr nz, .whirlpool
|
||||
farcall TryCutOW
|
||||
jr .done
|
||||
|
||||
.whirlpool
|
||||
ld a, [wEngineBuffer1]
|
||||
call CheckWhirlpoolTile
|
||||
jr nz, .waterfall
|
||||
farcall TryWhirlpoolOW
|
||||
jr .done
|
||||
|
||||
.waterfall
|
||||
ld a, [wEngineBuffer1]
|
||||
call CheckWaterfallTile
|
||||
jr nz, .headbutt
|
||||
farcall TryWaterfallOW
|
||||
jr .done
|
||||
|
||||
.headbutt
|
||||
ld a, [wEngineBuffer1]
|
||||
call CheckHeadbuttTreeTile
|
||||
jr nz, .surf
|
||||
farcall TryHeadbuttOW
|
||||
jr c, .done
|
||||
jr .noevent
|
||||
|
||||
.surf
|
||||
farcall TrySurfOW
|
||||
jr nc, .noevent
|
||||
jr .done
|
||||
|
||||
.noevent
|
||||
xor a
|
||||
ret
|
||||
|
||||
.done
|
||||
call PlayClickSFX
|
||||
ld a, $ff
|
||||
scf
|
||||
ret
|
||||
|
||||
RandomEncounter::
|
||||
; Random encounter
|
||||
|
||||
call CheckWildEncounterCooldown
|
||||
jr c, .nope
|
||||
call CanUseSweetScent
|
||||
jr nc, .nope
|
||||
ld hl, wStatusFlags2
|
||||
bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
|
||||
jr nz, .bug_contest
|
||||
farcall TryWildEncounter
|
||||
jr nz, .nope
|
||||
jr .ok
|
||||
|
||||
.bug_contest
|
||||
call _TryWildEncounter_BugContest
|
||||
jr nc, .nope
|
||||
jr .ok_bug_contest
|
||||
|
||||
.nope
|
||||
ld a, 1
|
||||
and a
|
||||
ret
|
||||
|
||||
.ok
|
||||
ld a, BANK(WildBattleScript)
|
||||
ld hl, WildBattleScript
|
||||
jr .done
|
||||
|
||||
.ok_bug_contest
|
||||
ld a, BANK(BugCatchingContestBattleScript)
|
||||
ld hl, BugCatchingContestBattleScript
|
||||
jr .done
|
||||
|
||||
.done
|
||||
call CallScript
|
||||
scf
|
||||
ret
|
||||
|
||||
WildBattleScript:
|
||||
randomwildmon
|
||||
startbattle
|
||||
reloadmapafterbattle
|
||||
end
|
||||
|
||||
CanUseSweetScent::
|
||||
ld hl, wStatusFlags
|
||||
bit STATUSFLAGS_NO_WILD_ENCOUNTERS_F, [hl]
|
||||
jr nz, .no
|
||||
ld a, [wEnvironment]
|
||||
cp CAVE
|
||||
jr z, .ice_check
|
||||
cp DUNGEON
|
||||
jr z, .ice_check
|
||||
farcall CheckGrassCollision
|
||||
jr nc, .no
|
||||
|
||||
.ice_check
|
||||
ld a, [wPlayerStandingTile]
|
||||
call CheckIceTile
|
||||
jr z, .no
|
||||
scf
|
||||
ret
|
||||
|
||||
.no
|
||||
and a
|
||||
ret
|
||||
|
||||
_TryWildEncounter_BugContest:
|
||||
call TryWildEncounter_BugContest
|
||||
ret nc
|
||||
call ChooseWildEncounter_BugContest
|
||||
farcall CheckRepelEffect
|
||||
ret
|
||||
|
||||
ChooseWildEncounter_BugContest::
|
||||
; Pick a random mon out of ContestMons.
|
||||
|
||||
.loop
|
||||
call Random
|
||||
cp 100 << 1
|
||||
jr nc, .loop
|
||||
srl a
|
||||
|
||||
ld hl, ContestMons
|
||||
ld de, 4
|
||||
.CheckMon:
|
||||
sub [hl]
|
||||
jr c, .GotMon
|
||||
add hl, de
|
||||
jr .CheckMon
|
||||
|
||||
.GotMon:
|
||||
inc hl
|
||||
|
||||
; Species
|
||||
ld a, [hli]
|
||||
ld [wTempWildMonSpecies], a
|
||||
|
||||
; Min level
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
|
||||
; Max level
|
||||
ld a, [hl]
|
||||
|
||||
sub d
|
||||
jr nz, .RandomLevel
|
||||
|
||||
; If min and max are the same.
|
||||
ld a, d
|
||||
jr .GotLevel
|
||||
|
||||
.RandomLevel:
|
||||
; Get a random level between the min and max.
|
||||
ld c, a
|
||||
inc c
|
||||
call Random
|
||||
ld a, [hRandomAdd]
|
||||
call SimpleDivide
|
||||
add d
|
||||
|
||||
.GotLevel:
|
||||
ld [wCurPartyLevel], a
|
||||
|
||||
xor a
|
||||
ret
|
||||
|
||||
TryWildEncounter_BugContest:
|
||||
ld a, [wPlayerStandingTile]
|
||||
call CheckSuperTallGrassTile
|
||||
ld b, 40 percent
|
||||
jr z, .ok
|
||||
ld b, 20 percent
|
||||
|
||||
.ok
|
||||
farcall ApplyMusicEffectOnEncounterRate
|
||||
farcall ApplyCleanseTagEffectOnEncounterRate
|
||||
call Random
|
||||
ld a, [hRandomAdd]
|
||||
cp b
|
||||
ret c
|
||||
ld a, 1
|
||||
and a
|
||||
ret
|
||||
|
||||
INCLUDE "data/wild/bug_contest_mons.asm"
|
||||
|
||||
DoBikeStep::
|
||||
nop
|
||||
nop
|
||||
; If the bike shop owner doesn't have our number, or
|
||||
; if we've already gotten the call, we don't have to
|
||||
; be here.
|
||||
ld hl, wStatusFlags2
|
||||
bit STATUSFLAGS2_BIKE_SHOP_CALL_F, [hl]
|
||||
jr z, .NoCall
|
||||
|
||||
; If we're not on the bike, we don't have to be here.
|
||||
ld a, [wPlayerState]
|
||||
cp PLAYER_BIKE
|
||||
jr nz, .NoCall
|
||||
|
||||
; If we're not in an area of phone service, we don't
|
||||
; have to be here.
|
||||
call GetMapPhoneService
|
||||
and a
|
||||
jr nz, .NoCall
|
||||
|
||||
; Check the bike step count and check whether we've
|
||||
; taken 65536 of them yet.
|
||||
ld hl, wBikeStep
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
ld e, [hl]
|
||||
cp 255
|
||||
jr nz, .increment
|
||||
ld a, e
|
||||
cp 255
|
||||
jr z, .dont_increment
|
||||
|
||||
.increment
|
||||
inc de
|
||||
ld [hl], e
|
||||
dec hl
|
||||
ld [hl], d
|
||||
|
||||
.dont_increment
|
||||
; If we've taken at least 1024 steps, have the bike
|
||||
; shop owner try to call us.
|
||||
ld a, d
|
||||
cp HIGH(1024)
|
||||
jr c, .NoCall
|
||||
|
||||
; If a call has already been queued, don't overwrite
|
||||
; that call.
|
||||
ld a, [wSpecialPhoneCallID]
|
||||
and a
|
||||
jr nz, .NoCall
|
||||
|
||||
; Queue the call.
|
||||
ld a, SPECIALCALL_BIKESHOP
|
||||
ld [wSpecialPhoneCallID], a
|
||||
xor a
|
||||
ld [wSpecialPhoneCallID + 1], a
|
||||
ld hl, wStatusFlags2
|
||||
res STATUSFLAGS2_BIKE_SHOP_CALL_F, [hl]
|
||||
scf
|
||||
ret
|
||||
|
||||
.NoCall:
|
||||
xor a
|
||||
ret
|
||||
|
||||
ClearCmdQueue::
|
||||
ld hl, wCmdQueue
|
||||
ld de, 6
|
||||
ld c, 4
|
||||
xor a
|
||||
.loop
|
||||
ld [hl], a
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
HandleCmdQueue::
|
||||
ld hl, wCmdQueue
|
||||
xor a
|
||||
.loop
|
||||
ld [hMapObjectIndexBuffer], a
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .skip
|
||||
push hl
|
||||
ld b, h
|
||||
ld c, l
|
||||
call HandleQueuedCommand
|
||||
pop hl
|
||||
|
||||
.skip
|
||||
ld de, CMDQUEUE_ENTRY_SIZE
|
||||
add hl, de
|
||||
ld a, [hMapObjectIndexBuffer]
|
||||
inc a
|
||||
cp CMDQUEUE_CAPACITY
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
Unreferenced_GetNthCmdQueueEntry:
|
||||
ld hl, wCmdQueue
|
||||
ld bc, CMDQUEUE_ENTRY_SIZE
|
||||
call AddNTimes
|
||||
ld b, h
|
||||
ld c, l
|
||||
ret
|
||||
|
||||
WriteCmdQueue::
|
||||
push bc
|
||||
push de
|
||||
call .GetNextEmptyEntry
|
||||
ld d, h
|
||||
ld e, l
|
||||
pop hl
|
||||
pop bc
|
||||
ret c
|
||||
ld a, b
|
||||
ld bc, CMDQUEUE_ENTRY_SIZE - 1
|
||||
call FarCopyBytes
|
||||
xor a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.GetNextEmptyEntry:
|
||||
ld hl, wCmdQueue
|
||||
ld de, CMDQUEUE_ENTRY_SIZE
|
||||
ld c, CMDQUEUE_CAPACITY
|
||||
.loop
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .done
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .loop
|
||||
scf
|
||||
ret
|
||||
|
||||
.done
|
||||
ld a, CMDQUEUE_CAPACITY
|
||||
sub c
|
||||
and a
|
||||
ret
|
||||
|
||||
DelCmdQueue::
|
||||
ld hl, wCmdQueue
|
||||
ld de, CMDQUEUE_ENTRY_SIZE
|
||||
ld c, CMDQUEUE_CAPACITY
|
||||
.loop
|
||||
ld a, [hl]
|
||||
cp b
|
||||
jr z, .done
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .loop
|
||||
and a
|
||||
ret
|
||||
|
||||
.done
|
||||
xor a
|
||||
ld [hl], a
|
||||
scf
|
||||
ret
|
||||
|
||||
_DelCmdQueue:
|
||||
ld hl, CMDQUEUE_TYPE
|
||||
add hl, bc
|
||||
ld [hl], 0
|
||||
ret
|
||||
|
||||
HandleQueuedCommand:
|
||||
ld hl, CMDQUEUE_TYPE
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp 5
|
||||
jr c, .okay
|
||||
xor a
|
||||
|
||||
.okay
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, .Jumptable
|
||||
add hl, de
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
push af
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
pop af
|
||||
rst FarCall
|
||||
ret
|
||||
|
||||
.Jumptable:
|
||||
dba CmdQueue_Null
|
||||
dba CmdQueue_Null2
|
||||
dba CmdQueue_StoneTable
|
||||
dba CmdQueue_Type3
|
||||
dba CmdQueue_Type4
|
||||
|
||||
CmdQueueAnonymousJumptable:
|
||||
ld hl, CMDQUEUE_05
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
pop hl
|
||||
rst JumpTable
|
||||
ret
|
||||
|
||||
CmdQueueAnonJT_Increment:
|
||||
ld hl, CMDQUEUE_05
|
||||
add hl, bc
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
CmdQueueAnonJT_Decrement:
|
||||
ld hl, CMDQUEUE_05
|
||||
add hl, bc
|
||||
dec [hl]
|
||||
ret
|
||||
|
||||
CmdQueue_Null:
|
||||
ret
|
||||
|
||||
CmdQueue_Null2:
|
||||
call ret_2f3e
|
||||
ret
|
||||
|
||||
CmdQueue_Type4:
|
||||
call CmdQueueAnonymousJumptable
|
||||
; anonymous dw
|
||||
dw .zero
|
||||
dw .one
|
||||
|
||||
.zero
|
||||
ld a, [hSCY]
|
||||
ld hl, 4
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
call CmdQueueAnonJT_Increment
|
||||
.one
|
||||
ld hl, 1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
dec a
|
||||
ld [hl], a
|
||||
jr z, .finish
|
||||
and $1
|
||||
jr z, .add
|
||||
ld hl, 2
|
||||
add hl, bc
|
||||
ld a, [hSCY]
|
||||
sub [hl]
|
||||
ld [hSCY], a
|
||||
ret
|
||||
|
||||
.add
|
||||
ld hl, 2
|
||||
add hl, bc
|
||||
ld a, [hSCY]
|
||||
add [hl]
|
||||
ld [hSCY], a
|
||||
ret
|
||||
|
||||
.finish
|
||||
ld hl, 4
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [hSCY], a
|
||||
call _DelCmdQueue
|
||||
ret
|
||||
|
||||
CmdQueue_Type3:
|
||||
call CmdQueueAnonymousJumptable
|
||||
; anonymous dw
|
||||
dw .zero
|
||||
dw .one
|
||||
dw .two
|
||||
|
||||
.zero
|
||||
call .IsPlayerFacingDown
|
||||
jr z, .PlayerNotFacingDown
|
||||
call CmdQueueAnonJT_Increment
|
||||
.one
|
||||
call .IsPlayerFacingDown
|
||||
jr z, .PlayerNotFacingDown
|
||||
call CmdQueueAnonJT_Increment
|
||||
|
||||
ld hl, 2
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [wd173], a
|
||||
ret
|
||||
|
||||
.two
|
||||
call .IsPlayerFacingDown
|
||||
jr z, .PlayerNotFacingDown
|
||||
call CmdQueueAnonJT_Decrement
|
||||
|
||||
ld hl, 3
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [wd173], a
|
||||
ret
|
||||
|
||||
.PlayerNotFacingDown:
|
||||
ld a, $7f
|
||||
ld [wd173], a
|
||||
ld hl, 5
|
||||
add hl, bc
|
||||
ld [hl], 0
|
||||
ret
|
||||
|
||||
.IsPlayerFacingDown:
|
||||
push bc
|
||||
ld bc, wPlayerStruct
|
||||
call GetSpriteDirection
|
||||
and a
|
||||
pop bc
|
||||
ret
|
||||
|
||||
CmdQueue_StoneTable:
|
||||
ld de, wPlayerStruct
|
||||
ld a, NUM_OBJECT_STRUCTS
|
||||
.loop
|
||||
push af
|
||||
|
||||
ld hl, OBJECT_SPRITE
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .next
|
||||
|
||||
ld hl, OBJECT_MOVEMENTTYPE
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
cp SPRITEMOVEDATA_STRENGTH_BOULDER
|
||||
jr nz, .next
|
||||
|
||||
ld hl, OBJECT_NEXT_TILE
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
call CheckPitTile
|
||||
jr nz, .next
|
||||
|
||||
ld hl, OBJECT_DIRECTION_WALKING
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
cp STANDING
|
||||
jr nz, .next
|
||||
call HandleStoneQueue
|
||||
jr c, .fall_down_hole
|
||||
|
||||
.next
|
||||
ld hl, OBJECT_STRUCT_LENGTH
|
||||
add hl, de
|
||||
ld d, h
|
||||
ld e, l
|
||||
|
||||
pop af
|
||||
dec a
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
.fall_down_hole
|
||||
pop af
|
||||
ret
|
||||
|
@ -1,613 +0,0 @@
|
||||
; More overworld event handling.
|
||||
|
||||
WarpToSpawnPoint::
|
||||
ld hl, wStatusFlags2
|
||||
res STATUSFLAGS2_SAFARI_GAME_F, [hl]
|
||||
res STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
|
||||
ret
|
||||
|
||||
RunMemScript::
|
||||
; If there is no script here, we don't need to be here.
|
||||
ld a, [wMapReentryScriptQueueFlag]
|
||||
and a
|
||||
ret z
|
||||
; Execute the script at (wMapReentryScriptBank):(wMapReentryScriptAddress).
|
||||
ld hl, wMapReentryScriptAddress
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ld a, [wMapReentryScriptBank]
|
||||
call CallScript
|
||||
scf
|
||||
; Clear the buffer for the next script.
|
||||
push af
|
||||
xor a
|
||||
ld hl, wMapReentryScriptQueueFlag
|
||||
ld bc, 8
|
||||
call ByteFill
|
||||
pop af
|
||||
ret
|
||||
|
||||
LoadScriptBDE::
|
||||
; If there's already a script here, don't overwrite.
|
||||
ld hl, wMapReentryScriptQueueFlag
|
||||
ld a, [hl]
|
||||
and a
|
||||
ret nz
|
||||
; Set the flag
|
||||
ld [hl], 1
|
||||
inc hl
|
||||
; Load the script pointer b:de into (wMapReentryScriptBank):(wMapReentryScriptAddress)
|
||||
ld [hl], b
|
||||
inc hl
|
||||
ld [hl], e
|
||||
inc hl
|
||||
ld [hl], d
|
||||
scf
|
||||
ret
|
||||
|
||||
TryTileCollisionEvent::
|
||||
call GetFacingTileCoord
|
||||
ld [wEngineBuffer1], a
|
||||
ld c, a
|
||||
farcall CheckFacingTileForStdScript
|
||||
jr c, .done
|
||||
|
||||
call CheckCutTreeTile
|
||||
jr nz, .whirlpool
|
||||
farcall TryCutOW
|
||||
jr .done
|
||||
|
||||
.whirlpool
|
||||
ld a, [wEngineBuffer1]
|
||||
call CheckWhirlpoolTile
|
||||
jr nz, .waterfall
|
||||
farcall TryWhirlpoolOW
|
||||
jr .done
|
||||
|
||||
.waterfall
|
||||
ld a, [wEngineBuffer1]
|
||||
call CheckWaterfallTile
|
||||
jr nz, .headbutt
|
||||
farcall TryWaterfallOW
|
||||
jr .done
|
||||
|
||||
.headbutt
|
||||
ld a, [wEngineBuffer1]
|
||||
call CheckHeadbuttTreeTile
|
||||
jr nz, .surf
|
||||
farcall TryHeadbuttOW
|
||||
jr c, .done
|
||||
jr .noevent
|
||||
|
||||
.surf
|
||||
farcall TrySurfOW
|
||||
jr nc, .noevent
|
||||
jr .done
|
||||
|
||||
.noevent
|
||||
xor a
|
||||
ret
|
||||
|
||||
.done
|
||||
call PlayClickSFX
|
||||
ld a, $ff
|
||||
scf
|
||||
ret
|
||||
|
||||
RandomEncounter::
|
||||
; Random encounter
|
||||
|
||||
call CheckWildEncounterCooldown
|
||||
jr c, .nope
|
||||
call CanUseSweetScent
|
||||
jr nc, .nope
|
||||
ld hl, wStatusFlags2
|
||||
bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
|
||||
jr nz, .bug_contest
|
||||
farcall TryWildEncounter
|
||||
jr nz, .nope
|
||||
jr .ok
|
||||
|
||||
.bug_contest
|
||||
call _TryWildEncounter_BugContest
|
||||
jr nc, .nope
|
||||
jr .ok_bug_contest
|
||||
|
||||
.nope
|
||||
ld a, 1
|
||||
and a
|
||||
ret
|
||||
|
||||
.ok
|
||||
ld a, BANK(WildBattleScript)
|
||||
ld hl, WildBattleScript
|
||||
jr .done
|
||||
|
||||
.ok_bug_contest
|
||||
ld a, BANK(BugCatchingContestBattleScript)
|
||||
ld hl, BugCatchingContestBattleScript
|
||||
jr .done
|
||||
|
||||
.done
|
||||
call CallScript
|
||||
scf
|
||||
ret
|
||||
|
||||
WildBattleScript:
|
||||
randomwildmon
|
||||
startbattle
|
||||
reloadmapafterbattle
|
||||
end
|
||||
|
||||
CanUseSweetScent::
|
||||
ld hl, wStatusFlags
|
||||
bit STATUSFLAGS_NO_WILD_ENCOUNTERS_F, [hl]
|
||||
jr nz, .no
|
||||
ld a, [wEnvironment]
|
||||
cp CAVE
|
||||
jr z, .ice_check
|
||||
cp DUNGEON
|
||||
jr z, .ice_check
|
||||
farcall CheckGrassCollision
|
||||
jr nc, .no
|
||||
|
||||
.ice_check
|
||||
ld a, [wPlayerStandingTile]
|
||||
call CheckIceTile
|
||||
jr z, .no
|
||||
scf
|
||||
ret
|
||||
|
||||
.no
|
||||
and a
|
||||
ret
|
||||
|
||||
_TryWildEncounter_BugContest:
|
||||
call TryWildEncounter_BugContest
|
||||
ret nc
|
||||
call ChooseWildEncounter_BugContest
|
||||
farcall CheckRepelEffect
|
||||
ret
|
||||
|
||||
ChooseWildEncounter_BugContest::
|
||||
; Pick a random mon out of ContestMons.
|
||||
|
||||
.loop
|
||||
call Random
|
||||
cp 100 << 1
|
||||
jr nc, .loop
|
||||
srl a
|
||||
|
||||
ld hl, ContestMons
|
||||
ld de, 4
|
||||
.CheckMon:
|
||||
sub [hl]
|
||||
jr c, .GotMon
|
||||
add hl, de
|
||||
jr .CheckMon
|
||||
|
||||
.GotMon:
|
||||
inc hl
|
||||
|
||||
; Species
|
||||
ld a, [hli]
|
||||
ld [wTempWildMonSpecies], a
|
||||
|
||||
; Min level
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
|
||||
; Max level
|
||||
ld a, [hl]
|
||||
|
||||
sub d
|
||||
jr nz, .RandomLevel
|
||||
|
||||
; If min and max are the same.
|
||||
ld a, d
|
||||
jr .GotLevel
|
||||
|
||||
.RandomLevel:
|
||||
; Get a random level between the min and max.
|
||||
ld c, a
|
||||
inc c
|
||||
call Random
|
||||
ld a, [hRandomAdd]
|
||||
call SimpleDivide
|
||||
add d
|
||||
|
||||
.GotLevel:
|
||||
ld [wCurPartyLevel], a
|
||||
|
||||
xor a
|
||||
ret
|
||||
|
||||
TryWildEncounter_BugContest:
|
||||
ld a, [wPlayerStandingTile]
|
||||
call CheckSuperTallGrassTile
|
||||
ld b, 40 percent
|
||||
jr z, .ok
|
||||
ld b, 20 percent
|
||||
|
||||
.ok
|
||||
farcall ApplyMusicEffectOnEncounterRate
|
||||
farcall ApplyCleanseTagEffectOnEncounterRate
|
||||
call Random
|
||||
ld a, [hRandomAdd]
|
||||
cp b
|
||||
ret c
|
||||
ld a, 1
|
||||
and a
|
||||
ret
|
||||
|
||||
INCLUDE "data/wild/bug_contest_mons.asm"
|
||||
|
||||
DoBikeStep::
|
||||
nop
|
||||
nop
|
||||
; If the bike shop owner doesn't have our number, or
|
||||
; if we've already gotten the call, we don't have to
|
||||
; be here.
|
||||
ld hl, wStatusFlags2
|
||||
bit STATUSFLAGS2_BIKE_SHOP_CALL_F, [hl]
|
||||
jr z, .NoCall
|
||||
|
||||
; If we're not on the bike, we don't have to be here.
|
||||
ld a, [wPlayerState]
|
||||
cp PLAYER_BIKE
|
||||
jr nz, .NoCall
|
||||
|
||||
; If we're not in an area of phone service, we don't
|
||||
; have to be here.
|
||||
call GetMapPhoneService
|
||||
and a
|
||||
jr nz, .NoCall
|
||||
|
||||
; Check the bike step count and check whether we've
|
||||
; taken 65536 of them yet.
|
||||
ld hl, wBikeStep
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
ld e, [hl]
|
||||
cp 255
|
||||
jr nz, .increment
|
||||
ld a, e
|
||||
cp 255
|
||||
jr z, .dont_increment
|
||||
|
||||
.increment
|
||||
inc de
|
||||
ld [hl], e
|
||||
dec hl
|
||||
ld [hl], d
|
||||
|
||||
.dont_increment
|
||||
; If we've taken at least 1024 steps, have the bike
|
||||
; shop owner try to call us.
|
||||
ld a, d
|
||||
cp HIGH(1024)
|
||||
jr c, .NoCall
|
||||
|
||||
; If a call has already been queued, don't overwrite
|
||||
; that call.
|
||||
ld a, [wSpecialPhoneCallID]
|
||||
and a
|
||||
jr nz, .NoCall
|
||||
|
||||
; Queue the call.
|
||||
ld a, SPECIALCALL_BIKESHOP
|
||||
ld [wSpecialPhoneCallID], a
|
||||
xor a
|
||||
ld [wSpecialPhoneCallID + 1], a
|
||||
ld hl, wStatusFlags2
|
||||
res STATUSFLAGS2_BIKE_SHOP_CALL_F, [hl]
|
||||
scf
|
||||
ret
|
||||
|
||||
.NoCall:
|
||||
xor a
|
||||
ret
|
||||
|
||||
ClearCmdQueue::
|
||||
ld hl, wCmdQueue
|
||||
ld de, 6
|
||||
ld c, 4
|
||||
xor a
|
||||
.loop
|
||||
ld [hl], a
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
HandleCmdQueue::
|
||||
ld hl, wCmdQueue
|
||||
xor a
|
||||
.loop
|
||||
ld [hMapObjectIndexBuffer], a
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .skip
|
||||
push hl
|
||||
ld b, h
|
||||
ld c, l
|
||||
call HandleQueuedCommand
|
||||
pop hl
|
||||
|
||||
.skip
|
||||
ld de, CMDQUEUE_ENTRY_SIZE
|
||||
add hl, de
|
||||
ld a, [hMapObjectIndexBuffer]
|
||||
inc a
|
||||
cp CMDQUEUE_CAPACITY
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
Unreferenced_GetNthCmdQueueEntry:
|
||||
ld hl, wCmdQueue
|
||||
ld bc, CMDQUEUE_ENTRY_SIZE
|
||||
call AddNTimes
|
||||
ld b, h
|
||||
ld c, l
|
||||
ret
|
||||
|
||||
WriteCmdQueue::
|
||||
push bc
|
||||
push de
|
||||
call .GetNextEmptyEntry
|
||||
ld d, h
|
||||
ld e, l
|
||||
pop hl
|
||||
pop bc
|
||||
ret c
|
||||
ld a, b
|
||||
ld bc, CMDQUEUE_ENTRY_SIZE - 1
|
||||
call FarCopyBytes
|
||||
xor a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.GetNextEmptyEntry:
|
||||
ld hl, wCmdQueue
|
||||
ld de, CMDQUEUE_ENTRY_SIZE
|
||||
ld c, CMDQUEUE_CAPACITY
|
||||
.loop
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .done
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .loop
|
||||
scf
|
||||
ret
|
||||
|
||||
.done
|
||||
ld a, CMDQUEUE_CAPACITY
|
||||
sub c
|
||||
and a
|
||||
ret
|
||||
|
||||
DelCmdQueue::
|
||||
ld hl, wCmdQueue
|
||||
ld de, CMDQUEUE_ENTRY_SIZE
|
||||
ld c, CMDQUEUE_CAPACITY
|
||||
.loop
|
||||
ld a, [hl]
|
||||
cp b
|
||||
jr z, .done
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .loop
|
||||
and a
|
||||
ret
|
||||
|
||||
.done
|
||||
xor a
|
||||
ld [hl], a
|
||||
scf
|
||||
ret
|
||||
|
||||
_DelCmdQueue:
|
||||
ld hl, CMDQUEUE_TYPE
|
||||
add hl, bc
|
||||
ld [hl], 0
|
||||
ret
|
||||
|
||||
HandleQueuedCommand:
|
||||
ld hl, CMDQUEUE_TYPE
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp 5
|
||||
jr c, .okay
|
||||
xor a
|
||||
|
||||
.okay
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, .Jumptable
|
||||
add hl, de
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
push af
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
pop af
|
||||
rst FarCall
|
||||
ret
|
||||
|
||||
.Jumptable:
|
||||
dba CmdQueue_Null
|
||||
dba CmdQueue_Null2
|
||||
dba CmdQueue_StoneTable
|
||||
dba CmdQueue_Type3
|
||||
dba CmdQueue_Type4
|
||||
|
||||
CmdQueueAnonymousJumptable:
|
||||
ld hl, CMDQUEUE_05
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
pop hl
|
||||
rst JumpTable
|
||||
ret
|
||||
|
||||
CmdQueueAnonJT_Increment:
|
||||
ld hl, CMDQUEUE_05
|
||||
add hl, bc
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
CmdQueueAnonJT_Decrement:
|
||||
ld hl, CMDQUEUE_05
|
||||
add hl, bc
|
||||
dec [hl]
|
||||
ret
|
||||
|
||||
CmdQueue_Null:
|
||||
ret
|
||||
|
||||
CmdQueue_Null2:
|
||||
call ret_2f3e
|
||||
ret
|
||||
|
||||
CmdQueue_Type4:
|
||||
call CmdQueueAnonymousJumptable
|
||||
; anonymous dw
|
||||
dw .zero
|
||||
dw .one
|
||||
|
||||
.zero
|
||||
ld a, [hSCY]
|
||||
ld hl, 4
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
call CmdQueueAnonJT_Increment
|
||||
.one
|
||||
ld hl, 1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
dec a
|
||||
ld [hl], a
|
||||
jr z, .finish
|
||||
and $1
|
||||
jr z, .add
|
||||
ld hl, 2
|
||||
add hl, bc
|
||||
ld a, [hSCY]
|
||||
sub [hl]
|
||||
ld [hSCY], a
|
||||
ret
|
||||
|
||||
.add
|
||||
ld hl, 2
|
||||
add hl, bc
|
||||
ld a, [hSCY]
|
||||
add [hl]
|
||||
ld [hSCY], a
|
||||
ret
|
||||
|
||||
.finish
|
||||
ld hl, 4
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [hSCY], a
|
||||
call _DelCmdQueue
|
||||
ret
|
||||
|
||||
CmdQueue_Type3:
|
||||
call CmdQueueAnonymousJumptable
|
||||
; anonymous dw
|
||||
dw .zero
|
||||
dw .one
|
||||
dw .two
|
||||
|
||||
.zero
|
||||
call .IsPlayerFacingDown
|
||||
jr z, .PlayerNotFacingDown
|
||||
call CmdQueueAnonJT_Increment
|
||||
.one
|
||||
call .IsPlayerFacingDown
|
||||
jr z, .PlayerNotFacingDown
|
||||
call CmdQueueAnonJT_Increment
|
||||
|
||||
ld hl, 2
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [wd173], a
|
||||
ret
|
||||
|
||||
.two
|
||||
call .IsPlayerFacingDown
|
||||
jr z, .PlayerNotFacingDown
|
||||
call CmdQueueAnonJT_Decrement
|
||||
|
||||
ld hl, 3
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [wd173], a
|
||||
ret
|
||||
|
||||
.PlayerNotFacingDown:
|
||||
ld a, $7f
|
||||
ld [wd173], a
|
||||
ld hl, 5
|
||||
add hl, bc
|
||||
ld [hl], 0
|
||||
ret
|
||||
|
||||
.IsPlayerFacingDown:
|
||||
push bc
|
||||
ld bc, wPlayerStruct
|
||||
call GetSpriteDirection
|
||||
and a
|
||||
pop bc
|
||||
ret
|
||||
|
||||
CmdQueue_StoneTable:
|
||||
ld de, wPlayerStruct
|
||||
ld a, NUM_OBJECT_STRUCTS
|
||||
.loop
|
||||
push af
|
||||
|
||||
ld hl, OBJECT_SPRITE
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .next
|
||||
|
||||
ld hl, OBJECT_MOVEMENTTYPE
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
cp SPRITEMOVEDATA_STRENGTH_BOULDER
|
||||
jr nz, .next
|
||||
|
||||
ld hl, OBJECT_NEXT_TILE
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
call CheckPitTile
|
||||
jr nz, .next
|
||||
|
||||
ld hl, OBJECT_DIRECTION_WALKING
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
cp STANDING
|
||||
jr nz, .next
|
||||
call HandleStoneQueue
|
||||
jr c, .fall_down_hole
|
||||
|
||||
.next
|
||||
ld hl, OBJECT_STRUCT_LENGTH
|
||||
add hl, de
|
||||
ld d, h
|
||||
ld e, l
|
||||
|
||||
pop af
|
||||
dec a
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
.fall_down_hole
|
||||
pop af
|
||||
ret
|
Loading…
x
Reference in New Issue
Block a user