summaryrefslogtreecommitdiff
path: root/engine/bank3c.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/bank3c.asm')
-rw-r--r--engine/bank3c.asm521
1 files changed, 426 insertions, 95 deletions
diff --git a/engine/bank3c.asm b/engine/bank3c.asm
index cadfe1cf..d176511c 100644
--- a/engine/bank3c.asm
+++ b/engine/bank3c.asm
@@ -14,10 +14,11 @@ PlayPikachuSoundClip:: ; f0000 (3c:4000)
ld c, $4
.loop
dec c
- jr z, .asm_f0019
+ jr z, .done_delay
call DelayFrame
jr .loop
-.asm_f0019
+
+.done_delay
di
push bc
push hl
@@ -90,74 +91,74 @@ PikachuCriesPointerTable: ; f008e (3c:408e)
; dw pointer to cry
; bank 21
- dbw BANK(PikachuCry1), PikachuCry1 ; 21:4000
- dbw BANK(PikachuCry2), PikachuCry2 ; 21:491a
- dbw BANK(PikachuCry3), PikachuCry3 ; 21:4fdc
- dbw BANK(PikachuCry4), PikachuCry4 ; 21:59ee
-
+ pikacry_def PikachuCry1 ; 21:4000
+ pikacry_def PikachuCry2 ; 21:491a
+ pikacry_def PikachuCry3 ; 21:4fdc
+ pikacry_def PikachuCry4 ; 21:59ee
+
; bank 22
- dbw BANK(PikachuCry5), PikachuCry5 ; 22:4000
- dbw BANK(PikachuCry6), PikachuCry6 ; 22:5042
- dbw BANK(PikachuCry7), PikachuCry7 ; 22:6254
-
+ pikacry_def PikachuCry5 ; 22:4000
+ pikacry_def PikachuCry6 ; 22:5042
+ pikacry_def PikachuCry7 ; 22:6254
+
; bank 23
- dbw BANK(PikachuCry8), PikachuCry8 ; 23:4000
- dbw BANK(PikachuCry9), PikachuCry9 ; 23:50ca
- dbw BANK(PikachuCry10), PikachuCry10 ; 23:5e0c
+ pikacry_def PikachuCry8 ; 23:4000
+ pikacry_def PikachuCry9 ; 23:50ca
+ pikacry_def PikachuCry10 ; 23:5e0c
; bank 24
- dbw BANK(PikachuCry11), PikachuCry11 ; 24:4000
- dbw BANK(PikachuCry12), PikachuCry12 ; 24:4722
- dbw BANK(PikachuCry13), PikachuCry13 ; 24:54a4
-
+ pikacry_def PikachuCry11 ; 24:4000
+ pikacry_def PikachuCry12 ; 24:4722
+ pikacry_def PikachuCry13 ; 24:54a4
+
; bank 25
- dbw BANK(PikachuCry14), PikachuCry14 ; 25:4000
- dbw BANK(PikachuCry15), PikachuCry15 ; 25:589a
-
+ pikacry_def PikachuCry14 ; 25:4000
+ pikacry_def PikachuCry15 ; 25:589a
+
; banks 31-34, in no particular order
- dbw BANK(PikachuCry16), PikachuCry16 ; 31:4000
- dbw BANK(PikachuCry17), PikachuCry17 ; 34:4000
- dbw BANK(PikachuCry18), PikachuCry18 ; 31:549a
- dbw BANK(PikachuCry19), PikachuCry19 ; 33:4000
- dbw BANK(PikachuCry20), PikachuCry20 ; 32:4000
- dbw BANK(PikachuCry21), PikachuCry21 ; 32:6002
- dbw BANK(PikachuCry22), PikachuCry22 ; 31:63a4
- dbw BANK(PikachuCry23), PikachuCry23 ; 34:4862
- dbw BANK(PikachuCry24), PikachuCry24 ; 33:5632
- dbw BANK(PikachuCry25), PikachuCry25 ; 34:573c
- dbw BANK(PikachuCry26), PikachuCry26 ; 33:725c
-
+ 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
- dbw BANK(PikachuCry27), PikachuCry27 ; 35:4000
- dbw BANK(PikachuCry28), PikachuCry28 ; 35:4b5a
- dbw BANK(PikachuCry29), PikachuCry29 ; 35:5da4
- dbw BANK(PikachuCry30), PikachuCry30 ; 35:69ce
- dbw BANK(PikachuCry31), PikachuCry31 ; 35:6e80
-
+ 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
- dbw BANK(PikachuCry32), PikachuCry32 ; 36:4000
- dbw BANK(PikachuCry33), PikachuCry33 ; 36:458a
- dbw BANK(PikachuCry34), PikachuCry34 ; 36:523c
-
+ pikacry_def PikachuCry32 ; 36:4000
+ pikacry_def PikachuCry33 ; 36:458a
+ pikacry_def PikachuCry34 ; 36:523c
+
; bank 37
- dbw BANK(PikachuCry35), PikachuCry35 ; 37:4000
- dbw BANK(PikachuCry36), PikachuCry36 ; 37:522a
+ pikacry_def PikachuCry35 ; 37:4000
+ pikacry_def PikachuCry36 ; 37:522a
; banks 36-38
- dbw BANK(PikachuCry37), PikachuCry37 ; 38:4000
- dbw BANK(PikachuCry38), PikachuCry38 ; 38:4dfa
- dbw BANK(PikachuCry39), PikachuCry39 ; 37:6e0c
- dbw BANK(PikachuCry40), PikachuCry40 ; 38:5a64
- dbw BANK(PikachuCry41), PikachuCry41 ; 36:6746
- dbw BANK(PikachuCry42), PikachuCry42 ; 38:6976
+ 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
+ ld [wd435], a
xor a ; gamefreak copypasting functions (double xor a)
ld [wBattleResult], a
ld [wWalkBikeSurfState], a
@@ -202,35 +203,56 @@ ResetStatusAndHalveMoneyOnBlackout:: ; f0274 (3c:4274)
ld a, %11111111
ld [wJoyIgnore], a
predef_jump HealParty
-
+
Func_f02da:: ; f02da (3c:42da)
- ld a,[wCurMap]
+ ld a, [wCurMap]
cp VERMILION_GYM ; ??? new thing about verm gym?
- jr z,.asm_f02ee
- ld c,a
- ld hl,Pointer_f02fa
+ jr z, .asm_f02ee
+ ld c, a
+ ld hl, Pointer_f02fa
.asm_f02e5
- ld a,[hli]
+ ld a, [hli]
cp c
- jr z,.asm_f02f4
- cp a,$ff
- jr nz,.asm_f02e5
+ jr z, .asm_f02f4
+ cp a, $ff
+ jr nz, .asm_f02e5
ret
.asm_f02ee
- ld hl,wd126
- set 6,[hl]
+ ld hl, wd126
+ set 6, [hl]
ret
.asm_f02f4
- ld hl,wd126
- set 5,[hl]
+ ld hl, wd126
+ set 5, [hl]
ret
Pointer_f02fa:: ; f02fa (3c:42fa)
- db $cf,$d0,$d1,$d2,$d3,$d4
- db $d5,$e9,$ea,$eb,$d6,$d7
- db $d8,$a5,$a6,$87,$c7,$ca
- db $c6,$6c,$c2,$71,$f5,$f6
- db $f7,$ff
+ 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"
@@ -240,42 +262,351 @@ BeachHouse_Block:: ; f0914 (3c:4914)
Func_f0a54:: ; f0a54 (3c:4a54)
ret
-
+
Func_f0a55:: ; f0a55 (3c:4a55)
- ld hl,Pointer_f0a76 ; 3c:4a76
+ ld hl, Pointer_f0a76 ; 3c:4a76
.loop
- ld a,[hli]
- cp a,$ff
+ ld a, [hli]
+ cp a, $ff
ret z
- ld b,a
- ld a,[wCurMap]
+ ld b, a
+ ld a, [wCurMap]
cp b
- jr z,.asm_f0a68
+ 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
+ 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
-
- dr $f0a82,$f220e
-BeachHouse_h: ; f220e (3c:620e)
-;INCLUDE "data/mapHeaders/beach_house.asm"
- dr $f220e,$f24ae
-Func_f24ae: ; f24ae (3c:64ae)
- dr $f24ae,$f25f8
-CheckForHiddenObject:: ; f25f8 (3c:65f8)
- dr $f25f8,$f4000 \ No newline at end of file
+ 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