summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/bank30.binbin16384 -> 0 bytes
-rw-r--r--engine/bank3c.asm189
-rw-r--r--engine/bank3d.asm491
-rw-r--r--engine/bank3e.asm5
-rw-r--r--engine/bank3f.asm23
-rwxr-xr-xengine/battle/animations.asm6
-rw-r--r--engine/battle/init_battle.asm (renamed from engine/battle/bank3d_battle.asm)10
-rw-r--r--engine/battle/pikachu_entrance_anim.asm47
-rwxr-xr-xengine/events/diploma2.asm (renamed from engine/diploma_3a.asm)3
-rw-r--r--[-rwxr-xr-x]engine/events/hidden_objects/vermilion_gym_trash2.asm (renamed from engine/vermilion_gym_trash_cans.asm)0
-rw-r--r--engine/events/pikachu_happiness.asm118
-rw-r--r--engine/events/pokecenter_chansey.asm11
-rw-r--r--engine/events/try_pikachu_movement.asm27
-rwxr-xr-xengine/gfx/animated_objects.asm (renamed from engine/animated_objects_3e.asm)8
-rw-r--r--engine/gfx/bg_map_attributes.asm (renamed from engine/bg_map_attributes.asm)6
-rwxr-xr-xengine/gfx/palettes.asm34
-rw-r--r--engine/gfx/sprite_oam.asm2
-rwxr-xr-xengine/items/item_effects.asm4
-rw-r--r--engine/items/super_rod.asm41
-rw-r--r--engine/menus/draw_badges.asm3
-rwxr-xr-xengine/menus/start_sub_menus.asm5
-rw-r--r--engine/menus/unused_input.asm129
-rwxr-xr-xengine/minigame/surfing_pikachu.asm (renamed from engine/surfing_minigame.asm)51
-rwxr-xr-xengine/movie/intro_yellow.asm (renamed from engine/yellow_intro.asm)50
-rwxr-xr-xengine/movie/title.asm2
-rwxr-xr-xengine/movie/title_rb.asm (renamed from engine/movie/title2.asm)0
-rw-r--r--engine/movie/title_yellow.asm109
-rwxr-xr-xengine/overworld/healing_machine.asm2
-rw-r--r--engine/overworld/missable_objects.asm8
-rw-r--r--engine/overworld/specific_script_flags.asm25
-rw-r--r--engine/overworld/sprite_collisions.asm2
-rw-r--r--engine/overworld/unused_load_missable_object_data.asm40
-rwxr-xr-xengine/pikachu/pikachu_emotions.asm (renamed from engine/pikachu_emotions.asm)51
-rwxr-xr-xengine/pikachu/pikachu_follow.asm (renamed from engine/pikachu_follow.asm)18
-rwxr-xr-xengine/pikachu/pikachu_movement.asm (renamed from engine/pikachu_movement.asm)58
-rwxr-xr-xengine/pikachu/pikachu_pcm.asm (renamed from engine/pikachu_pcm.asm)0
-rwxr-xr-xengine/pikachu/pikachu_pic_animation.asm (renamed from engine/pikachu_pic_animation.asm)18
-rwxr-xr-xengine/pikachu/pikachu_status.asm (renamed from engine/pikachu_status.asm)0
-rw-r--r--engine/pikachu/respawn_overworld_pikachu.asm6
-rw-r--r--engine/printer/printer.asm (renamed from engine/printer.asm)19
-rwxr-xr-xengine/printer/printer2.asm (renamed from engine/unknown_ea3ea.asm)6
-rwxr-xr-xengine/printer/serial.asm15
42 files changed, 742 insertions, 900 deletions
diff --git a/engine/bank30.bin b/engine/bank30.bin
deleted file mode 100644
index 6309c149..00000000
--- a/engine/bank30.bin
+++ /dev/null
Binary files differ
diff --git a/engine/bank3c.asm b/engine/bank3c.asm
deleted file mode 100644
index 8eb32837..00000000
--- a/engine/bank3c.asm
+++ /dev/null
@@ -1,189 +0,0 @@
-INCLUDE "engine/pikachu_pcm.asm"
-INCLUDE "engine/overworld/advance_player_sprite.asm"
-
-INCLUDE "engine/events/black_out.asm"
-
-SetMapSpecificScriptFlagsOnMapReload::
- ld a, [wCurMap]
- cp VERMILION_GYM ; ??? new thing about verm gym?
- jr z, .verm_gym
- ld c, a
- ld hl, .MapList
-.search_loop
- ld a, [hli]
- cp c
- jr z, .in_list
- cp a, $ff
- jr nz, .search_loop
- ret
-
-.verm_gym
- ld hl, wCurrentMapScriptFlags
- set 6, [hl]
- ret
-
-.in_list
- ld hl, wCurrentMapScriptFlags
- set 5, [hl]
- ret
-
-.MapList
- 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 POKEMON_MANSION_2F
- db POKEMON_MANSION_3F
- db POKEMON_MANSION_B1F
- db POKEMON_MANSION_1F
- db CINNABAR_GYM
- db GAME_CORNER
- db ROCKET_HIDEOUT_B1F
- db ROCKET_HIDEOUT_B4F
- db VICTORY_ROAD_3F
- db VICTORY_ROAD_1F
- db VICTORY_ROAD_2F
- db LANCES_ROOM
- db LORELEIS_ROOM
- db BRUNOS_ROOM
- db AGATHAS_ROOM
- db $ff
-
-BeachHouse_GFX:
- INCBIN "gfx/tilesets/beachhouse.2bpp"
- ds 384
-
-BeachHouse_Block:
- INCBIN "gfx/blocksets/beachhouse.bst"
-
-Func_f0a54:
- ret
-
-LoadUnusedBluesHouseMissableObjectData::
-; referenced in an unused function
- ld hl, .MissableObjectsMaps
-.loop
- ld a, [hli]
- cp a, $ff
- ret z
- ld b, a
- ld a, [wCurMap]
- cp b
- jr z, .found
- inc hl
- inc hl
- inc hl
- jr .loop
-
-.found
- ld a, [hli]
- ld c, a
- ld b, 0
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, wMissableObjectList
- call CopyData
- ret
-
-.MissableObjectsMaps:
- dbbw BLUES_HOUSE, .End - .Start, .Start
- db $ff
-
-.Start:
- db 1, HS_DAISY_SITTING_COPY
- db 2, HS_DAISY_WALKING_COPY
- db 3, HS_TOWN_MAP_COPY
- db $ff
-.End:
-
-TryApplyPikachuMovementData:
- ld a, [wd472]
- bit 7, a
- ret z
- ld a, [wWalkBikeSurfState]
- and a
- ret nz
- push hl
- push bc
- callfar 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
- callfar LoadPikachuShadowIntoVRAM
- pop af
- ld [wUpdateSpritesEnabled], a
- pop hl
- call ApplyPikachuMovementData
- callfar RefreshPikachuFollow
- ret
-
-Pic_f0abf:
-INCBIN "gfx/pikachu/unknown_f0abf.pic"
-GFX_f0b64:
-INCBIN "gfx/pikachu/unknown_f0b64.2bpp"
-Pic_f0cf4:
-INCBIN "gfx/pikachu/unknown_f0cf4.pic"
-GFX_f0d82:
-INCBIN "gfx/pikachu/unknown_f0d82.2bpp"
-
-PokecenterChanseyText::
- ld hl, NurseChanseyText
- call PrintText
- ld a, CHANSEY
- call PlayCry
- call WaitForSoundToFinish
- ret
-
-NurseChanseyText:
- text_far _NurseChanseyText
- text_end
-
-INCLUDE "engine/movie/credits.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/ViridianSchoolHouse2.asm"
-INCLUDE "scripts/Museum1F2.asm"
-INCLUDE "scripts/PewterPokecenter2.asm"
-INCLUDE "scripts/PokemonTower2F_2.asm"
-INCLUDE "scripts/CeladonMart3F_2.asm"
-INCLUDE "scripts/CeladonMansion1F_2.asm"
-INCLUDE "scripts/CeladonMansion3F_2.asm"
-INCLUDE "scripts/GameCorner2.asm"
-INCLUDE "scripts/CeladonDiner2.asm"
-INCLUDE "scripts/SafariZoneGate2.asm"
-INCLUDE "scripts/CinnabarGym3.asm"
-INCLUDE "scripts/MtMoonPokecenter2.asm"
-
-INCLUDE "data/maps/headers/BeachHouse.asm"
-INCLUDE "scripts/BeachHouse.asm"
-BeachHouse_Blocks:
-INCBIN "maps/BeachHouse.blk"
-INCLUDE "data/maps/objects/BeachHouse.asm"
-
-INCLUDE "scripts/BeachHouse2.asm"
-INCLUDE "scripts/BillsHouse2.asm"
-INCLUDE "scripts/ViridianForest2.asm"
-INCLUDE "scripts/SSAnne2FRooms_2.asm"
-INCLUDE "scripts/SilphCo11F_2.asm"
-
-INCLUDE "engine/overworld/hidden_objects.asm"
-INCLUDE "engine/vermilion_gym_trash_cans.asm"
diff --git a/engine/bank3d.asm b/engine/bank3d.asm
deleted file mode 100644
index e929e44e..00000000
--- a/engine/bank3d.asm
+++ /dev/null
@@ -1,491 +0,0 @@
-INCLUDE "engine/battle/common_text.asm"
-INCLUDE "engine/battle/link_battle_versus_text.asm"
-INCLUDE "engine/battle/unused_stats_functions.asm"
-INCLUDE "engine/battle/scroll_draw_trainer_pic.asm"
-
-StarterPikachuBattleEntranceAnimation:
- hlcoord 0, 5
- ld c, 0
-.loop1
- inc c
- ld a, c
- cp 9
- ret z
- ld d, 7 * 13
- push bc
- push hl
-.loop2
- call .PlaceColumn
- dec hl
- ld a, d
- sub 7
- ld d, a
- dec c
- jr nz, .loop2
- ld c, 2
- call DelayFrames
- pop hl
- pop bc
- inc hl
- jr .loop1
-
-.PlaceColumn:
- push hl
- push de
- push bc
- ld e, 7
-.loop3
- ld a, d
- cp 7 * 7
- jr nc, .okay
- ld a, $7f
-.okay
- ld [hl], a
- ld bc, SCREEN_WIDTH
- add hl, bc
- inc d
- dec e
- jr nz, .loop3
- pop bc
- pop de
- pop hl
- ret
-
-INCLUDE "engine/battle/decrement_pp.asm"
-
-ModifyPikachuHappiness::
- ld a, d
- cp PIKAHAPPY_GYMLEADER
- jr z, .checkanywhereinparty
- cp PIKAHAPPY_WALKING
- jr z, .checkanywhereinparty
- push de
- callfar IsThisPartymonStarterPikachu_Party
- pop de
- ret nc
- jr .proceed
-
-.checkanywhereinparty
- push de
- callfar IsStarterPikachuInOurParty
- pop de
- ret nc
-
-.proceed
- push de
- ; Divide [wPikachuHappiness] by 100. Hold the integer part in e.
- ld e, $0
- ld a, [wPikachuHappiness]
- cp 100
- jr c, .wPikachuHappiness_div_100
- inc e
- cp 200
- jr c, .wPikachuHappiness_div_100
- inc e
-.wPikachuHappiness_div_100
- ; Get the (d, e) entry from HappinessChangeTable.
- ld c, d
- dec c
- ld b, $0
- ld hl, HappinessChangeTable
- add hl, bc
- add hl, bc
- add hl, bc
- ld d, $0
- add hl, de
- ld a, [hl]
- ; If [hl] is positive, take min(0xff, [hl] + [wPikachuHappiness]).
- ; If [hl] is negative, take max(0x00, [hl] + [wPikachuHappiness]).
- ; Inexplicably, we're using 100 as the threshold for comparison.
- cp 100
- ld a, [wPikachuHappiness]
- jr nc, .negative
- add [hl]
- jr nc, .okay
- ld a, -1
- jr .okay
-
-.negative
- add [hl]
- jr c, .okay
- xor a
-.okay
- ld [wPikachuHappiness], a
-
- ; Restore d and get the d'th entry in PikachuMoods.
- pop de
- dec d
- ld hl, PikachuMoods
- ld e, d
- ld d, $0
- add hl, de
- ld a, [hl]
- ld b, a
- ; Modify Pikachu's mood
- cp $80
- jr z, .done
- ld a, [wPikachuMood]
- jr c, .decreased
- cp b
- jr nc, .done
- ld a, [wd49c]
- and a
- jr nz, .done
- jr .update_mood
-
-.decreased
- cp b
- jr c, .done
-.update_mood
- ld a, b
- ld [wPikachuMood], a
-.done
- ret
-
-HappinessChangeTable:
- ; Increase
- db 5, 3, 2 ; Gained a level
- db 5, 3, 2 ; HP restore
- db 1, 1, 0 ; Used X item
- db 3, 2, 1 ; Challenged Gym Leader
- db 1, 1, 0 ; Teach TM/HM
- db 2, 1, 1 ; Walking around
- ; Decrease
- db -3, -3, -5 ; Deposited
- db -1, -1, -1 ; Fainted in battle
- db -5, -5, -10 ; Fainted due to Poison outside of battle
- db -5, -5, -10 ; Fainted to opponent at least 30 levels higher
- db -10, -10, -20 ; Traded away
-
-PikachuMoods:
- ; Increase
- db $8a ; Gained a level
- db $83 ; HP restore
- db $80 ; Teach TM/HM
- db $80 ; Challenged Gym Leader
- db $94 ; Unknown (d = 5)
- db $80 ; Unknown (d = 6)
- ; Decrease
- db $62 ; Deposited
- db $6c ; Fainted
- db $62 ; Unknown (d = 9)
- db $6c ; Unknown (d = 10)
- db $00 ; Unknown (d = 11)
-
-RedPicBack: INCBIN "gfx/player/redb.pic"
-OldManPic: INCBIN "gfx/battle/oldman.pic"
-ProfOakPicBack: INCBIN "gfx/battle/prof.oakb.pic"
-
-LoadYellowTitleScreenGFX:
- ld hl, PokemonLogoGraphics
- ld de, vChars2
- ld bc, 115 * $10
- ld a, BANK(PokemonLogoGraphics) ; redundant because this function is in bank3d
- call FarCopyData
- ld hl, YellowLogoGraphics + 35 * $10
- ld de, vChars0 + 253 * $10
- ld bc, 3 * $10
- ld a, BANK(YellowLogoGraphics)
- call FarCopyData
- ld hl, YellowLogoGraphics + 38 * $10
- ld de, vChars1
- ld bc, 64 * $10
- ld a, BANK(YellowLogoGraphics)
- call FarCopyData
- ld hl, YellowLogoGraphics + 102 * $10
- ld de, vChars0 + 240 * $10
- ld bc, 12 * $10
- ld a, BANK(YellowLogoGraphics)
- call FarCopyData
- ret
-
-TitleScreen_PlacePokemonLogo:
- hlcoord 2, 1
- ld de, TitleScreenPokemonLogoTilemap
- lb bc, 7, 16
- call Bank3D_CopyBox
- ret
-
-TitleScreen_PlacePikaSpeechBubble:
- hlcoord 6, 4
- ld de, TitleScreenPikaBubbleTilemap
- lb bc, 4, 7
- call Bank3D_CopyBox
- hlcoord 9, 8
- ld [hl], $64
- inc hl
- ld [hl], $65
- ret
-
-TitleScreen_PlacePikachu:
- hlcoord 4, 8
- ld de, TitleScreenPikachuTilemap
- lb bc, 9, 12
- call Bank3D_CopyBox
- hlcoord 16, 10
- ld [hl], $96
- hlcoord 16, 11
- ld [hl], $9d
- hlcoord 16, 12
- ld [hl], $a7
- hlcoord 16, 13
- ld [hl], $b1
- ld hl, TitleScreenPikachuEyesOAMData
- ld de, wOAMBuffer
- ld bc, $20
- call CopyData
- ret
-
-TitleScreenPikachuEyesOAMData:
- db $60, $40, $f1, $22
- db $60, $48, $f0, $22
- db $68, $40, $f3, $22
- db $68, $48, $f2, $22
- db $60, $60, $f0, $02
- db $60, $68, $f1, $02
- db $68, $60, $f2, $02
- db $68, $68, $f3, $02
-
-Bank3D_CopyBox:
-; copy cxb (xy) screen area from de to hl
-.row
- push bc
- push hl
-.col
- ld a, [de]
- inc de
- ld [hli], a
- dec c
- jr nz, .col
- pop hl
- ld bc, SCREEN_WIDTH
- add hl, bc
- pop bc
- dec b
- jr nz, .row
- ret
-
-TitleScreenPokemonLogoTilemap:
-; 16x7 (xy)
- db $f4, $f4, $f4, $f4, $f4, $f4, $49, $f4, $72, $30, $f4, $f4, $f4, $f4, $f4, $f4
- db $fd, $01, $02, $03, $04, $05, $06, $07, $08, $09, $0a, $0b, $f4, $0d, $0e, $0f
- db $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $1a, $1b, $1c, $1d, $1e, $1f
- db $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $2a, $2b, $2c, $2d, $2e, $2f
- db $f4, $31, $32, $33, $34, $35, $36, $37, $38, $39, $3a, $3b, $3c, $3d, $3e, $3f
- db $f4, $41, $42, $43, $44, $45, $46, $47, $48, $f4, $4a, $4b, $4c, $4d, $4e, $4f
- db $f4, $6a, $6b, $6c, $6d, $f4, $f4, $f4, $f4, $f4, $f4, $6e, $6f, $70, $71, $f4
-
-Pointer_f4669:
-; Unreferenced
- db $47, $48, $49, $4a, $4b, $4c, $4d, $4e, $4f, $5f
-
-TitleScreenPikaBubbleTilemap:
-; 7x4 (xy)
- db $24, $25, $66, $67, $68, $69, $2a
- db $50, $51, $52, $53, $54, $55, $56
- db $57, $58, $59, $5a, $5b, $5c, $5d
- db $6d, $5e, $5f, $60, $61, $62, $63
-
-TitleScreenPikachuTilemap:
-; 12x9 (xy)
- db $80, $81, $82, $83, $00, $00, $00, $00, $84, $85, $86, $87
- db $88, $89, $8a, $8b, $8c, $8d, $8d, $8e, $8f, $8a, $90, $91
- db $00, $92, $93, $8a, $8a, $8a, $8a, $8a, $8a, $94, $95, $00
- db $00, $00, $97, $8a, $8a, $98, $99, $8a, $8a, $9a, $9b, $9c
- db $00, $00, $9e, $9f, $a0, $a1, $a2, $a3, $a4, $a5, $a6, $8a
- db $00, $a8, $a9, $aa, $8a, $ab, $ac, $8a, $ad, $ae, $af, $b0
- db $00, $b2, $b3, $b4, $8a, $8a, $8a, $8a, $b5, $b6, $b7, $b8
- db $00, $b9, $ba, $8a, $8a, $8a, $8a, $8a, $8a, $bb, $bc, $00
- db $00, $00, $bd, $8a, $8a, $8a, $8a, $8a, $8a, $be, $bf, $00
-
-PokemonLogoGraphics: INCBIN "gfx/title/pokemon_logo.2bpp"
-PokemonLogoGraphicsEnd:
-YellowLogoGraphics: INCBIN "gfx/yellow_titlescreen.2bpp"
-YellowLogoGraphicsEnd:
-
-INCLUDE "engine/menus/link_menu.asm"
-
-HandleMenuInputDouble:
- xor a
- ld [wPartyMenuAnimMonEnabled], a
-
-HandleMenuInputPokemonSelectionDouble:
- ldh a, [hDownArrowBlinkCount1]
- push af
- ldh a, [hDownArrowBlinkCount2]
- push af ; save existing values on stack
- xor a
- ldh [hDownArrowBlinkCount1], a ; blinking down arrow timing value 1
- ld a, $06
- ldh [hDownArrowBlinkCount2], a ; blinking down arrow timing value 2
-.loop1
- xor a
- ld [wAnimCounter], a ; counter for pokemon shaking animation
- call .UpdateCursorTile
- call JoypadLowSensitivity
- ldh a, [hJoy5]
- and a ; was a key pressed?
- jr nz, .keyPressed
- pop af
- ldh [hDownArrowBlinkCount2], a
- pop af
- ldh [hDownArrowBlinkCount1], a ; restore previous values
- xor a
- ld [wMenuWrappingEnabled], a ; disable menu wrapping
- ret
-.keyPressed
- xor a
- ld [wCheckFor180DegreeTurn], a
- ldh a, [hJoy5]
- ld b, a
- bit 6, a ; pressed Up key?
- jr z, .checkIfDownPressed
-.upPressed
- ld a, [wCurrentMenuItem] ; selected menu item
- and a ; already at the top of the menu?
- jr z, .checkOtherKeys
-.notAtTop
- dec a
- ld [wCurrentMenuItem], a ; move selected menu item up one space
- jr .checkOtherKeys
-.checkIfDownPressed
- bit 7, a
- jr z, .checkOtherKeys
-.downPressed
- ld a, [wCurrentMenuItem]
- inc a
- ld c, a
- ld a, [wMaxMenuItem]
- cp c
- jr c, .checkOtherKeys
- ld a, c
- ld [wCurrentMenuItem], a
-.checkOtherKeys
- ld a, [wMenuWatchedKeys]
- and b ; does the menu care about any of the pressed keys?
- jp z, .loop1
-.checkIfAButtonOrBButtonPressed
- ldh a, [hJoy5]
- and A_BUTTON | B_BUTTON
- jr z, .skipPlayingSound
-.AButtonOrBButtonPressed
- ld a, SFX_PRESS_AB
- call PlaySound ; play sound
-.skipPlayingSound
- pop af
- ldh [hDownArrowBlinkCount2], a
- pop af
- ldh [hDownArrowBlinkCount1], a ; restore previous values
- ldh a, [hJoy5]
- ret
-
-.UpdateCursorTile:
- ld a, [wTopMenuItemY]
- and a
- jr z, .asm_f5ac0
- hlcoord 0, 0
- ld bc, SCREEN_WIDTH
-.loop
- add hl, bc
- dec a
- jr nz, .loop
-.asm_f5ac0
- ld a, [wTopMenuItemX]
- ld b, $0
- ld c, a
- add hl, bc
- push hl
- ld a, [wLastMenuItem]
- and a
- jr z, .asm_f5ad5
- ld bc, $28
-.loop2
- add hl, bc
- dec a
- jr nz, .loop2
-.asm_f5ad5
- ld a, [hl]
- cp "▶"
- jr nz, .asm_f5ade
- ld a, [wTileBehindCursor]
- ld [hl], a
-.asm_f5ade
- pop hl
- ld a, [wCurrentMenuItem]
- and a
- jr z, .asm_f5aec
- ld bc, $28
-.loop3
- add hl, bc
- dec a
- jr nz, .loop3
-.asm_f5aec
- ld a, [hl]
- cp "▶"
- jr z, .asm_f5af4
- ld [wTileBehindCursor], a
-.asm_f5af4
- ld a, "▶"
- ld [hl], a
- ld a, l
- ld [wMenuCursorLocation], a
- ld a, h
- ld [wMenuCursorLocation + 1], a
- ld a, [wCurrentMenuItem]
- ld [wLastMenuItem], a
- ret
-
-INCLUDE "engine/overworld/field_move_messages.asm"
-
-INCLUDE "engine/items/inventory.asm"
-
-INCLUDE "gfx/trainer_card.asm"
-
-ReadSuperRodData:
- ld a, [wCurMap]
- ld c, a
- ld hl, FishingSlots
-.loop
- ld a, [hli]
- cp $ff
- jr z, .notfound
- cp c
- jr z, .found
- ld de, $8
- add hl, de
- jr .loop
-.found
- call GenerateRandomFishingEncounter
- ret
-.notfound
- ld de, $0
- ret
-
-GenerateRandomFishingEncounter:
- call Random
- cp $66
- jr c, .asm_f5ed6
- inc hl
- inc hl
- cp $b2
- jr c, .asm_f5ed6
- inc hl
- inc hl
- cp $e5
- jr c, .asm_f5ed6
- inc hl
- inc hl
-.asm_f5ed6
- ld e, [hl]
- inc hl
- ld d, [hl]
- ret
-
-INCLUDE "data/wild/super_rod.asm"
-INCLUDE "engine/battle/bank3d_battle.asm"
-INCLUDE "engine/items/tm_prices.asm"
-INCLUDE "engine/math/multiply_divide.asm"
-INCLUDE "engine/events/give_pokemon.asm"
-INCLUDE "engine/battle/get_trainer_name.asm"
-INCLUDE "engine/math/random.asm"
-INCLUDE "engine/predefs.asm"
diff --git a/engine/bank3e.asm b/engine/bank3e.asm
deleted file mode 100644
index 32f5ebfd..00000000
--- a/engine/bank3e.asm
+++ /dev/null
@@ -1,5 +0,0 @@
-INCLUDE "engine/surfing_minigame.asm"
-INCLUDE "engine/yellow_intro.asm"
-INCLUDE "data/animated_objects_3e_2.asm"
-YellowIntroGraphics: INCBIN "gfx/yellow_intro.2bpp"
-INCLUDE "engine/animated_objects_3e.asm"
diff --git a/engine/bank3f.asm b/engine/bank3f.asm
deleted file mode 100644
index c26e9834..00000000
--- a/engine/bank3f.asm
+++ /dev/null
@@ -1,23 +0,0 @@
-INCLUDE "data/maps/songs.asm"
-INCLUDE "data/maps/map_header_pointers.asm"
-INCLUDE "data/maps/map_header_banks.asm"
-INCLUDE "engine/pikachu_follow.asm"
-INCLUDE "engine/pikachu_status.asm"
-INCLUDE "engine/pikachu_emotions.asm"
-INCLUDE "engine/pikachu_movement.asm"
-INCLUDE "engine/pikachu_pic_animation.asm"
-
-Func_fe66e:
- ret
-
-OfficerJennySprite: INCBIN "gfx/sprites/officer_jenny.2bpp"
-PikachuSprite: INCBIN "gfx/sprites/pikachu.2bpp"
-SandshrewSprite: INCBIN "gfx/sprites/sandshrew.2bpp"
-OddishSprite: INCBIN "gfx/sprites/oddish.2bpp"
-BulbasaurSprite: INCBIN "gfx/sprites/bulbasaur.2bpp"
-JigglypuffSprite: INCBIN "gfx/sprites/jigglypuff.2bpp"
-ClefairySprite: INCBIN "gfx/sprites/clefairy.2bpp"
-ChanseySprite: INCBIN "gfx/sprites/chansey.2bpp"
-SurfingPikachuSprite:: INCBIN "gfx/sprites/surfing_pikachu.2bpp"
-JessieSprite: INCBIN "gfx/sprites/jessie.2bpp"
-JamesSprite: INCBIN "gfx/sprites/james.2bpp"
diff --git a/engine/battle/animations.asm b/engine/battle/animations.asm
index 4508dbaa..3b0fd4ec 100755
--- a/engine/battle/animations.asm
+++ b/engine/battle/animations.asm
@@ -579,16 +579,16 @@ Func_78e98:
xor a
ldh [hAutoBGTransferEnabled], a
call ClearScreen
- ld h, vBGMap0 / $100
+ ld h, HIGH(vBGMap0)
call WriteLowerByteOfBGMapAndEnableBGTransfer
call Delay3
xor a
ldh [hAutoBGTransferEnabled], a
call LoadScreenTilesFromBuffer2
- ld h, vBGMap1 / $100
+ ld h, HIGH(vBGMap1)
WriteLowerByteOfBGMapAndEnableBGTransfer:
- ld l, vBGMap0 & $ff
+ ld l, LOW(vBGMap0)
call BattleAnimCopyTileMapToVRAM
ld a, $1
ldh [hAutoBGTransferEnabled], a
diff --git a/engine/battle/bank3d_battle.asm b/engine/battle/init_battle.asm
index 48c3cde3..d6ba51ed 100644
--- a/engine/battle/bank3d_battle.asm
+++ b/engine/battle/init_battle.asm
@@ -280,13 +280,3 @@ CopyUncompressedPicToHL::
dec b
jr nz, .asm_f6227
ret
-
-INCLUDE "engine/battle/init_battle_variables.asm"
-INCLUDE "engine/battle/move_effects/focus_energy.asm"
-INCLUDE "engine/battle/move_effects/heal.asm"
-INCLUDE "engine/battle/move_effects/transform.asm"
-INCLUDE "engine/battle/move_effects/reflect_light_screen.asm"
-INCLUDE "engine/battle/move_effects/mist.asm"
-INCLUDE "engine/battle/move_effects/one_hit_ko.asm"
-INCLUDE "engine/battle/move_effects/pay_day.asm"
-INCLUDE "engine/battle/move_effects/paralyze.asm"
diff --git a/engine/battle/pikachu_entrance_anim.asm b/engine/battle/pikachu_entrance_anim.asm
new file mode 100644
index 00000000..8af65cee
--- /dev/null
+++ b/engine/battle/pikachu_entrance_anim.asm
@@ -0,0 +1,47 @@
+StarterPikachuBattleEntranceAnimation:
+ hlcoord 0, 5
+ ld c, 0
+.loop1
+ inc c
+ ld a, c
+ cp 9
+ ret z
+ ld d, 7 * 13
+ push bc
+ push hl
+.loop2
+ call .PlaceColumn
+ dec hl
+ ld a, d
+ sub 7
+ ld d, a
+ dec c
+ jr nz, .loop2
+ ld c, 2
+ call DelayFrames
+ pop hl
+ pop bc
+ inc hl
+ jr .loop1
+
+.PlaceColumn:
+ push hl
+ push de
+ push bc
+ ld e, 7
+.loop3
+ ld a, d
+ cp 7 * 7
+ jr nc, .okay
+ ld a, $7f
+.okay
+ ld [hl], a
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ inc d
+ dec e
+ jr nz, .loop3
+ pop bc
+ pop de
+ pop hl
+ ret
diff --git a/engine/diploma_3a.asm b/engine/events/diploma2.asm
index 83a7345b..75ac104a 100755
--- a/engine/diploma_3a.asm
+++ b/engine/events/diploma2.asm
@@ -166,3 +166,6 @@ Func_e9beb:
dec c
jr nz, .asm_e9bed
ret
+
+SurfingPikachu3Graphics: INCBIN "gfx/surfing_pikachu/surfing_pikachu_3.2bpp"
+SurfingPikachu3GraphicsEnd:
diff --git a/engine/vermilion_gym_trash_cans.asm b/engine/events/hidden_objects/vermilion_gym_trash2.asm
index 1bc0590b..1bc0590b 100755..100644
--- a/engine/vermilion_gym_trash_cans.asm
+++ b/engine/events/hidden_objects/vermilion_gym_trash2.asm
diff --git a/engine/events/pikachu_happiness.asm b/engine/events/pikachu_happiness.asm
new file mode 100644
index 00000000..0d79e32b
--- /dev/null
+++ b/engine/events/pikachu_happiness.asm
@@ -0,0 +1,118 @@
+ModifyPikachuHappiness::
+ ld a, d
+ cp PIKAHAPPY_GYMLEADER
+ jr z, .checkanywhereinparty
+ cp PIKAHAPPY_WALKING
+ jr z, .checkanywhereinparty
+ push de
+ callfar IsThisPartymonStarterPikachu_Party
+ pop de
+ ret nc
+ jr .proceed
+
+.checkanywhereinparty
+ push de
+ callfar IsStarterPikachuInOurParty
+ pop de
+ ret nc
+
+.proceed
+ push de
+ ; Divide [wPikachuHappiness] by 100. Hold the integer part in e.
+ ld e, $0
+ ld a, [wPikachuHappiness]
+ cp 100
+ jr c, .wPikachuHappiness_div_100
+ inc e
+ cp 200
+ jr c, .wPikachuHappiness_div_100
+ inc e
+.wPikachuHappiness_div_100
+ ; Get the (d, e) entry from HappinessChangeTable.
+ ld c, d
+ dec c
+ ld b, $0
+ ld hl, HappinessChangeTable
+ add hl, bc
+ add hl, bc
+ add hl, bc
+ ld d, $0
+ add hl, de
+ ld a, [hl]
+ ; If [hl] is positive, take min(0xff, [hl] + [wPikachuHappiness]).
+ ; If [hl] is negative, take max(0x00, [hl] + [wPikachuHappiness]).
+ ; Inexplicably, we're using 100 as the threshold for comparison.
+ cp 100
+ ld a, [wPikachuHappiness]
+ jr nc, .negative
+ add [hl]
+ jr nc, .okay
+ ld a, -1
+ jr .okay
+
+.negative
+ add [hl]
+ jr c, .okay
+ xor a
+.okay
+ ld [wPikachuHappiness], a
+
+ ; Restore d and get the d'th entry in PikachuMoods.
+ pop de
+ dec d
+ ld hl, PikachuMoods
+ ld e, d
+ ld d, $0
+ add hl, de
+ ld a, [hl]
+ ld b, a
+ ; Modify Pikachu's mood
+ cp $80
+ jr z, .done
+ ld a, [wPikachuMood]
+ jr c, .decreased
+ cp b
+ jr nc, .done
+ ld a, [wd49c]
+ and a
+ jr nz, .done
+ jr .update_mood
+
+.decreased
+ cp b
+ jr c, .done
+.update_mood
+ ld a, b
+ ld [wPikachuMood], a
+.done
+ ret
+
+HappinessChangeTable:
+ ; Increase
+ db 5, 3, 2 ; Gained a level
+ db 5, 3, 2 ; HP restore
+ db 1, 1, 0 ; Used X item
+ db 3, 2, 1 ; Challenged Gym Leader
+ db 1, 1, 0 ; Teach TM/HM
+ db 2, 1, 1 ; Walking around
+ ; Decrease
+ db -3, -3, -5 ; Deposited
+ db -1, -1, -1 ; Fainted in battle
+ db -5, -5, -10 ; Fainted due to Poison outside of battle
+ db -5, -5, -10 ; Fainted to opponent at least 30 levels higher
+ db -10, -10, -20 ; Traded away
+
+PikachuMoods:
+ ; Increase
+ db $8a ; Gained a level
+ db $83 ; HP restore
+ db $80 ; Teach TM/HM
+ db $80 ; Challenged Gym Leader
+ db $94 ; Unknown (d = 5)
+ db $80 ; Unknown (d = 6)
+ ; Decrease
+ db $62 ; Deposited
+ db $6c ; Fainted
+ db $62 ; Unknown (d = 9)
+ db $6c ; Unknown (d = 10)
+ db $00 ; Unknown (d = 11)
diff --git a/engine/events/pokecenter_chansey.asm b/engine/events/pokecenter_chansey.asm
new file mode 100644
index 00000000..d7c3a95b
--- /dev/null
+++ b/engine/events/pokecenter_chansey.asm
@@ -0,0 +1,11 @@
+PokecenterChanseyText::
+ ld hl, NurseChanseyText
+ call PrintText
+ ld a, CHANSEY
+ call PlayCry
+ call WaitForSoundToFinish
+ ret
+
+NurseChanseyText:
+ text_far _NurseChanseyText
+ text_end
diff --git a/engine/events/try_pikachu_movement.asm b/engine/events/try_pikachu_movement.asm
new file mode 100644
index 00000000..70cf65b4
--- /dev/null
+++ b/engine/events/try_pikachu_movement.asm
@@ -0,0 +1,27 @@
+TryApplyPikachuMovementData::
+ ld a, [wd472]
+ bit 7, a
+ ret z
+ ld a, [wWalkBikeSurfState]
+ and a
+ ret nz
+ push hl
+ push bc
+ callfar 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
+ callfar LoadPikachuShadowIntoVRAM
+ pop af
+ ld [wUpdateSpritesEnabled], a
+ pop hl
+ call ApplyPikachuMovementData
+ callfar RefreshPikachuFollow
+ ret
diff --git a/engine/animated_objects_3e.asm b/engine/gfx/animated_objects.asm
index 2373e19e..971af6b5 100755
--- a/engine/animated_objects_3e.asm
+++ b/engine/gfx/animated_objects.asm
@@ -28,10 +28,10 @@ RunObjectAnimations:
jr nz, .loop
ld a, [wCurrentAnimatedObjectOAMBufferOffset]
ld l, a
- ld h, wOAMBuffer / $100
+ ld h, HIGH(wOAMBuffer)
.deinit_unused_oam_loop
ld a, l
- cp wOAMBufferEnd % $100
+ cp LOW(wOAMBufferEnd)
jr nc, .quit
xor a
ld [hli], a
@@ -158,7 +158,7 @@ UpdateCurrentAnimatedObjectFrame:
push bc
ld a, [wCurrentAnimatedObjectOAMBufferOffset]
ld e, a
- ld d, wOAMBuffer / $100
+ ld d, HIGH(wOAMBuffer)
ld a, [hli]
ld c, a
.loop
@@ -205,7 +205,7 @@ UpdateCurrentAnimatedObjectFrame:
inc de
ld a, e
ld [wCurrentAnimatedObjectOAMBufferOffset], a
- cp wOAMBufferEnd % $100
+ cp LOW(wOAMBufferEnd)
jr nc, .oam_is_full
dec c
jr nz, .loop
diff --git a/engine/bg_map_attributes.asm b/engine/gfx/bg_map_attributes.asm
index 4c50bcf8..6f81af63 100644
--- a/engine/bg_map_attributes.asm
+++ b/engine/gfx/bg_map_attributes.asm
@@ -1,4 +1,4 @@
-INCLUDE "data/bg_map_attributes.asm"
+INCLUDE "data/cgb/bg_map_attributes.asm"
LoadBGMapAttributes::
ld hl, BGMapAttributesPointers
@@ -195,9 +195,9 @@ HandlePartyHPBarAttributes:
push hl
ld a, [de]
and $3 ; 4 possible palettes
- rept 7 ; hp bar length in tiles
+REPT 7 ; hp bar length in tiles
ld [hli], a
- endr
+ENDR
pop hl
ld bc, $40 ; get 2nd party location
add hl, bc
diff --git a/engine/gfx/palettes.asm b/engine/gfx/palettes.asm
index dd723afa..c08992d3 100755
--- a/engine/gfx/palettes.asm
+++ b/engine/gfx/palettes.asm
@@ -752,7 +752,7 @@ index = 0
ld a, [hli]
inc hl
- IF index < (NUM_ACTIVE_PALS + -1)
+ IF index < NUM_ACTIVE_PALS - 1
push hl
ENDC
@@ -823,7 +823,7 @@ DMGPalToGBCPal::
ld [wLastOBP1], a
.convert
color_index = 0
- REPT NUM_COLORS
+ REPT NUM_PAL_COLORS
ld b, a
and %11
call .GetColorAddress
@@ -832,7 +832,7 @@ color_index = 0
ld a, [hl]
ld [wGBCPal + color_index * 2 + 1], a
- IF color_index < (NUM_COLORS + -1)
+ IF color_index < NUM_PAL_COLORS - 1
ld a, b
rrca
rrca
@@ -863,14 +863,14 @@ TransferCurBGPData::
ldh a, [rLCDC]
and rLCDC_ENABLE_MASK
jr nz, .lcdEnabled
- rept NUM_COLORS
- call TransferPalColorLCDDisabled
- endr
+ REPT NUM_PAL_COLORS
+ call TransferPalColorLCDDisabled
+ ENDR
jr .done
.lcdEnabled
- rept NUM_COLORS
- call TransferPalColorLCDEnabled
- endr
+ REPT NUM_PAL_COLORS
+ call TransferPalColorLCDEnabled
+ ENDR
.done
pop de
ret
@@ -887,7 +887,7 @@ BufferBGPPal::
ld de, wBGPPalsBuffer
add hl, de
ld de, wGBCPal
- ld c, PAL_SIZE
+ ld c, PALETTE_SIZE
.loop
ld a, [de]
ld [hli], a
@@ -918,7 +918,7 @@ TransferBGPPals::
ldh [rBGPI], a
ld de, rBGPD
ld hl, wBGPPalsBuffer
- ld c, 4 * PAL_SIZE
+ ld c, 4 * PALETTE_SIZE
.loop
ld a, [hli]
ld [de], a
@@ -939,14 +939,14 @@ TransferCurOBPData:
ldh a, [rLCDC]
and rLCDC_ENABLE_MASK
jr nz, .lcdEnabled
- rept NUM_COLORS
- call TransferPalColorLCDDisabled
- endr
+ REPT NUM_PAL_COLORS
+ call TransferPalColorLCDDisabled
+ ENDR
jr .done
.lcdEnabled
- rept NUM_COLORS
- call TransferPalColorLCDEnabled
- endr
+ REPT NUM_PAL_COLORS
+ call TransferPalColorLCDEnabled
+ ENDR
.done
pop de
ret
diff --git a/engine/gfx/sprite_oam.asm b/engine/gfx/sprite_oam.asm
index 01b2c412..b62d9d4b 100644
--- a/engine/gfx/sprite_oam.asm
+++ b/engine/gfx/sprite_oam.asm
@@ -153,7 +153,7 @@ PrepareOAMData::
cp c
ret nc
ld l, a
- ld h, wOAMBuffer / $100
+ ld h, HIGH(wOAMBuffer)
ld a, c
ld de, $4 ; entry size
ld b, $a0
diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm
index b1b458ab..d4c3ae18 100755
--- a/engine/items/item_effects.asm
+++ b/engine/items/item_effects.asm
@@ -1037,7 +1037,7 @@ ItemUseMedicine:
push hl
push de
push bc
- callfar Func_2fd6a
+ callfar RespawnOverworldPikachu
pop bc
pop de
pop hl
@@ -1542,7 +1542,7 @@ ItemUseMedicine:
push af
ld a, [wUsedItemOnWhichPokemon]
ld [wWhichPokemon], a
- callfar Func_2fd6a ; evolve pokemon, if appropriate
+ callfar RespawnOverworldPikachu ; evolve pokemon, if appropriate
pop af
ld [wWhichPokemon], a
diff --git a/engine/items/super_rod.asm b/engine/items/super_rod.asm
new file mode 100644
index 00000000..db82f5fb
--- /dev/null
+++ b/engine/items/super_rod.asm
@@ -0,0 +1,41 @@
+ReadSuperRodData:
+ ld a, [wCurMap]
+ ld c, a
+ ld hl, SuperRodFishingSlots
+.loop
+ ld a, [hli]
+ cp $ff
+ jr z, .notfound
+ cp c
+ jr z, .found
+ ld de, $8
+ add hl, de
+ jr .loop
+.found
+ call GenerateRandomFishingEncounter
+ ret
+.notfound
+ ld de, $0
+ ret
+
+GenerateRandomFishingEncounter:
+ call Random
+ cp $66
+ jr c, .asm_f5ed6
+ inc hl
+ inc hl
+ cp $b2
+ jr c, .asm_f5ed6
+ inc hl
+ inc hl
+ cp $e5
+ jr c, .asm_f5ed6
+ inc hl
+ inc hl
+.asm_f5ed6
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ret
+
+INCLUDE "data/wild/super_rod.asm"
diff --git a/engine/menus/draw_badges.asm b/engine/menus/draw_badges.asm
index 0bb433cc..5e00a34e 100644
--- a/engine/menus/draw_badges.asm
+++ b/engine/menus/draw_badges.asm
@@ -49,8 +49,7 @@ DrawBadges:
hlcoord 2, 14
ld de, wTempObtainedBadgesBooleans + 4
-; call .DrawBadgeRow
-; ret
+ ; fallthrough
.DrawBadgeRow
; Draw 4 badges.
diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm
index 84583a69..b9751e1e 100755
--- a/engine/menus/start_sub_menus.asm
+++ b/engine/menus/start_sub_menus.asm
@@ -324,10 +324,11 @@ StartMenu_Item::
call PrintText
jr .exitMenu
.notInCableClubRoom
+ ; store item bag pointer in wListPointer (for DisplayListMenuID)
ld hl, wListPointer
- ld [hl], wNumBagItems & $ff
+ ld [hl], LOW(wNumBagItems)
inc hl
- ld [hl], wNumBagItems / $100 ; store item bag pointer in wListPointer (for DisplayListMenuID)
+ ld [hl], HIGH(wNumBagItems)
xor a
ld [wPrintItemPrices], a
ld a, ITEMLISTMENU
diff --git a/engine/menus/unused_input.asm b/engine/menus/unused_input.asm
new file mode 100644
index 00000000..ad5c36df
--- /dev/null
+++ b/engine/menus/unused_input.asm
@@ -0,0 +1,129 @@
+HandleMenuInputDuplicate: ; unreferenced
+ xor a
+ ld [wPartyMenuAnimMonEnabled], a
+
+HandleMenuInputPokemonSelectionDuplicate: ; unreferenced
+ ldh a, [hDownArrowBlinkCount1]
+ push af
+ ldh a, [hDownArrowBlinkCount2]
+ push af ; save existing values on stack
+ xor a
+ ldh [hDownArrowBlinkCount1], a ; blinking down arrow timing value 1
+ ld a, 6
+ ldh [hDownArrowBlinkCount2], a ; blinking down arrow timing value 2
+.loop1
+ xor a
+ ld [wAnimCounter], a ; counter for pokemon shaking animation
+ call PlaceMenuCursorDuplicate
+ call JoypadLowSensitivity
+ ldh a, [hJoy5]
+ and a ; was a key pressed?
+ jr nz, .keyPressed
+ pop af
+ ldh [hDownArrowBlinkCount2], a
+ pop af
+ ldh [hDownArrowBlinkCount1], a ; restore previous values
+ xor a
+ ld [wMenuWrappingEnabled], a ; disable menu wrapping
+ ret
+.keyPressed
+ xor a
+ ld [wCheckFor180DegreeTurn], a
+ ldh a, [hJoy5]
+ ld b, a
+ bit 6, a ; pressed Up key?
+ jr z, .checkIfDownPressed
+.upPressed
+ ld a, [wCurrentMenuItem] ; selected menu item
+ and a ; already at the top of the menu?
+ jr z, .checkOtherKeys
+.notAtTop
+ dec a
+ ld [wCurrentMenuItem], a ; move selected menu item up one space
+ jr .checkOtherKeys
+.checkIfDownPressed
+ bit 7, a
+ jr z, .checkOtherKeys
+.downPressed
+ ld a, [wCurrentMenuItem]
+ inc a
+ ld c, a
+ ld a, [wMaxMenuItem]
+ cp c
+ jr c, .checkOtherKeys
+ ld a, c
+ ld [wCurrentMenuItem], a
+.checkOtherKeys
+ ld a, [wMenuWatchedKeys]
+ and b ; does the menu care about any of the pressed keys?
+ jp z, .loop1
+.checkIfAButtonOrBButtonPressed
+ ldh a, [hJoy5]
+ and A_BUTTON | B_BUTTON
+ jr z, .skipPlayingSound
+.AButtonOrBButtonPressed
+ ld a, SFX_PRESS_AB
+ call PlaySound ; play sound
+.skipPlayingSound
+ pop af
+ ldh [hDownArrowBlinkCount2], a
+ pop af
+ ldh [hDownArrowBlinkCount1], a ; restore previous values
+ ldh a, [hJoy5]
+ ret
+
+PlaceMenuCursorDuplicate:
+ ld a, [wTopMenuItemY]
+ and a
+ jr z, .asm_f5ac0
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH
+.loop
+ add hl, bc
+ dec a
+ jr nz, .loop
+.asm_f5ac0
+ ld a, [wTopMenuItemX]
+ ld b, $0
+ ld c, a
+ add hl, bc
+ push hl
+ ld a, [wLastMenuItem]
+ and a
+ jr z, .asm_f5ad5
+ ld bc, $28
+.loop2
+ add hl, bc
+ dec a
+ jr nz, .loop2
+.asm_f5ad5
+ ld a, [hl]
+ cp "▶"
+ jr nz, .asm_f5ade
+ ld a, [wTileBehindCursor]
+ ld [hl], a
+.asm_f5ade
+ pop hl
+ ld a, [wCurrentMenuItem]
+ and a
+ jr z, .asm_f5aec
+ ld bc, $28
+.loop3
+ add hl, bc
+ dec a
+ jr nz, .loop3
+.asm_f5aec
+ ld a, [hl]
+ cp "▶"
+ jr z, .asm_f5af4
+ ld [wTileBehindCursor], a
+.asm_f5af4
+ ld a, "▶"
+ ld [hl], a
+ ld a, l
+ ld [wMenuCursorLocation], a
+ ld a, h
+ ld [wMenuCursorLocation + 1], a
+ ld a, [wCurrentMenuItem]
+ ld [wLastMenuItem], a
+ ret
diff --git a/engine/surfing_minigame.asm b/engine/minigame/surfing_pikachu.asm
index 578e6b1e..6d319867 100755
--- a/engine/surfing_minigame.asm
+++ b/engine/minigame/surfing_pikachu.asm
@@ -1,4 +1,4 @@
-SurfingPikachuMinigame:
+SurfingPikachuMinigame::
call SurfingPikachuMinigame_BlankPals
call DelayFrame
call DelayFrame
@@ -190,33 +190,33 @@ SurfingPikachuMinigame_LoadGFXAndLayout:
ld a, BANK(SurfingPikachu1Graphics2)
call FarCopyData
- ld a, SurfingPikachuSpawnStateDataPointer % $100
+ ld a, LOW(SurfingPikachuSpawnStateDataPointer)
ld [wAnimatedObjectSpawnStateDataPointer], a
- ld a, SurfingPikachuSpawnStateDataPointer / $100
+ ld a, HIGH(SurfingPikachuSpawnStateDataPointer)
ld [wAnimatedObjectSpawnStateDataPointer + 1], a
- ld a, SurfingPikachuObjectJumptable % $100
+ ld a, LOW(SurfingPikachuObjectJumptable)
ld [wAnimatedObjectJumptablePointer], a
- ld a, SurfingPikachuObjectJumptable / $100
+ ld a, HIGH(SurfingPikachuObjectJumptable)
ld [wAnimatedObjectJumptablePointer + 1], a
- ld a, SurfingPikachuOAMData % $100
+ ld a, LOW(SurfingPikachuOAMData)
ld [wAnimatedObjectOAMDataPointer], a
- ld a, SurfingPikachuOAMData / $100
+ ld a, HIGH(SurfingPikachuOAMData)
ld [wAnimatedObjectOAMDataPointer + 1], a
- ld a, SurfingPikachuFrames % $100
+ ld a, LOW(SurfingPikachuFrames)
ld [wAnimatedObjectFramesDataPointer], a
- ld a, SurfingPikachuFrames / $100
+ ld a, HIGH(SurfingPikachuFrames)
ld [wAnimatedObjectFramesDataPointer + 1], a
ld hl, vBGMap0
- ld bc, $800
+ ld bc, $80 tiles
ld a, $0
call FillMemory
ld hl, $98c0
- ld bc, $180
+ ld bc, $18 tiles
ld a, $b
call FillMemory
@@ -1470,7 +1470,7 @@ SurfingMinigame_DrawResultsScreen:
ret
.BeachTilemap:
-INCBIN "gfx/unknown_f8946.map"
+INCBIN "gfx/surfing_pikachu/unknown_f8946.map"
.BeachTilemapEnd:
.PlaceTextbox:
@@ -2337,21 +2337,21 @@ SurfingPikachuMinigameIntro:
ld bc, $900
ld a, BANK(SurfingPikachu1Graphics3)
call FarCopyData
- ld a, SurfingPikachuSpawnStateDataPointer % $100
+ ld a, LOW(SurfingPikachuSpawnStateDataPointer)
ld [wAnimatedObjectSpawnStateDataPointer], a
- ld a, SurfingPikachuSpawnStateDataPointer / $100
+ ld a, HIGH(SurfingPikachuSpawnStateDataPointer)
ld [wAnimatedObjectSpawnStateDataPointer + 1], a
- ld a, SurfingPikachuObjectJumptable % $100
+ ld a, LOW(SurfingPikachuObjectJumptable)
ld [wAnimatedObjectJumptablePointer], a
- ld a, SurfingPikachuObjectJumptable / $100
+ ld a, HIGH(SurfingPikachuObjectJumptable)
ld [wAnimatedObjectJumptablePointer + 1], a
- ld a, SurfingPikachuOAMData % $100
+ ld a, LOW(SurfingPikachuOAMData)
ld [wAnimatedObjectOAMDataPointer], a
- ld a, SurfingPikachuOAMData / $100
+ ld a, HIGH(SurfingPikachuOAMData)
ld [wAnimatedObjectOAMDataPointer + 1], a
- ld a, SurfingPikachuFrames % $100
+ ld a, LOW(SurfingPikachuFrames)
ld [wAnimatedObjectFramesDataPointer], a
- ld a, SurfingPikachuFrames / $100
+ ld a, HIGH(SurfingPikachuFrames)
ld [wAnimatedObjectFramesDataPointer + 1], a
ld a, $c
lb de, $74, $58
@@ -2455,10 +2455,10 @@ DrawSurfingPikachuMinigameIntroBackground:
jr nz, .fill_row
ret
-Tilemap_f90bc: INCBIN "gfx/unknown_f90bc.map"
-Tilemap_f91ac: INCBIN "gfx/unknown_f91ac.map"
-Tilemap_f91bb: INCBIN "gfx/unknown_f91bb.map"
-Tilemap_f91c8: INCBIN "gfx/unknown_f91c8.map"
+Tilemap_f90bc: INCBIN "gfx/surfing_pikachu/unknown_f90bc.map"
+Tilemap_f91ac: INCBIN "gfx/surfing_pikachu/unknown_f91ac.map"
+Tilemap_f91bb: INCBIN "gfx/surfing_pikachu/unknown_f91bb.map"
+Tilemap_f91c8: INCBIN "gfx/surfing_pikachu/unknown_f91c8.map"
SurfingMinigame_UpdateLYOverrides:
ld hl, wLYOverrides + $10
@@ -2767,7 +2767,8 @@ SurfingPikachuObjectJumptable:
SurfingMinigameAnimatedObjectFn_nop:
ret
-INCLUDE "data/animated_objects_3e_1.asm"
+INCLUDE "data/sprite_anims/surfing_pikachu_frames.asm"
+INCLUDE "data/sprite_anims/surfing_pikachu_oam.asm"
SurfingMinigame_LYOverridesInitialSineWave:
; a sine wave with amplitude 2
diff --git a/engine/yellow_intro.asm b/engine/movie/intro_yellow.asm
index 324ba86d..673d207c 100755
--- a/engine/yellow_intro.asm
+++ b/engine/movie/intro_yellow.asm
@@ -323,7 +323,7 @@ YellowIntroScene6:
call YellowIntro_BlankPalsDelay2AndDisableLCD
ld c, $5
call UpdateMusicCTimes
- ld a, rSCY - $ff00
+ ld a, LOW(rSCY)
ldh [hLCDCPointer], a
call YellowIntro_Copy8BitSineWave
ld hl, vBGMap0
@@ -456,9 +456,9 @@ YellowIntroScene10:
jr nz, .fill_row
ret
-Unkn_f9b6e: INCBIN "gfx/unknown_f9b6e.map"
-Unkn_f9be6: INCBIN "gfx/unknown_f9be6.map"
-Unkn_f9bf2: INCBIN "gfx/unknown_f9bf2.map"
+Unkn_f9b6e: INCBIN "gfx/intro/unknown_f9b6e.map"
+Unkn_f9be6: INCBIN "gfx/intro/unknown_f9be6.map"
+Unkn_f9bf2: INCBIN "gfx/intro/unknown_f9bf2.map"
YellowIntroScene11:
call YellowIntro_CheckFrameTimerDecrement
@@ -473,7 +473,7 @@ YellowIntroScene11:
sla a
ld e, a
ld d, $0
- ld hl, YellowIntroCloudGFX1
+ ld hl, YellowIntroCloudGFX
add hl, de
ld a, l
ldh [hVBlankCopySource], a
@@ -492,8 +492,7 @@ YellowIntroScene11:
call YellowIntro_NextScene
ret
-YellowIntroCloudGFX1: INCBIN "gfx/unknown_f9c2c.2bpp"
-YellowIntroCloudGFX2: INCBIN "gfx/unknown_f9c6c.2bpp" ; indirectly referenced
+YellowIntroCloudGFX: INCBIN "gfx/intro/clouds.2bpp"
YellowIntroScene12:
call YellowIntro_BlankPalsDelay2AndDisableLCD
@@ -799,11 +798,11 @@ YellowIntro_Copy8BitSineWave:
Request7TileTransferFromC810ToC710:
ld a, $10
ldh [hVBlankCopySource], a
- ld a, wLYOverridesBuffer / $100
+ ld a, HIGH(wLYOverridesBuffer)
ldh [hVBlankCopySource + 1], a
ld a, $10
ldh [hVBlankCopyDest], a
- ld a, wLYOverrides / $100
+ ld a, HIGH(wLYOverrides)
ldh [hVBlankCopyDest + 1], a
ld a, $7
ldh [hVBlankCopySize], a
@@ -833,13 +832,13 @@ InitYellowIntroGFXAndMusic:
call DelayFrame
xor a
ldh [hAutoBGTransferEnabled], a
- ld de, $6b5a
- ld hl, $8000
- ld bc, $3eff
+ ld de, YellowIntroGraphics2
+ ld hl, vChars0
+ lb bc, BANK(YellowIntroGraphics2), (YellowIntroGraphics2End - YellowIntroGraphics2 - $10) / $10
call CopyVideoData
- ld de, $635a
- ld hl, $9000
- ld bc, $3e80
+ ld de, YellowIntroGraphics1
+ ld hl, vChars2
+ lb bc, BANK(YellowIntroGraphics1), (YellowIntroGraphics1End - YellowIntroGraphics1) / $10
call CopyVideoData
call ClearObjectAnimationBuffers
call LoadYellowIntroObjectAnimationDataPointers
@@ -857,21 +856,21 @@ InitYellowIntroGFXAndMusic:
ret
LoadYellowIntroObjectAnimationDataPointers:
- ld a, YellowIntro_AnimatedObjectSpawnStateData % $100
+ ld a, LOW(YellowIntro_AnimatedObjectSpawnStateData)
ld [wAnimatedObjectSpawnStateDataPointer], a
- ld a, YellowIntro_AnimatedObjectSpawnStateData / $100
+ ld a, HIGH(YellowIntro_AnimatedObjectSpawnStateData)
ld [wAnimatedObjectSpawnStateDataPointer + 1], a
- ld a, YellowIntro_AnimatedObjectJumptable % $100
+ ld a, LOW(YellowIntro_AnimatedObjectJumptable)
ld [wAnimatedObjectJumptablePointer], a
- ld a, YellowIntro_AnimatedObjectJumptable / $100
+ ld a, HIGH(YellowIntro_AnimatedObjectJumptable)
ld [wAnimatedObjectJumptablePointer + 1], a
- ld a, YellowIntro_AnimatedObjectOAMData % $100
+ ld a, LOW(YellowIntro_AnimatedObjectOAMData)
ld [wAnimatedObjectOAMDataPointer], a
- ld a, YellowIntro_AnimatedObjectOAMData / $100
+ ld a, HIGH(YellowIntro_AnimatedObjectOAMData)
ld [wAnimatedObjectOAMDataPointer + 1], a
- ld a, YellowIntro_AnimatedObjectFramesData % $100
+ ld a, LOW(YellowIntro_AnimatedObjectFramesData)
ld [wAnimatedObjectFramesDataPointer], a
- ld a, YellowIntro_AnimatedObjectFramesData / $100
+ ld a, HIGH(YellowIntro_AnimatedObjectFramesData)
ld [wAnimatedObjectFramesDataPointer + 1], a
ret
@@ -1079,3 +1078,8 @@ Func_fa08e:
Unkn_fa0aa:
sine_wave $100
+
+INCLUDE "data/sprite_anims/intro_frames.asm"
+INCLUDE "data/sprite_anims/intro_oam.asm"
+
+INCLUDE "gfx/yellow_intro.asm"
diff --git a/engine/movie/title.asm b/engine/movie/title.asm
index 1f2723a3..0b421d89 100755
--- a/engine/movie/title.asm
+++ b/engine/movie/title.asm
@@ -38,7 +38,7 @@ DisplayTitleScreen:
call FarCopyData
ld hl, NineTile
ld de, vTitleLogo tile $6e
- ld bc, $10
+ ld bc, 1 tiles
ld a, BANK(NineTile)
call FarCopyData
ld hl, GamefreakLogoGraphics
diff --git a/engine/movie/title2.asm b/engine/movie/title_rb.asm
index df630b53..df630b53 100755
--- a/engine/movie/title2.asm
+++ b/engine/movie/title_rb.asm
diff --git a/engine/movie/title_yellow.asm b/engine/movie/title_yellow.asm
new file mode 100644
index 00000000..c70b87f9
--- /dev/null
+++ b/engine/movie/title_yellow.asm
@@ -0,0 +1,109 @@
+LoadYellowTitleScreenGFX:
+ ld hl, PokemonLogoGraphics
+ ld de, vChars2
+ ld bc, PokemonLogoGraphicsEnd - PokemonLogoGraphics
+ ld a, BANK(PokemonLogoGraphics)
+ call FarCopyData
+ ld hl, PokemonLogoCornerGraphics
+ ld de, vChars1 tile $7d
+ ld bc, PokemonLogoCornerGraphicsEnd - PokemonLogoCornerGraphics
+ ld a, BANK(PokemonLogoCornerGraphics)
+ call FarCopyData
+ ld hl, TitlePikachuBGGraphics
+ ld de, vChars1
+ ld bc, TitlePikachuBGGraphicsEnd - TitlePikachuBGGraphics
+ ld a, BANK(TitlePikachuBGGraphics)
+ call FarCopyData
+ ld hl, TitlePikachuOBGraphics
+ ld de, vChars1 tile $70
+ ld bc, TitlePikachuOBGraphicsEnd - TitlePikachuOBGraphics
+ ld a, BANK(TitlePikachuOBGraphics)
+ call FarCopyData
+ ret
+
+TitleScreen_PlacePokemonLogo:
+ hlcoord 2, 1
+ ld de, TitleScreenPokemonLogoTilemap
+ lb bc, 7, 16
+ call Bank3D_CopyBox
+ ret
+
+TitleScreen_PlacePikaSpeechBubble:
+ hlcoord 6, 4
+ ld de, TitleScreenPikaBubbleTilemap
+ lb bc, 4, 7
+ call Bank3D_CopyBox
+ hlcoord 9, 8
+ ld [hl], $64
+ inc hl
+ ld [hl], $65
+ ret
+
+TitleScreen_PlacePikachu:
+ hlcoord 4, 8
+ ld de, TitleScreenPikachuTilemap
+ lb bc, 9, 12
+ call Bank3D_CopyBox
+ hlcoord 16, 10
+ ld [hl], $96
+ hlcoord 16, 11
+ ld [hl], $9d
+ hlcoord 16, 12
+ ld [hl], $a7
+ hlcoord 16, 13
+ ld [hl], $b1
+ ld hl, TitleScreenPikachuEyesOAMData
+ ld de, wOAMBuffer
+ ld bc, $20
+ call CopyData
+ ret
+
+TitleScreenPikachuEyesOAMData:
+ db $60, $40, $f1, $22
+ db $60, $48, $f0, $22
+ db $68, $40, $f3, $22
+ db $68, $48, $f2, $22
+ db $60, $60, $f0, $02
+ db $60, $68, $f1, $02
+ db $68, $60, $f2, $02
+ db $68, $68, $f3, $02
+
+Bank3D_CopyBox:
+; copy cxb (xy) screen area from de to hl
+.row
+ push bc
+ push hl
+.col
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec c
+ jr nz, .col
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .row
+ ret
+
+TitleScreenPokemonLogoTilemap: ; 16x7
+ INCBIN "gfx/title/pokemon_logo.tilemap"
+
+Pointer_f4669: ; unreferenced
+ db $47, $48, $49, $4a, $4b, $4c, $4d, $4e, $4f, $5f
+
+TitleScreenPikaBubbleTilemap: ; 7x4
+ INCBIN "gfx/title/pika_bubble.tilemap"
+
+TitleScreenPikachuTilemap: ; 12x9
+ INCBIN "gfx/title/pikachu.tilemap"
+
+PokemonLogoGraphics: INCBIN "gfx/title/pokemon_logo.2bpp"
+PokemonLogoGraphicsEnd:
+PokemonLogoCornerGraphics: INCBIN "gfx/title/pokemon_logo_corner.2bpp"
+PokemonLogoCornerGraphicsEnd:
+TitlePikachuBGGraphics: INCBIN "gfx/title/pikachu_bg.2bpp"
+TitlePikachuBGGraphicsEnd:
+TitlePikachuOBGraphics: INCBIN "gfx/title/pikachu_ob.2bpp"
+TitlePikachuOBGraphicsEnd:
diff --git a/engine/overworld/healing_machine.asm b/engine/overworld/healing_machine.asm
index e5fba7e1..84891353 100755
--- a/engine/overworld/healing_machine.asm
+++ b/engine/overworld/healing_machine.asm
@@ -34,7 +34,7 @@ AnimateHealingMachine:
dec b
jr nz, .partyLoop
ld a, [wAudioROMBank]
- cp BANK(AudioEngine3)
+ cp BANK("Audio Engine 3")
ld [wAudioSavedROMBank], a
jr nz, .next
call StopAllMusic
diff --git a/engine/overworld/missable_objects.asm b/engine/overworld/missable_objects.asm
index 358a9b9f..bcaa731b 100644
--- a/engine/overworld/missable_objects.asm
+++ b/engine/overworld/missable_objects.asm
@@ -15,17 +15,13 @@ MarkTownVisitedAndLoadMissableObjects::
add hl, bc
ld a, [hli] ; load missable objects pointer in hl
ld h, [hl]
- ; fall through
-
-; LoadMissableObjects:
-; seems to not exist in yellow (predef replaced with something near TryPushingBoulder)
ld l, a
push hl
ld a, l
- sub MissableObjects & $ff ; calculate difference between out pointer and the base pointer
+ sub LOW(MissableObjects) ; calculate difference between out pointer and the base pointer
ld l, a
ld a, h
- sbc MissableObjects / $100
+ sbc HIGH(MissableObjects)
ld h, a
ld a, h
ldh [hDividend], a
diff --git a/engine/overworld/specific_script_flags.asm b/engine/overworld/specific_script_flags.asm
new file mode 100644
index 00000000..d6f333ac
--- /dev/null
+++ b/engine/overworld/specific_script_flags.asm
@@ -0,0 +1,25 @@
+SetMapSpecificScriptFlagsOnMapReload::
+ ld a, [wCurMap]
+ cp VERMILION_GYM
+ jr z, .vermilion_gym
+ ld c, a
+ ld hl, Bit5Maps
+.search_loop
+ ld a, [hli]
+ cp c
+ jr z, .in_list
+ cp a, $ff
+ jr nz, .search_loop
+ ret
+
+.vermilion_gym
+ ld hl, wCurrentMapScriptFlags
+ set 6, [hl]
+ ret
+
+.in_list
+ ld hl, wCurrentMapScriptFlags
+ set 5, [hl]
+ ret
+
+INCLUDE "data/maps/bit_5_maps.asm"
diff --git a/engine/overworld/sprite_collisions.asm b/engine/overworld/sprite_collisions.asm
index db81977b..b29dc108 100644
--- a/engine/overworld/sprite_collisions.asm
+++ b/engine/overworld/sprite_collisions.asm
@@ -1,5 +1,5 @@
_UpdateSprites::
- ld h, wSpriteStateData1 / $100
+ ld h, HIGH(wSpriteStateData1)
inc h
ld a, SPRITESTATEDATA2_IMAGEBASEOFFSET
.spriteLoop
diff --git a/engine/overworld/unused_load_missable_object_data.asm b/engine/overworld/unused_load_missable_object_data.asm
new file mode 100644
index 00000000..ce0c00d1
--- /dev/null
+++ b/engine/overworld/unused_load_missable_object_data.asm
@@ -0,0 +1,40 @@
+Func_f0a54: ; unreferenced
+ ret
+
+LoadMissableObjectData::
+; farcalled by an unreferenced function
+ ld hl, .MissableObjectsMaps
+.loop
+ ld a, [hli]
+ cp -1
+ ret z
+ ld b, a
+ ld a, [wCurMap]
+ cp b
+ jr z, .found
+ inc hl
+ inc hl
+ inc hl
+ jr .loop
+
+.found
+ ld a, [hli]
+ ld c, a
+ ld b, 0
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, wMissableObjectList
+ call CopyData
+ ret
+
+.MissableObjectsMaps:
+ dbbw BLUES_HOUSE, .BluesHouseEnd - .BluesHouse, .BluesHouse
+ db -1 ; end
+
+.BluesHouse:
+ db 1, HS_DAISY_SITTING_COPY
+ db 2, HS_DAISY_WALKING_COPY
+ db 3, HS_TOWN_MAP_COPY
+ db -1 ; end
+.BluesHouseEnd:
diff --git a/engine/pikachu_emotions.asm b/engine/pikachu/pikachu_emotions.asm
index 55262493..1378d383 100755
--- a/engine/pikachu_emotions.asm
+++ b/engine/pikachu/pikachu_emotions.asm
@@ -10,9 +10,9 @@ IsPlayerTalkingToPikachu::
ldh [hSpriteIndexOrTextID], a
ld [wd436], a
ret
-
+
InitializePikachuTextID::
- ld a, TEXT_PIKACHU_ANIM ; display
+ ld a, TEXT_PIKACHU_ANIM ; display
ldh [hSpriteIndexOrTextID], a
xor a
ld [wPlayerMovingDirection], a
@@ -49,7 +49,7 @@ DoStarterPikachuEmotions:
.done
ret
-
+
StarterPikachuEmotionsJumptable:
dw StarterPikachuEmotionCommand_nop ; 0
dw StarterPikachuEmotionCommand_text ; 1
@@ -62,7 +62,7 @@ StarterPikachuEmotionsJumptable:
dw StarterPikachuEmotionCommand_nop2 ; 8
dw StarterPikachuEmotionCommand_9 ; 9
dw StarterPikachuEmotionCommand_nop3 ; a
-
+
StarterPikachuEmotionCommand_nop:
StarterPikachuEmotionCommand_nop3:
ret
@@ -78,7 +78,7 @@ StarterPikachuEmotionCommand_text:
call PrintText
pop de
ret
-
+
StarterPikachuEmotionCommand_pcm:
ld a, [de]
inc de
@@ -94,7 +94,7 @@ PlayPikachuSoundClip_:
ret z
callfar PlayPikachuSoundClip
ret
-
+
StarterPikachuEmotionCommand_emote:
ld a, [wUpdateSpritesEnabled]
push af
@@ -108,14 +108,14 @@ StarterPikachuEmotionCommand_emote:
pop af
ld [wUpdateSpritesEnabled], a
ret
-
+
ShowPikachuEmoteBubble:
ld [wWhichEmotionBubble], a
ld a, $f ; Pikachu
ld [wEmotionBubbleSpriteIndex], a
predef EmotionBubble
ret
-
+
StarterPikachuEmotionCommand_movement:
ld a, [de]
inc de
@@ -128,7 +128,7 @@ StarterPikachuEmotionCommand_movement:
call ApplyPikachuMovementData_
pop de
ret
-
+
StarterPikachuEmotionCommand_delay:
ld a, [de]
inc de
@@ -137,7 +137,7 @@ StarterPikachuEmotionCommand_delay:
call DelayFrames
pop de
ret
-
+
StarterPikachuEmotionCommand_subcmd:
ld a, [de]
inc de
@@ -162,10 +162,10 @@ StarterPikachuEmotionCommand_subcmd:
dw PikachuPewterPokecenterCheck
dw PikachuFanClubCheck
dw PikachuBillsHouseCheck
-
+
StarterPikachuEmotionCommand_nop2:
ret
-
+
StarterPikachuEmotionCommand_9:
push de
call StarterPikachuEmotionCommand_turnawayfromplayer
@@ -178,12 +178,12 @@ StarterPikachuEmotionCommand_turnawayfromplayer:
xor $4
ld [wSpritePikachuStateData1FacingDirection], a
ret
-
+
DeletedFunction_fcffb:
; Inexplicably empty.
- rept 5
+REPT 5
nop
- endr
+ENDR
ret
PlaySpecificPikachuEmotion:
@@ -200,12 +200,13 @@ load_expression:
ld hl, PikachuEmotionTable
call DoStarterPikachuEmotions
ret
-
-PikachuEmotionTable:
+
pikaemotion_def: MACRO
-\1_id: dw \1
- endm
+\1_id:
+ dw \1
+ENDM
+PikachuEmotionTable:
pikaemotion_def PikachuEmotion0
pikaemotion_def PikachuEmotion1
pikaemotion_def PikachuEmotion2
@@ -240,10 +241,10 @@ pikaemotion_def: MACRO
pikaemotion_def PikachuEmotion31
pikaemotion_def PikachuEmotion32
pikaemotion_def PikachuEmotion33
-
+
PikachuEmotion33:
db $ff
-
+
MapSpecificPikachuExpression:
ld a, [wCurMap]
cp POKEMON_FAN_CLUB
@@ -305,14 +306,14 @@ MapSpecificPikachuExpression:
.play_emotion
scf
ret
-
+
.Emotions:
dpikaemotion PikachuEmotion18
dpikaemotion PikachuEmotion21
dpikaemotion PikachuEmotion23
dpikaemotion PikachuEmotion24
dpikaemotion PikachuEmotion25
-
+
IsPlayerPikachuAsleepInParty:
xor a
ld [wWhichPokemon], a
@@ -353,8 +354,8 @@ IsPlayerPikachuAsleepInParty:
.done
and a
ret
-
-INCLUDE "data/pikachu_emotions.asm"
+
+INCLUDE "data/pikachu/pikachu_emotions.asm"
PikachuWalksToNurseJoy:
ld a, $40
diff --git a/engine/pikachu_follow.asm b/engine/pikachu/pikachu_follow.asm
index fd2fbc47..9575c341 100755
--- a/engine/pikachu_follow.asm
+++ b/engine/pikachu/pikachu_follow.asm
@@ -642,10 +642,10 @@ asm_fc87f:
ld a, [hl]
dec a
add a
- add Pointer_fc8d6 % $100
+ add LOW(Pointer_fc8d6)
ld l, a
- ld a, Pointer_fc8d6 / $100
- adc $0
+ ld a, HIGH(Pointer_fc8d6)
+ adc 0
ld h, a
ld a, [hli]
ld [wd432], a
@@ -1474,7 +1474,7 @@ AreThereAtLeastTwoStepsInPikachuFollowCommandBuffer:
ret
WillPikachuSpawnOnTheScreen:
- ld h, wSpriteStateData2 / $100
+ ld h, HIGH(wSpriteStateData2)
ldh a, [hCurrentSpriteOffset] ; If we're here, this can only be $f0
add wSpritePikachuStateData2MapY - wSpritePikachuStateData2
ld l, a
@@ -1515,7 +1515,7 @@ WillPikachuSpawnOnTheScreen:
cp d
jr c, .on_screen
.not_on_screen
- ld h, wSpriteStateData1 / $100
+ ld h, HIGH(wSpriteStateData1)
ldh a, [hCurrentSpriteOffset]
add wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1
ld l, a
@@ -1524,7 +1524,7 @@ WillPikachuSpawnOnTheScreen:
jr .return
.on_screen
- ld h, wSpriteStateData2 / $100
+ ld h, HIGH(wSpriteStateData2)
ldh a, [hCurrentSpriteOffset]
add wSpritePikachuStateData2GrassPriority - wSpritePikachuStateData2
ld l, a
@@ -1540,7 +1540,7 @@ WillPikachuSpawnOnTheScreen:
ret
.GetNPCCurrentTile:
- ld h, wSpriteStateData1 / $100
+ ld h, HIGH(wSpriteStateData1)
ldh a, [hCurrentSpriteOffset]
add wSpritePikachuStateData1YPixels - wSpritePikachuStateData1
ld l, a
@@ -1560,9 +1560,9 @@ WillPikachuSpawnOnTheScreen:
ld d, 0
ld e, a
ld hl, wTileMap
- rept 5
+REPT 5
add hl, bc
- endr
+ENDR
add hl, de
ret
diff --git a/engine/pikachu_movement.asm b/engine/pikachu/pikachu_movement.asm
index 2d87e947..6b912e61 100755
--- a/engine/pikachu_movement.asm
+++ b/engine/pikachu/pikachu_movement.asm
@@ -237,29 +237,29 @@ PikachuMovementDatabase:
PikaMovementFunc1Jumptable:
dw PikaMovementFunc1_EndCommand_ ; 00
- dw PikaMovementFunc1_LoadPikachuCurrentPosition ; 01
- dw PikaMovementFunc1_DelayFrames ; 02
- dw PikaMovementFunc1_WalkInCurrentFacingDirection ; 03
- dw PikaMovementFunc1_WalkInOppositeFacingDirection ; 04
- dw PikaMovementFunc1_StepTurningCounterclockwise ; 05
- dw PikaMovementFunc1_StepTurningClockwise ; 06
- dw PikaMovementFunc1_StepForwardLeft ; 07
- dw PikaMovementFunc1_StepForwardRight ; 08
- dw PikaMovementFunc1_StepBackwardLeft ; 09
- dw PikaMovementFunc1_StepBackwardRight ; 0a
- dw PikaMovementFunc1_MoveDown ; 0b
- dw PikaMovementFunc1_MoveUp ; 0c
- dw PikaMovementFunc1_MoveLeft ; 0d
- dw PikaMovementFunc1_MoveRight ; 0e
- dw PikaMovementFunc1_MoveDownLeft ; 0f
- dw PikaMovementFunc1_MoveDownRight ; 10
- dw PikaMovementFunc1_MoveUpLeft ; 11
- dw PikaMovementFunc1_MoveUpRight ; 12
- dw PikaMovementFunc1_LookDown ; 13
- dw PikaMovementFunc1_LookUp ; 14
- dw PikaMovementFunc1_LookLeft ; 15
- dw PikaMovementFunc1_LookRight ; 16
- dw PikaMovementFunc1_EndCommand_ ; 17
+ dw PikaMovementFunc1_LoadPikachuCurrentPosition ; 01
+ dw PikaMovementFunc1_DelayFrames ; 02
+ dw PikaMovementFunc1_WalkInCurrentFacingDirection ; 03
+ dw PikaMovementFunc1_WalkInOppositeFacingDirection ; 04
+ dw PikaMovementFunc1_StepTurningCounterclockwise ; 05
+ dw PikaMovementFunc1_StepTurningClockwise ; 06
+ dw PikaMovementFunc1_StepForwardLeft ; 07
+ dw PikaMovementFunc1_StepForwardRight ; 08
+ dw PikaMovementFunc1_StepBackwardLeft ; 09
+ dw PikaMovementFunc1_StepBackwardRight ; 0a
+ dw PikaMovementFunc1_MoveDown ; 0b
+ dw PikaMovementFunc1_MoveUp ; 0c
+ dw PikaMovementFunc1_MoveLeft ; 0d
+ dw PikaMovementFunc1_MoveRight ; 0e
+ dw PikaMovementFunc1_MoveDownLeft ; 0f
+ dw PikaMovementFunc1_MoveDownRight ; 10
+ dw PikaMovementFunc1_MoveUpLeft ; 11
+ dw PikaMovementFunc1_MoveUpRight ; 12
+ dw PikaMovementFunc1_LookDown ; 13
+ dw PikaMovementFunc1_LookUp ; 14
+ dw PikaMovementFunc1_LookLeft ; 15
+ dw PikaMovementFunc1_LookRight ; 16
+ dw PikaMovementFunc1_EndCommand_ ; 17
PikaMovementFunc1_EndCommand:
ld a, [wPikachuMovementFlags]
@@ -926,8 +926,8 @@ LedgeHoppingShadowGFX_3FEnd:
LoadPikachuBallIconIntoVRAM:
ld hl, vNPCSprites2 + $7e * $10
- ld de, GFX_fd86b
- lb bc, BANK(GFX_fd86b), 1
+ ld de, OverworldPikachuBallGFX
+ lb bc, BANK(OverworldPikachuBallGFX), 1
jp CopyVideoDataDoubleAlternate
Func_fd851:
@@ -936,8 +936,8 @@ Func_fd851:
.loop
push af
push hl
- ld de, GFX_fd86b
- lb bc, BANK(GFX_fd86b), 4
+ ld de, OverworldPikachuBallGFX
+ lb bc, BANK(OverworldPikachuBallGFX), 4
call CopyVideoDataAlternate
pop hl
ld de, 4 * $10
@@ -947,8 +947,8 @@ Func_fd851:
jr nz, .loop
ret
-GFX_fd86b:
-INCBIN "gfx/unknown_fd86b.2bpp"
+OverworldPikachuBallGFX:
+INCBIN "gfx/overworld/pikachu_ball.2bpp"
LoadPikachuSpriteIntoVRAM:
ld de, PikachuSprite
diff --git a/engine/pikachu_pcm.asm b/engine/pikachu/pikachu_pcm.asm
index bf1aa57f..bf1aa57f 100755
--- a/engine/pikachu_pcm.asm
+++ b/engine/pikachu/pikachu_pcm.asm
diff --git a/engine/pikachu_pic_animation.asm b/engine/pikachu/pikachu_pic_animation.asm
index 7829c048..33a3e504 100755
--- a/engine/pikachu_pic_animation.asm
+++ b/engine/pikachu/pikachu_pic_animation.asm
@@ -163,11 +163,12 @@ LoadCurrentPikaPicAnimScriptPointer:
call UpdatePikaPicAnimPointer
ret
-PikaPicAnimPointers:
-pikapic_def: macro
-\1_id: dw \1
-endm
+pikapic_def: MACRO
+\1_id:
+ dw \1
+ENDM
+PikaPicAnimPointers:
pikapic_def PikaPicAnimScript0 ; 00
pikapic_def PikaPicAnimScript1 ; 01
pikapic_def PikaPicAnimScript2 ; 02
@@ -406,7 +407,7 @@ LoadPikaPicAnimObjectData:
.not_done
ret
-INCLUDE "data/pikachu_pic_objects.asm"
+INCLUDE "data/pikachu/pikachu_pic_objects.asm"
LoadCurPikaPicObjectTilemap:
and a
@@ -473,7 +474,7 @@ LoadCurPikaPicObjectTilemap:
pop bc
ret
-INCLUDE "data/pikachu_pic_tilemaps.asm"
+INCLUDE "data/pikachu/pikachu_pic_tilemaps.asm"
LoadPikaPicAnimGFXHeader:
push hl
@@ -848,4 +849,7 @@ PikaPicAnimCommand_thunderbolt:
call DelayFrames
ret
-INCLUDE "data/pikachu_pic_animation.asm"
+INCLUDE "data/pikachu/pikachu_pic_animation.asm"
+
+Func_fe66e:
+ ret
diff --git a/engine/pikachu_status.asm b/engine/pikachu/pikachu_status.asm
index c73d3b3f..c73d3b3f 100755
--- a/engine/pikachu_status.asm
+++ b/engine/pikachu/pikachu_status.asm
diff --git a/engine/pikachu/respawn_overworld_pikachu.asm b/engine/pikachu/respawn_overworld_pikachu.asm
new file mode 100644
index 00000000..4b610085
--- /dev/null
+++ b/engine/pikachu/respawn_overworld_pikachu.asm
@@ -0,0 +1,6 @@
+RespawnOverworldPikachu:
+ callfar IsThisPartymonStarterPikachu_Party
+ ret nc
+ ld a, $3
+ ld [wPikachuSpawnState], a
+ ret
diff --git a/engine/printer.asm b/engine/printer/printer.asm
index f0b681af..18bb18a6 100644
--- a/engine/printer.asm
+++ b/engine/printer/printer.asm
@@ -1,16 +1,3 @@
- const_def
- const PRINTER_STATUS_BLANK
- const PRINTER_STATUS_CHECKING_LINK
- const PRINTER_STATUS_TRANSMITTING
- const PRINTER_STATUS_PRINTING
- const PRINTER_ERROR_1
- const PRINTER_ERROR_2
- const PRINTER_ERROR_3
- const PRINTER_ERROR_4
- const PRINTER_ERROR_WRONG_DEVICE
-
-INCLUDE "engine/printer/serial.asm"
-
PrintPokedexEntry:
ld a, [wUpdateSpritesEnabled]
push af
@@ -128,7 +115,7 @@ Printer_PrepareDexEntryForPrinting:
callfar Pokedex_PrepareDexEntryForPrinting
ret
-PrintSurfingMinigameHighScore:
+PrintSurfingMinigameHighScore::
xor a
ldh [hCanceledPrinting], a
call Printer_PlayPrinterMusic
@@ -641,7 +628,7 @@ GBPrinter_UpdateStatusMessage:
db "This is not the"
next "Game Boy Printer!@"
-Printer_PrepareSurfingMinigameHighScoreTileMap:
+Printer_PrepareSurfingMinigameHighScoreTileMap::
call GBPalWhiteOutWithDelay3
call ClearScreen
ld de, SurfingPikachu2Graphics
@@ -788,7 +775,7 @@ CopySurfingMinigameScore:
dec de
ret
-SurfingPikachu2Graphics: INCBIN "gfx/surfing_pikachu_2.2bpp"
+SurfingPikachu2Graphics: INCBIN "gfx/surfing_pikachu/surfing_pikachu_2.2bpp"
SurfingPikachu2GraphicsEnd:
PrintPCBox_DrawPage1:
diff --git a/engine/unknown_ea3ea.asm b/engine/printer/printer2.asm
index c10f1555..180f044c 100755
--- a/engine/unknown_ea3ea.asm
+++ b/engine/printer/printer2.asm
@@ -177,11 +177,11 @@ Printer_GetMonStats:
db "--------------@"
GFX_ea563:
-INCBIN "gfx/stats_screen_hp.1bpp"
+INCBIN "gfx/printer/hp.1bpp"
GFX_ea563End:
GFX_ea56b:
-INCBIN "gfx/stats_screen_lv.1bpp"
+INCBIN "gfx/printer/lv.1bpp"
GFX_ea56bEnd:
PrinterDebug_LoadGFX:
@@ -208,7 +208,7 @@ PrinterDebug_LoadGFX:
ret
GFX_ea597:
-INCBIN "gfx/zero_one_ea597.2bpp"
+INCBIN "gfx/printer/01.2bpp"
GFX_ea597End:
PrinterDebug_ConvertStatusFlagsToTiles:
diff --git a/engine/printer/serial.asm b/engine/printer/serial.asm
index 97f655bb..fd4dd056 100755
--- a/engine/printer/serial.asm
+++ b/engine/printer/serial.asm
@@ -1,3 +1,14 @@
+ const_def
+ const PRINTER_STATUS_BLANK
+ const PRINTER_STATUS_CHECKING_LINK
+ const PRINTER_STATUS_TRANSMITTING
+ const PRINTER_STATUS_PRINTING
+ const PRINTER_ERROR_1
+ const PRINTER_ERROR_2
+ const PRINTER_ERROR_3
+ const PRINTER_ERROR_4
+ const PRINTER_ERROR_WRONG_DEVICE
+
StartTransmission_Send9Rows:
ld a, 9
Printer_StartTransmission:
@@ -104,9 +115,9 @@ Printer_StartTransmittingTilemap:
ld hl, PrinterDataPacket3
call CopyPrinterDataHeader
call Printer_Convert2RowsTo2bpp
- ld a, (wPrinterSendDataSource1End - wPrinterSendDataSource1) % $100
+ ld a, LOW(wPrinterSendDataSource1End - wPrinterSendDataSource1)
ld [wPrinterDataSize], a
- ld a, (wPrinterSendDataSource1End - wPrinterSendDataSource1) / $100
+ ld a, HIGH(wPrinterSendDataSource1End - wPrinterSendDataSource1)
ld [wPrinterDataSize + 1], a
call ComputePrinterChecksum
call Printer_Next