mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-17 02:40:50 +12:00

This adds Pikachu, Cat, and "Small Bird" menu icons. The cat has a custom animation done by myself. The Jigglypuff in the Pokemon Centre now uses the new sprite, nice 'n' pretty. Officer Jenny is also in Cerulean. The Pokemon from Melanie's house in Yellow have been put in Mr. Fuji's House, given the purpose of the house in RB is different. I think it ends up fitting very nicely. Chansey has been given its proper sprite in Fuschia. Yellow didn't actually do this, as Chansey doesn't have a walk cycle, causing the stuff that exists to go unused. I wanted it, though, so I had Chansey just not walk and turn around. Oh, and it's in all the Pokemon Centres now. Yeah, that's a...lot of changed files.
310 lines
6 KiB
NASM
310 lines
6 KiB
NASM
;Backported from Yellow
|
|
AnimatePartyMon_ForceSpeed1:
|
|
xor a
|
|
ld [wCurrentMenuItem], a
|
|
ld b, a
|
|
inc a
|
|
jr GetAnimationSpeed
|
|
|
|
; wPartyMenuHPBarColors contains the party mon's health bar colors
|
|
; 0: green
|
|
; 1: yellow
|
|
; 2: red
|
|
AnimatePartyMon::
|
|
ld hl, wPartyMenuHPBarColors
|
|
ld a, [wCurrentMenuItem]
|
|
ld c, a
|
|
ld b, 0
|
|
add hl, bc
|
|
ld a, [hl]
|
|
|
|
GetAnimationSpeed:
|
|
ld c, a
|
|
ld hl, PartyMonSpeeds
|
|
add hl, bc
|
|
ld a, [wOnSGB]
|
|
xor $1
|
|
add [hl]
|
|
ld c, a
|
|
add a
|
|
ld b, a
|
|
ld a, [wAnimCounter]
|
|
and a
|
|
jr z, .resetSprites
|
|
cp c
|
|
jr z, .animateSprite
|
|
.incTimer
|
|
inc a
|
|
cp b
|
|
jr nz, .skipResetTimer
|
|
xor a ; reset timer
|
|
.skipResetTimer
|
|
ld [wAnimCounter], a
|
|
jp DelayFrame
|
|
.resetSprites
|
|
push bc
|
|
ld hl, wMonPartySpritesSavedOAM
|
|
ld de, wShadowOAM
|
|
ld bc, $60
|
|
call CopyData
|
|
pop bc
|
|
xor a
|
|
jr .incTimer
|
|
.animateSprite
|
|
push bc
|
|
ld hl, wShadowOAMSprite00TileID
|
|
ld bc, $10
|
|
ld a, [wCurrentMenuItem]
|
|
call AddNTimes
|
|
ld c, ICONOFFSET
|
|
ld a, [hl]
|
|
cp ICON_BALL << 2
|
|
jr z, .editCoords
|
|
cp ICON_HELIX << 2
|
|
jr nz, .editTileIDS
|
|
; ICON_BALL and ICON_HELIX only shake up and down
|
|
.editCoords
|
|
dec hl
|
|
dec hl ; dec hl to the OAM y coord
|
|
ld c, $1 ; amount to increase the y coord by
|
|
; otherwise, load a second sprite frame
|
|
.editTileIDS
|
|
ld b, $4
|
|
ld de, $4
|
|
.loop
|
|
ld a, [hl]
|
|
add c
|
|
ld [hl], a
|
|
add hl, de
|
|
dec b
|
|
jr nz, .loop
|
|
pop bc
|
|
ld a, c
|
|
jr .incTimer
|
|
|
|
; Party mon animations cycle between 2 frames.
|
|
; The members of the PartyMonSpeeds array specify the number of V-blanks
|
|
; that each frame lasts for green HP, yellow HP, and red HP in order.
|
|
; On the naming screen, the yellow HP speed is always used.
|
|
PartyMonSpeeds:
|
|
db 5, 16, 32
|
|
|
|
LoadMonPartySpriteGfx:
|
|
; Load mon party sprite tile patterns into VRAM during V-blank.
|
|
ld hl, MonPartySpritePointers
|
|
ld a, $22 ; Number of pointers in the list in hex. eg. Yellow has 30, so 1E is used.
|
|
|
|
LoadAnimSpriteGfx:
|
|
; Load animated sprite tile patterns into VRAM during V-blank. hl is the address
|
|
; of an array of structures that contain arguments for CopyVideoData and a is
|
|
; the number of structures in the array.
|
|
ld bc, $0
|
|
.loop
|
|
push af
|
|
push bc
|
|
push hl
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld a, [hli]
|
|
ld d, a
|
|
ld a, [hli]
|
|
ld c, a
|
|
ld a, [hli]
|
|
ld b, a
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
call CopyVideoData
|
|
pop hl
|
|
pop bc
|
|
ld a, $6
|
|
add c
|
|
ld c, a
|
|
pop af
|
|
dec a
|
|
jr nz, .loop
|
|
ret
|
|
|
|
LoadMonPartySpriteGfxWithLCDDisabled:
|
|
; Load mon party sprite tile patterns into VRAM immediately by disabling the
|
|
; LCD.
|
|
call DisableLCD
|
|
ld hl, MonPartySpritePointers
|
|
ld a, $24 ; Number of pointers in the list in hex. eg. Yellow has 30, so 1E is used.
|
|
ld bc, $0
|
|
.loop
|
|
push af
|
|
push bc
|
|
push hl
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld a, [hli]
|
|
ld d, a
|
|
push de
|
|
ld a, [hli]
|
|
ld c, a
|
|
swap c
|
|
ld b, $0
|
|
ld a, [hli]
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
pop hl
|
|
call FarCopyData
|
|
pop hl
|
|
pop bc
|
|
ld a, $6
|
|
add c
|
|
ld c, a
|
|
pop af
|
|
dec a
|
|
jr nz, .loop
|
|
jp EnableLCD
|
|
|
|
INCLUDE "data/icon_pointers.asm"
|
|
|
|
WriteMonPartySpriteOAMByPartyIndex:
|
|
; Write OAM blocks for the party mon in [hPartyMonIndex].
|
|
push hl
|
|
push de
|
|
push bc
|
|
ldh a, [hPartyMonIndex]
|
|
cp $ff
|
|
jr z, .asm_7191f
|
|
ld hl, wPartySpecies
|
|
ld e, a
|
|
ld d, 0
|
|
add hl, de
|
|
ld a, [hl]
|
|
call GetPartyMonSpriteID
|
|
ld [wOAMBaseTile], a
|
|
call WriteMonPartySpriteOAM
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
.asm_7191f
|
|
ld hl, wShadowOAM
|
|
ld de, wMonPartySpritesSavedOAM
|
|
ld bc, $60
|
|
call CopyData
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
WriteMonPartySpriteOAMBySpecies:
|
|
; Write OAM blocks for the party sprite of the species in
|
|
; [wMonPartySpriteSpecies].
|
|
xor a
|
|
ldh [hPartyMonIndex], a
|
|
ld a, [wMonPartySpriteSpecies]
|
|
call GetPartyMonSpriteID
|
|
ld [wOAMBaseTile], a
|
|
jr WriteMonPartySpriteOAM
|
|
|
|
;UnusedPartyMonSpriteFunction:
|
|
; This function is unused and doesn't appear to do anything useful. It looks
|
|
; like it may have been intended to load the tile patterns and OAM data for
|
|
; the mon party sprite associated with the species in [wcf91].
|
|
; However, its calculations are off and it loads garbage data.
|
|
; ld a, [wcf91]
|
|
; call GetPartyMonSpriteID
|
|
; push af
|
|
; ld hl, vSprites tile $00
|
|
; call .LoadTilePatterns
|
|
; pop af
|
|
; add $5A
|
|
; ld hl, vSprites tile $04
|
|
; call .LoadTilePatterns
|
|
; xor a
|
|
; ld [wMonPartySpriteSpecies], a
|
|
; jr WriteMonPartySpriteOAMBySpecies
|
|
|
|
;.LoadTilePatterns
|
|
; push hl
|
|
; add a
|
|
; ld c, a
|
|
; ld b, 0
|
|
; ld hl, MonPartySpritePointers
|
|
; add hl, bc
|
|
; add hl, bc
|
|
; add hl, bc
|
|
; ld a, [hli]
|
|
; ld e, a
|
|
; ld a, [hli]
|
|
; ld d, a
|
|
; ld a, [hli]
|
|
; ld c, a
|
|
; ld a, [hli]
|
|
; ld b, a
|
|
; pop hl
|
|
; jp CopyVideoData
|
|
|
|
WriteMonPartySpriteOAM:
|
|
; Write the OAM blocks for the first animation frame into the OAM buffer and
|
|
; make a copy at wMonPartySpritesSavedOAM.
|
|
push af
|
|
ld c, $10
|
|
ld h, HIGH(wShadowOAM)
|
|
ldh a, [hPartyMonIndex]
|
|
swap a
|
|
ld l, a
|
|
add $10
|
|
ld b, a
|
|
pop af
|
|
cp ICON_HELIX << 2
|
|
jr z, .helix
|
|
call WriteSymmetricMonPartySpriteOAM
|
|
jr .makeCopy
|
|
.helix
|
|
call WriteAsymmetricMonPartySpriteOAM
|
|
; Make a copy of the OAM buffer with the first animation frame written so that
|
|
; we can flip back to it from the second frame by copying it back.
|
|
.makeCopy
|
|
ld hl, wShadowOAM
|
|
ld de, wMonPartySpritesSavedOAM
|
|
ld bc, $60
|
|
jp CopyData
|
|
|
|
GetPartyMonSpriteID:
|
|
ld [wd11e], a
|
|
predef IndexToPokedex
|
|
ld a, [wd11e]
|
|
ld c, a
|
|
dec a
|
|
srl a
|
|
ld hl, MonPartyData
|
|
ld e, a
|
|
ld d, 0
|
|
add hl, de
|
|
ld a, [hl]
|
|
bit 0, c
|
|
jr nz, .skipSwap
|
|
swap a ; use lower nybble if pokedex num is even
|
|
.skipSwap
|
|
and $f0
|
|
srl a ; value == ICON constant << 2
|
|
srl a
|
|
ret
|
|
|
|
INCLUDE "data/pokemon/menu_icons.asm"
|
|
|
|
DEF INC_FRAME_1 EQUS "0, $20"
|
|
DEF INC_FRAME_2 EQUS "$20, $20"
|
|
|
|
BugIconFrame1: INCBIN "gfx/icons/bug.2bpp", INC_FRAME_1
|
|
PlantIconFrame1: INCBIN "gfx/icons/plant.2bpp", INC_FRAME_1
|
|
BugIconFrame2: INCBIN "gfx/icons/bug.2bpp", INC_FRAME_2
|
|
PlantIconFrame2: INCBIN "gfx/icons/plant.2bpp", INC_FRAME_2
|
|
SnakeIconFrame1: INCBIN "gfx/icons/snake.2bpp", INC_FRAME_1
|
|
QuadrupedIconFrame1: INCBIN "gfx/icons/quadruped.2bpp", INC_FRAME_1
|
|
SnakeIconFrame2: INCBIN "gfx/icons/snake.2bpp", INC_FRAME_2
|
|
QuadrupedIconFrame2: INCBIN "gfx/icons/quadruped.2bpp", INC_FRAME_2
|
|
CatIconFrame1: INCBIN "gfx/icons/cat.2bpp", INC_FRAME_1
|
|
CatIconFrame2: INCBIN "gfx/icons/cat.2bpp", INC_FRAME_2
|
|
|
|
TradeBubbleIconGFX: INCBIN "gfx/trade/bubble.2bpp" |