pokeyellow/engine/bank3c.asm

370 lines
6.8 KiB
NASM

INCLUDE "engine/pikachu_pcm.asm"
INCLUDE "engine/overworld/advance_player_sprite.asm"
ResetStatusAndHalveMoneyOnBlackout:: ; f0274 (3c:4274)
; Reset player status on blackout.
xor a
ld [wd435], a
xor a ; gamefreak copypasting functions (double xor a)
ld [wBattleResult], a
ld [wWalkBikeSurfState], a
ld [wIsInBattle], a
ld [wMapPalOffset], a
ld [wNPCMovementScriptFunctionNum], a
ld [hJoyHeld], a
ld [wNPCMovementScriptPointerTableNum], a
ld [wFlags_0xcd60], a
ld [hMoney], a
ld [hMoney + 1], a
ld [hMoney + 2], a
call HasEnoughMoney
jr c, .lostmoney ; never happens
; Halve the player's money.
ld a, [wPlayerMoney]
ld [hMoney], a
ld a, [wPlayerMoney + 1]
ld [hMoney + 1], a
ld a, [wPlayerMoney + 2]
ld [hMoney + 2], a
xor a
ld [hDivideBCDDivisor], a
ld [hDivideBCDDivisor + 1], a
ld a, 2
ld [hDivideBCDDivisor + 2], a
predef DivideBCDPredef3
ld a, [hDivideBCDQuotient]
ld [wPlayerMoney], a
ld a, [hDivideBCDQuotient + 1]
ld [wPlayerMoney + 1], a
ld a, [hDivideBCDQuotient + 2]
ld [wPlayerMoney + 2], a
.lostmoney
ld hl, wd732
set 2, [hl]
res 3, [hl]
set 6, [hl]
ld a, %11111111
ld [wJoyIgnore], a
predef_jump HealParty
Func_f02da:: ; f02da (3c:42da)
ld a, [wCurMap]
cp VERMILION_GYM ; ??? new thing about verm gym?
jr z, .asm_f02ee
ld c, a
ld hl, Pointer_f02fa
.asm_f02e5
ld a, [hli]
cp c
jr z, .asm_f02f4
cp a, $ff
jr nz, .asm_f02e5
ret
.asm_f02ee
ld hl, wCurrentMapScriptFlags
set 6, [hl]
ret
.asm_f02f4
ld hl, wCurrentMapScriptFlags
set 5, [hl]
ret
Pointer_f02fa:: ; f02fa (3c:42fa)
db SILPH_CO_2F
db SILPH_CO_3F
db SILPH_CO_4F
db SILPH_CO_5F
db SILPH_CO_6F
db SILPH_CO_7F
db SILPH_CO_8F
db SILPH_CO_9F
db SILPH_CO_10F
db SILPH_CO_11F
db MANSION_2
db MANSION_3
db MANSION_4
db MANSION_1
db CINNABAR_GYM
db GAME_CORNER
db ROCKET_HIDEOUT_1
db ROCKET_HIDEOUT_4
db VICTORY_ROAD_3
db VICTORY_ROAD_1
db VICTORY_ROAD_2
db LANCES_ROOM
db LORELEIS_ROOM
db BRUNOS_ROOM
db AGATHAS_ROOM
db $ff
BeachHouse_GFX:: ; f0314 (3c:4314)
INCBIN "gfx/tilesets/beachhouse.2bpp"
BeachHouse_Block:: ; f0914 (3c:4914)
INCBIN "gfx/blocksets/beachhouse.bst"
Func_f0a54:: ; f0a54 (3c:4a54)
ret
Func_f0a55:: ; f0a55 (3c:4a55)
; referenced in an unused function
ld hl, Pointer_f0a76 ; 3c:4a76
.loop
ld a, [hli]
cp a, $ff
ret z
ld b, a
ld a, [wCurMap]
cp b
jr z, .asm_f0a68
inc hl
inc hl
inc hl
jr .loop
.asm_f0a68
ld a, [hli]
ld c, a
ld b, 0
ld a, [hli]
ld h, [hl]
ld l, a
ld de, wMissableObjectList
call CopyData
ret
Pointer_f0a76:: ; f0a76 (3c:4a76)
dbbw BLUES_HOUSE, Pointer_f0a7bEnd - Pointer_f0a7b, Pointer_f0a7b
db $ff
Pointer_f0a7b:
db 1, HS_DAISY_SITTING_COPY
db 2, HS_DAISY_WALKING_COPY
db 3, HS_TOWN_MAP_COPY
db $ff
Pointer_f0a7bEnd:
TryApplyPikachuMovementData: ; f0a82
ld a, [wd472]
bit 7, a
ret z
ld a, [wWalkBikeSurfState]
and a
ret nz
push hl
push bc
callab GetPikachuFacingDirectionAndReturnToE
pop bc
pop hl
ld a, b
cp e
ret nz
push hl
ld a, [wUpdateSpritesEnabled]
push af
ld a, $ff
ld [wUpdateSpritesEnabled], a
callab LoadPikachuShadowIntoVRAM
pop af
ld [wUpdateSpritesEnabled], a
pop hl
call ApplyPikachuMovementData
callab RefreshPikachuFollow
ret
Pic_f0abf: ; f0abf (3c:4abf)
INCBIN "gfx/pikachu/unknown_f0abf.pic"
GFX_f0b64: ; f0b64 (3c:4b64)
INCBIN "gfx/pikachu/unknown_f0b64.2bpp"
Pic_f0cf4: ; f0cf4 (3c:4cf4)
INCBIN "gfx/pikachu/unknown_f0cf4.pic"
GFX_f0d82: ; f0d82 (3c:4d82)
INCBIN "gfx/pikachu/unknown_f0d82.2bpp"
PokecenterChanseyText:
ld hl, NurseChanseyText
call PrintText
ld a, CHANSEY
call PlayCry
call WaitForSoundToFinish
ret
NurseChanseyText:
TX_FAR _NurseChanseyText
db "@"
INCLUDE "engine/HoF_room_pc.asm"
INCLUDE "scripts/viridiancity2.asm"
INCLUDE "scripts/vermilioncity2.asm"
INCLUDE "scripts/celadoncity2.asm"
INCLUDE "scripts/route1_2.asm"
INCLUDE "scripts/route22_2.asm"
INCLUDE "scripts/redshouse1f2.asm"
INCLUDE "scripts/oakslab2.asm"
INCLUDE "scripts/school2.asm"
INCLUDE "scripts/museum1f2.asm"
INCLUDE "scripts/pewterpokecenter2.asm"
Func_f1e22:
ld hl, PikachuMovementData_f1e2b
ld b, SPRITE_FACING_RIGHT
call TryApplyPikachuMovementData
ret
PikachuMovementData_f1e2b:
db $00
db $1d
db $1f
db $38
db $3f
INCLUDE "scripts/celadonmart3_2.asm"
INCLUDE "scripts/celadonmansion1_2.asm"
INCLUDE "scripts/celadonmansion3_2.asm"
Func_f1f23:
ld hl, PikachuMovementData_f1f2c
ld b, SPRITE_FACING_DOWN
call TryApplyPikachuMovementData
ret
PikachuMovementData_f1f2c:
db $00
db $20
db $1e
db $35
db $3f
INCLUDE "scripts/celadondiner2.asm"
INCLUDE "scripts/safarizoneentrance2.asm"
INCLUDE "scripts/cinnabargym3.asm"
INCLUDE "scripts/mtmoonpokecenter2.asm"
INCLUDE "data/mapHeaders/beach_house.asm"
INCLUDE "scripts/beach_house.asm"
BeachHouseBlockdata: ; f2388 (3c:6388)
INCBIN "maps/beach_house.blk"
INCLUDE "data/mapObjects/beach_house.asm"
INCLUDE "scripts/beach_house2.asm"
INCLUDE "scripts/billshouse2.asm"
INCLUDE "scripts/viridianforest2.asm"
INCLUDE "scripts/ssanne9_2.asm"
INCLUDE "scripts/silphco11_2.asm"
INCLUDE "engine/overworld/hidden_objects.asm"
Func_f2cd0:
ld d, 0
ld hl, Jumptable_f2ce1
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
call JumpToAddress
ld e, a
ld d, 0
ret
Jumptable_f2ce1:
dw Func_f2ceb
dw Func_f2ceb
dw Func_f2cee
dw Func_f2cf4
dw Func_f2d06
Func_f2ceb:
ld a, 0
ret
Func_f2cee:
call Random
and $1
ret
Func_f2cf4: ; should return to a, instead returns to b
call Random
swap a
cp 1 * $ff / 3
ld b, 0
ret c
cp 2 * $ff / 3
ld b, 1
ret c
ld b, 2
ret
Func_f2d06:
call Random
and $3
ret
Func_f2d0c:
ld hl, GymTrashCans3c
ld a, [wGymTrashCanIndex]
ld c, a
ld b, 0
ld a, 9
call AddNTimes
call AddNTimes ; ????
ld a, [hli]
ld [hGymTrashCanRandNumMask], a
ld e, a
push hl
call Func_f2cd0
pop hl
add hl, de
add hl, de
ld a, [hli]
ld [wSecondLockTrashCanIndex], a
ld a, [hl]
ld [wSecondLockTrashCanIndex + 1], a
ret
GymTrashCans3c: ; f2d31 (3c:6d31)
; First byte: number of trashcan entries
; Following four byte pairs: indices for the second trash can.
; BUG: Rows that have 3 trashcan entries are sampled incorrectly.
; The sampling occurs by taking a random number and seeing which
; third of the range 0-255 the number falls in. However, it returns
; that value to the wrong register, so the result is never used.
; Instead of using an offset in [0,1,2], the offset is instead
; in the full range 0-255. This results in truly random behavior.
db 4
db 1,3, 3,1, 1,-1, 3,-1
db 3
db 0,2, 2,4, 4,0, -1,-1
db 4
db 1,5, 5,1, 1,-1, 5,-1
db 3
db 0,4, 4,6, 6,0, -1,-1
db 4
db 1,3, 3,1, 5,5, 7,7
db 3
db 2,4, 4,8, 8,2, -1,-1
db 3
db 3,7, 7,9, 9,3, -1,-1
db 4
db 4,8, 6,10, 8,4, 10,6
db 3
db 5,7, 7,11, 11,5, -1,-1
db 3
db 6,10, 10,12, 12,6, -1,-1
db 4
db 7,9, 9,7, 11,13, 13,11
db 3
db 8,10, 10,14, 14,8, -1,-1
db 4
db 9,13, 13,9, 9,-1, 13,-1
db 3
db 10,12, 12,14, 14,10, -1,-1
db 4
db 11,13, 13,11, 11,-1, 13,-1