summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/facing.asm188
-rwxr-xr-xdata/item_prices.asm2
-rw-r--r--engine/bank3c/main.asm4
-rw-r--r--engine/battle/common_text.asm2
-rwxr-xr-xengine/hall_of_fame.asm2
-rwxr-xr-xengine/items/items.asm2
-rw-r--r--engine/menu/bills_pc.asm6
-rw-r--r--engine/overworld/oam.asm161
-rwxr-xr-xengine/titlescreen.asm461
-rwxr-xr-xengine/town_map.asm2
-rw-r--r--home.asm32
-rwxr-xr-xmain.asm2
-rwxr-xr-xtext/item_names.asm2
-rwxr-xr-xyellow/main.asm547
14 files changed, 418 insertions, 995 deletions
diff --git a/data/facing.asm b/data/facing.asm
index 138a0162..6906002e 100644
--- a/data/facing.asm
+++ b/data/facing.asm
@@ -1,133 +1,57 @@
SpriteFacingAndAnimationTable: ; 4000 (1:4000)
- dw SpriteFacingDownAndStanding ; facing down, walk animation frame 0
- dw SpriteFacingDownAndWalking ; facing down, walk animation frame 1
- dw SpriteFacingDownAndStanding ; facing down, walk animation frame 2
- dw SpriteFacingDownAndWalking2 ; facing down, walk animation frame 3
-
- dw SpriteFacingUpAndStanding ; facing up, walk animation frame 0
- dw SpriteFacingUpAndWalking ; facing up, walk animation frame 1
- dw SpriteFacingUpAndStanding ; facing up, walk animation frame 2
- dw SpriteFacingUpAndWalking2 ; facing up, walk animation frame 3
-
- dw SpriteFacingLeftAndStanding ; facing left, walk animation frame 0
- dw SpriteFacingLeftAndWalking ; facing left, walk animation frame 1
- dw SpriteFacingLeftAndStanding ; facing left, walk animation frame 2
- dw SpriteFacingLeftAndWalking ; facing left, walk animation frame 3
-
- dw SpriteFacingRightAndStanding ; facing right, walk animation frame 0
- dw SpriteFacingRightAndWalking ; facing right, walk animation frame 1
- dw SpriteFacingRightAndStanding ; facing right, walk animation frame 2
- dw SpriteFacingRightAndWalking ; facing right, walk animation frame 3
-
- dw SpriteFacingDownAndStanding ; ---
- dw SpriteFacingDownAndStanding ; This table is used for sprites $a and $b.
- dw SpriteFacingDownAndStanding ; All orientation and animation parameters
- dw SpriteFacingDownAndStanding ; lead to the same result. Used for immobile
- dw SpriteFacingDownAndStanding ; sprites like items on the ground
- dw SpriteFacingDownAndStanding ; ---
- dw SpriteFacingDownAndStanding
- dw SpriteFacingDownAndStanding
- dw SpriteFacingDownAndStanding
- dw SpriteFacingDownAndStanding
- dw SpriteFacingDownAndStanding
- dw SpriteFacingDownAndStanding
- dw SpriteFacingDownAndStanding
- dw SpriteFacingDownAndStanding
- dw SpriteFacingDownAndStanding
- dw SpriteFacingDownAndStanding
-; special case
- dw SpriteSpecialCase ; pikachu maybe?
-
-SpriteFacingDownAndStanding: ; 4042 (1:4042)
- db $04
-; Sprite OAM Parameters
- db $00,$00,$00,$00 ; top left
- db $00,$08,$01,$00 ; top right
- db $08,$00,$02,OAMFLAG_CANBEMASKED ; bottom left
- db $08,$08,$03,OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right
-
-SpriteFacingDownAndWalking: ; 4053 (1:4053)
- db $04
-; Sprite OAM Parameters
- db $00,$00,$80,$00 ; top left
- db $00,$08,$81,$00 ; top right
- db $08,$00,$82,OAMFLAG_CANBEMASKED ; bottom left
- db $08,$08,$83,OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right
-
-SpriteFacingDownAndWalking2: ; 4064 (1:4064)
- db $04
-; Sprite OAM Parameters
- db $00,$08,$80,OAMFLAG_VFLIPPED ; top left
- db $00,$00,$81,OAMFLAG_VFLIPPED ; top right
- db $08,$08,$82,OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED ; bottom left
- db $08,$00,$83,OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right
-
-SpriteFacingUpAndStanding: ; 4075 (1:4075)
- db $04
-; Sprite OAM Parameters
- db $00,$00,$04,$00 ; top left
- db $00,$08,$05,$00 ; top right
- db $08,$00,$06,OAMFLAG_CANBEMASKED ; bottom left
- db $08,$08,$07,OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right
-
-SpriteFacingUpAndWalking: ; 4086 (1:4086)
- db $04
-; Sprite OAM Parameters
- db $00,$00,$84,$00 ; top left
- db $00,$08,$85,$00 ; top right
- db $08,$00,$86,OAMFLAG_CANBEMASKED ; bottom left
- db $08,$08,$87,OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right
-
-SpriteFacingUpAndWalking2: ; 4097 (1:4097)
- db $04
-; Sprite OAM Parameters
- db $00,$08,$84,OAMFLAG_VFLIPPED ; top left
- db $00,$00,$85,OAMFLAG_VFLIPPED ; top right
- db $08,$08,$86,OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED ; bottom left
- db $08,$00,$87,OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right
-
-SpriteFacingLeftAndStanding: ; 40a8 (1:40a8)
- db $04
-; Sprite OAM Parameters
- db $00,$00,$08,$00 ; top left
- db $00,$08,$09,$00 ; top right
- db $08,$00,$0a,OAMFLAG_CANBEMASKED ; bottom left
- db $08,$08,$0b,OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right
-
-SpriteFacingLeftAndWalking: ; 40b9 (1:40b9)
- db $04
-; Sprite OAM Parameters
- db $00,$00,$88,$00 ; top left
- db $00,$08,$89,$00 ; top right
- db $08,$00,$8a,OAMFLAG_CANBEMASKED ; bottom left
- db $08,$08,$8b,OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right
-
-SpriteFacingRightAndStanding: ; 40ca (1:40ca)
- db $04
-; Sprite OAM Parameters
- db $00,$08,$08,OAMFLAG_VFLIPPED ; top left
- db $00,$00,$09,OAMFLAG_VFLIPPED ; top right
- db $08,$08,$0a,OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED ; bottom left
- db $08,$00,$0b,OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right
-
-SpriteFacingRightAndWalking: ; 40db (1:40db)
- db $04
-; Sprite OAM Parameters
- db $00,$08,$88,OAMFLAG_VFLIPPED ; top left
- db $00,$00,$89,OAMFLAG_VFLIPPED ; top right
- db $08,$08,$8a,OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED ; bottom left
- db $08,$00,$8b,OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right
-
-SpriteSpecialCase ; 40ec (1:40ec)
- db $09
-; Sprite OAM Parameters
- db -$4,-$4,$00,$00
- db -$4,$04,$01,$00
- db -$4,$0c,$00,OAMFLAG_VFLIPPED
- db $04,-$4,$01,$00
- db $04,$04,$02,$00
- db $04,$0c,$01,$00
- db $0c,-$4,$00,OAM_VFLIP | OAMFLAG_CANBEMASKED
- db $0c,$04,$01,OAMFLAG_CANBEMASKED
- db $0c,$0c,$00,OAM_VFLIP | OAM_HFLIP | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA
- \ No newline at end of file
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters ; facing down, walk animation frame 0
+ dw SpriteFacingDownAndWalking, SpriteOAMParameters ; facing down, walk animation frame 1
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters ; facing down, walk animation frame 2
+ dw SpriteFacingDownAndWalking, SpriteOAMParametersFlipped ; facing down, walk animation frame 3
+ dw SpriteFacingUpAndStanding, SpriteOAMParameters ; facing up, walk animation frame 0
+ dw SpriteFacingUpAndWalking, SpriteOAMParameters ; facing up, walk animation frame 1
+ dw SpriteFacingUpAndStanding, SpriteOAMParameters ; facing up, walk animation frame 2
+ dw SpriteFacingUpAndWalking, SpriteOAMParametersFlipped ; facing up, walk animation frame 3
+ dw SpriteFacingLeftAndStanding, SpriteOAMParameters ; facing left, walk animation frame 0
+ dw SpriteFacingLeftAndWalking, SpriteOAMParameters ; facing left, walk animation frame 1
+ dw SpriteFacingLeftAndStanding, SpriteOAMParameters ; facing left, walk animation frame 2
+ dw SpriteFacingLeftAndWalking, SpriteOAMParameters ; facing left, walk animation frame 3
+ dw SpriteFacingLeftAndStanding, SpriteOAMParametersFlipped ; facing right, walk animation frame 0
+ dw SpriteFacingLeftAndWalking, SpriteOAMParametersFlipped ; facing right, walk animation frame 1
+ dw SpriteFacingLeftAndStanding, SpriteOAMParametersFlipped ; facing right, walk animation frame 2
+ dw SpriteFacingLeftAndWalking, SpriteOAMParametersFlipped ; facing right, walk animation frame 3
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters ; ---
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters ; This table is used for sprites $a and $b.
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters ; All orientation and animation parameters
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters ; lead to the same result. Used for immobile
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters ; sprites like items on the ground
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters ; ---
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters
+ dw SpriteFacingDownAndStanding, SpriteOAMParameters
+
+SpriteFacingDownAndStanding: ; 4080 (1:4080)
+ db $00,$01,$02,$03
+SpriteFacingDownAndWalking: ; 4084 (1:4084)
+ db $80,$81,$82,$83
+SpriteFacingUpAndStanding: ; 4088 (1:4088)
+ db $04,$05,$06,$07
+SpriteFacingUpAndWalking: ; 408c (1:408c)
+ db $84,$85,$86,$87
+SpriteFacingLeftAndStanding: ; 4090 (1:4090)
+ db $08,$09,$0a,$0b
+SpriteFacingLeftAndWalking: ; 4094 (1:4094)
+ db $88,$89,$8a,$8b
+
+SpriteOAMParameters: ; 4098 (1:4098)
+ db $00,$00, $00 ; top left
+ db $00,$08, $00 ; top right
+ db $08,$00, OAMFLAG_CANBEMASKED ; bottom left
+ db $08,$08, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right
+SpriteOAMParametersFlipped: ; 40a4 (1:40a4)
+ db $00,$08, OAMFLAG_VFLIPPED
+ db $00,$00, OAMFLAG_VFLIPPED
+ db $08,$08, OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED
+ db $08,$00, OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA
diff --git a/data/item_prices.asm b/data/item_prices.asm
index ed60e56b..aa5cb21e 100755
--- a/data/item_prices.asm
+++ b/data/item_prices.asm
@@ -1,4 +1,4 @@
-ItemPrices: ; 4494 (1:4494)
+ItemPrices: ; 4608 (1:4608)
money 0 ; MASTER_BALL
money 1200 ; ULTRA_BALL
money 600 ; GREAT_BALL
diff --git a/engine/bank3c/main.asm b/engine/bank3c/main.asm
index 6253f971..c967e93c 100644
--- a/engine/bank3c/main.asm
+++ b/engine/bank3c/main.asm
@@ -1,4 +1,4 @@
-PlayPikachuSoundClip:: ; f0000 (3c:4000)
+Func_f0000:: ; f0000 (3c:4000)
ld a, e
ld e, a
ld d, $0
@@ -53,7 +53,7 @@ PlayPikachuSoundClip:: ; f0000 (3c:4000)
ld [rNR34], a
pop hl
pop bc
- call PlayPikachuPCM
+ call Func_150
xor a
ld [wc0f3], a
ld [wc0f4], a
diff --git a/engine/battle/common_text.asm b/engine/battle/common_text.asm
index 449fc1ab..fcc00376 100644
--- a/engine/battle/common_text.asm
+++ b/engine/battle/common_text.asm
@@ -16,7 +16,7 @@ PrintBeginningBattleText: ; f4000 (3d:4000)
jr c,.asm_f4026
ld e,$a
.asm_f4026
- callab PlayPikachuSoundClip
+ callab Func_f0000
jr .continue
.notnewbattletype
ld a, [wEnemyMonSpecies2]
diff --git a/engine/hall_of_fame.asm b/engine/hall_of_fame.asm
index 3db51e05..cf7a3caa 100755
--- a/engine/hall_of_fame.asm
+++ b/engine/hall_of_fame.asm
@@ -159,7 +159,7 @@ HoFDisplayAndRecordMonInfo: ; 7030e (1c:430e)
callab IsThisPartymonOurPikachu ; 3f:4e18
jr nc, .asm_70336
ld e, $22
- callab PlayPikachuSoundClip
+ callab Func_f0000
jr .asm_7033c
.asm_70336
ld a,[wHoFMonSpecies]
diff --git a/engine/items/items.asm b/engine/items/items.asm
index 2b3c1840..3afae425 100755
--- a/engine/items/items.asm
+++ b/engine/items/items.asm
@@ -676,7 +676,7 @@ ItemUseEvoStone: ; d7d0 (3:57d0)
callab IsThisPartymonOurPikachu
jr nc, .notPlayerPikachu
ld e, $1b
- callab PlayPikachuSoundClip
+ callab Func_f0000
ld a, [wWhichPokemon]
ld hl, wPartyMonNicks
call GetPartyMonName
diff --git a/engine/menu/bills_pc.asm b/engine/menu/bills_pc.asm
index 3ef1f95a..4a274871 100644
--- a/engine/menu/bills_pc.asm
+++ b/engine/menu/bills_pc.asm
@@ -241,7 +241,7 @@ BillsPCDeposit: ; 2156d (8:556d)
callab IsThisPartymonOurPikachu
jr nc, .asm_215c9
ld e, $1b
- callab PlayPikachuSoundClip
+ callab Func_f0000
jr .asm_215cf
.asm_215c9
ld a, [wcf91]
@@ -304,7 +304,7 @@ BillsPCWithdraw: ; 21613 (8:5613)
callab Func_fce0d
jr nc, .asm_21660
ld e, $22
- callab PlayPikachuSoundClip
+ callab Func_f0000
jr .asm_21666
.asm_21660
ld a, [wcf91]
@@ -355,7 +355,7 @@ BillsPCRelease: ; 21690 (8:5690)
ld hl, wBoxMonNicks
call GetPartyMonName
ld e, $27
- callab PlayPikachuSoundClip
+ callab Func_f0000
ld hl, PikachuUnhappyText
call PrintText
jp BillsPCMenu
diff --git a/engine/overworld/oam.asm b/engine/overworld/oam.asm
index e81375a3..ff85eb3e 100644
--- a/engine/overworld/oam.asm
+++ b/engine/overworld/oam.asm
@@ -1,14 +1,12 @@
-PrepareOAMData: ; 499b (1:499b)
+PrepareOAMData:
; Determine OAM data for currently visible
; sprites and write it to wOAMBuffer.
-; Yellow code has been changed to use registers more efficiently
-; as well as tweaking the code to show gbc palettes
ld a, [wUpdateSpritesEnabled]
dec a
jr z, .updateEnabled
- cp $ff
+ cp 0 - 1
ret nz
ld [wUpdateSpritesEnabled], a
jp HideSprites
@@ -19,10 +17,10 @@ PrepareOAMData: ; 499b (1:499b)
.spriteLoop
ld [hSpriteOffset2], a
-
- ld e, a
+
ld d, wSpriteStateData1 / $100
-
+ ld a, [hSpriteOffset2]
+ ld e, a
ld a, [de] ; c1x0
and a
jp z, .nextSprite
@@ -42,22 +40,16 @@ PrepareOAMData: ; 499b (1:499b)
jr c, .usefacing
; unchanging
- ld a, $0
+ and $f
+ add $10 ; skip to the second half of the table which doesn't account for facing direction
jr .next
.usefacing
and $f
.next
-; read the entry from the table
- ld c, a
- ld b, 0
- ld hl, SpriteFacingAndAnimationTable
- add hl, bc
- add hl, bc
- ld a, [hli]
- ld h, [hl]
ld l, a
+
; get sprite priority
push de
inc d
@@ -69,46 +61,65 @@ PrepareOAMData: ; 499b (1:499b)
ld [hSpritePriority], a ; temp store sprite priority
pop de
+; read the entry from the table
+ ld h, 0
+ ld bc, SpriteFacingAndAnimationTable
+ add hl, hl
+ add hl, hl
+ add hl, bc
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
call GetSpriteScreenXY
ld a, [hOAMBufferOffset]
- add [hl]
- cp $a0
- jr z, .hidden
- jr nc, .asm_4a41
-.hidden
- call Func_4a7b
- ld [wd5cd], a
- ld a, [hOAMBufferOffset]
-
ld e, a
ld d, wOAMBuffer / $100
.tileLoop
- ld a, [hli]
- ld c, a
-.loop
ld a, [hSpriteScreenY] ; temp for sprite Y position
add $10 ; Y=16 is top of screen (Y=0 is invisible)
add [hl] ; add Y offset from table
ld [de], a ; write new sprite OAM Y position
inc hl
- inc e
ld a, [hSpriteScreenX] ; temp for sprite X position
add $8 ; X=8 is left of screen (X=0 is invisible)
add [hl] ; add X offset from table
- ld [de], a
- inc hl
inc e
- ld a, [wd5cd]
- add [hl]
- cp $80
- jr c, .asm_4a1c
+ ld [de], a ; write new sprite OAM X position
+ inc e
+ ld a, [bc] ; read pattern number offset (accommodates orientation (offset 0,4 or 8) and animation (offset 0 or $80))
+ inc bc
+ push bc
ld b, a
- ld a, [$fffc]
- add b
-.asm_4a1c
+
+ ld a, [wd5cd] ; temp copy of c1x2
+ swap a ; high nybble determines sprite used (0 is always player sprite, next are some npcs)
+ and $f
+
+ ; Sprites $a and $b have one face (and therefore 4 tiles instead of 12).
+ ; As a result, sprite $b's tile offset is less than normal.
+ cp $b
+ jr nz, .notFourTileSprite
+ ld a, $a * 12 + 4
+ jr .next2
+
+.notFourTileSprite
+ ; a *= 12
+ sla a
+ sla a
+ ld c, a
+ sla a
+ add c
+
+.next2
+ add b ; add the tile offset from the table (based on frame and facing direction)
+ pop bc
ld [de], a ; tile id
inc hl
inc e
@@ -118,19 +129,15 @@ PrepareOAMData: ; 499b (1:499b)
ld a, [hSpritePriority]
or [hl]
.skipPriority
- and $f0
- bit 4, a ; OBP0 or OBP1
- jr z, .spriteusesOBP0
- or %100 ; palettes 4-7 are OBP1
-.spriteusesOBP0
- ld [de], a
inc hl
+ ld [de], a
inc e
- dec c
- jr nz, .loop
+ bit 0, a ; OAMFLAG_ENDOFDATA
+ jr z, .tileLoop
ld a, e
ld [hOAMBufferOffset], a
+
.nextSprite
ld a, [hSpriteOffset2]
add $10
@@ -138,33 +145,28 @@ PrepareOAMData: ; 499b (1:499b)
jp nz, .spriteLoop
; Clear unused OAM.
-.asm_4a41
+ ld a, [hOAMBufferOffset]
+ ld l, a
+ ld h, wOAMBuffer / $100
+ ld de, $4
+ ld b, $a0
ld a, [wd736]
bit 6, a ; jumping down ledge or fishing animation?
- ld c, $a0
+ ld a, $a0
jr z, .clear
; Don't clear the last 4 entries because they are used for the shadow in the
; jumping down ledge animation and the rod in the fishing animation.
- ld c, $90
+ ld a, $90
.clear
- ld a, [hOAMBufferOffset]
- cp c
- ret nc
- ld l, a
- ld h, wOAMBuffer / $100
- ld a, c
- ld de, $4 ; entry size
- ld b, $a0
-.clearLoop
+ cp l
+ ret z
ld [hl], b
add hl, de
- cp l
- jr nz, .clearLoop
- ret
+ jr .clear
-GetSpriteScreenXY: ; 4a5f (1:4a5f)
+GetSpriteScreenXY: ; 4bd1 (1:4bd1)
inc e
inc e
ld a, [de] ; c1x4
@@ -186,32 +188,6 @@ GetSpriteScreenXY: ; 4a5f (1:4a5f)
ld [de], a ; c1xb (x)
ret
-Func_4a7b: ; 4a7b (1:4a7b)
- push bc
- ld a, [wd5cd] ; temp copy of c1x2
- swap a ; high nybble determines sprite used (0 is always player sprite, next are some npcs)
- and $f
-
- ; Sprites $a and $b have one face (and therefore 4 tiles instead of 12).
- ; As a result, sprite $b's tile offset is less than normal.
- cp $b
- jr nz, .notFourTileSprite
- ld a, $a * 12 + 4 ; $7c
- jr .done
-
-.notFourTileSprite
- ; a *= 12
- add a
- add a
- ld c, a
- add a
- add c
-.done
- pop bc
- ret
-
-INCLUDE "engine/oam_dma.asm"
-
_IsTilePassable:: ; 4aaa (1:4aaa)
ld hl,W_TILESETCOLLISIONPTR ; pointer to list of passable tiles
ld a,[hli]
@@ -222,11 +198,8 @@ _IsTilePassable:: ; 4aaa (1:4aaa)
cp a,$ff
jr z,.tileNotPassable
cp c
- jr nz,.loop
- xor a
- ret
+ ret z
+ jr .loop
.tileNotPassable
scf
- ret
-
-INCLUDE "data/collision.asm" ; probably \ No newline at end of file
+ ret \ No newline at end of file
diff --git a/engine/titlescreen.asm b/engine/titlescreen.asm
index 244d9ff7..8d605c49 100755
--- a/engine/titlescreen.asm
+++ b/engine/titlescreen.asm
@@ -1,4 +1,9 @@
-SetDefaultNamesBeforeTitlescreen: ; 414b (1:414b)
+; copy text of fixed length NAME_LENGTH (like player name, rival name, mon names, ...)
+CopyFixedLengthText: ; 42b1 (1:42b1)
+ ld bc, NAME_LENGTH
+ jp CopyData
+
+SetDefaultNamesBeforeTitlescreen: ; 42b7 (1:42b7)
ld hl, NintenText
ld de, wPlayerName
call CopyFixedLengthText
@@ -16,7 +21,7 @@ SetDefaultNamesBeforeTitlescreen: ; 414b (1:414b)
ld [wAudioROMBank], a
ld [wAudioSavedROMBank], a
-DisplayTitleScreen: ; 4171 (1:4171)
+DisplayTitleScreen: ; 42dd (1:42dd)
call GBPalWhiteOut
ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a
@@ -30,35 +35,93 @@ DisplayTitleScreen: ; 4171 (1:4171)
call ClearScreen
call DisableLCD
call LoadFontTilePatterns
-; todo: fix hl pointers
- ld hl, NintendoCopyrightLogoGraphics ; 4:4c48
- ld de, vTitleLogo + $600
+ ld hl, NintendoCopyrightLogoGraphics
+ ld de, vTitleLogo2 + $100
ld bc, $50
ld a, BANK(NintendoCopyrightLogoGraphics)
- call FarCopyData
- ld hl, NineTile ; 4:4e08
- ld de, vTitleLogo + $6e0
- ld bc, $10
- ld a, BANK(NineTile)
- call FarCopyData
- ld hl, GamefreakLogoGraphics ; 4:4d78
- ld de, vTitleLogo + $650
+ call FarCopyData2
+ ld hl, GamefreakLogoGraphics
+ ld de, vTitleLogo2 + $100 + $50
ld bc, $90
ld a, BANK(GamefreakLogoGraphics)
- call FarCopyData
- callab Func_f453f
- ld hl, vBGMap0
- ld bc, (vBGMap1 + $400) - vBGMap0
- ld a, " "
- call FillMemory
- callab Func_f4578
- call Func_4418
- call .WriteCopyrightTiles
+ call FarCopyData2
+ ld hl, PokemonLogoGraphics
+ ld de, vTitleLogo
+ ld bc, $600
+ ld a, BANK(PokemonLogoGraphics)
+ call FarCopyData2 ; first chunk
+ ld hl, PokemonLogoGraphics+$600
+ ld de, vTitleLogo2
+ ld bc, $100
+ ld a, BANK(PokemonLogoGraphics)
+ call FarCopyData2 ; second chunk
+ ld hl, Version_GFX ; $402f
+ ld de,vChars2 + $600
+ ld bc, Version_GFXEnd - Version_GFX
+ ld a, BANK(Version_GFX)
+ call FarCopyDataDouble
+ call ClearBothBGMaps
+
+; place tiles for pokemon logo (except for the last row)
+ coord hl, 2, 1
+ ld a, $80
+ ld de, SCREEN_WIDTH
+ ld c, 6
+.pokemonLogoTileLoop
+ ld b, $10
+ push hl
+.pokemonLogoTileRowLoop ; place tiles for one row
+ ld [hli], a
+ inc a
+ dec b
+ jr nz, .pokemonLogoTileRowLoop
+ pop hl
+ add hl, de
+ dec c
+ jr nz, .pokemonLogoTileLoop
+
+; place tiles for the last row of the pokemon logo
+ coord hl, 2, 7
+ ld a, $31
+ ld b, $10
+.pokemonLogoLastTileRowLoop
+ ld [hli], a
+ inc a
+ dec b
+ jr nz, .pokemonLogoLastTileRowLoop
+
+ call DrawPlayerCharacter
+
+; put a pokeball in the player's hand
+ ld hl, wOAMBuffer + $28
+ ld a, $74
+ ld [hl], a
+
+; place tiles for title screen copyright
+ coord hl, 2, 17
+ ld de, .tileScreenCopyrightTiles
+ ld b, $10
+.tileScreenCopyrightTilesLoop
+ ld a, [de]
+ ld [hli], a
+ inc de
+ dec b
+ jr nz, .tileScreenCopyrightTilesLoop
+
+ jr .next
+
+.tileScreenCopyrightTiles ; 437f (1:437f)
+ db $41,$42,$43,$42,$44,$42,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E ; ©'95.'96.'98 GAME FREAK inc.
+
+.next
call SaveScreenTilesToBuffer2
call LoadScreenTilesFromBuffer2
call EnableLCD
- callab Func_f459a
- ld a, $9b
+ ld a,CHARMANDER ; which Pokemon to show first on the title screen
+
+ ld [wTitleMonSpecies], a
+ call LoadTitleMonSprite
+ ld a, (vBGMap0 + $300) / $100
call TitleScreenCopyTileMapToVRAM
call SaveScreenTilesToBuffer1
ld a, $40
@@ -69,9 +132,8 @@ DisplayTitleScreen: ; 4171 (1:4171)
ld b, SET_PAL_TITLE_SCREEN
call RunPaletteCommand
call GBPalNormal
- ld a, %11100000
+ ld a, %11100100
ld [rOBP0], a
- call UpdateGBCPal_OBP0
; make pokemon logo bounce up and down
ld bc, hSCY ; background scroll Y
@@ -91,7 +153,7 @@ DisplayTitleScreen: ; 4171 (1:4171)
call .ScrollTitleScreenPokemonLogo
jr .bouncePokemonLogoLoop
-.TitleScreenPokemonLogoYScrolls ; 4228 (1:4228)
+.TitleScreenPokemonLogoYScrolls: ; 43db (1:43db)
; Controls the bouncing effect of the Pokemon logo on the title screen
db -4,16 ; y scroll amount, number of times to scroll
db 3,4
@@ -102,7 +164,7 @@ DisplayTitleScreen: ; 4171 (1:4171)
db -1,2
db 0 ; terminate list with 0
-.ScrollTitleScreenPokemonLogo ; 4237 (1:4237)
+.ScrollTitleScreenPokemonLogo
; Scrolls the Pokemon logo on the title screen to create the bouncing effect
; Scrolls d pixels e times
call DelayFrame
@@ -113,22 +175,7 @@ DisplayTitleScreen: ; 4171 (1:4171)
jr nz, .ScrollTitleScreenPokemonLogo
ret
-; place tiles for title screen copyright
-.WriteCopyrightTiles ; 4241 (1:4241)
- coord hl, 2, 17
- ld de, .tileScreenCopyrightTiles
-.titleScreenCopyrightTilesLoop
- ld a, [de]
- inc de
- cp $ff
- ret z
- ld [hli], a
- jr .titleScreenCopyrightTilesLoop
-
-.tileScreenCopyrightTiles ; 424f (1:424f)
- db $e0,$e1,$e2,$e3,$e1,$e2,$ee,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ff ; ©1995-1999 GAME FREAK inc.
-
-.finishedBouncingPokemonLogo ; 4260 (1:4260)
+.finishedBouncingPokemonLogo
call LoadScreenTilesFromBuffer1
ld c, 36
call DelayFrames
@@ -136,41 +183,52 @@ DisplayTitleScreen: ; 4171 (1:4171)
call PlaySound
; scroll game version in from the right
- callab Func_f4585
+ call PrintGameVersionOnTitleScreen
ld a, SCREEN_HEIGHT_PIXELS
ld [hWY], a
+ ld d, 144
+.scrollTitleScreenGameVersionLoop
+ ld h, d
+ ld l, 64
+ call ScrollTitleScreenGameVersion
+ ld h, 0
+ ld l, 80
+ call ScrollTitleScreenGameVersion
+ ld a, d
+ add 4
+ ld d, a
+ and a
+ jr nz, .scrollTitleScreenGameVersionLoop
+
+ ld a, vBGMap1 / $100
+ call TitleScreenCopyTileMapToVRAM
+ call LoadScreenTilesFromBuffer2
+ call PrintGameVersionOnTitleScreen
call Delay3
- ld e, 0
- call TitleScreen_PlayPikachuPCM
call WaitForSoundToFinish
- call StopAllMusic
ld a, MUSIC_TITLE_SCREEN
ld [wNewSoundID], a
call PlaySound
-.asm_428f
xor a
ld [wUnusedCC5B], a
- ld [wTitleMonSpecies], a
- ld [wTitleMonSpecies+1], a
- ld [wTitleMonSpecies+2], a
- ld [wTitleMonSpecies+3], a
- ld a, $f
- ld [wTitleMonSpecies+4], a
-.titleScreenLoop
- call IncrementResetCounter
- jp c, .doTitlescreenReset
- call DelayFrame
- call JoypadLowSensitivity
- ld a, [hJoyHeld]
- cp D_UP | SELECT | B_BUTTON
- jr z, .asm_42bf
- and A_BUTTON | START
- jr nz, .asm_42bf
- call Func_4390
- jr .titleScreenLoop
-.asm_42bf
- ld e, $a
- call TitleScreen_PlayPikachuPCM
+
+; Keep scrolling in new mons indefinitely until the user performs input.
+.awaitUserInterruptionLoop
+ ld c, 200
+ call CheckForUserInterruption
+ jr c, .finishedWaiting
+ call TitleScreenScrollInMon
+ ld c, 1
+ call CheckForUserInterruption
+ jr c, .finishedWaiting
+ callba TitleScreenAnimateBallIfStarterOut
+ call TitleScreenPickNewMon
+ jr .awaitUserInterruptionLoop
+
+.finishedWaiting
+ ld a, [wTitleMonSpecies]
+ call PlayCry
+ call WaitForSoundToFinish
call GBPalWhiteOutWithDelay3
call ClearSprites
xor a
@@ -190,172 +248,143 @@ DisplayTitleScreen: ; 4171 (1:4171)
cp D_UP | SELECT | B_BUTTON
jp z, .doClearSaveDialogue
jp MainMenu
-.asm_42f0 ; 42f0 (1:42f0)
- callab Func_e8e79
- jp .asm_428f
-.asm_42fb ; 42fb (1:42fb)
- ld a, [wTitleMonSpecies+4]
- inc a
- cp $2a
- jr c, .asm_4305
- ld a, $f
-.asm_4305
- ld [wTitleMonSpecies+4], a
- ld e, a
- callab PlayPikachuSoundClip
- xor a
- ld [wTitleMonSpecies+2], a
- ld [wTitleMonSpecies+3], a
- jp .titleScreenLoop
-.doTitlescreenReset ; 431b (1:431b)
- ld [wAudioFadeOutControl], a
- call StopAllMusic
-.audioFadeLoop
- ld a, [wAudioFadeOutControl]
- and a
- jr nz, .audioFadeLoop
- jp Init
-
-.doClearSaveDialogue ; 432a (1:432a)
+.doClearSaveDialogue
jpba DoClearSaveDialogue
+TitleScreenPickNewMon: ; 4496 (1:4496)
+ ld a, vBGMap0 / $100
+ call TitleScreenCopyTileMapToVRAM
+
+.loop
+; Keep looping until a mon different from the current one is picked.
+ call Random
+ and $f
+ ld c, a
+ ld b, 0
+ ld hl, TitleMons
+ add hl, bc
+ ld a, [hl]
+ ld hl, wTitleMonSpecies
+
+; Can't be the same as before.
+ cp [hl]
+ jr z, .loop
+
+ ld [hl], a
+ call LoadTitleMonSprite
+
+ ld a, $90
+ ld [hWY], a
+ ld d, 1 ; scroll out
+ callba TitleScroll
+ ret
+
+TitleScreenScrollInMon: ; 44c1 (1:44c1)
+ ld d, 0 ; scroll in
+ callba TitleScroll
+ xor a
+ ld [hWY], a
+ ret
-TitleScreenCopyTileMapToVRAM: ; 4332 (1:4332)
+ScrollTitleScreenGameVersion: ; 44cf (1:44cf)
+.wait
+ ld a, [rLY]
+ cp l
+ jr nz, .wait
+
+ ld a, h
+ ld [rSCX], a
+
+.wait2
+ ld a, [rLY]
+ cp h
+ jr z, .wait2
+ ret
+
+DrawPlayerCharacter: ; 44dd (1:44dd)
+ ld hl, PlayerCharacterTitleGraphics
+ ld de, vSprites
+ ld bc, PlayerCharacterTitleGraphicsEnd - PlayerCharacterTitleGraphics
+ ld a, BANK(PlayerCharacterTitleGraphics)
+ call FarCopyData2
+ call ClearSprites
+ xor a
+ ld [wPlayerCharacterOAMTile], a
+ ld hl, wOAMBuffer
+ ld de, $605a
+ ld b, 7
+.loop
+ push de
+ ld c, 5
+.innerLoop
+ ld a, d
+ ld [hli], a ; Y
+ ld a, e
+ ld [hli], a ; X
+ add 8
+ ld e, a
+ ld a, [wPlayerCharacterOAMTile]
+ ld [hli], a ; tile
+ inc a
+ ld [wPlayerCharacterOAMTile], a
+ inc hl
+ dec c
+ jr nz, .innerLoop
+ pop de
+ ld a, 8
+ add d
+ ld d, a
+ dec b
+ jr nz, .loop
+ ret
+
+ClearBothBGMaps: ; 4519 (1:4519)
+ ld hl, vBGMap0
+ ld bc, $400 * 2
+ ld a, " "
+ jp FillMemory
+
+LoadTitleMonSprite: ; 4524 (1:4524)
+ ld [wcf91], a
+ ld [wd0b5], a
+ coord hl, 5, 10
+ call GetMonHeader
+ jp LoadFrontSpriteByMonIndex
+
+TitleScreenCopyTileMapToVRAM: ; 4533 (1:4533)
ld [H_AUTOBGTRANSFERDEST + 1], a
jp Delay3
-LoadCopyrightAndTextBoxTiles: ; 4337 (1:4337)
+LoadCopyrightAndTextBoxTiles: ; 4538 (1:4538)
xor a
ld [hWY], a
call ClearScreen
call LoadTextBoxTilePatterns
-LoadCopyrightTiles: ; 4340 (1:4340)
+LoadCopyrightTiles: ; 4541 (1:4541)
ld de, NintendoCopyrightLogoGraphics
ld hl, vChars2 + $600
- lb bc, BANK(NintendoCopyrightLogoGraphics), (TextBoxGraphics + $10 - NintendoCopyrightLogoGraphics) / $10 ; bug: overflows into text box graphics and copies the "A" tile
+ lb bc, BANK(NintendoCopyrightLogoGraphics), (GamefreakLogoGraphicsEnd - NintendoCopyrightLogoGraphics) / $10
call CopyVideoData
coord hl, 2, 7
ld de, CopyrightTextString
jp PlaceString
-CopyrightTextString: ; 4355 (1:4355)
- db $60,$61,$62,$63,$61,$62,$7c,$7f,$65,$66,$67,$68,$69,$6a ; ©1995-1999 Nintendo
- next $60,$61,$62,$63,$61,$62,$7c,$7f,$6b,$6c,$6d,$6e,$6f,$70,$71,$72 ; ©1995-1999 Creatures inc.
- next $60,$61,$62,$63,$61,$62,$7c,$7f,$73,$74,$75,$76,$77,$78,$79,$7a,$7b ; ©1995-1999 GAME FREAK inc.
+CopyrightTextString: ; 4556 (1:4556)
+ db $60,$61,$62,$61,$63,$61,$64,$7F,$65,$66,$67,$68,$69,$6A ; ©'95.'96.'98 Nintendo
+ next $60,$61,$62,$61,$63,$61,$64,$7F,$6B,$6C,$6D,$6E,$6F,$70,$71,$72 ; ©'95.'96.'98 Creatures inc.
+ next $60,$61,$62,$61,$63,$61,$64,$7F,$73,$74,$75,$76,$77,$78,$79,$7A,$7B ; ©'95.'96.'98 GAME FREAK inc.
db "@"
-TitleScreen_PlayPikachuPCM: ; 4387 (1:4387)
- callab PlayPikachuSoundClip
- ret
-
-Func_4390: ; 4390 (1:4390)
- call Func_43de
- ld a, [wTitleMonSpecies]
- ld e, a
- ld d, 0
- ld hl, PointerTable_43a2
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp hl
-
-PointerTable_43a2: ; 43a2 (1:43a2)
- dw Func_43be
- dw Func_43c3
- dw Func_43d9
- dw Func_43d9
- dw Func_43c7
- dw Func_43d9
- dw Func_43d9
- dw Func_43c3
- dw Func_43d9
- dw Func_43d9
- dw Func_43bf
- dw Func_43ba
-
-Func_43ba: ; 43ba (1:43ba)
- xor a
- ld [wTitleMonSpecies], a
-Func_43be
- ret
-
-Func_43bf: ; 43bf (1:43bf)
- ld e, 0
- jr asm_43c9
-Func_43c3: ; 43c3 (1:43c3)
- ld e, 4
- jr asm_43c9
-Func_43c7: ; 43c7 (1:43c7)
- ld e, 8
-asm_43c9: ; 43c9 (1:43c9)
- ld hl, wOAMBuffer + 2
- ld c, 8
-.loop
- ld a, [hl]
- and $f3
- or e
- ld [hli], a
- inc hl
- inc hl
- inc hl
- dec c
- jr nz, .loop
-Func_43d9: ; 43d9 (1:43d9)
- ld hl, wTitleMonSpecies
- inc [hl]
- ret
-
-Func_43de: ; 43de (1:43de)
- ld hl, wTitleMonSpecies + 1
- ld a, [hl]
- inc [hl]
- and a
- jr z, .asm_43ed
- cp $80
- jr z, .asm_43ed
- cp $90
- ret nz
-.asm_43ed
- ld a, $1
- ld [wTitleMonSpecies], a
- ret
+INCLUDE "data/title_mons.asm"
-; copy text of fixed length NAME_LENGTH (like player name, rival name, mon names, ...)
-CopyFixedLengthText: ; 43f3 (1:43f3)
- ld bc, NAME_LENGTH
- jp CopyData
-
-NintenText: db "NINTEN@"
-SonyText: db "SONY@"
+; prints version text (red, blue)
+PrintGameVersionOnTitleScreen: ; 4598 (1:4598)
+ coord hl, 7, 8
+ ld de, VersionOnTitleScreenText
+ jp PlaceString
-IncrementResetCounter: ; 4405 (1:4405)
- ld hl, wTitleMonSpecies + 2
- ld e, [hl]
- inc hl
- ld d, [hl]
- inc de
- ld a, d
- cp $c
- jr z, .doReset
- ld [hl], d
- dec hl
- ld [hl], e
- and a
- ret
-.doReset
- scf
- ret
-
-Func_4418: ; 4418 (1:4418)
- xor a
- call SwitchSRAMBankAndLatchClockData
- ld hl, $a000
- ld bc, $20
- ld a, $aa
- call FillMemory
- call PrepareRTCDataAndDisableSRAM
- ret \ No newline at end of file
+; these point to special tiles specifically loaded for that purpose and are not usual text
+VersionOnTitleScreenText: ; 45a1 (1:45a1)
+ db $60,$61,$7F,$65,$66,$67,$68,$69,"@" ; "Red Version"
diff --git a/engine/town_map.asm b/engine/town_map.asm
index ea60e5a4..31eefcfd 100755
--- a/engine/town_map.asm
+++ b/engine/town_map.asm
@@ -108,7 +108,7 @@ DisplayTownMap: ; 70eb7 (1c:4eb7)
ld a,[hJoy5]
and D_DOWN | D_UP
ret z
- callab PlayPikachuSoundClip
+ callab Func_f0000
ret
INCLUDE "data/town_map_order.asm"
diff --git a/home.asm b/home.asm
index ebe3dde7..2ac9795b 100644
--- a/home.asm
+++ b/home.asm
@@ -32,7 +32,7 @@ SECTION "joypad", ROM0 [$60]
SECTION "Home", ROM0
-DisableLCD:: ; 0061 (0:0061)
+DisableLCD::
xor a
ld [rIF], a
ld a, [rIE]
@@ -52,13 +52,13 @@ DisableLCD:: ; 0061 (0:0061)
ld [rIE], a
ret
-EnableLCD:: ; 007b (0:007b)
+EnableLCD::
ld a, [rLCDC]
set rLCDC_ENABLE, a
ld [rLCDC], a
ret
-ClearSprites:: ; 0082 (0:0082)
+ClearSprites::
xor a
ld hl, wOAMBuffer
ld b, 40 * 4
@@ -68,7 +68,7 @@ ClearSprites:: ; 0082 (0:0082)
jr nz, .loop
ret
-HideSprites:: ; 008d (0:008d)
+HideSprites::
ld a, 160
ld hl, wOAMBuffer
ld de, 4
@@ -101,7 +101,7 @@ SECTION "Header", ROM0 [$104]
SECTION "Main", ROM0
-PlayPikachuPCM:: ; 0150 (0:0150)
+Func_150:: ; 0150 (0:0150)
ld a,[H_LOADEDROMBANK]
push af
ld a,b
@@ -114,16 +114,16 @@ PlayPikachuPCM:: ; 0150 (0:0150)
ld a,[hli]
ld d,a
ld a,$3
-.playSingleSample
+.unknownloop
dec a
- jr nz,.playSingleSample
+ jr nz,.unknownloop
rept 7
- call LoadNextSoundClipSample
- call PlaySoundClipSample
+ call Func_199
+ call Func_1a5
endr
- call LoadNextSoundClipSample
+ call Func_199
dec bc
ld a,c
or b
@@ -132,7 +132,7 @@ PlayPikachuPCM:: ; 0150 (0:0150)
call BankswitchCommon
ret
-LoadNextSoundClipSample:: ; 0199 (0:0199)
+Func_199:: ; 0199 (0:0199)
ld a,d
and $80
srl a
@@ -141,14 +141,14 @@ LoadNextSoundClipSample:: ; 0199 (0:0199)
sla d
ret
-PlaySoundClipSample:: ; 01a5 (0:01a5)
+Func_1a5:: ; 01a5 (0:01a5)
ld a,$3
-.loop
+.unknownloop2
dec a
- jr nz,.loop
+ jr nz,.unknownloop2
ret
-Start:: ; 01ab (0:01ab)
+Start::
cp GBC
jr z, .gbc
xor a
@@ -159,7 +159,7 @@ Start:: ; 01ab (0:01ab)
ld [hGBC], a
jp Init
-Joypad:: ; 01b9 (0:01b9)
+Joypad:: ; 01b9
homecall_jump _Joypad
ReadJoypad:: ; 01c8 (0:01c8)
diff --git a/main.asm b/main.asm
index 37bc0fd8..1b29f91c 100755
--- a/main.asm
+++ b/main.asm
@@ -2540,7 +2540,7 @@ ApplyOutOfBattlePoisonDamage: ; c3de (3:43de)
callab IsThisPartymonOurPikachu
jr nc, .curMonNotPlayerPikachu
ld e, $3
- callab PlayPikachuSoundClip
+ callab Func_f0000
callab_ModifyPikachuHappiness_ld_d PIKAHAPPY_PSNFNT
.curMonNotPlayerPikachu
pop de
diff --git a/text/item_names.asm b/text/item_names.asm
index 6a401597..3c0f4c49 100755
--- a/text/item_names.asm
+++ b/text/item_names.asm
@@ -1,4 +1,4 @@
-ItemNames: ; 45b7 (1:45b7)
+ItemNames: ; 472b (1:472b)
db "MASTER BALL@"
db "ULTRA BALL@"
db "GREAT BALL@"
diff --git a/yellow/main.asm b/yellow/main.asm
index 41db0e44..82198765 100755
--- a/yellow/main.asm
+++ b/yellow/main.asm
@@ -18,529 +18,31 @@ SECTION "home",ROM0
INCLUDE "home.asm"
SECTION "bank01",ROMX,BANK[$01]
-INCLUDE "data/facing.asm"
+;INCLUDE "data/facing.asm"
+ dr $4000,$4111
INCLUDE "engine/battle/safari_zone.asm"
-INCLUDE "engine/titlescreen.asm"
-
+SetDefaultNamesBeforeTitlescreen: ; 414b (1:414b)
+ dr $414b,$442b
LoadMonData_: ; 442b (1:442b)
-; Load monster [wWhichPokemon] from list [wMonDataLocation]:
-; 0: partymon
-; 1: enemymon
-; 2: boxmon
-; 3: daycaremon
-; Return monster id at wcf91 and its data at wLoadedMon.
-; Also load base stats at W_MONHEADER for convenience.
-
- ld a, [wDayCareMonSpecies]
- ld [wcf91], a
- ld a, [wMonDataLocation]
- cp DAYCARE_DATA
- jr z, .GetMonHeader
-
- ld a, [wWhichPokemon]
- ld e, a
- call GetMonSpecies
-
-.GetMonHeader
- ld a, [wcf91]
- ld [wd0b5], a ; input for GetMonHeader
- call GetMonHeader
-
- ld hl, wPartyMons
- ld bc, wPartyMon2 - wPartyMon1
- ld a, [wMonDataLocation]
- cp ENEMY_PARTY_DATA
- jr c, .getMonEntry
-
- ld hl, wEnemyMons
- jr z, .getMonEntry
-
- cp 2
- ld hl, wBoxMons
- ld bc, wBoxMon2 - wBoxMon1
- jr z, .getMonEntry
-
- ld hl, wDayCareMon
- jr .copyMonData
-
-.getMonEntry
- ld a, [wWhichPokemon]
- call AddNTimes
-
-.copyMonData
- ld de, wLoadedMon
- ld bc, wPartyMon2 - wPartyMon1
- jp CopyData
-
-; get species of mon e in list [wMonDataLocation] for LoadMonData
-GetMonSpecies: ; 4478 (1:4478)
- ld hl, wPartySpecies
- ld a, [wMonDataLocation]
- and a
- jr z, .getSpecies
- dec a
- jr z, .enemyParty
- ld hl, wBoxSpecies
- jr .getSpecies
-.enemyParty
- ld hl, wEnemyPartyMons
-.getSpecies
- ld d, 0
- add hl, de
- ld a, [hl]
- ld [wcf91], a
- ret
-
-INCLUDE "data/item_prices.asm"
-INCLUDE "text/item_names.asm"
-
+ dr $442b,$4494
+ItemPrices: ; 4494 (1:4494)
+ dr $4494,$45b7
+ItemNames: ; 45b7 (1:45b7)
+ dr $45b7,$491e
UnusedNames: ; 491e (1:491e)
- db "かみなりバッヂ@"
- db "かいがらバッヂ@"
- db "おじぞうバッヂ@"
- db "はやぶさバッヂ@"
- db "ひんやりバッヂ@"
- db "なかよしバッヂ@"
- db "バラバッヂ@"
- db "ひのたまバッヂ@"
- db "ゴールドバッヂ@"
- db "たまご@"
- db "ひよこ@"
- db "ブロンズ@"
- db "シルバー@"
- db "ゴールド@"
- db "プチキャプテン@"
- db "キャプテン@"
- db "プチマスター@"
- db "マスター@"
- db "エクセレント"
-
-INCLUDE "engine/overworld/oam.asm"
-
+ dr $491e,$499b
+PrepareOAMData: ; 499b (1:499b)
+ dr $499b,$4a92
+WriteDMACodeToHRAM: ; 4a92 (1:4a92)
+ dr $4a92,$4aaa
+_IsTilePassable: ; 4aaa (1:4aaa)
+ dr $4aaa,$4b89
PrintWaitingText: ; 4b89 (1:4b89)
- coord hl, 3, 10
- lb bc, 1, 11
- ld a, [W_ISINBATTLE]
- and a
- jr z, .asm_4b9a
- call TextBoxBorder
- jr .asm_4b9d
-.asm_4b9a
- call CableClub_TextBoxBorder
-.asm_4b9d
- coord hl, 4, 11
- ld de, WaitingText
- call PlaceString
- ld c, 50
- jp DelayFrames
-
-WaitingText: ; 4bab (1:4bab)
- db "Waiting...!@"
-
+ dr $4b89,$4bb7
_UpdateSprites: ; 4bb7 (1:4bb7)
- ld h, wSpriteStateData1 / $100
- inc h
- ld a, $e ; (wSpriteStateData2 + $0e) & $ff
-.spriteLoop
- ld l, a
- sub $e
- ld c, a
- ld [H_CURRENTSPRITEOFFSET], a
- ld a, [hl]
- and a
- jr z, .skipSprite ; tests $c2Xe
- push hl
- push de
- push bc
- call .updateCurrentSprite
- pop bc
- pop de
- pop hl
-.skipSprite
- ld a, l
- add $10 ; move to next sprite
- cp $e ; test for overflow (back at $0e)
- jr nz, .spriteLoop
- ret
-.updateCurrentSprite ; 4bd7 (1:4bd7)
- ld a, [H_CURRENTSPRITEOFFSET]
- and a
- jp z, UpdatePlayerSprite
- cp $f0 ; pikachu
- jp z, Func_1552
- ld a, [hl]
-
-UpdateNonPlayerSprite: ; 4be3 (1:4be3)
- dec a
- swap a
- ld [$ff93], a ; $10 * sprite#
- ld a, [wNPCMovementScriptSpriteOffset] ; some sprite offset?
- ld b, a
- ld a, [H_CURRENTSPRITEOFFSET]
- cp b
- jr nz, .unequal
- jp DoScriptedNPCMovement
-.unequal
- jp UpdateNPCSprite
-
-; This detects if the current sprite (whose offset is at H_CURRENTSPRITEOFFSET)
-; is going to collide with another sprite by looping over the other sprites.
-; The current sprite's offset will be labelled with i (e.g. $c1i0).
-; The loop sprite's offset will labelled with j (e.g. $c1j0).
-;
-; Note that the Y coordinate of the sprite (in [$c1k4]) is one of the following
-; 9 values when the sprite is aligned with the grid: $fc, $0c, $1c, $2c, ..., $7c.
-; The reason that 4 is added below to the coordinate is to make it align with a
-; multiple of $10 to make comparisons easier.
-DetectCollisionBetweenSprites: ; 4bf7 (1:4bf7)
- ; nop
-
- ld h, wSpriteStateData1 / $100
- ld a, [H_CURRENTSPRITEOFFSET]
- ld l, a
-
- ld a, [hl] ; a = [$c1i0] (picture) (0 if slot is unused)
- and a ; is this sprite slot slot used?
- ret z ; return if not used
-
- ld a, l
- add 3
- ld l, a
-
- ld a, [hli] ; a = [$c1i3] (delta Y) (-1, 0, or 1)
- call SetSpriteCollisionValues
-
- ld a, [hli] ; a = [$C1i4] (Y screen coordinate)
- add 4 ; align with multiple of $10
-
-; The effect of the following 3 lines is to
-; add 7 to a if moving south or
-; subtract 7 from a if moving north.
- add b
- and $f0
- or c
-
- ld [$ff90], a ; store Y coordinate adjusted for direction of movement
-
- ld a, [hli] ; a = [$c1i5] (delta X) (-1, 0, or 1)
- call SetSpriteCollisionValues
- ld a, [hl] ; a = [$C1i6] (X screen coordinate)
-
-; The effect of the following 3 lines is to
-; add 7 to a if moving east or
-; subtract 7 from a if moving west.
- add b
- and $f0
- or c
-
- ld [$ff91], a ; store X coordinate adjusted for direction of movement
-
- ld a, l
- add 7
- ld l, a
-
- xor a
- ld [hld], a ; zero [$c1id] XXX what's [$c1id] for?
- ld [hld], a ; zero [$c1ic] (directions in which collisions occurred)
-
- ld a, [$ff91]
- ld [hld], a ; [$c1ib] = adjusted X coordinate
- ld a, [$ff90]
- ld [hl], a ; [$c1ia] = adjusted Y coordinate
-
- xor a ; zero the loop counter
-
-.loop
- ld [$ff8f], a ; store loop counter
- swap a
- ld e, a
- ld a, [H_CURRENTSPRITEOFFSET]
- cp e ; does the loop sprite match the current sprite?
- jp z, .next ; go to the next sprite if they match
-
- ld d, h
- ld a, [de] ; a = [$c1j0] (picture) (0 if slot is unused)
- and a ; is this sprite slot slot used?
- jp z, .next ; go the next sprite if not used
-
- inc e
- inc e
- ld a, [de] ; a = [$c1j2] ($ff means the sprite is offscreen)
- inc a
- jp z, .next ; go the next sprite if offscreen
-
- ld a, [H_CURRENTSPRITEOFFSET]
- add 10
- ld l, a
-
- inc e
- ld a, [de] ; a = [$c1j3] (delta Y)
- call SetSpriteCollisionValues
-
- inc e
- ld a, [de] ; a = [$C1j4] (Y screen coordinate)
- add 4 ; align with multiple of $10
-
-; The effect of the following 3 lines is to
-; add 7 to a if moving south or
-; subtract 7 from a if moving north.
- add b
- and $f0
- or c
-
- sub [hl] ; subtract the adjusted Y coordinate of sprite i ([$c1ia]) from that of sprite j
-
-; calculate the absolute value of the difference to get the distance
- jr nc, .noCarry1
- cpl
- inc a
-.noCarry1
- ld [$ff90], a ; store the distance between the two sprites' adjusted Y values
-
-; Use the carry flag set by the above subtraction to determine which sprite's
-; Y coordinate is larger. This information is used later to set [$c1ic],
-; which stores which direction the collision occurred in.
-; The following 5 lines set the lowest 2 bits of c, which are later shifted left by 2.
-; If sprite i's Y is larger, set lowest 2 bits of c to 10.
-; If sprite j's Y is larger or both are equal, set lowest 2 bits of c to 01.
- push af
- rl c
- pop af
- ccf
- rl c
-
-; If sprite i's delta Y is 0, then b = 7, else b = 9.
- ld b, 7
- ld a, [hl] ; a = [$c1ia] (adjusted Y coordinate)
- and $f
- jr z, .next1
- ld b, 9
-
-.next1
- ld a, [$ff90] ; a = distance between adjusted Y coordinates
- sub b
- ld [$ff92], a ; store distance adjusted using sprite i's direction
- ld a, b
- ld [$ff90], a ; store 7 or 9 depending on sprite i's delta Y
- jr c, .checkXDistance
-
-; If sprite j's delta Y is 0, then b = 7, else b = 9.
- ld b, 7
- dec e
- ld a, [de] ; a = [$c1j3] (delta Y)
- inc e
- and a
- jr z, .next2
- ld b, 9
-
-.next2
- ld a, [$ff92] ; a = distance adjusted using sprite i's direction
- sub b ; adjust distance using sprite j's direction
- jr z, .checkXDistance
- jr nc, .next ; go to next sprite if distance is still positive after both adjustments
-
-.checkXDistance
- inc e
- inc l
- ld a, [de] ; a = [$c1j5] (delta X)
-
- push bc
-
- call SetSpriteCollisionValues
- inc e
- ld a, [de] ; a = [$c1j6] (X screen coordinate)
-
-; The effect of the following 3 lines is to
-; add 7 to a if moving east or
-; subtract 7 from a if moving west.
- add b
- and $f0
- or c
-
- pop bc
-
- sub [hl] ; subtract the adjusted X coordinate of sprite i ([$c1ib]) from that of sprite j
-
-; calculate the absolute value of the difference to get the distance
- jr nc, .noCarry2
- cpl
- inc a
-.noCarry2
- ld [$ff91], a ; store the distance between the two sprites' adjusted X values
-
-; Use the carry flag set by the above subtraction to determine which sprite's
-; X coordinate is larger. This information is used later to set [$c1ic],
-; which stores which direction the collision occurred in.
-; The following 5 lines set the lowest 2 bits of c.
-; If sprite i's X is larger, set lowest 2 bits of c to 10.
-; If sprite j's X is larger or both are equal, set lowest 2 bits of c to 01.
- push af
- rl c
- pop af
- ccf
- rl c
-
-; If sprite i's delta X is 0, then b = 7, else b = 9.
- ld b, 7
- ld a, [hl] ; a = [$c1ib] (adjusted X coordinate)
- and $f
- jr z, .next3
- ld b, 9
-
-.next3
- ld a, [$ff91] ; a = distance between adjusted X coordinates
- sub b
- ld [$ff92], a ; store distance adjusted using sprite i's direction
- ld a, b
- ld [$ff91], a ; store 7 or 9 depending on sprite i's delta X
- jr c, .collision
-
-; If sprite j's delta X is 0, then b = 7, else b = 9.
- ld b, 7
- dec e
- ld a, [de] ; a = [$c1j5] (delta X)
- inc e
- and a
- jr z, .next4
- ld b, 9
-
-.next4
- ld a, [$ff92] ; a = distance adjusted using sprite i's direction
- sub b ; adjust distance using sprite j's direction
- jr z, .collision
- jr nc, .next ; go to next sprite if distance is still positive after both adjustments
-
-.collision
- ld a, l
- and $f0 ; collision with pikachu?
- jr nz, .asm_4cd9
- xor a
- ld [wd434], a
- ld a, [$ff8f]
- cp $f
- jr nz, .asm_4cd9
- call Func_4d0a
- jr .asm_4cef
-.asm_4cd9
- ld a, [$ff91] ; a = 7 or 9 depending on sprite i's delta X
- ld b, a
- ld a, [$ff90] ; a = 7 or 9 depending on sprite i's delta Y
- inc l
-
-; If delta X isn't 0 and delta Y is 0, then b = %0011, else b = %1100.
-; (note that normally if delta X isn't 0, then delta Y must be 0 and vice versa)
- cp b
- jr c, .next5
- ld b, %1100
- jr .next6
-.next5
- ld b, %0011
-
-.next6
- ld a, c ; c has 2 bits set (one of bits 0-1 is set for the X axis and one of bits 2-3 for the Y axis)
- and b ; we select either the bit in bits 0-1 or bits 2-3 based on the calculation immediately above
- or [hl] ; or with existing collision direction bits in [$c1ic]
- ld [hl], a ; store new value
- ld a, c ; useless code because a is overwritten before being used again
-
-; set bit in [$c1ie] or [$c1if] to indicate which sprite the collision occurred with
- inc l
- inc l
-.asm_4cef
- ld a, [$ff8f] ; a = loop counter
- ld de, SpriteCollisionBitTable
- add a
- add e
- ld e, a
- jr nc, .noCarry3
- inc d
-.noCarry3
- ld a, [de]
- or [hl]
- ld [hli], a
- inc de
- ld a, [de]
- or [hl]
- ld [hl], a
-
-.next
- ld a, [$ff8f] ; a = loop counter
- inc a
- cp $10
- jp nz, .loop
- ret
-
-; takes delta X or delta Y in a
-; b = delta X/Y
-; c = 0 if delta X/Y is 0
-; c = 7 if delta X/Y is 1
-; c = 9 if delta X/Y is -1
-Func_4d0a: ; 4d0a (1:4d0a)
- ld a, [$ff91]
- ld b, a
- ld a, [$ff90]
- inc l
- cp b
- jr c, .asm_4d17
- ld b, %1100
- jr .asm_4d19
-.asm_4d17
- ld b, %11
-.asm_4d19
- ld a, c
- and b
- ld [wd434], a
- ld a, c
- inc l
- inc l
- ret
-
-SetSpriteCollisionValues: ; 4d22 (1:4d22)
- and a
- ld b, 0
- ld c, 0
- jr z, .done
- ld c, 9
- cp -1
- jr z, .ok
- ld c, 7
- ld a, 0
-.ok
- ld b, a
-.done
- ret
-
-SpriteCollisionBitTable: ; 4d35 (1:4d35)
- db %00000000,%00000001
- db %00000000,%00000010
- db %00000000,%00000100
- db %00000000,%00001000
- db %00000000,%00010000
- db %00000000,%00100000
- db %00000000,%01000000
- db %00000000,%10000000
- db %00000001,%00000000
- db %00000010,%00000000
- db %00000100,%00000000
- db %00001000,%00000000
- db %00010000,%00000000
- db %00100000,%00000000
- db %01000000,%00000000
- db %10000000,%00000000
-
- dr $4d55,$4da5
-UpdatePlayerSprite: ; 4da5 (1:4da5)
- dr $4da5,$4e3e
-UpdateNPCSprite: ; 4e3e (1:4e3e)
- dr $4e3e,$5012
+ dr $4bb7,$5012
Func_5012: ; 5012 (1:5012)
- dr $5012,$5199
-DoScriptedNPCMovement: ; 5199 (1:5199)
- dr $5199,$5b67
-CableClub_TextBoxBorder: ; 5b67 (1:5b67)
- dr $5b67,$5ba6
-MainMenu: ; 5ba6 (1:5ba6)
- dr $5ba6,$5ce4
+ dr $5012,$5ce4
Func_5ce4: ; 5ce4 (1:5ce4)
dr $5ce4,$5d58
PrintSaveScreenText: ; 5d58 (1:5d58)
@@ -1120,7 +622,7 @@ ApplyOutOfBattlePoisonDamage: ; c3de (3:43de)
callab IsThisPartymonOurPikachu
jr nc, .curMonNotPlayerPikachu
ld e, $3
- callab PlayPikachuSoundClip
+ callab Func_f0000
calladb_ModifyPikachuHappiness PIKAHAPPY_PSNFNT
.curMonNotPlayerPikachu
pop de
@@ -2879,7 +2381,6 @@ BattleHudTiles2: INCBIN "gfx/battle_hud2.1bpp"
BattleHudTiles3: INCBIN "gfx/battle_hud3.1bpp"
NintendoCopyrightLogoGraphics: INCBIN "gfx/copyright.2bpp"
GamefreakLogoGraphics: INCBIN "gfx/gamefreak.2bpp"
-GamefreakLogoGraphicsEnd:
NineTile: INCBIN "gfx/9_tile.2bpp"
TextBoxGraphics: INCBIN "gfx/text_box.2bpp"
TextBoxGraphicsEnd:
@@ -3026,9 +2527,7 @@ HandleLedges: ; 1a7f4 (6:67f4)
SECTION "bank07",ROMX,BANK[$07]
- dr $1c000,$1c21e
-DoClearSaveDialogue: ; 1c21e (7:421e)
- dr $1c21e,$1e321
+ dr $1c000,$1e321
SafariZoneCheck: ; 1e321 (7:6e21)
dr $1e321,$1e330
SafariZoneCheckSteps: ; 1e330 (7:6330)
@@ -3800,9 +3299,7 @@ MonsterNames: ; e8000 (3a:4000)
Func_e8a5e: ; e8a5e (3a:4a5e)
dr $e8a5e,$e8d35
Func_e8d35:: ; e8d35 (3a:4d35)
- dr $e8d35,$e8e79
-Func_e8e79: ; e8e79 (3a:4e79)
- dr $e8e79,$e928a
+ dr $e8d35,$e928a
SurfingPikachu2Graphics: INCBIN "gfx/surfing_pikachu_2.2bpp"
dr $e988a,$e9bfa