mirror of
https://github.com/pret/pokeyellow.git
synced 2026-05-19 09:22:40 -05:00
613 lines
11 KiB
NASM
613 lines
11 KiB
NASM
PlayPikachuSoundClip:: ; f0000 (3c:4000)
|
|
ld a, e
|
|
ld e, a
|
|
ld d, $0
|
|
ld hl, PikachuCriesPointerTable
|
|
add hl, de
|
|
add hl, de
|
|
add hl, de
|
|
ld b, [hl] ; bank of pikachu cry data
|
|
inc hl
|
|
ld a, [hli] ; cry data pointer
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld c, $4
|
|
.loop
|
|
dec c
|
|
jr z, .done_delay
|
|
call DelayFrame
|
|
jr .loop
|
|
|
|
.done_delay
|
|
di
|
|
push bc
|
|
push hl
|
|
ld a, $80
|
|
ld [rNR52], a
|
|
ld a, $77
|
|
ld [rNR50], a
|
|
xor a
|
|
ld [rNR30], a
|
|
ld hl, $ff30 ; wave data
|
|
ld de, wRedrawRowOrColumnSrcTiles
|
|
.saveWaveDataLoop
|
|
ld a, [hl]
|
|
ld [de], a
|
|
inc de
|
|
ld a, $ff
|
|
ld [hli], a
|
|
ld a, l
|
|
cp $40 ; end of wave data
|
|
jr nz, .saveWaveDataLoop
|
|
ld a, $80
|
|
ld [rNR30], a
|
|
ld a, [rNR51]
|
|
or $44
|
|
ld [rNR51], a
|
|
ld a, $ff
|
|
ld [rNR31], a
|
|
ld a, $20
|
|
ld [rNR32], a
|
|
ld a, $ff
|
|
ld [rNR33], a
|
|
ld a, $87
|
|
ld [rNR34], a
|
|
pop hl
|
|
pop bc
|
|
call PlayPikachuPCM
|
|
xor a
|
|
ld [wc0f3], a
|
|
ld [wc0f4], a
|
|
ld a, $80
|
|
ld [rNR52], a
|
|
xor a
|
|
ld [rNR30], a
|
|
ld hl, $ff30
|
|
ld de, wRedrawRowOrColumnSrcTiles
|
|
.reloadWaveDataLoop
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
ld a, l
|
|
cp $40 ; end of wave data
|
|
jr nz, .reloadWaveDataLoop
|
|
ld a, $80
|
|
ld [rNR30], a
|
|
ld a, [rNR51]
|
|
and $bb
|
|
ld [rNR51], a
|
|
xor a
|
|
ld [wChannelSoundIDs+CH4], a
|
|
ld [wChannelSoundIDs+CH5], a
|
|
ld [wChannelSoundIDs+CH6], a
|
|
ld [wChannelSoundIDs+CH7], a
|
|
ld a, [H_LOADEDROMBANK]
|
|
ei
|
|
ret
|
|
|
|
PikachuCriesPointerTable: ; f008e (3c:408e)
|
|
; format:
|
|
; db bank
|
|
; dw pointer to cry
|
|
|
|
; bank 21
|
|
pikacry_def PikachuCry1 ; 21:4000
|
|
pikacry_def PikachuCry2 ; 21:491a
|
|
pikacry_def PikachuCry3 ; 21:4fdc
|
|
pikacry_def PikachuCry4 ; 21:59ee
|
|
|
|
; bank 22
|
|
pikacry_def PikachuCry5 ; 22:4000
|
|
pikacry_def PikachuCry6 ; 22:5042
|
|
pikacry_def PikachuCry7 ; 22:6254
|
|
|
|
; bank 23
|
|
pikacry_def PikachuCry8 ; 23:4000
|
|
pikacry_def PikachuCry9 ; 23:50ca
|
|
pikacry_def PikachuCry10 ; 23:5e0c
|
|
|
|
; bank 24
|
|
pikacry_def PikachuCry11 ; 24:4000
|
|
pikacry_def PikachuCry12 ; 24:4722
|
|
pikacry_def PikachuCry13 ; 24:54a4
|
|
|
|
; bank 25
|
|
pikacry_def PikachuCry14 ; 25:4000
|
|
pikacry_def PikachuCry15 ; 25:589a
|
|
|
|
; banks 31-34, in no particular order
|
|
|
|
pikacry_def PikachuCry16 ; 31:4000
|
|
pikacry_def PikachuCry17 ; 34:4000
|
|
pikacry_def PikachuCry18 ; 31:549a
|
|
pikacry_def PikachuCry19 ; 33:4000
|
|
pikacry_def PikachuCry20 ; 32:4000
|
|
pikacry_def PikachuCry21 ; 32:6002
|
|
pikacry_def PikachuCry22 ; 31:63a4
|
|
pikacry_def PikachuCry23 ; 34:4862
|
|
pikacry_def PikachuCry24 ; 33:5632
|
|
pikacry_def PikachuCry25 ; 34:573c
|
|
pikacry_def PikachuCry26 ; 33:725c
|
|
|
|
; bank 35
|
|
pikacry_def PikachuCry27 ; 35:4000
|
|
pikacry_def PikachuCry28 ; 35:4b5a
|
|
pikacry_def PikachuCry29 ; 35:5da4
|
|
pikacry_def PikachuCry30 ; 35:69ce
|
|
pikacry_def PikachuCry31 ; 35:6e80
|
|
|
|
; bank 36
|
|
pikacry_def PikachuCry32 ; 36:4000
|
|
pikacry_def PikachuCry33 ; 36:458a
|
|
pikacry_def PikachuCry34 ; 36:523c
|
|
|
|
; bank 37
|
|
pikacry_def PikachuCry35 ; 37:4000
|
|
pikacry_def PikachuCry36 ; 37:522a
|
|
|
|
; banks 36-38
|
|
pikacry_def PikachuCry37 ; 38:4000
|
|
pikacry_def PikachuCry38 ; 38:4dfa
|
|
pikacry_def PikachuCry39 ; 37:6e0c
|
|
pikacry_def PikachuCry40 ; 38:5a64
|
|
pikacry_def PikachuCry41 ; 36:6746
|
|
pikacry_def PikachuCry42 ; 38:6976
|
|
|
|
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 [$ff9f], a
|
|
ld [$ff9f + 1], a
|
|
ld [$ff9f + 2], a
|
|
call HasEnoughMoney
|
|
jr c, .lostmoney ; never happens
|
|
|
|
; Halve the player's money.
|
|
ld a, [wPlayerMoney]
|
|
ld [$ff9f], a
|
|
ld a, [wPlayerMoney + 1]
|
|
ld [$ff9f + 1], a
|
|
ld a, [wPlayerMoney + 2]
|
|
ld [$ff9f + 2], a
|
|
xor a
|
|
ld [$ffa2], a
|
|
ld [$ffa3], a
|
|
ld a, 2
|
|
ld [$ffa4], a
|
|
predef DivideBCDPredef3
|
|
ld a, [$ffa2]
|
|
ld [wPlayerMoney], a
|
|
ld a, [$ffa2 + 1]
|
|
ld [wPlayerMoney + 1], a
|
|
ld a, [$ffa2 + 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, wd126
|
|
set 6, [hl]
|
|
ret
|
|
.asm_f02f4
|
|
ld hl, wd126
|
|
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)
|
|
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)
|
|
db $27, $07, $7b, $4a, $ff
|
|
db $01, $ec, $02, $ed, $03, $ee, $ff
|
|
|
|
Func_f0a82: ; 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 Func_159b ; homecall Func_fd2a1 - pikachu movement script?
|
|
callab Func_fcba1
|
|
ret
|
|
|
|
Pic_f0abf: ; f0abf (3c:4abf)
|
|
dr $f0abf, $f0b64
|
|
GFX_f0b64: ; f0b64 (3c:4b64)
|
|
dr $f0b64, $f0cf4
|
|
Pic_f0cf4: ; f0cf4 (3c:4cf4)
|
|
dr $f0cf4, $f0d82
|
|
GFX_f0d82: ; f0d82 (3c:4d82)
|
|
dr $f0d82, $f0f12
|
|
|
|
Func_f0f12:
|
|
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 Func_f0a82
|
|
ret
|
|
|
|
PikachuMovementData_f1e2b:
|
|
db $00
|
|
db $1d
|
|
db $1f
|
|
db $38
|
|
db $3f
|
|
|
|
Func_f1e30
|
|
CheckEvent EVENT_GOT_TM18
|
|
jr nz, .asm_f1e54
|
|
ld hl, CeladonMart3Text_f1e5b
|
|
call PrintText
|
|
lb bc, TM_18, 1
|
|
call GiveItem
|
|
jr nc, .asm_f1e4f
|
|
SetEvent EVENT_GOT_TM18
|
|
ld hl, CeladonMart3Text_f1e60
|
|
jr .asm_f1e57
|
|
|
|
.asm_f1e4f
|
|
ld hl, CeladonMart3Text_f1e6b
|
|
jr .asm_f1e57
|
|
|
|
.asm_f1e54
|
|
ld hl, CeladonMart3Text_f1e66
|
|
.asm_f1e57
|
|
call PrintText
|
|
ret
|
|
|
|
CeladonMart3Text_f1e5b:
|
|
TX_FAR _TM18PreReceiveText
|
|
db "@"
|
|
|
|
CeladonMart3Text_f1e60:
|
|
TX_FAR _ReceivedTM18Text
|
|
TX_SFX_ITEM
|
|
db "@"
|
|
|
|
CeladonMart3Text_f1e66:
|
|
TX_FAR _TM18ExplanationText
|
|
db "@"
|
|
|
|
CeladonMart3Text_f1e6b:
|
|
TX_FAR _TM18NoRoomText
|
|
db "@"
|
|
|
|
Func_f1e70:
|
|
ld a, $1
|
|
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
|
|
ld hl, CeladonMansion1Text_f1e96
|
|
call PrintText
|
|
callab IsStarterPikachuInOurParty
|
|
ret nc
|
|
ld hl, CeladonMansionText_f1e9c
|
|
call PrintText
|
|
ld a, $0
|
|
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
|
|
call Func_f1ea2
|
|
call PrintText
|
|
ret
|
|
|
|
CeladonMansion1Text_f1e96:
|
|
TX_FAR _CeladonMansion1Text2
|
|
TX_WAIT_BUTTON
|
|
db "@"
|
|
|
|
CeladonMansionText_f1e9c:
|
|
TX_FAR _CeladonMansion1Text6
|
|
TX_BUTTON_SOUND
|
|
db "@"
|
|
|
|
Func_f1ea2:
|
|
ld hl, PikachuHappinessThresholds_f1eb9
|
|
.asm_f1ea5
|
|
ld a, [hli]
|
|
inc hl
|
|
and a
|
|
jr z, .asm_f1eb5
|
|
ld b, a
|
|
ld a, [wPikachuHappiness]
|
|
cp b
|
|
jr c, .asm_f1eb5
|
|
inc hl
|
|
inc hl
|
|
jr .asm_f1ea5
|
|
|
|
.asm_f1eb5
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ret
|
|
|
|
PikachuHappinessThresholds_f1eb9
|
|
dw 51, CeladonMansion1Text_f1ed5
|
|
dw 101, CeladonMansion1Text_f1eda
|
|
dw 131, CeladonMansion1Text_f1edf
|
|
dw 161, CeladonMansion1Text_f1ee4
|
|
dw 201, CeladonMansion1Text_f1ee9
|
|
dw 255, CeladonMansion1Text_f1eee
|
|
dbbw 0, $ff, CeladonMansion1Text_f1eee
|
|
|
|
CeladonMansion1Text_f1ed5:
|
|
TX_FAR _CeladonMansion1Text7
|
|
db "@"
|
|
|
|
CeladonMansion1Text_f1eda:
|
|
TX_FAR _CeladonMansion1Text8
|
|
db "@"
|
|
|
|
CeladonMansion1Text_f1edf:
|
|
TX_FAR _CeladonMansion1Text9
|
|
db "@"
|
|
|
|
CeladonMansion1Text_f1ee4:
|
|
TX_FAR _CeladonMansion1Text10
|
|
db "@"
|
|
|
|
CeladonMansion1Text_f1ee9:
|
|
TX_FAR _CeladonMansion1Text11
|
|
db "@"
|
|
|
|
CeladonMansion1Text_f1eee:
|
|
TX_FAR _CeladonMansion1Text12
|
|
db "@"
|
|
|
|
dr $f1ef3, $f218c
|
|
|
|
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 $55
|
|
ld b, 0
|
|
ret c
|
|
cp $aa
|
|
ld b, 1
|
|
ret c
|
|
ld b, 2
|
|
ret
|
|
|
|
Func_f2d06:
|
|
call Random
|
|
and $3
|
|
ret
|
|
|
|
Func_f2d0c:
|
|
ld hl, GymTrashCans3a
|
|
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
|
|
|
|
GymTrashCans3a: ; 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
|