mirror of
https://github.com/thornAvery/jep-hack.git
synced 2026-02-07 00:25:24 +13:00
First Commit
Upload literally everything from the pokecrystal16 expand-move-ID branch
This commit is contained in:
commit
2f8a41f833
4618 changed files with 480386 additions and 0 deletions
985
engine/gfx/cgb_layouts.asm
Normal file
985
engine/gfx/cgb_layouts.asm
Normal file
|
|
@ -0,0 +1,985 @@
|
|||
; Replaces the functionality of sgb.asm to work with CGB hardware.
|
||||
|
||||
CheckCGB:
|
||||
ldh a, [hCGB]
|
||||
and a
|
||||
ret
|
||||
|
||||
LoadSGBLayoutCGB:
|
||||
ld a, b
|
||||
cp SCGB_DEFAULT
|
||||
jr nz, .not_default
|
||||
ld a, [wDefaultSGBLayout]
|
||||
.not_default
|
||||
cp SCGB_PARTY_MENU_HP_BARS
|
||||
jp z, CGB_ApplyPartyMenuHPPals
|
||||
call ResetBGPals
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
ld de, CGBLayoutJumptable
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ld de, .done
|
||||
push de
|
||||
jp hl
|
||||
.done:
|
||||
ret
|
||||
|
||||
CGBLayoutJumptable:
|
||||
table_width 2, CGBLayoutJumptable
|
||||
dw _CGB_BattleGrayscale
|
||||
dw _CGB_BattleColors
|
||||
dw _CGB_PokegearPals
|
||||
dw _CGB_StatsScreenHPPals
|
||||
dw _CGB_Pokedex
|
||||
dw _CGB_SlotMachine
|
||||
dw _CGB_BetaTitleScreen
|
||||
dw _CGB_GSIntro
|
||||
dw _CGB_Diploma
|
||||
dw _CGB_MapPals
|
||||
dw _CGB_PartyMenu
|
||||
dw _CGB_Evolution
|
||||
dw _CGB_GSTitleScreen
|
||||
dw _CGB_Unused0D
|
||||
dw _CGB_MoveList
|
||||
dw _CGB_BetaPikachuMinigame
|
||||
dw _CGB_PokedexSearchOption
|
||||
dw _CGB_BetaPoker
|
||||
dw _CGB_Pokepic
|
||||
dw _CGB_MagnetTrain
|
||||
dw _CGB_PackPals
|
||||
dw _CGB_TrainerCard
|
||||
dw _CGB_PokedexUnownMode
|
||||
dw _CGB_BillsPC
|
||||
dw _CGB_UnownPuzzle
|
||||
dw _CGB_GamefreakLogo
|
||||
dw _CGB_PlayerOrMonFrontpicPals
|
||||
dw _CGB_TradeTube
|
||||
dw _CGB_TrainerOrMonFrontpicPals
|
||||
dw _CGB_MysteryGift
|
||||
dw _CGB_Unused1E
|
||||
assert_table_length NUM_SCGB_LAYOUTS
|
||||
|
||||
_CGB_BattleGrayscale:
|
||||
ld hl, PalPacket_BattleGrayscale + 1
|
||||
ld de, wBGPals1
|
||||
ld c, 4
|
||||
call CopyPalettes
|
||||
ld hl, PalPacket_BattleGrayscale + 1
|
||||
ld de, wBGPals1 palette PAL_BATTLE_BG_EXP
|
||||
ld c, 4
|
||||
call CopyPalettes
|
||||
ld hl, PalPacket_BattleGrayscale + 1
|
||||
ld de, wOBPals1
|
||||
ld c, 2
|
||||
call CopyPalettes
|
||||
jr _CGB_FinishBattleScreenLayout
|
||||
|
||||
_CGB_BattleColors:
|
||||
ld de, wBGPals1
|
||||
call GetBattlemonBackpicPalettePointer
|
||||
push hl
|
||||
call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_PLAYER
|
||||
call GetEnemyFrontpicPalettePointer
|
||||
push hl
|
||||
call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_ENEMY
|
||||
ld a, [wEnemyHPPal]
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld bc, HPBarPals
|
||||
add hl, bc
|
||||
call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_ENEMY_HP
|
||||
ld a, [wPlayerHPPal]
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld bc, HPBarPals
|
||||
add hl, bc
|
||||
call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_PLAYER_HP
|
||||
ld hl, ExpBarPalette
|
||||
call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_EXP
|
||||
ld de, wOBPals1
|
||||
pop hl
|
||||
call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_OB_ENEMY
|
||||
pop hl
|
||||
call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_OB_PLAYER
|
||||
ld a, SCGB_BATTLE_COLORS
|
||||
ld [wDefaultSGBLayout], a
|
||||
call ApplyPals
|
||||
_CGB_FinishBattleScreenLayout:
|
||||
call InitPartyMenuBGPal7
|
||||
hlcoord 0, 0, wAttrmap
|
||||
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
|
||||
ld a, PAL_BATTLE_BG_ENEMY_HP
|
||||
call ByteFill
|
||||
hlcoord 0, 4, wAttrmap
|
||||
lb bc, 8, 10
|
||||
ld a, PAL_BATTLE_BG_PLAYER
|
||||
call FillBoxCGB
|
||||
hlcoord 10, 0, wAttrmap
|
||||
lb bc, 7, 10
|
||||
ld a, PAL_BATTLE_BG_ENEMY
|
||||
call FillBoxCGB
|
||||
hlcoord 0, 0, wAttrmap
|
||||
lb bc, 4, 10
|
||||
ld a, PAL_BATTLE_BG_ENEMY_HP
|
||||
call FillBoxCGB
|
||||
hlcoord 10, 7, wAttrmap
|
||||
lb bc, 5, 10
|
||||
ld a, PAL_BATTLE_BG_PLAYER_HP
|
||||
call FillBoxCGB
|
||||
hlcoord 10, 11, wAttrmap
|
||||
lb bc, 1, 9
|
||||
ld a, PAL_BATTLE_BG_EXP
|
||||
call FillBoxCGB
|
||||
hlcoord 0, 12, wAttrmap
|
||||
ld bc, 6 * SCREEN_WIDTH
|
||||
ld a, PAL_BATTLE_BG_TEXT
|
||||
call ByteFill
|
||||
ld hl, BattleObjectPals
|
||||
ld de, wOBPals1 palette PAL_BATTLE_OB_GRAY
|
||||
ld bc, 6 palettes
|
||||
ld a, BANK(wOBPals1)
|
||||
call FarCopyWRAM
|
||||
call ApplyAttrmap
|
||||
ret
|
||||
|
||||
InitPartyMenuBGPal7:
|
||||
farcall Function100dc0
|
||||
Mobile_InitPartyMenuBGPal7:
|
||||
ld hl, PartyMenuBGPalette
|
||||
jr nc, .not_mobile
|
||||
ld hl, PartyMenuBGMobilePalette
|
||||
.not_mobile
|
||||
ld de, wBGPals1 palette 7
|
||||
ld bc, 1 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
ret
|
||||
|
||||
InitPartyMenuBGPal0:
|
||||
farcall Function100dc0
|
||||
ld hl, PartyMenuBGPalette
|
||||
jr nc, .not_mobile
|
||||
ld hl, PartyMenuBGMobilePalette
|
||||
.not_mobile
|
||||
ld de, wBGPals1 palette 0
|
||||
ld bc, 1 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
ret
|
||||
|
||||
_CGB_PokegearPals:
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, .male
|
||||
ld hl, FemalePokegearPals
|
||||
jr .got_pals
|
||||
|
||||
.male
|
||||
ld hl, MalePokegearPals
|
||||
.got_pals
|
||||
ld de, wBGPals1
|
||||
ld bc, 6 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_StatsScreenHPPals:
|
||||
ld de, wBGPals1
|
||||
ld a, [wCurHPPal]
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld bc, HPBarPals
|
||||
add hl, bc
|
||||
call LoadPalette_White_Col1_Col2_Black ; hp palette
|
||||
ld a, [wCurPartySpecies]
|
||||
ld bc, wTempMonDVs
|
||||
call GetPlayerOrMonPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black ; mon palette
|
||||
ld hl, ExpBarPalette
|
||||
call LoadPalette_White_Col1_Col2_Black ; exp palette
|
||||
ld hl, StatsScreenPagePals
|
||||
ld de, wBGPals1 palette 3
|
||||
ld bc, 3 palettes ; pink, green, and blue page palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
call WipeAttrmap
|
||||
|
||||
hlcoord 0, 0, wAttrmap
|
||||
lb bc, 8, SCREEN_WIDTH
|
||||
ld a, $1 ; mon palette
|
||||
call FillBoxCGB
|
||||
|
||||
hlcoord 10, 16, wAttrmap
|
||||
ld bc, 10
|
||||
ld a, $2 ; exp palette
|
||||
call ByteFill
|
||||
|
||||
hlcoord 13, 5, wAttrmap
|
||||
lb bc, 2, 2
|
||||
ld a, $3 ; pink page palette
|
||||
call FillBoxCGB
|
||||
|
||||
hlcoord 15, 5, wAttrmap
|
||||
lb bc, 2, 2
|
||||
ld a, $4 ; green page palette
|
||||
call FillBoxCGB
|
||||
|
||||
hlcoord 17, 5, wAttrmap
|
||||
lb bc, 2, 2
|
||||
ld a, $5 ; blue page palette
|
||||
call FillBoxCGB
|
||||
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
StatsScreenPagePals:
|
||||
INCLUDE "gfx/stats/pages.pal"
|
||||
|
||||
StatsScreenPals:
|
||||
INCLUDE "gfx/stats/stats.pal"
|
||||
|
||||
_CGB_Pokedex:
|
||||
ld de, wBGPals1
|
||||
ld a, PREDEFPAL_POKEDEX
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE ; dex interface palette
|
||||
ld a, [wCurPartySpecies]
|
||||
cp $ff
|
||||
jr nz, .is_pokemon
|
||||
ld hl, PokedexQuestionMarkPalette
|
||||
call LoadHLPaletteIntoDE ; green question mark palette
|
||||
jr .got_palette
|
||||
|
||||
.is_pokemon
|
||||
call GetMonPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black ; mon palette
|
||||
.got_palette
|
||||
call WipeAttrmap
|
||||
hlcoord 1, 1, wAttrmap
|
||||
lb bc, 7, 7
|
||||
ld a, $1 ; green question mark palette
|
||||
call FillBoxCGB
|
||||
call InitPartyMenuOBPals
|
||||
ld hl, PokedexCursorPalette
|
||||
ld de, wOBPals1 palette 7 ; green cursor palette
|
||||
ld bc, 1 palettes
|
||||
ld a, BANK(wOBPals1)
|
||||
call FarCopyWRAM
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
PokedexQuestionMarkPalette:
|
||||
INCLUDE "gfx/pokedex/question_mark.pal"
|
||||
|
||||
PokedexCursorPalette:
|
||||
INCLUDE "gfx/pokedex/cursor.pal"
|
||||
|
||||
_CGB_BillsPC:
|
||||
ld de, wBGPals1
|
||||
ld a, PREDEFPAL_POKEDEX
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
ld a, [wCurPartySpecies]
|
||||
cp $ff
|
||||
jr nz, .GetMonPalette
|
||||
ld hl, BillsPCOrangePalette
|
||||
call LoadHLPaletteIntoDE
|
||||
jr .GotPalette
|
||||
|
||||
.GetMonPalette:
|
||||
ld bc, wTempMonDVs
|
||||
call GetPlayerOrMonPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
.GotPalette:
|
||||
call WipeAttrmap
|
||||
hlcoord 1, 4, wAttrmap
|
||||
lb bc, 7, 7
|
||||
ld a, $1 ; mon palette
|
||||
call FillBoxCGB
|
||||
call InitPartyMenuOBPals
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_Unknown: ; unreferenced
|
||||
ld hl, BillsPCOrangePalette
|
||||
call LoadHLPaletteIntoDE
|
||||
jr .GotPalette
|
||||
|
||||
.GetMonPalette: ; unreferenced
|
||||
ld bc, wTempMonDVs
|
||||
call GetPlayerOrMonPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
.GotPalette:
|
||||
call WipeAttrmap
|
||||
hlcoord 1, 1, wAttrmap
|
||||
lb bc, 7, 7
|
||||
ld a, $1 ; mon palette
|
||||
call FillBoxCGB
|
||||
call InitPartyMenuOBPals
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
BillsPCOrangePalette:
|
||||
INCLUDE "gfx/pc/orange.pal"
|
||||
|
||||
_CGB_PokedexUnownMode:
|
||||
ld de, wBGPals1
|
||||
ld a, PREDEFPAL_POKEDEX
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
ld a, [wCurPartySpecies]
|
||||
call GetMonPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
call WipeAttrmap
|
||||
hlcoord 7, 5, wAttrmap
|
||||
lb bc, 7, 7
|
||||
ld a, $1 ; mon palette
|
||||
call FillBoxCGB
|
||||
call InitPartyMenuOBPals
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_SlotMachine:
|
||||
ld hl, SlotMachinePals
|
||||
ld de, wBGPals1
|
||||
ld bc, 16 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
call WipeAttrmap
|
||||
hlcoord 0, 2, wAttrmap
|
||||
lb bc, 10, 3
|
||||
ld a, $2 ; "3" palette
|
||||
call FillBoxCGB
|
||||
hlcoord 17, 2, wAttrmap
|
||||
lb bc, 10, 3
|
||||
ld a, $2 ; "3" palette
|
||||
call FillBoxCGB
|
||||
hlcoord 0, 4, wAttrmap
|
||||
lb bc, 6, 3
|
||||
ld a, $3 ; "2" palette
|
||||
call FillBoxCGB
|
||||
hlcoord 17, 4, wAttrmap
|
||||
lb bc, 6, 3
|
||||
ld a, $3 ; "2" palette
|
||||
call FillBoxCGB
|
||||
hlcoord 0, 6, wAttrmap
|
||||
lb bc, 2, 3
|
||||
ld a, $4 ; "1" palette
|
||||
call FillBoxCGB
|
||||
hlcoord 17, 6, wAttrmap
|
||||
lb bc, 2, 3
|
||||
ld a, $4 ; "1" palette
|
||||
call FillBoxCGB
|
||||
hlcoord 4, 2, wAttrmap
|
||||
lb bc, 2, 12
|
||||
ld a, $1 ; Vileplume palette
|
||||
call FillBoxCGB
|
||||
hlcoord 3, 2, wAttrmap
|
||||
lb bc, 10, 1
|
||||
ld a, $1 ; lights palette
|
||||
call FillBoxCGB
|
||||
hlcoord 16, 2, wAttrmap
|
||||
lb bc, 10, 1
|
||||
ld a, $1 ; lights palette
|
||||
call FillBoxCGB
|
||||
hlcoord 0, 12, wAttrmap
|
||||
ld bc, 6 * SCREEN_WIDTH
|
||||
ld a, $7 ; text palette
|
||||
call ByteFill
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_BetaTitleScreen:
|
||||
ld hl, PalPacket_BetaTitleScreen + 1
|
||||
call CopyFourPalettes
|
||||
call WipeAttrmap
|
||||
ld de, wOBPals1
|
||||
ld a, PREDEFPAL_PACK
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
hlcoord 0, 6, wAttrmap
|
||||
lb bc, 12, SCREEN_WIDTH
|
||||
ld a, $1
|
||||
call FillBoxCGB
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_GSIntro:
|
||||
ld b, 0
|
||||
ld hl, .Jumptable
|
||||
add hl, bc
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
jp hl
|
||||
|
||||
.Jumptable:
|
||||
dw .ShellderLaprasScene
|
||||
dw .JigglypuffPikachuScene
|
||||
dw .StartersCharizardScene
|
||||
|
||||
.ShellderLaprasScene:
|
||||
ld hl, .ShellderLaprasBGPalette
|
||||
ld de, wBGPals1
|
||||
call LoadHLPaletteIntoDE
|
||||
ld hl, .ShellderLaprasOBPals
|
||||
ld de, wOBPals1
|
||||
ld bc, 2 palettes
|
||||
ld a, BANK(wOBPals1)
|
||||
call FarCopyWRAM
|
||||
call WipeAttrmap
|
||||
ret
|
||||
|
||||
.ShellderLaprasBGPalette:
|
||||
INCLUDE "gfx/intro/gs_shellder_lapras_bg.pal"
|
||||
|
||||
.ShellderLaprasOBPals:
|
||||
INCLUDE "gfx/intro/gs_shellder_lapras_ob.pal"
|
||||
|
||||
.JigglypuffPikachuScene:
|
||||
ld de, wBGPals1
|
||||
ld a, PREDEFPAL_GS_INTRO_JIGGLYPUFF_PIKACHU_BG
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
|
||||
ld de, wOBPals1
|
||||
ld a, PREDEFPAL_GS_INTRO_JIGGLYPUFF_PIKACHU_OB
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
call WipeAttrmap
|
||||
ret
|
||||
|
||||
.StartersCharizardScene:
|
||||
ld hl, PalPacket_Pack + 1
|
||||
call CopyFourPalettes
|
||||
ld de, wOBPals1
|
||||
ld a, PREDEFPAL_GS_INTRO_STARTERS_TRANSITION
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
call WipeAttrmap
|
||||
ret
|
||||
|
||||
_CGB_BetaPoker:
|
||||
ld hl, BetaPokerPals
|
||||
ld de, wBGPals1
|
||||
ld bc, 5 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
call ApplyPals
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
ret
|
||||
|
||||
_CGB_Diploma:
|
||||
ld hl, DiplomaPalettes
|
||||
ld de, wBGPals1
|
||||
ld bc, 16 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
|
||||
ld hl, PalPacket_Diploma + 1
|
||||
call CopyFourPalettes
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
ret
|
||||
|
||||
_CGB_MapPals:
|
||||
call LoadMapPals
|
||||
ld a, SCGB_MAPPALS
|
||||
ld [wDefaultSGBLayout], a
|
||||
ret
|
||||
|
||||
_CGB_PartyMenu:
|
||||
ld hl, PalPacket_PartyMenu + 1
|
||||
call CopyFourPalettes
|
||||
call InitPartyMenuBGPal0
|
||||
call InitPartyMenuBGPal7
|
||||
call InitPartyMenuOBPals
|
||||
call ApplyAttrmap
|
||||
ret
|
||||
|
||||
_CGB_Evolution:
|
||||
ld de, wBGPals1
|
||||
ld a, c
|
||||
and a
|
||||
jr z, .pokemon
|
||||
ld a, PREDEFPAL_BLACKOUT
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
jr .got_palette
|
||||
|
||||
.pokemon
|
||||
ld hl, wPartyMon1DVs
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
ld a, [wCurPartyMon]
|
||||
call AddNTimes
|
||||
ld c, l
|
||||
ld b, h
|
||||
ld a, [wPlayerHPPal]
|
||||
call GetPlayerOrMonPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
ld hl, BattleObjectPals
|
||||
ld de, wOBPals1 palette PAL_BATTLE_OB_GRAY
|
||||
ld bc, 6 palettes
|
||||
ld a, BANK(wOBPals1)
|
||||
call FarCopyWRAM
|
||||
|
||||
.got_palette
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_GSTitleScreen:
|
||||
ld hl, UnusedGSTitleBGPals
|
||||
ld de, wBGPals1
|
||||
ld bc, 5 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
ld hl, UnusedGSTitleOBPals
|
||||
ld de, wOBPals1
|
||||
ld bc, 2 palettes
|
||||
ld a, BANK(wOBPals1)
|
||||
call FarCopyWRAM
|
||||
ld a, SCGB_DIPLOMA
|
||||
ld [wDefaultSGBLayout], a
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_Unused0D:
|
||||
ld hl, PalPacket_Diploma + 1
|
||||
call CopyFourPalettes
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
ret
|
||||
|
||||
_CGB_UnownPuzzle:
|
||||
ld hl, PalPacket_UnownPuzzle + 1
|
||||
call CopyFourPalettes
|
||||
ld de, wOBPals1
|
||||
ld a, PREDEFPAL_UNOWN_PUZZLE
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
ldh a, [rSVBK]
|
||||
push af
|
||||
ld a, BANK(wOBPals1)
|
||||
ldh [rSVBK], a
|
||||
ld hl, wOBPals1
|
||||
ld a, LOW(palred 31 + palgreen 0 + palblue 0)
|
||||
ld [hli], a
|
||||
ld a, HIGH(palred 31 + palgreen 0 + palblue 0)
|
||||
ld [hl], a
|
||||
pop af
|
||||
ldh [rSVBK], a
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
ret
|
||||
|
||||
_CGB_TrainerCard:
|
||||
ld de, wBGPals1
|
||||
xor a ; CHRIS
|
||||
call GetTrainerPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
ld a, FALKNER ; KRIS
|
||||
call GetTrainerPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
ld a, BUGSY
|
||||
call GetTrainerPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
ld a, WHITNEY
|
||||
call GetTrainerPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
ld a, MORTY
|
||||
call GetTrainerPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
ld a, CHUCK
|
||||
call GetTrainerPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
ld a, JASMINE
|
||||
call GetTrainerPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
ld a, PRYCE
|
||||
call GetTrainerPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
ld a, PREDEFPAL_CGB_BADGE
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
|
||||
; fill screen with opposite-gender palette for the card border
|
||||
hlcoord 0, 0, wAttrmap
|
||||
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
|
||||
ld a, [wPlayerGender]
|
||||
and a
|
||||
ld a, $1 ; kris
|
||||
jr z, .got_gender
|
||||
ld a, $0 ; chris
|
||||
.got_gender
|
||||
call ByteFill
|
||||
; fill trainer sprite area with same-gender palette
|
||||
hlcoord 14, 1, wAttrmap
|
||||
lb bc, 7, 5
|
||||
ld a, [wPlayerGender]
|
||||
and a
|
||||
ld a, $0 ; chris
|
||||
jr z, .got_gender2
|
||||
ld a, $1 ; kris
|
||||
.got_gender2
|
||||
call FillBoxCGB
|
||||
; top-right corner still uses the border's palette
|
||||
hlcoord 18, 1, wAttrmap
|
||||
ld [hl], $1
|
||||
hlcoord 2, 11, wAttrmap
|
||||
lb bc, 2, 4
|
||||
ld a, $1 ; falkner
|
||||
call FillBoxCGB
|
||||
hlcoord 6, 11, wAttrmap
|
||||
lb bc, 2, 4
|
||||
ld a, $2 ; bugsy
|
||||
call FillBoxCGB
|
||||
hlcoord 10, 11, wAttrmap
|
||||
lb bc, 2, 4
|
||||
ld a, $3 ; whitney
|
||||
call FillBoxCGB
|
||||
hlcoord 14, 11, wAttrmap
|
||||
lb bc, 2, 4
|
||||
ld a, $4 ; morty
|
||||
call FillBoxCGB
|
||||
hlcoord 2, 14, wAttrmap
|
||||
lb bc, 2, 4
|
||||
ld a, $5 ; chuck
|
||||
call FillBoxCGB
|
||||
hlcoord 6, 14, wAttrmap
|
||||
lb bc, 2, 4
|
||||
ld a, $6 ; jasmine
|
||||
call FillBoxCGB
|
||||
hlcoord 10, 14, wAttrmap
|
||||
lb bc, 2, 4
|
||||
ld a, $7 ; pryce
|
||||
call FillBoxCGB
|
||||
; clair uses kris's palette
|
||||
ld a, [wPlayerGender]
|
||||
and a
|
||||
push af
|
||||
jr z, .got_gender3
|
||||
hlcoord 14, 14, wAttrmap
|
||||
lb bc, 2, 4
|
||||
ld a, $1
|
||||
call FillBoxCGB
|
||||
.got_gender3
|
||||
pop af
|
||||
ld c, $0
|
||||
jr nz, .got_gender4
|
||||
inc c
|
||||
.got_gender4
|
||||
ld a, c
|
||||
hlcoord 18, 1, wAttrmap
|
||||
ld [hl], a
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_MoveList:
|
||||
ld de, wBGPals1
|
||||
ld a, PREDEFPAL_GOLDENROD
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
ld a, [wPlayerHPPal]
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld bc, HPBarPals
|
||||
add hl, bc
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
call WipeAttrmap
|
||||
hlcoord 11, 1, wAttrmap
|
||||
lb bc, 2, 9
|
||||
ld a, $1
|
||||
call FillBoxCGB
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_BetaPikachuMinigame:
|
||||
ld hl, PalPacket_BetaPikachuMinigame + 1
|
||||
call CopyFourPalettes
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_PokedexSearchOption:
|
||||
ld de, wBGPals1
|
||||
ld a, PREDEFPAL_POKEDEX
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_PackPals:
|
||||
; pack pals
|
||||
ld a, [wBattleType]
|
||||
cp BATTLETYPE_TUTORIAL
|
||||
jr z, .tutorial_male
|
||||
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, .tutorial_male
|
||||
|
||||
ld hl, .KrisPackPals
|
||||
jr .got_gender
|
||||
|
||||
.tutorial_male
|
||||
ld hl, .ChrisPackPals
|
||||
|
||||
.got_gender
|
||||
ld de, wBGPals1
|
||||
ld bc, 8 palettes ; 6 palettes?
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
call WipeAttrmap
|
||||
hlcoord 0, 0, wAttrmap
|
||||
lb bc, 1, 10
|
||||
ld a, $1
|
||||
call FillBoxCGB
|
||||
hlcoord 10, 0, wAttrmap
|
||||
lb bc, 1, 10
|
||||
ld a, $2
|
||||
call FillBoxCGB
|
||||
hlcoord 7, 2, wAttrmap
|
||||
lb bc, 9, 1
|
||||
ld a, $3
|
||||
call FillBoxCGB
|
||||
hlcoord 0, 7, wAttrmap
|
||||
lb bc, 3, 5
|
||||
ld a, $4
|
||||
call FillBoxCGB
|
||||
hlcoord 0, 3, wAttrmap
|
||||
lb bc, 3, 5
|
||||
ld a, $5
|
||||
call FillBoxCGB
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
.ChrisPackPals:
|
||||
INCLUDE "gfx/pack/pack.pal"
|
||||
|
||||
.KrisPackPals:
|
||||
INCLUDE "gfx/pack/pack_f.pal"
|
||||
|
||||
_CGB_Pokepic:
|
||||
call _CGB_MapPals
|
||||
ld de, SCREEN_WIDTH
|
||||
hlcoord 0, 0, wAttrmap
|
||||
ld a, [wMenuBorderTopCoord]
|
||||
.loop
|
||||
and a
|
||||
jr z, .found_top
|
||||
dec a
|
||||
add hl, de
|
||||
jr .loop
|
||||
|
||||
.found_top
|
||||
ld a, [wMenuBorderLeftCoord]
|
||||
ld e, a
|
||||
ld d, 0
|
||||
add hl, de
|
||||
ld a, [wMenuBorderTopCoord]
|
||||
ld b, a
|
||||
ld a, [wMenuBorderBottomCoord]
|
||||
inc a
|
||||
sub b
|
||||
ld b, a
|
||||
ld a, [wMenuBorderLeftCoord]
|
||||
ld c, a
|
||||
ld a, [wMenuBorderRightCoord]
|
||||
sub c
|
||||
inc a
|
||||
ld c, a
|
||||
ld a, PAL_BG_GRAY
|
||||
call FillBoxCGB
|
||||
call ApplyAttrmap
|
||||
ret
|
||||
|
||||
_CGB_MagnetTrain: ; unused
|
||||
ld hl, PalPacket_MagnetTrain + 1
|
||||
call CopyFourPalettes
|
||||
call WipeAttrmap
|
||||
hlcoord 0, 4, wAttrmap
|
||||
lb bc, 10, SCREEN_WIDTH
|
||||
ld a, PAL_BG_GREEN
|
||||
call FillBoxCGB
|
||||
hlcoord 0, 6, wAttrmap
|
||||
lb bc, 6, SCREEN_WIDTH
|
||||
ld a, PAL_BG_RED
|
||||
call FillBoxCGB
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
_CGB_GamefreakLogo:
|
||||
ld de, wBGPals1
|
||||
ld a, PREDEFPAL_GAMEFREAK_LOGO_BG
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
ld hl, .GamefreakDittoPalette
|
||||
ld de, wOBPals1
|
||||
call LoadHLPaletteIntoDE
|
||||
ld hl, .GamefreakDittoPalette
|
||||
ld de, wOBPals1 palette 1
|
||||
call LoadHLPaletteIntoDE
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ret
|
||||
|
||||
.GamefreakDittoPalette:
|
||||
INCLUDE "gfx/splash/ditto.pal"
|
||||
|
||||
_CGB_PlayerOrMonFrontpicPals:
|
||||
ld de, wBGPals1
|
||||
ld a, [wCurPartySpecies]
|
||||
ld bc, wTempMonDVs
|
||||
call GetPlayerOrMonPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ret
|
||||
|
||||
_CGB_Unused1E:
|
||||
ld de, wBGPals1
|
||||
ld a, [wCurPartySpecies]
|
||||
call GetMonPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
ret
|
||||
|
||||
_CGB_TradeTube:
|
||||
ld hl, PalPacket_TradeTube + 1
|
||||
call CopyFourPalettes
|
||||
ld hl, PartyMenuOBPals
|
||||
ld de, wOBPals1
|
||||
ld bc, 1 palettes
|
||||
ld a, BANK(wOBPals1)
|
||||
call FarCopyWRAM
|
||||
ld de, wOBPals1 palette 7
|
||||
ld a, PREDEFPAL_TRADE_TUBE
|
||||
call GetPredefPal
|
||||
call LoadHLPaletteIntoDE
|
||||
call WipeAttrmap
|
||||
ret
|
||||
|
||||
_CGB_TrainerOrMonFrontpicPals:
|
||||
ld de, wBGPals1
|
||||
ld a, [wCurPartySpecies]
|
||||
ld bc, wTempMonDVs
|
||||
call GetFrontpicPalettePointer
|
||||
call LoadPalette_White_Col1_Col2_Black
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
call ApplyPals
|
||||
ret
|
||||
|
||||
_CGB_MysteryGift:
|
||||
ld hl, .MysteryGiftPalettes
|
||||
ld de, wBGPals1
|
||||
ld bc, 2 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
call ApplyPals
|
||||
call WipeAttrmap
|
||||
hlcoord 3, 7, wAttrmap
|
||||
lb bc, 8, 14
|
||||
ld a, $1
|
||||
call FillBoxCGB
|
||||
hlcoord 1, 5, wAttrmap
|
||||
lb bc, 1, 18
|
||||
ld a, $1
|
||||
call FillBoxCGB
|
||||
hlcoord 1, 16, wAttrmap
|
||||
lb bc, 1, 18
|
||||
ld a, $1
|
||||
call FillBoxCGB
|
||||
hlcoord 0, 0, wAttrmap
|
||||
lb bc, 17, 2
|
||||
ld a, $1
|
||||
call FillBoxCGB
|
||||
hlcoord 18, 5, wAttrmap
|
||||
lb bc, 12, 1
|
||||
ld a, $1
|
||||
call FillBoxCGB
|
||||
call ApplyAttrmap
|
||||
ret
|
||||
|
||||
.MysteryGiftPalettes:
|
||||
INCLUDE "gfx/mystery_gift/mystery_gift.pal"
|
||||
|
||||
GS_CGB_MysteryGift: ; unreferenced
|
||||
ld hl, .MysteryGiftPalette
|
||||
ld de, wBGPals1
|
||||
ld bc, 1 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
call ApplyPals
|
||||
call WipeAttrmap
|
||||
call ApplyAttrmap
|
||||
ret
|
||||
|
||||
.MysteryGiftPalette:
|
||||
INCLUDE "gfx/mystery_gift/gs_mystery_gift.pal"
|
||||
1339
engine/gfx/color.asm
Normal file
1339
engine/gfx/color.asm
Normal file
File diff suppressed because it is too large
Load diff
293
engine/gfx/crystal_layouts.asm
Normal file
293
engine/gfx/crystal_layouts.asm
Normal file
|
|
@ -0,0 +1,293 @@
|
|||
GetCrystalCGBLayout:
|
||||
ld a, b
|
||||
cp SCGB_DEFAULT
|
||||
jr nz, .not_default
|
||||
ld a, [wDefaultSGBLayout]
|
||||
.not_default
|
||||
push af
|
||||
farcall ResetBGPals
|
||||
pop af
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
ld de, .Jumptable
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ld de, .done
|
||||
push de
|
||||
jp hl
|
||||
.done:
|
||||
ret
|
||||
|
||||
.Jumptable:
|
||||
dw _CrystalCGB_MobileLayout0
|
||||
dw _CrystalCGB_MobileLayout1
|
||||
dw _CrystalCGB_NameCard
|
||||
|
||||
Crystal_FillBoxCGB:
|
||||
; This is a copy of FillBoxCGB.
|
||||
.row
|
||||
push bc
|
||||
push hl
|
||||
.col
|
||||
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
|
||||
|
||||
Crystal_WipeAttrmap:
|
||||
; This is a copy of WipeAttrmap.
|
||||
hlcoord 0, 0, wAttrmap
|
||||
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
|
||||
xor a
|
||||
call ByteFill
|
||||
ret
|
||||
|
||||
MG_Mobile_Layout_LoadPals:
|
||||
ld de, wBGPals1
|
||||
ld hl, Palette_MysteryGiftMobile
|
||||
ld bc, 5 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
ld de, wBGPals1 palette PAL_BG_TEXT
|
||||
ld hl, Palette_TextBG7
|
||||
ld bc, 1 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
ret
|
||||
|
||||
_CrystalCGB_MobileLayout0:
|
||||
call MG_Mobile_Layout_LoadPals
|
||||
call Crystal_WipeAttrmap
|
||||
call MG_Mobile_Layout_CreatePalBoxes
|
||||
farcall ApplyAttrmap
|
||||
farcall ApplyPals
|
||||
ret
|
||||
|
||||
MG_Mobile_Layout_CreatePalBoxes:
|
||||
hlcoord 0, 0, wAttrmap
|
||||
lb bc, 4, 1
|
||||
ld a, $1
|
||||
call Crystal_FillBoxCGB
|
||||
lb bc, 2, 1
|
||||
ld a, $2
|
||||
call Crystal_FillBoxCGB
|
||||
lb bc, 6, 1
|
||||
ld a, $3
|
||||
call Crystal_FillBoxCGB
|
||||
hlcoord 1, 0, wAttrmap
|
||||
ld a, $1
|
||||
lb bc, 3, 18
|
||||
call Crystal_FillBoxCGB
|
||||
lb bc, 2, 18
|
||||
ld a, $2
|
||||
call Crystal_FillBoxCGB
|
||||
lb bc, 12, 18
|
||||
ld a, $3
|
||||
call Crystal_FillBoxCGB
|
||||
hlcoord 19, 0, wAttrmap
|
||||
lb bc, 4, 1
|
||||
ld a, $1
|
||||
call Crystal_FillBoxCGB
|
||||
lb bc, 2, 1
|
||||
ld a, $2
|
||||
call Crystal_FillBoxCGB
|
||||
lb bc, 6, 1
|
||||
ld a, $3
|
||||
call Crystal_FillBoxCGB
|
||||
hlcoord 0, 12, wAttrmap
|
||||
ld bc, 6 * SCREEN_WIDTH
|
||||
ld a, $7
|
||||
call ByteFill
|
||||
ret
|
||||
|
||||
Palette_MysteryGiftMobile:
|
||||
INCLUDE "gfx/mystery_gift/mg_mobile.pal"
|
||||
|
||||
LoadOW_BGPal7::
|
||||
ld hl, Palette_TextBG7
|
||||
ld de, wBGPals1 palette PAL_BG_TEXT
|
||||
ld bc, 1 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
ret
|
||||
|
||||
Palette_TextBG7:
|
||||
INCLUDE "gfx/font/bg_text.pal"
|
||||
|
||||
Function49420::
|
||||
ld hl, MansionPalette1 + 8 palettes
|
||||
ld de, wBGPals1 palette PAL_BG_ROOF
|
||||
ld bc, 1 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
ret
|
||||
|
||||
_CrystalCGB_MobileLayout1:
|
||||
call MG_Mobile_Layout_LoadPals
|
||||
ld de, wBGPals1 palette PAL_BG_TEXT
|
||||
ld hl, .TextPalette
|
||||
ld bc, 1 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
call Crystal_WipeAttrmap
|
||||
hlcoord 0, 0, wAttrmap
|
||||
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
|
||||
xor a
|
||||
call ByteFill
|
||||
hlcoord 0, 14, wAttrmap
|
||||
ld bc, 4 * SCREEN_WIDTH
|
||||
ld a, $7
|
||||
call ByteFill
|
||||
ld a, [wd002]
|
||||
bit 6, a
|
||||
jr z, .asm_49464
|
||||
call .Function49480
|
||||
jr .done
|
||||
|
||||
.asm_49464
|
||||
call .Function49496
|
||||
.done
|
||||
farcall ApplyAttrmap
|
||||
farcall ApplyPals
|
||||
ld a, TRUE
|
||||
ldh [hCGBPalUpdate], a
|
||||
ret
|
||||
|
||||
.TextPalette:
|
||||
INCLUDE "gfx/mystery_gift/mobile_text.pal"
|
||||
|
||||
.Function49480:
|
||||
hlcoord 0, 0, wAttrmap
|
||||
lb bc, 4, SCREEN_WIDTH
|
||||
ld a, $7
|
||||
call Crystal_FillBoxCGB
|
||||
hlcoord 0, 2, wAttrmap
|
||||
ld a, $4
|
||||
ld [hl], a
|
||||
hlcoord 19, 2, wAttrmap
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.Function49496:
|
||||
hlcoord 0, 0, wAttrmap
|
||||
lb bc, 2, SCREEN_WIDTH
|
||||
ld a, $7
|
||||
call Crystal_FillBoxCGB
|
||||
hlcoord 0, 1, wAttrmap
|
||||
ld a, $4
|
||||
ld [hl], a
|
||||
hlcoord 19, 1, wAttrmap
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
INCLUDE "engine/tilesets/tileset_palettes.asm"
|
||||
|
||||
_CrystalCGB_NameCard:
|
||||
ld hl, .BGPalette
|
||||
ld de, wBGPals1
|
||||
ld bc, 1 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
farcall ApplyPals
|
||||
call Crystal_WipeAttrmap
|
||||
farcall ApplyAttrmap
|
||||
ld hl, .OBPalette
|
||||
ld de, wOBPals1
|
||||
ld bc, 1 palettes
|
||||
ld a, BANK(wOBPals1)
|
||||
call FarCopyWRAM
|
||||
ret
|
||||
|
||||
.BGPalette:
|
||||
INCLUDE "gfx/mystery_gift/name_card_bg.pal"
|
||||
|
||||
.OBPalette:
|
||||
INCLUDE "gfx/mystery_gift/name_card_ob.pal"
|
||||
|
||||
Function49742:
|
||||
ld hl, .MobileBorderPalettes
|
||||
ld de, wBGPals1
|
||||
ld bc, 8 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
farcall ApplyPals
|
||||
ret
|
||||
|
||||
.MobileBorderPalettes:
|
||||
INCLUDE "gfx/trade/mobile_border.pal"
|
||||
|
||||
_InitMG_Mobile_LinkTradePalMap:
|
||||
hlcoord 0, 0, wAttrmap
|
||||
lb bc, 16, 2
|
||||
ld a, $4
|
||||
call Crystal_FillBoxCGB
|
||||
ld a, $3
|
||||
ldcoord_a 0, 1, wAttrmap
|
||||
ldcoord_a 0, 14, wAttrmap
|
||||
hlcoord 2, 0, wAttrmap
|
||||
lb bc, 8, 18
|
||||
ld a, $5
|
||||
call Crystal_FillBoxCGB
|
||||
hlcoord 2, 8, wAttrmap
|
||||
lb bc, 8, 18
|
||||
ld a, $6
|
||||
call Crystal_FillBoxCGB
|
||||
hlcoord 0, 16, wAttrmap
|
||||
lb bc, 2, SCREEN_WIDTH
|
||||
ld a, $4
|
||||
call Crystal_FillBoxCGB
|
||||
ld a, $3
|
||||
lb bc, 6, 1
|
||||
hlcoord 6, 1, wAttrmap
|
||||
call Crystal_FillBoxCGB
|
||||
ld a, $3
|
||||
lb bc, 6, 1
|
||||
hlcoord 17, 1, wAttrmap
|
||||
call Crystal_FillBoxCGB
|
||||
ld a, $3
|
||||
lb bc, 6, 1
|
||||
hlcoord 6, 9, wAttrmap
|
||||
call Crystal_FillBoxCGB
|
||||
ld a, $3
|
||||
lb bc, 6, 1
|
||||
hlcoord 17, 9, wAttrmap
|
||||
call Crystal_FillBoxCGB
|
||||
ld a, $2
|
||||
hlcoord 2, 16, wAttrmap
|
||||
ld [hli], a
|
||||
ld a, $7
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld a, $2
|
||||
ld [hl], a
|
||||
hlcoord 2, 17, wAttrmap
|
||||
ld a, $3
|
||||
ld bc, 6
|
||||
call ByteFill
|
||||
ret
|
||||
|
||||
_LoadTradeRoomBGPals:
|
||||
ld hl, TradeRoomPalette
|
||||
ld de, wBGPals1 palette PAL_BG_GREEN
|
||||
ld bc, 6 palettes
|
||||
ld a, BANK(wBGPals1)
|
||||
call FarCopyWRAM
|
||||
farcall ApplyPals
|
||||
ret
|
||||
|
||||
TradeRoomPalette:
|
||||
INCLUDE "gfx/trade/border.pal"
|
||||
|
||||
InitMG_Mobile_LinkTradePalMap:
|
||||
call _InitMG_Mobile_LinkTradePalMap
|
||||
ret
|
||||
604
engine/gfx/dma_transfer.asm
Normal file
604
engine/gfx/dma_transfer.asm
Normal file
|
|
@ -0,0 +1,604 @@
|
|||
HDMATransferAttrmapAndTilemapToWRAMBank3::
|
||||
ld hl, .Function
|
||||
jp CallInSafeGFXMode
|
||||
|
||||
.Function:
|
||||
decoord 0, 0, wAttrmap
|
||||
ld hl, wScratchAttrmap
|
||||
call PadAttrmapForHDMATransfer
|
||||
decoord 0, 0
|
||||
ld hl, wScratchTilemap
|
||||
call PadTilemapForHDMATransfer
|
||||
ld a, $0
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchTilemap
|
||||
call HDMATransferToWRAMBank3
|
||||
ld a, $1
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchAttrmap
|
||||
call HDMATransferToWRAMBank3
|
||||
ret
|
||||
|
||||
HDMATransferTilemapToWRAMBank3::
|
||||
ld hl, .Function
|
||||
jp CallInSafeGFXMode
|
||||
|
||||
.Function:
|
||||
decoord 0, 0
|
||||
ld hl, wScratchTilemap
|
||||
call PadTilemapForHDMATransfer
|
||||
ld a, $0
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchTilemap
|
||||
call HDMATransferToWRAMBank3
|
||||
ret
|
||||
|
||||
HDMATransferAttrmapToWRAMBank3:
|
||||
ld hl, .Function
|
||||
jp CallInSafeGFXMode
|
||||
|
||||
.Function:
|
||||
decoord 0, 0, wAttrmap
|
||||
ld hl, wScratchAttrmap
|
||||
call PadAttrmapForHDMATransfer
|
||||
ld a, $1
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchAttrmap
|
||||
call HDMATransferToWRAMBank3
|
||||
ret
|
||||
|
||||
ReloadMapPart::
|
||||
ld hl, .Function
|
||||
jp CallInSafeGFXMode
|
||||
|
||||
.Function:
|
||||
decoord 0, 0, wAttrmap
|
||||
ld hl, wScratchAttrmap
|
||||
call PadAttrmapForHDMATransfer
|
||||
decoord 0, 0
|
||||
ld hl, wScratchTilemap
|
||||
call PadTilemapForHDMATransfer
|
||||
call DelayFrame
|
||||
|
||||
di
|
||||
ldh a, [rVBK]
|
||||
push af
|
||||
ld a, $1
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchAttrmap
|
||||
call HDMATransfer_Wait127Scanlines_toBGMap
|
||||
ld a, $0
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchTilemap
|
||||
call HDMATransfer_Wait127Scanlines_toBGMap
|
||||
pop af
|
||||
ldh [rVBK], a
|
||||
ei
|
||||
|
||||
ret
|
||||
|
||||
Mobile_ReloadMapPart:
|
||||
ld hl, ReloadMapPart ; useless
|
||||
ld hl, .Function
|
||||
jp CallInSafeGFXMode
|
||||
|
||||
.Function:
|
||||
decoord 0, 0, wAttrmap
|
||||
ld hl, wScratchAttrmap
|
||||
call PadAttrmapForHDMATransfer
|
||||
decoord 0, 0
|
||||
ld hl, wScratchTilemap
|
||||
call PadTilemapForHDMATransfer
|
||||
call DelayFrame
|
||||
|
||||
di
|
||||
ldh a, [rVBK]
|
||||
push af
|
||||
ld a, $1
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchAttrmap
|
||||
call HDMATransfer_NoDI
|
||||
ld a, $0
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchTilemap
|
||||
call HDMATransfer_NoDI
|
||||
pop af
|
||||
ldh [rVBK], a
|
||||
ei
|
||||
|
||||
ret
|
||||
|
||||
Function1040d4: ; unreferenced
|
||||
ld hl, .Function
|
||||
jp CallInSafeGFXMode
|
||||
|
||||
.Function
|
||||
ld a, $1
|
||||
ldh [rVBK], a
|
||||
ld a, BANK(w3_d800)
|
||||
ldh [rSVBK], a
|
||||
ld de, w3_d800
|
||||
ldh a, [hBGMapAddress + 1]
|
||||
ldh [rHDMA1], a
|
||||
ldh a, [hBGMapAddress]
|
||||
ldh [rHDMA2], a
|
||||
ld a, d
|
||||
ldh [rHDMA3], a
|
||||
ld a, e
|
||||
ldh [rHDMA4], a
|
||||
ld a, $23
|
||||
ldh [hDMATransfer], a
|
||||
call WaitDMATransfer
|
||||
ret
|
||||
|
||||
Function1040fb: ; unreferenced
|
||||
ld hl, .Function
|
||||
jp CallInSafeGFXMode
|
||||
|
||||
.Function
|
||||
ld a, $1
|
||||
ldh [rVBK], a
|
||||
ld a, BANK(w3_d800)
|
||||
ldh [rSVBK], a
|
||||
ld hl, w3_d800
|
||||
call HDMATransferToWRAMBank3
|
||||
ret
|
||||
|
||||
OpenAndCloseMenu_HDMATransferTilemapAndAttrmap::
|
||||
; OpenText
|
||||
ld hl, .Function
|
||||
jp CallInSafeGFXMode
|
||||
|
||||
.Function:
|
||||
; Transfer wAttrmap and Tilemap to BGMap
|
||||
; Fill vBGAttrs with $00
|
||||
; Fill vBGTiles with " "
|
||||
decoord 0, 0, wAttrmap
|
||||
ld hl, wScratchAttrmap
|
||||
call PadAttrmapForHDMATransfer
|
||||
decoord 0, 0
|
||||
ld hl, wScratchTilemap
|
||||
call PadTilemapForHDMATransfer
|
||||
call DelayFrame
|
||||
|
||||
di
|
||||
ldh a, [rVBK]
|
||||
push af
|
||||
ld a, $1
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchAttrmap
|
||||
call HDMATransfer_Wait123Scanlines_toBGMap
|
||||
ld a, $0
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchTilemap
|
||||
call HDMATransfer_Wait123Scanlines_toBGMap
|
||||
pop af
|
||||
ldh [rVBK], a
|
||||
ei
|
||||
ret
|
||||
|
||||
Mobile_OpenAndCloseMenu_HDMATransferTilemapAndAttrmap:
|
||||
ld hl, .Function
|
||||
jp CallInSafeGFXMode
|
||||
|
||||
.Function:
|
||||
; Transfer wAttrmap and Tilemap to BGMap
|
||||
; Fill vBGAttrs with $00
|
||||
; Fill vBGTiles with $ff
|
||||
decoord 0, 0, wAttrmap
|
||||
ld hl, wScratchAttrmap
|
||||
call PadAttrmapForHDMATransfer
|
||||
ld c, $ff
|
||||
decoord 0, 0
|
||||
ld hl, wScratchTilemap
|
||||
call PadMapForHDMATransfer
|
||||
|
||||
ld a, $1
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchAttrmap
|
||||
call HDMATransfer_Wait127Scanlines_toBGMap
|
||||
ld a, $0
|
||||
ldh [rVBK], a
|
||||
ld hl, wScratchTilemap
|
||||
call HDMATransfer_Wait127Scanlines_toBGMap
|
||||
ret
|
||||
|
||||
CallInSafeGFXMode:
|
||||
ldh a, [hBGMapMode]
|
||||
push af
|
||||
ldh a, [hMapAnims]
|
||||
push af
|
||||
xor a
|
||||
ldh [hBGMapMode], a
|
||||
ldh [hMapAnims], a
|
||||
ldh a, [rSVBK]
|
||||
push af
|
||||
ld a, BANK(wScratchTilemap)
|
||||
ldh [rSVBK], a
|
||||
ldh a, [rVBK]
|
||||
push af
|
||||
|
||||
call ._hl_
|
||||
|
||||
pop af
|
||||
ldh [rVBK], a
|
||||
pop af
|
||||
ldh [rSVBK], a
|
||||
pop af
|
||||
ldh [hMapAnims], a
|
||||
pop af
|
||||
ldh [hBGMapMode], a
|
||||
ret
|
||||
|
||||
._hl_
|
||||
jp hl
|
||||
|
||||
HDMATransferToWRAMBank3:
|
||||
call _LoadHDMAParameters
|
||||
ld a, $23
|
||||
ldh [hDMATransfer], a
|
||||
|
||||
WaitDMATransfer:
|
||||
.loop
|
||||
call DelayFrame
|
||||
ldh a, [hDMATransfer]
|
||||
and a
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
HDMATransfer_Wait127Scanlines_toBGMap:
|
||||
; HDMA transfer from hl to [hBGMapAddress]
|
||||
; hBGMapAddress -> de
|
||||
; 2 * SCREEN_HEIGHT -> c
|
||||
ldh a, [hBGMapAddress + 1]
|
||||
ld d, a
|
||||
ldh a, [hBGMapAddress]
|
||||
ld e, a
|
||||
ld c, 2 * SCREEN_HEIGHT
|
||||
jr HDMATransfer_Wait127Scanlines
|
||||
|
||||
HDMATransfer_Wait123Scanlines_toBGMap:
|
||||
; HDMA transfer from hl to [hBGMapAddress]
|
||||
; hBGMapAddress -> de
|
||||
; 2 * SCREEN_HEIGHT -> c
|
||||
; $7b --> b
|
||||
ldh a, [hBGMapAddress + 1]
|
||||
ld d, a
|
||||
ldh a, [hBGMapAddress]
|
||||
ld e, a
|
||||
ld c, 2 * SCREEN_HEIGHT
|
||||
jr HDMATransfer_Wait123Scanlines
|
||||
|
||||
HDMATransfer_NoDI:
|
||||
; HDMA transfer from hl to [hBGMapAddress]
|
||||
; [hBGMapAddress] --> de
|
||||
; 2 * SCREEN_HEIGHT --> c
|
||||
ldh a, [hBGMapAddress + 1]
|
||||
ld d, a
|
||||
ldh a, [hBGMapAddress]
|
||||
ld e, a
|
||||
ld c, 2 * SCREEN_HEIGHT
|
||||
|
||||
; [rHDMA1, rHDMA2] = hl & $fff0
|
||||
ld a, h
|
||||
ldh [rHDMA1], a
|
||||
ld a, l
|
||||
and $f0
|
||||
ldh [rHDMA2], a
|
||||
; [rHDMA3, rHDMA4] = de & $1ff0
|
||||
ld a, d
|
||||
and $1f
|
||||
ldh [rHDMA3], a
|
||||
ld a, e
|
||||
and $f0
|
||||
ldh [rHDMA4], a
|
||||
; b = c | %10000000
|
||||
ld a, c
|
||||
dec c
|
||||
or $80
|
||||
ld b, a
|
||||
; d = $7f - c + 1
|
||||
ld a, $7f
|
||||
sub c
|
||||
ld d, a
|
||||
; while [rLY] >= d: pass
|
||||
.loop1
|
||||
ldh a, [rLY]
|
||||
cp d
|
||||
jr nc, .loop1
|
||||
; while not [rSTAT] & 3: pass
|
||||
.loop2
|
||||
ldh a, [rSTAT]
|
||||
and $3
|
||||
jr z, .loop2
|
||||
; load the 5th byte of HDMA
|
||||
ld a, b
|
||||
ldh [rHDMA5], a
|
||||
; wait until rLY advances (c + 1) times
|
||||
ldh a, [rLY]
|
||||
inc c
|
||||
ld hl, rLY
|
||||
.loop3
|
||||
cp [hl]
|
||||
jr z, .loop3
|
||||
ld a, [hl]
|
||||
dec c
|
||||
jr nz, .loop3
|
||||
ld hl, rHDMA5
|
||||
res 7, [hl]
|
||||
ret
|
||||
|
||||
HDMATransfer_Wait123Scanlines:
|
||||
ld b, $7b
|
||||
jr _continue_HDMATransfer
|
||||
|
||||
HDMATransfer_Wait127Scanlines:
|
||||
ld b, $7f
|
||||
_continue_HDMATransfer:
|
||||
; a lot of waiting around for hardware registers
|
||||
; [rHDMA1, rHDMA2] = hl & $fff0
|
||||
ld a, h
|
||||
ldh [rHDMA1], a
|
||||
ld a, l
|
||||
and $f0 ; high nybble
|
||||
ldh [rHDMA2], a
|
||||
; [rHDMA3, rHDMA4] = de & $1ff0
|
||||
ld a, d
|
||||
and $1f ; lower 5 bits
|
||||
ldh [rHDMA3], a
|
||||
ld a, e
|
||||
and $f0 ; high nybble
|
||||
ldh [rHDMA4], a
|
||||
; e = c | %10000000
|
||||
ld a, c
|
||||
dec c
|
||||
or $80
|
||||
ld e, a
|
||||
; d = b - c + 1
|
||||
ld a, b
|
||||
sub c
|
||||
ld d, a
|
||||
; while [rLY] >= d: pass
|
||||
.ly_loop
|
||||
ldh a, [rLY]
|
||||
cp d
|
||||
jr nc, .ly_loop
|
||||
|
||||
di
|
||||
; while [rSTAT] & 3: pass
|
||||
.rstat_loop_1
|
||||
ldh a, [rSTAT]
|
||||
and $3
|
||||
jr nz, .rstat_loop_1
|
||||
; while not [rSTAT] & 3: pass
|
||||
.rstat_loop_2
|
||||
ldh a, [rSTAT]
|
||||
and $3
|
||||
jr z, .rstat_loop_2
|
||||
; load the 5th byte of HDMA
|
||||
ld a, e
|
||||
ldh [rHDMA5], a
|
||||
; wait until rLY advances (c + 1) times
|
||||
ldh a, [rLY]
|
||||
inc c
|
||||
ld hl, rLY
|
||||
.final_ly_loop
|
||||
cp [hl]
|
||||
jr z, .final_ly_loop
|
||||
ld a, [hl]
|
||||
dec c
|
||||
jr nz, .final_ly_loop
|
||||
ld hl, rHDMA5
|
||||
res 7, [hl]
|
||||
ei
|
||||
|
||||
ret
|
||||
|
||||
_LoadHDMAParameters:
|
||||
ld a, h
|
||||
ldh [rHDMA1], a
|
||||
ld a, l
|
||||
ldh [rHDMA2], a
|
||||
ldh a, [hBGMapAddress + 1]
|
||||
and $1f
|
||||
ldh [rHDMA3], a
|
||||
ldh a, [hBGMapAddress]
|
||||
ldh [rHDMA4], a
|
||||
ret
|
||||
|
||||
PadTilemapForHDMATransfer:
|
||||
ld c, " "
|
||||
jr PadMapForHDMATransfer
|
||||
|
||||
PadAttrmapForHDMATransfer:
|
||||
ld c, $0
|
||||
|
||||
PadMapForHDMATransfer:
|
||||
; pad a 20x18 map to 32x18 for HDMA transfer
|
||||
; back up the padding value in c to hMapObjectIndex
|
||||
ldh a, [hMapObjectIndex]
|
||||
push af
|
||||
ld a, c
|
||||
ldh [hMapObjectIndex], a
|
||||
|
||||
; for each row on the screen
|
||||
ld c, SCREEN_HEIGHT
|
||||
.loop1
|
||||
; for each tile in the row
|
||||
ld b, SCREEN_WIDTH
|
||||
.loop2
|
||||
; copy from de to hl
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .loop2
|
||||
|
||||
; load the original padding value of c into hl for 32 - 20 = 12 rows
|
||||
ldh a, [hMapObjectIndex]
|
||||
ld b, BG_MAP_WIDTH - SCREEN_WIDTH
|
||||
.loop3
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .loop3
|
||||
|
||||
dec c
|
||||
jr nz, .loop1
|
||||
|
||||
; restore the original value of hMapObjectIndex
|
||||
pop af
|
||||
ldh [hMapObjectIndex], a
|
||||
ret
|
||||
|
||||
HDMATransfer2bpp::
|
||||
; 2bpp when [rLCDC] & $80
|
||||
; switch to WRAM bank 6
|
||||
ldh a, [rSVBK]
|
||||
push af
|
||||
ld a, BANK(wScratchTilemap)
|
||||
ldh [rSVBK], a
|
||||
|
||||
push bc
|
||||
push hl
|
||||
|
||||
; Copy c tiles of the 2bpp from b:de to wScratchTilemap
|
||||
ld a, b ; bank
|
||||
ld l, c ; number of tiles
|
||||
ld h, $0
|
||||
; multiply by 16 (16 bytes of a 2bpp = 8 x 8 tile)
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld b, h
|
||||
ld c, l
|
||||
ld h, d ; address
|
||||
ld l, e
|
||||
ld de, wScratchTilemap
|
||||
call FarCopyBytes
|
||||
|
||||
pop hl
|
||||
pop bc
|
||||
|
||||
push bc
|
||||
call DelayFrame
|
||||
pop bc
|
||||
|
||||
ld d, h
|
||||
ld e, l
|
||||
ld hl, wScratchTilemap
|
||||
call HDMATransfer_Wait127Scanlines
|
||||
|
||||
; restore the previous bank
|
||||
pop af
|
||||
ldh [rSVBK], a
|
||||
ret
|
||||
|
||||
HDMATransfer1bpp::
|
||||
; 1bpp when [rLCDC] & $80
|
||||
.loop
|
||||
ld a, c
|
||||
cp $10
|
||||
jp c, .bankswitch
|
||||
jp z, .bankswitch
|
||||
push bc
|
||||
push hl
|
||||
push de
|
||||
ld c, $10
|
||||
call .bankswitch
|
||||
pop de
|
||||
ld hl, $80
|
||||
add hl, de
|
||||
ld d, h
|
||||
ld e, l
|
||||
pop hl
|
||||
lb bc, 1, 0
|
||||
add hl, bc
|
||||
pop bc
|
||||
ld a, c
|
||||
sub $10
|
||||
ld c, a
|
||||
jr .loop
|
||||
|
||||
.bankswitch
|
||||
ldh a, [rSVBK]
|
||||
push af
|
||||
ld a, BANK(wScratchTilemap)
|
||||
ldh [rSVBK], a
|
||||
|
||||
push bc
|
||||
push hl
|
||||
|
||||
ld a, b
|
||||
ld l, c
|
||||
ld h, $0
|
||||
add hl, hl ; multiply by 8
|
||||
add hl, hl ; multiply by 8
|
||||
add hl, hl ; multiply by 8
|
||||
ld c, l
|
||||
ld b, h
|
||||
ld h, d
|
||||
ld l, e
|
||||
ld de, wScratchTilemap
|
||||
call FarCopyBytesDouble_DoubleBankSwitch
|
||||
|
||||
pop hl
|
||||
pop bc
|
||||
|
||||
push bc
|
||||
call DelayFrame
|
||||
pop bc
|
||||
|
||||
ld d, h
|
||||
ld e, l
|
||||
ld hl, wScratchTilemap
|
||||
call HDMATransfer_Wait127Scanlines
|
||||
|
||||
pop af
|
||||
ldh [rSVBK], a
|
||||
ret
|
||||
|
||||
HDMATransfer_OnlyTopFourRows:
|
||||
ld hl, .Function
|
||||
jp CallInSafeGFXMode
|
||||
|
||||
.Function:
|
||||
ld hl, wScratchTilemap
|
||||
decoord 0, 0
|
||||
call .Copy
|
||||
ld hl, wScratchTilemap + $80
|
||||
decoord 0, 0, wAttrmap
|
||||
call .Copy
|
||||
ld a, $1
|
||||
ldh [rVBK], a
|
||||
ld c, $8
|
||||
ld hl, wScratchTilemap + $80
|
||||
debgcoord 0, 0, vBGMap1
|
||||
call HDMATransfer_Wait127Scanlines
|
||||
ld a, $0
|
||||
ldh [rVBK], a
|
||||
ld c, $8
|
||||
ld hl, wScratchTilemap
|
||||
debgcoord 0, 0, vBGMap1
|
||||
call HDMATransfer_Wait127Scanlines
|
||||
ret
|
||||
|
||||
.Copy:
|
||||
ld b, 4
|
||||
.outer_loop
|
||||
ld c, SCREEN_WIDTH
|
||||
.inner_loop
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .inner_loop
|
||||
ld a, l
|
||||
add BG_MAP_WIDTH - SCREEN_WIDTH
|
||||
ld l, a
|
||||
ld a, h
|
||||
adc 0
|
||||
ld h, a
|
||||
dec b
|
||||
jr nz, .outer_loop
|
||||
ret
|
||||
144
engine/gfx/load_font.asm
Normal file
144
engine/gfx/load_font.asm
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
INCLUDE "gfx/font.asm"
|
||||
|
||||
EnableHDMAForGraphics:
|
||||
db FALSE
|
||||
|
||||
Get1bppOptionalHDMA: ; unreferenced
|
||||
ld a, [EnableHDMAForGraphics]
|
||||
and a
|
||||
jp nz, Get1bppViaHDMA
|
||||
jp Get1bpp
|
||||
|
||||
Get2bppOptionalHDMA: ; unreferenced
|
||||
ld a, [EnableHDMAForGraphics]
|
||||
and a
|
||||
jp nz, Get2bppViaHDMA
|
||||
jp Get2bpp
|
||||
|
||||
_LoadStandardFont::
|
||||
ld de, Font
|
||||
ld hl, vTiles1
|
||||
lb bc, BANK(Font), 128 ; "A" to "9"
|
||||
ldh a, [rLCDC]
|
||||
bit rLCDC_ENABLE, a
|
||||
jp z, Copy1bpp
|
||||
|
||||
ld de, Font
|
||||
ld hl, vTiles1
|
||||
lb bc, BANK(Font), 32 ; "A" to "]"
|
||||
call Get1bppViaHDMA
|
||||
ld de, Font + 32 * LEN_1BPP_TILE
|
||||
ld hl, vTiles1 tile $20
|
||||
lb bc, BANK(Font), 32 ; "a" to $bf
|
||||
call Get1bppViaHDMA
|
||||
ld de, Font + 64 * LEN_1BPP_TILE
|
||||
ld hl, vTiles1 tile $40
|
||||
lb bc, BANK(Font), 32 ; "Ä" to "←"
|
||||
call Get1bppViaHDMA
|
||||
ld de, Font + 96 * LEN_1BPP_TILE
|
||||
ld hl, vTiles1 tile $60
|
||||
lb bc, BANK(Font), 32 ; "'" to "9"
|
||||
call Get1bppViaHDMA
|
||||
ret
|
||||
|
||||
_LoadFontsExtra1::
|
||||
ld de, FontsExtra_SolidBlackGFX
|
||||
ld hl, vTiles2 tile "■" ; $60
|
||||
lb bc, BANK(FontsExtra_SolidBlackGFX), 1
|
||||
call Get1bppViaHDMA
|
||||
ld de, PokegearPhoneIconGFX
|
||||
ld hl, vTiles2 tile "☎" ; $62
|
||||
lb bc, BANK(PokegearPhoneIconGFX), 1
|
||||
call Get2bppViaHDMA
|
||||
ld de, FontExtra + 3 tiles ; "<BOLD_D>"
|
||||
ld hl, vTiles2 tile "<BOLD_D>"
|
||||
lb bc, BANK(FontExtra), 22 ; "<BOLD_D>" to "ぉ"
|
||||
call Get2bppViaHDMA
|
||||
jr LoadFrame
|
||||
|
||||
_LoadFontsExtra2::
|
||||
ld de, FontsExtra2_UpArrowGFX
|
||||
ld hl, vTiles2 tile "▲" ; $61
|
||||
ld b, BANK(FontsExtra2_UpArrowGFX)
|
||||
ld c, 1
|
||||
call Get2bppViaHDMA
|
||||
ret
|
||||
|
||||
_LoadFontsBattleExtra::
|
||||
ld de, FontBattleExtra
|
||||
ld hl, vTiles2 tile $60
|
||||
lb bc, BANK(FontBattleExtra), 25
|
||||
call Get2bppViaHDMA
|
||||
jr LoadFrame
|
||||
|
||||
LoadFrame:
|
||||
ld a, [wTextboxFrame]
|
||||
maskbits NUM_FRAMES
|
||||
ld bc, TEXTBOX_FRAME_TILES * LEN_1BPP_TILE
|
||||
ld hl, Frames
|
||||
call AddNTimes
|
||||
ld d, h
|
||||
ld e, l
|
||||
ld hl, vTiles2 tile "┌" ; $79
|
||||
lb bc, BANK(Frames), TEXTBOX_FRAME_TILES ; "┌" to "┘"
|
||||
call Get1bppViaHDMA
|
||||
ld hl, vTiles2 tile " " ; $7f
|
||||
ld de, TextboxSpaceGFX
|
||||
lb bc, BANK(TextboxSpaceGFX), 1
|
||||
call Get1bppViaHDMA
|
||||
ret
|
||||
|
||||
LoadBattleFontsHPBar:
|
||||
ld de, FontBattleExtra
|
||||
ld hl, vTiles2 tile $60
|
||||
lb bc, BANK(FontBattleExtra), 12
|
||||
call Get2bppViaHDMA
|
||||
ld hl, vTiles2 tile $70
|
||||
ld de, FontBattleExtra + 16 tiles ; "<DO>"
|
||||
lb bc, BANK(FontBattleExtra), 3 ; "<DO>" to "『"
|
||||
call Get2bppViaHDMA
|
||||
call LoadFrame
|
||||
|
||||
LoadHPBar:
|
||||
ld de, EnemyHPBarBorderGFX
|
||||
ld hl, vTiles2 tile $6c
|
||||
lb bc, BANK(EnemyHPBarBorderGFX), 4
|
||||
call Get1bppViaHDMA
|
||||
ld de, HPExpBarBorderGFX
|
||||
ld hl, vTiles2 tile $73
|
||||
lb bc, BANK(HPExpBarBorderGFX), 6
|
||||
call Get1bppViaHDMA
|
||||
ld de, ExpBarGFX
|
||||
ld hl, vTiles2 tile $55
|
||||
lb bc, BANK(ExpBarGFX), 9
|
||||
call Get2bppViaHDMA
|
||||
ld de, MobilePhoneTilesGFX + 7 tiles ; mobile phone icon
|
||||
ld hl, vTiles2 tile $5e
|
||||
lb bc, BANK(MobilePhoneTilesGFX), 2
|
||||
call Get2bppViaHDMA
|
||||
ret
|
||||
|
||||
StatsScreen_LoadFont:
|
||||
call _LoadFontsBattleExtra
|
||||
ld de, EnemyHPBarBorderGFX
|
||||
ld hl, vTiles2 tile $6c
|
||||
lb bc, BANK(EnemyHPBarBorderGFX), 4
|
||||
call Get1bppViaHDMA
|
||||
ld de, HPExpBarBorderGFX
|
||||
ld hl, vTiles2 tile $78
|
||||
lb bc, BANK(HPExpBarBorderGFX), 1
|
||||
call Get1bppViaHDMA
|
||||
ld de, HPExpBarBorderGFX + 3 * LEN_1BPP_TILE
|
||||
ld hl, vTiles2 tile $76
|
||||
lb bc, BANK(HPExpBarBorderGFX), 2
|
||||
call Get1bppViaHDMA
|
||||
ld de, ExpBarGFX
|
||||
ld hl, vTiles2 tile $55
|
||||
lb bc, BANK(ExpBarGFX), 8
|
||||
call Get2bppViaHDMA
|
||||
LoadStatsScreenPageTilesGFX:
|
||||
ld de, StatsScreenPageTilesGFX
|
||||
ld hl, vTiles2 tile $31
|
||||
lb bc, BANK(StatsScreenPageTilesGFX), 17
|
||||
call Get2bppViaHDMA
|
||||
ret
|
||||
16
engine/gfx/load_overworld_font.asm
Normal file
16
engine/gfx/load_overworld_font.asm
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
LoadOverworldFont::
|
||||
ld de, .OverworldFontGFX
|
||||
ld hl, vTiles1
|
||||
lb bc, BANK(.OverworldFontGFX), $80
|
||||
call Get2bpp
|
||||
ld de, .OverworldFontSpaceGFX
|
||||
ld hl, vTiles2 tile " "
|
||||
lb bc, BANK(.OverworldFontSpaceGFX), 1
|
||||
call Get2bpp
|
||||
ret
|
||||
|
||||
.OverworldFontGFX:
|
||||
INCBIN "gfx/font/overworld.2bpp"
|
||||
|
||||
.OverworldFontSpaceGFX:
|
||||
INCBIN "gfx/font/overworld_space.2bpp"
|
||||
468
engine/gfx/load_pics.asm
Normal file
468
engine/gfx/load_pics.asm
Normal file
|
|
@ -0,0 +1,468 @@
|
|||
GetUnownLetter:
|
||||
; Return Unown letter in wUnownLetter based on DVs at hl
|
||||
|
||||
; Take the middle 2 bits of each DV and place them in order:
|
||||
; atk def spd spc
|
||||
; .ww..xx. .yy..zz.
|
||||
|
||||
; atk
|
||||
ld a, [hl]
|
||||
and %01100000
|
||||
sla a
|
||||
ld b, a
|
||||
; def
|
||||
ld a, [hli]
|
||||
and %00000110
|
||||
swap a
|
||||
srl a
|
||||
or b
|
||||
ld b, a
|
||||
|
||||
; spd
|
||||
ld a, [hl]
|
||||
and %01100000
|
||||
swap a
|
||||
sla a
|
||||
or b
|
||||
ld b, a
|
||||
; spc
|
||||
ld a, [hl]
|
||||
and %00000110
|
||||
srl a
|
||||
or b
|
||||
|
||||
; Divide by 10 to get 0-25
|
||||
ldh [hDividend + 3], a
|
||||
xor a
|
||||
ldh [hDividend], a
|
||||
ldh [hDividend + 1], a
|
||||
ldh [hDividend + 2], a
|
||||
ld a, $ff / NUM_UNOWN + 1
|
||||
ldh [hDivisor], a
|
||||
ld b, 4
|
||||
call Divide
|
||||
|
||||
; Increment to get 1-26
|
||||
ldh a, [hQuotient + 3]
|
||||
inc a
|
||||
ld [wUnownLetter], a
|
||||
ret
|
||||
|
||||
GetMonFrontpic:
|
||||
ld a, [wCurPartySpecies]
|
||||
ld [wCurSpecies], a
|
||||
call IsAPokemon
|
||||
ret c
|
||||
ldh a, [rSVBK]
|
||||
push af
|
||||
call _GetFrontpic
|
||||
pop af
|
||||
ldh [rSVBK], a
|
||||
jp CloseSRAM
|
||||
|
||||
GetAnimatedFrontpic:
|
||||
ld a, [wCurPartySpecies]
|
||||
ld [wCurSpecies], a
|
||||
call IsAPokemon
|
||||
ret c
|
||||
ldh a, [rSVBK]
|
||||
push af
|
||||
xor a
|
||||
ldh [hBGMapMode], a
|
||||
call _GetFrontpic
|
||||
ld a, BANK(vTiles3)
|
||||
ldh [rVBK], a
|
||||
call GetAnimatedEnemyFrontpic
|
||||
xor a
|
||||
ldh [rVBK], a
|
||||
pop af
|
||||
ldh [rSVBK], a
|
||||
jp CloseSRAM
|
||||
|
||||
_GetFrontpic:
|
||||
ld a, BANK(sEnemyFrontPicTileCount)
|
||||
call OpenSRAM
|
||||
push de
|
||||
call GetBaseData
|
||||
ld a, [wBasePicSize]
|
||||
and $f
|
||||
ld b, a
|
||||
push bc
|
||||
call GetFrontpicPointer
|
||||
ld a, BANK(wDecompressScratch)
|
||||
ldh [rSVBK], a
|
||||
ld a, b
|
||||
ld de, wDecompressScratch
|
||||
call FarDecompress
|
||||
; calculate tile count from final address; requires wDecompressScratch to be at the beginning of the bank
|
||||
swap e
|
||||
swap d
|
||||
ld a, d
|
||||
and $f0 ; get rid of the upper nibble of the address
|
||||
or e
|
||||
; and save the tile count for later
|
||||
ld [sEnemyFrontPicTileCount], a
|
||||
pop bc
|
||||
ld hl, sPaddedEnemyFrontPic
|
||||
ld de, wDecompressScratch
|
||||
call PadFrontpic
|
||||
pop hl
|
||||
push hl
|
||||
ld de, sPaddedEnemyFrontPic
|
||||
ld c, 7 * 7
|
||||
ldh a, [hROMBank]
|
||||
ld b, a
|
||||
call Get2bpp
|
||||
pop hl
|
||||
ret
|
||||
|
||||
GetPicIndirectPointer:
|
||||
ld a, [wCurPartySpecies]
|
||||
call GetPokemonIndexFromID
|
||||
ld b, h
|
||||
ld c, l
|
||||
ld a, l
|
||||
sub LOW(UNOWN)
|
||||
if HIGH(UNOWN) == 0
|
||||
or h
|
||||
else
|
||||
jr nz, .not_unown
|
||||
if HIGH(UNOWN) == 1
|
||||
dec h
|
||||
else
|
||||
ld a, h
|
||||
cp HIGH(UNOWN)
|
||||
endc
|
||||
endc
|
||||
jr z, .unown
|
||||
.not_unown
|
||||
ld hl, PokemonPicPointers
|
||||
ld d, BANK(PokemonPicPointers)
|
||||
.done
|
||||
ld a, 6
|
||||
jp AddNTimes
|
||||
|
||||
.unown
|
||||
ld a, [wUnownLetter]
|
||||
ld c, a
|
||||
ld b, 0
|
||||
ld hl, UnownPicPointers - 6
|
||||
ld d, BANK(UnownPicPointers)
|
||||
jr .done
|
||||
|
||||
GetFrontpicPointer:
|
||||
call GetPicIndirectPointer
|
||||
ld a, d
|
||||
call GetFarByte
|
||||
push af
|
||||
inc hl
|
||||
ld a, d
|
||||
call GetFarWord
|
||||
pop bc
|
||||
ret
|
||||
|
||||
GetAnimatedEnemyFrontpic:
|
||||
push hl
|
||||
ld de, sPaddedEnemyFrontPic
|
||||
ld c, 7 * 7
|
||||
ldh a, [hROMBank]
|
||||
ld b, a
|
||||
call Get2bpp
|
||||
pop hl
|
||||
ld de, 7 * 7 tiles
|
||||
add hl, de
|
||||
push hl
|
||||
ld a, BANK(wBasePicSize)
|
||||
ld hl, wBasePicSize
|
||||
call GetFarWRAMByte
|
||||
pop hl
|
||||
and $f
|
||||
ld de, wDecompressScratch + 5 * 5 tiles
|
||||
ld c, 5 * 5
|
||||
cp 5
|
||||
jr z, .got_dims
|
||||
ld de, wDecompressScratch + 6 * 6 tiles
|
||||
ld c, 6 * 6
|
||||
cp 6
|
||||
jr z, .got_dims
|
||||
ld de, wDecompressScratch + 7 * 7 tiles
|
||||
ld c, 7 * 7
|
||||
.got_dims
|
||||
; calculate the number of tiles dedicated to animation
|
||||
ld a, [sEnemyFrontPicTileCount]
|
||||
sub c
|
||||
; exit early if none
|
||||
ret z
|
||||
ld c, a
|
||||
push hl
|
||||
push bc
|
||||
call LoadFrontpicTiles
|
||||
pop bc
|
||||
pop hl
|
||||
ld de, wDecompressScratch
|
||||
ldh a, [hROMBank]
|
||||
ld b, a
|
||||
; if the tiles fit in a single VRAM block ($80 tiles), load them...
|
||||
ld a, c
|
||||
sub 128 - 7 * 7
|
||||
jr c, .finish
|
||||
; otherwise, load as many as we can...
|
||||
inc a
|
||||
ld [sEnemyFrontPicTileCount], a ; save the remainder
|
||||
ld c, 127 - 7 * 7
|
||||
call Get2bpp
|
||||
; ...and load the rest into vTiles4
|
||||
ld de, wDecompressScratch + (127 - 7 * 7) tiles
|
||||
ld hl, vTiles4
|
||||
ldh a, [hROMBank]
|
||||
ld b, a
|
||||
ld a, [sEnemyFrontPicTileCount]
|
||||
ld c, a
|
||||
.finish
|
||||
jp Get2bpp
|
||||
|
||||
LoadFrontpicTiles:
|
||||
ld hl, wDecompressScratch
|
||||
swap c
|
||||
ld a, c
|
||||
and $f
|
||||
ld b, a
|
||||
ld a, c
|
||||
and $f0
|
||||
ld c, a
|
||||
push bc
|
||||
call LoadOrientedFrontpic
|
||||
pop bc
|
||||
ld a, c
|
||||
and a
|
||||
jr z, .handle_loop
|
||||
inc b
|
||||
jr .handle_loop
|
||||
|
||||
.loop
|
||||
push bc
|
||||
ld c, 0
|
||||
call LoadOrientedFrontpic
|
||||
pop bc
|
||||
.handle_loop
|
||||
dec b
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
GetMonBackpic:
|
||||
ld a, [wCurPartySpecies]
|
||||
call IsAPokemon
|
||||
ret c
|
||||
|
||||
ldh a, [rSVBK]
|
||||
push af
|
||||
push de
|
||||
call GetPicIndirectPointer
|
||||
ld a, BANK(wDecompressScratch)
|
||||
ldh [rSVBK], a
|
||||
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl
|
||||
ld a, d
|
||||
call GetFarByte
|
||||
push af
|
||||
inc hl
|
||||
ld a, d
|
||||
call GetFarWord
|
||||
ld de, wDecompressScratch
|
||||
pop af
|
||||
call FarDecompress
|
||||
ld hl, wDecompressScratch
|
||||
ld c, 6 * 6
|
||||
call FixBackpicAlignment
|
||||
pop hl
|
||||
ld de, wDecompressScratch
|
||||
ldh a, [hROMBank]
|
||||
ld b, a
|
||||
call Get2bpp
|
||||
pop af
|
||||
ldh [rSVBK], a
|
||||
ret
|
||||
|
||||
GetTrainerPic:
|
||||
ld a, [wTrainerClass]
|
||||
and a
|
||||
ret z
|
||||
cp NUM_TRAINER_CLASSES + 1
|
||||
ret nc
|
||||
call WaitBGMap
|
||||
xor a
|
||||
ldh [hBGMapMode], a
|
||||
ld hl, TrainerPicPointers
|
||||
ld a, [wTrainerClass]
|
||||
dec a
|
||||
ld bc, 3
|
||||
call AddNTimes
|
||||
ldh a, [rSVBK]
|
||||
push af
|
||||
ld a, BANK(wDecompressScratch)
|
||||
ldh [rSVBK], a
|
||||
push de
|
||||
ld a, BANK(TrainerPicPointers)
|
||||
call GetFarByte
|
||||
push af
|
||||
inc hl
|
||||
ld a, BANK(TrainerPicPointers)
|
||||
call GetFarWord
|
||||
pop af
|
||||
ld de, wDecompressScratch
|
||||
call FarDecompress
|
||||
pop hl
|
||||
ld de, wDecompressScratch
|
||||
ld c, 7 * 7
|
||||
ldh a, [hROMBank]
|
||||
ld b, a
|
||||
call Get2bpp
|
||||
pop af
|
||||
ldh [rSVBK], a
|
||||
call WaitBGMap
|
||||
ld a, 1
|
||||
ldh [hBGMapMode], a
|
||||
ret
|
||||
|
||||
DecompressGet2bpp:
|
||||
; Decompress lz data from b:hl to wDecompressScratch, then copy it to address de.
|
||||
|
||||
ldh a, [rSVBK]
|
||||
push af
|
||||
ld a, BANK(wDecompressScratch)
|
||||
ldh [rSVBK], a
|
||||
|
||||
push de
|
||||
push bc
|
||||
ld a, b
|
||||
ld de, wDecompressScratch
|
||||
call FarDecompress
|
||||
pop bc
|
||||
ld de, wDecompressScratch
|
||||
pop hl
|
||||
ldh a, [hROMBank]
|
||||
ld b, a
|
||||
call Get2bpp
|
||||
|
||||
pop af
|
||||
ldh [rSVBK], a
|
||||
ret
|
||||
|
||||
FixBackpicAlignment:
|
||||
push de
|
||||
push bc
|
||||
ld a, [wBoxAlignment]
|
||||
and a
|
||||
jr z, .keep_dims
|
||||
ld a, c
|
||||
cp 7 * 7
|
||||
ld de, 7 * 7 tiles
|
||||
jr z, .got_dims
|
||||
cp 6 * 6
|
||||
ld de, 6 * 6 tiles
|
||||
jr z, .got_dims
|
||||
ld de, 5 * 5 tiles
|
||||
|
||||
.got_dims
|
||||
ld a, [hl]
|
||||
ld b, 0
|
||||
ld c, 8
|
||||
.loop
|
||||
rra
|
||||
rl b
|
||||
dec c
|
||||
jr nz, .loop
|
||||
ld a, b
|
||||
ld [hli], a
|
||||
dec de
|
||||
ld a, e
|
||||
or d
|
||||
jr nz, .got_dims
|
||||
|
||||
.keep_dims
|
||||
pop bc
|
||||
pop de
|
||||
ret
|
||||
|
||||
PadFrontpic:
|
||||
; pads frontpic to fill 7x7 box
|
||||
ld a, b
|
||||
cp 6
|
||||
jr z, .six
|
||||
cp 5
|
||||
jr z, .five
|
||||
|
||||
.seven_loop
|
||||
ld c, 7 << 4
|
||||
call LoadOrientedFrontpic
|
||||
dec b
|
||||
jr nz, .seven_loop
|
||||
ret
|
||||
|
||||
.six
|
||||
ld c, 7 << 4
|
||||
xor a
|
||||
call .Fill
|
||||
.six_loop
|
||||
ld c, (7 - 6) << 4
|
||||
xor a
|
||||
call .Fill
|
||||
ld c, 6 << 4
|
||||
call LoadOrientedFrontpic
|
||||
dec b
|
||||
jr nz, .six_loop
|
||||
ret
|
||||
|
||||
.five
|
||||
ld c, 7 << 4
|
||||
xor a
|
||||
call .Fill
|
||||
.five_loop
|
||||
ld c, (7 - 5) << 4
|
||||
xor a
|
||||
call .Fill
|
||||
ld c, 5 << 4
|
||||
call LoadOrientedFrontpic
|
||||
dec b
|
||||
jr nz, .five_loop
|
||||
ld c, 7 << 4
|
||||
xor a
|
||||
call .Fill
|
||||
ret
|
||||
|
||||
.Fill:
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .Fill
|
||||
ret
|
||||
|
||||
LoadOrientedFrontpic:
|
||||
ld a, [wBoxAlignment]
|
||||
and a
|
||||
jr nz, .x_flip
|
||||
.left_loop
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .left_loop
|
||||
ret
|
||||
|
||||
.x_flip
|
||||
push bc
|
||||
.right_loop
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld b, a
|
||||
xor a
|
||||
rept 8
|
||||
rr b
|
||||
rla
|
||||
endr
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .right_loop
|
||||
pop bc
|
||||
ret
|
||||
28
engine/gfx/load_push_oam.asm
Normal file
28
engine/gfx/load_push_oam.asm
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
WriteOAMDMACodeToHRAM::
|
||||
ld c, LOW(hTransferShadowOAM)
|
||||
ld b, OAMDMACodeEnd - OAMDMACode
|
||||
ld hl, OAMDMACode
|
||||
.copy
|
||||
ld a, [hli]
|
||||
ldh [c], a
|
||||
inc c
|
||||
dec b
|
||||
jr nz, .copy
|
||||
ret
|
||||
|
||||
OAMDMACode:
|
||||
; This code is defined in ROM, but
|
||||
; copied to and called from HRAM.
|
||||
LOAD "OAM DMA", HRAM
|
||||
hTransferShadowOAM::
|
||||
; initiate DMA
|
||||
ld a, HIGH(wShadowOAM)
|
||||
ldh [rDMA], a
|
||||
; wait for DMA to finish
|
||||
ld a, NUM_SPRITE_OAM_STRUCTS
|
||||
.wait
|
||||
dec a
|
||||
jr nz, .wait
|
||||
ret
|
||||
ENDL
|
||||
OAMDMACodeEnd:
|
||||
453
engine/gfx/mon_icons.asm
Normal file
453
engine/gfx/mon_icons.asm
Normal file
|
|
@ -0,0 +1,453 @@
|
|||
LoadOverworldMonIcon:
|
||||
ld a, e
|
||||
call ReadMonMenuIcon
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
ld de, IconPointers
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld d, [hl]
|
||||
ld b, BANK(Icons)
|
||||
ld c, 8
|
||||
ret
|
||||
|
||||
LoadMenuMonIcon:
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
call .LoadIcon
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
.LoadIcon:
|
||||
ld d, 0
|
||||
ld hl, .Jumptable
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
jp hl
|
||||
|
||||
.Jumptable:
|
||||
; entries correspond to MONICON_* constants
|
||||
dw PartyMenu_InitAnimatedMonIcon ; MONICON_PARTYMENU
|
||||
dw NamingScreen_InitAnimatedMonIcon ; MONICON_NAMINGSCREEN
|
||||
dw MoveList_InitAnimatedMonIcon ; MONICON_MOVES
|
||||
dw Trade_LoadMonIconGFX ; MONICON_TRADE
|
||||
dw Mobile_InitAnimatedMonIcon ; MONICON_MOBILE1
|
||||
dw Mobile_InitPartyMenuBGPal71 ; MONICON_MOBILE2
|
||||
dw Unused_GetPartyMenuMonIcon ; MONICON_UNUSED
|
||||
|
||||
Unused_GetPartyMenuMonIcon:
|
||||
call InitPartyMenuIcon
|
||||
call .GetPartyMonItemGFX
|
||||
call SetPartyMonIconAnimSpeed
|
||||
ret
|
||||
|
||||
.GetPartyMonItemGFX:
|
||||
push bc
|
||||
ldh a, [hObjectStructIndex]
|
||||
ld hl, wPartyMon1Item
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
call AddNTimes
|
||||
pop bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .no_item
|
||||
push hl
|
||||
push bc
|
||||
ld d, a
|
||||
callfar ItemIsMail
|
||||
pop bc
|
||||
pop hl
|
||||
jr c, .not_mail
|
||||
ld a, $06
|
||||
jr .got_tile
|
||||
.not_mail
|
||||
ld a, $05
|
||||
; fallthrough
|
||||
|
||||
.no_item
|
||||
ld a, $04
|
||||
.got_tile
|
||||
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
Mobile_InitAnimatedMonIcon:
|
||||
call PartyMenu_InitAnimatedMonIcon
|
||||
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
||||
add hl, bc
|
||||
ld a, SPRITE_ANIM_SEQ_NULL
|
||||
ld [hl], a
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld a, 9 * 8
|
||||
ld [hl], a
|
||||
ld hl, SPRITEANIMSTRUCT_YCOORD
|
||||
add hl, bc
|
||||
ld a, 9 * 8
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
Mobile_InitPartyMenuBGPal71:
|
||||
call InitPartyMenuIcon
|
||||
call SetPartyMonIconAnimSpeed
|
||||
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
||||
add hl, bc
|
||||
ld a, SPRITE_ANIM_SEQ_NULL
|
||||
ld [hl], a
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld a, 3 * 8
|
||||
ld [hl], a
|
||||
ld hl, SPRITEANIMSTRUCT_YCOORD
|
||||
add hl, bc
|
||||
ld a, 12 * 8
|
||||
ld [hl], a
|
||||
ld a, c
|
||||
ld [wc608], a
|
||||
ld a, b
|
||||
ld [wc608 + 1], a
|
||||
ret
|
||||
|
||||
PartyMenu_InitAnimatedMonIcon:
|
||||
call InitPartyMenuIcon
|
||||
call .SpawnItemIcon
|
||||
call SetPartyMonIconAnimSpeed
|
||||
ret
|
||||
|
||||
.SpawnItemIcon:
|
||||
push bc
|
||||
ldh a, [hObjectStructIndex]
|
||||
ld hl, wPartyMon1Item
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
call AddNTimes
|
||||
pop bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
ret z
|
||||
push hl
|
||||
push bc
|
||||
ld d, a
|
||||
callfar ItemIsMail
|
||||
pop bc
|
||||
pop hl
|
||||
jr c, .mail
|
||||
ld a, SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_ITEM
|
||||
jr .okay
|
||||
|
||||
.mail
|
||||
ld a, SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_MAIL
|
||||
.okay
|
||||
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
InitPartyMenuIcon:
|
||||
ld a, [wCurIconTile]
|
||||
push af
|
||||
ldh a, [hObjectStructIndex]
|
||||
ld hl, wPartySpecies
|
||||
ld e, a
|
||||
ld d, 0
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
call ReadMonMenuIcon
|
||||
ld [wCurIcon], a
|
||||
call GetMemIconGFX
|
||||
ldh a, [hObjectStructIndex]
|
||||
; y coord
|
||||
add a
|
||||
add a
|
||||
add a
|
||||
add a
|
||||
add $1c
|
||||
ld d, a
|
||||
; x coord
|
||||
ld e, $10
|
||||
; type is partymon icon
|
||||
ld a, SPRITE_ANIM_INDEX_PARTY_MON
|
||||
call _InitSpriteAnimStruct
|
||||
pop af
|
||||
ld hl, SPRITEANIMSTRUCT_TILE_ID
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
SetPartyMonIconAnimSpeed:
|
||||
push bc
|
||||
ldh a, [hObjectStructIndex]
|
||||
ld b, a
|
||||
call .getspeed
|
||||
ld a, b
|
||||
pop bc
|
||||
ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
rlca
|
||||
rlca
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.getspeed
|
||||
farcall PlacePartymonHPBar
|
||||
call GetHPPal
|
||||
ld e, d
|
||||
ld d, 0
|
||||
ld hl, .speeds
|
||||
add hl, de
|
||||
ld b, [hl]
|
||||
ret
|
||||
|
||||
.speeds
|
||||
db $00 ; HP_GREEN
|
||||
db $40 ; HP_YELLOW
|
||||
db $80 ; HP_RED
|
||||
|
||||
NamingScreen_InitAnimatedMonIcon:
|
||||
ld a, [wTempIconSpecies]
|
||||
call ReadMonMenuIcon
|
||||
ld [wCurIcon], a
|
||||
xor a
|
||||
call GetIconGFX
|
||||
depixel 4, 4, 4, 0
|
||||
ld a, SPRITE_ANIM_INDEX_PARTY_MON
|
||||
call _InitSpriteAnimStruct
|
||||
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
||||
add hl, bc
|
||||
ld [hl], SPRITE_ANIM_SEQ_NULL
|
||||
ret
|
||||
|
||||
MoveList_InitAnimatedMonIcon:
|
||||
ld a, [wTempIconSpecies]
|
||||
call ReadMonMenuIcon
|
||||
ld [wCurIcon], a
|
||||
xor a
|
||||
call GetIconGFX
|
||||
ld d, 3 * 8 + 2 ; depixel 3, 4, 2, 4
|
||||
ld e, 4 * 8 + 4
|
||||
ld a, SPRITE_ANIM_INDEX_PARTY_MON
|
||||
call _InitSpriteAnimStruct
|
||||
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
||||
add hl, bc
|
||||
ld [hl], SPRITE_ANIM_SEQ_NULL
|
||||
ret
|
||||
|
||||
Trade_LoadMonIconGFX:
|
||||
ld a, [wTempIconSpecies]
|
||||
call ReadMonMenuIcon
|
||||
ld [wCurIcon], a
|
||||
ld a, $62
|
||||
ld [wCurIconTile], a
|
||||
call GetMemIconGFX
|
||||
ret
|
||||
|
||||
GetSpeciesIcon:
|
||||
; Load species icon into VRAM at tile a
|
||||
push de
|
||||
ld a, [wTempIconSpecies]
|
||||
call ReadMonMenuIcon
|
||||
ld [wCurIcon], a
|
||||
pop de
|
||||
ld a, e
|
||||
call GetIconGFX
|
||||
ret
|
||||
|
||||
FlyFunction_GetMonIcon:
|
||||
push de
|
||||
ld a, [wTempIconSpecies]
|
||||
call ReadMonMenuIcon
|
||||
ld [wCurIcon], a
|
||||
pop de
|
||||
ld a, e
|
||||
call GetIcon_a
|
||||
ret
|
||||
|
||||
GetMonIconDE: ; unreferenced
|
||||
push de
|
||||
ld a, [wTempIconSpecies]
|
||||
call ReadMonMenuIcon
|
||||
ld [wCurIcon], a
|
||||
pop de
|
||||
call GetIcon_de
|
||||
ret
|
||||
|
||||
GetMemIconGFX:
|
||||
ld a, [wCurIconTile]
|
||||
GetIconGFX:
|
||||
call GetIcon_a
|
||||
ld de, 8 tiles
|
||||
add hl, de
|
||||
ld de, HeldItemIcons
|
||||
lb bc, BANK(HeldItemIcons), 2
|
||||
call GetGFXUnlessMobile
|
||||
ld a, [wCurIconTile]
|
||||
add 10
|
||||
ld [wCurIconTile], a
|
||||
ret
|
||||
|
||||
HeldItemIcons:
|
||||
INCBIN "gfx/stats/mail.2bpp"
|
||||
INCBIN "gfx/stats/item.2bpp"
|
||||
|
||||
GetIcon_de:
|
||||
; Load icon graphics into VRAM starting from tile de.
|
||||
ld l, e
|
||||
ld h, d
|
||||
jr GetIcon
|
||||
|
||||
GetIcon_a:
|
||||
; Load icon graphics into VRAM starting from tile a.
|
||||
ld l, a
|
||||
ld h, 0
|
||||
|
||||
GetIcon:
|
||||
; Load icon graphics into VRAM starting from tile hl.
|
||||
|
||||
; One tile is 16 bytes long.
|
||||
rept 4
|
||||
add hl, hl
|
||||
endr
|
||||
|
||||
ld de, vTiles0
|
||||
add hl, de
|
||||
push hl
|
||||
|
||||
; The icons are contiguous, in order and of the same
|
||||
; size, so the pointer table is somewhat redundant.
|
||||
ld a, [wCurIcon]
|
||||
push hl
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
ld de, IconPointers
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld d, [hl]
|
||||
pop hl
|
||||
|
||||
lb bc, BANK(Icons), 8
|
||||
call GetGFXUnlessMobile
|
||||
|
||||
pop hl
|
||||
ret
|
||||
|
||||
GetGFXUnlessMobile:
|
||||
ld a, [wLinkMode]
|
||||
cp LINK_MOBILE
|
||||
jp nz, Request2bpp
|
||||
jp Get2bppViaHDMA
|
||||
|
||||
FreezeMonIcons:
|
||||
ld hl, wSpriteAnimationStructs
|
||||
ld e, PARTY_LENGTH
|
||||
ld a, [wMenuCursorY]
|
||||
ld d, a
|
||||
.loop
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .next
|
||||
cp d
|
||||
jr z, .loadwithtwo
|
||||
ld a, SPRITE_ANIM_SEQ_NULL
|
||||
jr .ok
|
||||
|
||||
.loadwithtwo
|
||||
ld a, SPRITE_ANIM_SEQ_PARTY_MON_SWITCH
|
||||
|
||||
.ok
|
||||
push hl
|
||||
ld c, l
|
||||
ld b, h
|
||||
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
pop hl
|
||||
|
||||
.next
|
||||
ld bc, $10
|
||||
add hl, bc
|
||||
dec e
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
UnfreezeMonIcons:
|
||||
ld hl, wSpriteAnimationStructs
|
||||
ld e, PARTY_LENGTH
|
||||
.loop
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .next
|
||||
push hl
|
||||
ld c, l
|
||||
ld b, h
|
||||
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
||||
add hl, bc
|
||||
ld [hl], SPRITE_ANIM_SEQ_PARTY_MON
|
||||
pop hl
|
||||
.next
|
||||
ld bc, $10
|
||||
add hl, bc
|
||||
dec e
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
HoldSwitchmonIcon:
|
||||
ld hl, wSpriteAnimationStructs
|
||||
ld e, PARTY_LENGTH
|
||||
ld a, [wSwitchMon]
|
||||
ld d, a
|
||||
.loop
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .next
|
||||
cp d
|
||||
jr z, .is_switchmon
|
||||
ld a, SPRITE_ANIM_SEQ_PARTY_MON_SELECTED
|
||||
jr .join_back
|
||||
|
||||
.is_switchmon
|
||||
ld a, SPRITE_ANIM_SEQ_PARTY_MON_SWITCH
|
||||
.join_back
|
||||
push hl
|
||||
ld c, l
|
||||
ld b, h
|
||||
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
pop hl
|
||||
.next
|
||||
ld bc, $10
|
||||
add hl, bc
|
||||
dec e
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
ReadMonMenuIcon:
|
||||
cp EGG
|
||||
jr z, .egg
|
||||
call GetPokemonIndexFromID
|
||||
ld de, MonMenuIcons - 1
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
ret
|
||||
.egg
|
||||
ld a, ICON_EGG
|
||||
ret
|
||||
|
||||
INCLUDE "data/pokemon/menu_icons.asm"
|
||||
|
||||
INCLUDE "data/icon_pointers.asm"
|
||||
|
||||
INCLUDE "gfx/icons.asm"
|
||||
1098
engine/gfx/pic_animation.asm
Normal file
1098
engine/gfx/pic_animation.asm
Normal file
File diff suppressed because it is too large
Load diff
55
engine/gfx/place_graphic.asm
Normal file
55
engine/gfx/place_graphic.asm
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
PlaceGraphic:
|
||||
; Fill wBoxAlignment-aligned box width b height c
|
||||
; with iterating tile starting from hGraphicStartTile at hl.
|
||||
|
||||
ld de, SCREEN_WIDTH
|
||||
|
||||
ld a, [wBoxAlignment]
|
||||
and a
|
||||
jr nz, .right
|
||||
|
||||
ldh a, [hGraphicStartTile]
|
||||
.x1
|
||||
push bc
|
||||
push hl
|
||||
|
||||
.y1
|
||||
ld [hl], a
|
||||
add hl, de
|
||||
inc a
|
||||
dec c
|
||||
jr nz, .y1
|
||||
|
||||
pop hl
|
||||
inc hl
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .x1
|
||||
ret
|
||||
|
||||
.right
|
||||
; Right-aligned.
|
||||
push bc
|
||||
ld b, 0
|
||||
dec c
|
||||
add hl, bc
|
||||
pop bc
|
||||
|
||||
ldh a, [hGraphicStartTile]
|
||||
.x2
|
||||
push bc
|
||||
push hl
|
||||
|
||||
.y2
|
||||
ld [hl], a
|
||||
add hl, de
|
||||
inc a
|
||||
dec c
|
||||
jr nz, .y2
|
||||
|
||||
pop hl
|
||||
dec hl
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .x2
|
||||
ret
|
||||
218
engine/gfx/player_gfx.asm
Normal file
218
engine/gfx/player_gfx.asm
Normal file
|
|
@ -0,0 +1,218 @@
|
|||
BetaLoadPlayerTrainerClass: ; unreferenced
|
||||
ld c, CAL
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, .got_class
|
||||
ld c, KAREN ; not KRIS?
|
||||
.got_class
|
||||
ld a, c
|
||||
ld [wTrainerClass], a
|
||||
ret
|
||||
|
||||
MovePlayerPicRight:
|
||||
hlcoord 6, 4
|
||||
ld de, 1
|
||||
jr MovePlayerPic
|
||||
|
||||
MovePlayerPicLeft:
|
||||
hlcoord 13, 4
|
||||
ld de, -1
|
||||
; fallthrough
|
||||
|
||||
MovePlayerPic:
|
||||
; Move player pic at hl by de * 7 tiles.
|
||||
ld c, $8
|
||||
.loop
|
||||
push bc
|
||||
push hl
|
||||
push de
|
||||
xor a
|
||||
ldh [hBGMapMode], a
|
||||
lb bc, 7, 7
|
||||
predef PlaceGraphic
|
||||
xor a
|
||||
ldh [hBGMapThird], a
|
||||
call WaitBGMap
|
||||
call DelayFrame
|
||||
pop de
|
||||
pop hl
|
||||
add hl, de
|
||||
pop bc
|
||||
dec c
|
||||
ret z
|
||||
push hl
|
||||
push bc
|
||||
ld a, l
|
||||
sub e
|
||||
ld l, a
|
||||
ld a, h
|
||||
sbc d
|
||||
ld h, a
|
||||
lb bc, 7, 7
|
||||
call ClearBox
|
||||
pop bc
|
||||
pop hl
|
||||
jr .loop
|
||||
|
||||
ShowPlayerNamingChoices:
|
||||
ld hl, ChrisNameMenuHeader
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, .got_header
|
||||
ld hl, KrisNameMenuHeader
|
||||
.got_header
|
||||
call LoadMenuHeader
|
||||
call VerticalMenu
|
||||
ld a, [wMenuCursorY]
|
||||
dec a
|
||||
call CopyNameFromMenu
|
||||
call CloseWindow
|
||||
ret
|
||||
|
||||
INCLUDE "data/player_names.asm"
|
||||
|
||||
GetPlayerNameArray: ; unreferenced
|
||||
ld hl, wPlayerName
|
||||
ld de, MalePlayerNameArray
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, .got_array
|
||||
ld de, FemalePlayerNameArray
|
||||
.got_array
|
||||
call InitName
|
||||
ret
|
||||
|
||||
GetPlayerIcon:
|
||||
ld de, ChrisSpriteGFX
|
||||
ld b, BANK(ChrisSpriteGFX)
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, .got_gfx
|
||||
ld de, KrisSpriteGFX
|
||||
ld b, BANK(KrisSpriteGFX)
|
||||
.got_gfx
|
||||
ret
|
||||
|
||||
GetCardPic:
|
||||
ld hl, ChrisCardPic
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, .got_pic
|
||||
ld hl, KrisCardPic
|
||||
.got_pic
|
||||
ld de, vTiles2 tile $00
|
||||
ld bc, $23 tiles
|
||||
ld a, BANK(ChrisCardPic) ; aka BANK(KrisCardPic)
|
||||
call FarCopyBytes
|
||||
ld hl, TrainerCardGFX
|
||||
ld de, vTiles2 tile $23
|
||||
ld bc, 6 tiles
|
||||
ld a, BANK(TrainerCardGFX)
|
||||
call FarCopyBytes
|
||||
ret
|
||||
|
||||
ChrisCardPic:
|
||||
INCBIN "gfx/trainer_card/chris_card.2bpp"
|
||||
|
||||
KrisCardPic:
|
||||
INCBIN "gfx/trainer_card/kris_card.2bpp"
|
||||
|
||||
TrainerCardGFX:
|
||||
INCBIN "gfx/trainer_card/trainer_card.2bpp"
|
||||
|
||||
GetPlayerBackpic:
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, GetChrisBackpic
|
||||
call GetKrisBackpic
|
||||
ret
|
||||
|
||||
GetChrisBackpic:
|
||||
ld hl, ChrisBackpic
|
||||
ld b, BANK(ChrisBackpic)
|
||||
ld de, vTiles2 tile $31
|
||||
ld c, 7 * 7
|
||||
predef DecompressGet2bpp
|
||||
ret
|
||||
|
||||
HOF_LoadTrainerFrontpic:
|
||||
call WaitBGMap
|
||||
xor a
|
||||
ldh [hBGMapMode], a
|
||||
|
||||
; Get class
|
||||
ld e, CHRIS
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, .got_class
|
||||
ld e, KRIS
|
||||
.got_class
|
||||
ld a, e
|
||||
ld [wTrainerClass], a
|
||||
|
||||
; Load pic
|
||||
ld de, ChrisPic
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, .got_pic
|
||||
ld de, KrisPic
|
||||
.got_pic
|
||||
ld hl, vTiles2
|
||||
ld b, BANK(ChrisPic) ; aka BANK(KrisPic)
|
||||
ld c, 7 * 7
|
||||
call Get2bpp
|
||||
|
||||
call WaitBGMap
|
||||
ld a, $1
|
||||
ldh [hBGMapMode], a
|
||||
ret
|
||||
|
||||
DrawIntroPlayerPic:
|
||||
; Draw the player pic at (6,4).
|
||||
|
||||
; Get class
|
||||
ld e, CHRIS
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, .got_class
|
||||
ld e, KRIS
|
||||
.got_class
|
||||
ld a, e
|
||||
ld [wTrainerClass], a
|
||||
|
||||
; Load pic
|
||||
ld de, ChrisPic
|
||||
ld a, [wPlayerGender]
|
||||
bit PLAYERGENDER_FEMALE_F, a
|
||||
jr z, .got_pic
|
||||
ld de, KrisPic
|
||||
.got_pic
|
||||
ld hl, vTiles2
|
||||
ld b, BANK(ChrisPic) ; aka BANK(KrisPic)
|
||||
ld c, 7 * 7 ; dimensions
|
||||
call Get2bpp
|
||||
|
||||
; Draw
|
||||
xor a
|
||||
ldh [hGraphicStartTile], a
|
||||
hlcoord 6, 4
|
||||
lb bc, 7, 7
|
||||
predef PlaceGraphic
|
||||
ret
|
||||
|
||||
ChrisPic:
|
||||
INCBIN "gfx/player/chris.2bpp"
|
||||
|
||||
KrisPic:
|
||||
INCBIN "gfx/player/kris.2bpp"
|
||||
|
||||
GetKrisBackpic:
|
||||
; Kris's backpic is uncompressed.
|
||||
ld de, KrisBackpic
|
||||
ld hl, vTiles2 tile $31
|
||||
lb bc, BANK(KrisBackpic), 7 * 7 ; dimensions
|
||||
call Get2bpp
|
||||
ret
|
||||
|
||||
KrisBackpic:
|
||||
INCBIN "gfx/player/kris_back.2bpp"
|
||||
572
engine/gfx/sgb_layouts.asm
Normal file
572
engine/gfx/sgb_layouts.asm
Normal file
|
|
@ -0,0 +1,572 @@
|
|||
LoadSGBLayout:
|
||||
call CheckCGB
|
||||
jp nz, LoadSGBLayoutCGB
|
||||
|
||||
ld a, b
|
||||
cp SCGB_DEFAULT
|
||||
jr nz, .not_default
|
||||
ld a, [wDefaultSGBLayout]
|
||||
.not_default
|
||||
cp SCGB_PARTY_MENU_HP_BARS
|
||||
jp z, SGB_ApplyPartyMenuHPPals
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
ld de, SGBLayoutJumptable
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ld de, _LoadSGBLayout_ReturnFromJumptable
|
||||
push de
|
||||
jp hl
|
||||
|
||||
SGBLayoutJumptable:
|
||||
table_width 2, SGBLayoutJumptable
|
||||
dw .SGB_BattleGrayscale
|
||||
dw .SGB_BattleColors
|
||||
dw .SGB_PokegearPals
|
||||
dw .SGB_StatsScreenHPPals
|
||||
dw .SGB_Pokedex
|
||||
dw .SGB_SlotMachine
|
||||
dw .SGB_BetaTitleScreen
|
||||
dw .SGB_GSIntro
|
||||
dw .SGB_Diploma
|
||||
dw .SGB_MapPals
|
||||
dw .SGB_PartyMenu
|
||||
dw .SGB_Evolution
|
||||
dw .SGB_GSTitleScreen
|
||||
dw .SGB_Unused0D
|
||||
dw .SGB_MoveList
|
||||
dw .SGB_BetaPikachuMinigame
|
||||
dw .SGB_PokedexSearchOption
|
||||
dw .SGB_BetaPoker
|
||||
dw .SGB_Pokepic
|
||||
dw .SGB_MagnetTrain
|
||||
dw .SGB_PackPals
|
||||
dw .SGB_TrainerCard
|
||||
dw .SGB_PokedexUnownMode
|
||||
dw .SGB_BillsPC
|
||||
dw .SGB_UnownPuzzle
|
||||
dw .SGB_GamefreakLogo
|
||||
dw .SGB_PlayerOrMonFrontpicPals
|
||||
dw .SGB_TradeTube
|
||||
dw .SGB_TrainerOrMonFrontpicPals
|
||||
dw .SGB_MysteryGift
|
||||
dw .SGB_Unused1E
|
||||
assert_table_length NUM_SCGB_LAYOUTS
|
||||
|
||||
.SGB_BattleGrayscale:
|
||||
ld hl, PalPacket_BattleGrayscale
|
||||
ld de, BlkPacket_Battle
|
||||
ret
|
||||
|
||||
.SGB_BattleColors:
|
||||
ld hl, BlkPacket_Battle
|
||||
call PushSGBPals
|
||||
|
||||
ld hl, PalPacket_Pal01
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
|
||||
ld a, [wPlayerHPPal]
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld de, HPBarPals
|
||||
add hl, de
|
||||
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 3], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 4], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 5], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 6], a
|
||||
|
||||
ld a, [wEnemyHPPal]
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
|
||||
ld de, HPBarPals
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 9], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 10], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 11], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 12], a
|
||||
|
||||
ld hl, PalPacket_Pal23
|
||||
ld de, wSGBPals + PALPACKET_LENGTH
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
|
||||
call GetBattlemonBackpicPalettePointer
|
||||
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 19], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 20], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 21], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 22], a
|
||||
call GetEnemyFrontpicPalettePointer
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 25], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 26], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 27], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 28], a
|
||||
|
||||
ld hl, wSGBPals
|
||||
ld de, wSGBPals + PALPACKET_LENGTH
|
||||
ld a, SCGB_BATTLE_COLORS
|
||||
ld [wDefaultSGBLayout], a
|
||||
ret
|
||||
|
||||
.SGB_MoveList:
|
||||
ld hl, PalPacket_AllPal0
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
|
||||
ld hl, wSGBPals + 1
|
||||
ld [hl], $10
|
||||
inc hl
|
||||
inc hl
|
||||
|
||||
ld a, [wPlayerHPPal]
|
||||
add PREDEFPAL_HP_GREEN
|
||||
ld [hl], a
|
||||
ld hl, wSGBPals
|
||||
ld de, BlkPacket_MoveList
|
||||
ret
|
||||
|
||||
.SGB_PokegearPals:
|
||||
ld hl, PalPacket_Pokegear
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_StatsScreenHPPals:
|
||||
ld hl, PalPacket_Pal01
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
ld a, [wCurHPPal]
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld de, HPBarPals
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 3], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 4], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 5], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 6], a
|
||||
ld a, [wCurPartySpecies]
|
||||
ld bc, wTempMonDVs
|
||||
call GetPlayerOrMonPalettePointer
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 9], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 10], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 11], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 12], a
|
||||
ld hl, wSGBPals
|
||||
ld de, BlkPacket_StatsScreen
|
||||
ret
|
||||
|
||||
.SGB_PartyMenu:
|
||||
ld hl, PalPacket_PartyMenu
|
||||
ld de, wSGBPals + 1
|
||||
ret
|
||||
|
||||
.SGB_Pokedex:
|
||||
ld hl, PalPacket_Pal01
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
ld hl, wSGBPals + 3
|
||||
ld [hl], LOW(palred 31 + palgreen 20 + palblue 10)
|
||||
inc hl
|
||||
ld [hl], HIGH(palred 31 + palgreen 20 + palblue 10)
|
||||
inc hl
|
||||
ld [hl], LOW(palred 26 + palgreen 10 + palblue 6)
|
||||
inc hl
|
||||
ld [hl], HIGH(palred 26 + palgreen 10 + palblue 6)
|
||||
ld a, [wCurPartySpecies]
|
||||
call GetMonPalettePointer
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 9], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 10], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 11], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 12], a
|
||||
ld hl, wSGBPals
|
||||
ld de, BlkPacket_Pokedex_PC
|
||||
ret
|
||||
|
||||
.SGB_BillsPC:
|
||||
ld hl, PalPacket_Pal01
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
ld hl, wSGBPals + 3
|
||||
ld [hl], LOW(palred 31 + palgreen 20 + palblue 10)
|
||||
inc hl
|
||||
ld [hl], HIGH(palred 31 + palgreen 20 + palblue 10)
|
||||
inc hl
|
||||
ld [hl], LOW(palred 26 + palgreen 10 + palblue 6)
|
||||
inc hl
|
||||
ld [hl], HIGH(palred 26 + palgreen 10 + palblue 6)
|
||||
ld a, [wCurPartySpecies]
|
||||
ld bc, wTempMonDVs
|
||||
call GetPlayerOrMonPalettePointer
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 9], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 10], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 11], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 12], a
|
||||
ld hl, wSGBPals
|
||||
ld de, BlkPacket_Pokedex_PC
|
||||
ret
|
||||
|
||||
.SGB_PokedexUnownMode:
|
||||
call .SGB_Pokedex
|
||||
ld de, BlkPacket_PokedexUnownMode
|
||||
ret
|
||||
|
||||
.SGB_PokedexSearchOption:
|
||||
ld hl, PalPacket_Pal01
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
ld hl, wSGBPals + 3
|
||||
ld [hl], LOW(palred 31 + palgreen 20 + palblue 10)
|
||||
inc hl
|
||||
ld [hl], HIGH(palred 31 + palgreen 20 + palblue 10)
|
||||
inc hl
|
||||
ld [hl], LOW(palred 26 + palgreen 10 + palblue 6)
|
||||
inc hl
|
||||
ld [hl], HIGH(palred 26 + palgreen 10 + palblue 6)
|
||||
ld hl, wSGBPals
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_PackPals:
|
||||
ld hl, PalPacket_Pack
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_SlotMachine:
|
||||
ld hl, PalPacket_SlotMachine
|
||||
ld de, BlkPacket_SlotMachine
|
||||
ret
|
||||
|
||||
.SGB_BetaTitleScreen:
|
||||
ld hl, PalPacket_BetaTitleScreen
|
||||
ld de, BlkPacket_BetaTitleScreen
|
||||
ret
|
||||
|
||||
.SGB_Diploma:
|
||||
.SGB_MysteryGift:
|
||||
ld hl, PalPacket_Diploma
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_GSIntro:
|
||||
ld b, 0
|
||||
ld hl, .BlkPacketTable_GSIntro
|
||||
rept 4
|
||||
add hl, bc
|
||||
endr
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
inc hl
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ret
|
||||
|
||||
.BlkPacketTable_GSIntro:
|
||||
dw BlkPacket_AllPal0, PalPacket_GSIntroShellderLapras
|
||||
dw BlkPacket_GSIntroJigglypuffPikachu, PalPacket_GSIntroJigglypuffPikachu
|
||||
dw BlkPacket_AllPal0, PalPacket_GSIntroStartersTransition
|
||||
|
||||
.SGB_GSTitleScreen:
|
||||
ld hl, PalPacket_GSTitleScreen
|
||||
ld de, BlkPacket_GSTitleScreen
|
||||
ld a, SCGB_DIPLOMA
|
||||
ld [wDefaultSGBLayout], a
|
||||
ret
|
||||
|
||||
.SGB_MagnetTrain:
|
||||
ld hl, PalPacket_MagnetTrain
|
||||
ld de, BlkPacket_MagnetTrain
|
||||
ret
|
||||
|
||||
.SGB_BetaPikachuMinigame:
|
||||
ld hl, PalPacket_BetaPikachuMinigame
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_BetaPoker:
|
||||
ld hl, BlkPacket_AllPal0
|
||||
ld de, wBetaPokerSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
ld hl, PalPacket_BetaPoker
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_MapPals:
|
||||
ld hl, PalPacket_AllPal0
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
call .GetMapPalsIndex
|
||||
ld hl, wSGBPals + 1
|
||||
ld [hld], a
|
||||
ld de, BlkPacket_AllPal0
|
||||
ld a, SCGB_MAPPALS
|
||||
ld [wDefaultSGBLayout], a
|
||||
ret
|
||||
|
||||
.SGB_Evolution:
|
||||
push bc
|
||||
ld hl, PalPacket_Pal01
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
pop bc
|
||||
ld a, c
|
||||
and a
|
||||
jr z, .partymon
|
||||
; Egg
|
||||
ld hl, wSGBPals + 3
|
||||
ld [hl], LOW(palred 7 + palgreen 7 + palblue 7)
|
||||
inc hl
|
||||
ld [hl], HIGH(palred 7 + palgreen 7 + palblue 7)
|
||||
inc hl
|
||||
ld [hl], LOW(palred 2 + palgreen 3 + palblue 3)
|
||||
inc hl
|
||||
ld [hl], HIGH(palred 2 + palgreen 3 + palblue 3)
|
||||
jr .done
|
||||
|
||||
.partymon
|
||||
ld hl, wPartyMon1DVs
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
ld a, [wCurPartyMon]
|
||||
call AddNTimes
|
||||
ld c, l
|
||||
ld b, h
|
||||
ld a, [wPlayerHPPal]
|
||||
call GetPlayerOrMonPalettePointer
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 3], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 4], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 5], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 6], a
|
||||
|
||||
.done
|
||||
ld hl, wSGBPals
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_Unused0D:
|
||||
.SGB_TrainerCard:
|
||||
ld hl, PalPacket_Diploma
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_UnownPuzzle:
|
||||
ld hl, PalPacket_UnownPuzzle
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_Pokepic:
|
||||
ld hl, PalPacket_AllPal0
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
ld hl, BlkPacket_AllPal0
|
||||
ld de, wSGBPals + PALPACKET_LENGTH
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
call .GetMapPalsIndex
|
||||
ld hl, wSGBPals + 1
|
||||
ld [hl], a
|
||||
ld hl, wSGBPals + 3
|
||||
ld [hl], $2e
|
||||
ld hl, wSGBPals + $13
|
||||
ld a, 5
|
||||
ld [hli], a
|
||||
ld a, [wMenuBorderLeftCoord]
|
||||
ld [hli], a
|
||||
ld a, [wMenuBorderTopCoord]
|
||||
ld [hli], a
|
||||
ld a, [wMenuBorderRightCoord]
|
||||
ld [hli], a
|
||||
ld a, [wMenuBorderBottomCoord]
|
||||
ld [hl], a
|
||||
ld hl, wSGBPals
|
||||
ld de, wSGBPals + PALPACKET_LENGTH
|
||||
ret
|
||||
|
||||
.SGB_Unused1E:
|
||||
ld hl, PalPacket_Pal01
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
ld a, [wCurPartySpecies]
|
||||
call GetPokemonIndexFromID
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld de, PokemonPalettes
|
||||
add hl, de
|
||||
ld a, [wUnusedSGB1eColorOffset]
|
||||
and 3
|
||||
sla a
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 3], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 4], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 5], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 6], a
|
||||
ld hl, wSGBPals
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_GamefreakLogo:
|
||||
ld hl, PalPacket_GamefreakLogo
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_PlayerOrMonFrontpicPals:
|
||||
ld hl, PalPacket_Pal01
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
ld a, [wCurPartySpecies]
|
||||
ld bc, wTempMonDVs
|
||||
call GetPlayerOrMonPalettePointer
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 3], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 4], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 5], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 6], a
|
||||
ld hl, wSGBPals
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_TradeTube:
|
||||
ld hl, PalPacket_TradeTube
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.SGB_TrainerOrMonFrontpicPals:
|
||||
ld hl, PalPacket_Pal01
|
||||
ld de, wSGBPals
|
||||
ld bc, PALPACKET_LENGTH
|
||||
call CopyBytes
|
||||
ld a, [wCurPartySpecies]
|
||||
ld bc, wTempMonDVs
|
||||
call GetFrontpicPalettePointer
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 3], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 4], a
|
||||
ld a, [hli]
|
||||
ld [wSGBPals + 5], a
|
||||
ld a, [hl]
|
||||
ld [wSGBPals + 6], a
|
||||
ld hl, wSGBPals
|
||||
ld de, BlkPacket_AllPal0
|
||||
ret
|
||||
|
||||
.GetMapPalsIndex:
|
||||
ld a, [wTimeOfDayPal]
|
||||
cp NITE_F
|
||||
jr c, .morn_day
|
||||
ld a, PREDEFPAL_NITE
|
||||
ret
|
||||
|
||||
.morn_day
|
||||
ld a, [wEnvironment]
|
||||
cp ROUTE
|
||||
jr z, .route
|
||||
cp CAVE
|
||||
jr z, .cave
|
||||
cp DUNGEON
|
||||
jr z, .cave
|
||||
cp ENVIRONMENT_5
|
||||
jr z, .env5
|
||||
cp GATE
|
||||
jr z, .gate
|
||||
ld a, [wMapGroup]
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, MapGroupRoofSGBPalInds
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
ret
|
||||
|
||||
.route
|
||||
ld a, PREDEFPAL_ROUTES
|
||||
ret
|
||||
|
||||
.cave
|
||||
ld a, PREDEFPAL_DUNGEONS
|
||||
ret
|
||||
|
||||
.env5
|
||||
ld a, PREDEFPAL_VERMILION
|
||||
ret
|
||||
|
||||
.gate
|
||||
ld a, PREDEFPAL_PEWTER
|
||||
ret
|
||||
|
||||
INCLUDE "data/maps/sgb_roof_pal_inds.asm"
|
||||
|
||||
_LoadSGBLayout_ReturnFromJumptable:
|
||||
push de
|
||||
call PushSGBPals
|
||||
pop hl
|
||||
jp PushSGBPals
|
||||
877
engine/gfx/sprite_anims.asm
Normal file
877
engine/gfx/sprite_anims.asm
Normal file
|
|
@ -0,0 +1,877 @@
|
|||
DoAnimFrame:
|
||||
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
||||
add hl, bc
|
||||
ld e, [hl]
|
||||
ld d, 0
|
||||
ld hl, .Jumptable
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
jp hl
|
||||
|
||||
.Jumptable:
|
||||
; entries correspond to SPRITE_ANIM_SEQ_* constants (see constants/sprite_anim_constants.asm)
|
||||
table_width 2, DoAnimFrame.Jumptable
|
||||
dw AnimSeq_Null
|
||||
dw AnimSeq_PartyMon
|
||||
dw AnimSeq_PartyMonSwitch
|
||||
dw AnimSeq_PartyMonSelected
|
||||
dw AnimSeq_GSTitleTrail
|
||||
dw AnimSeq_NamingScreenCursor
|
||||
dw AnimSeq_GameFreakLogo
|
||||
dw AnimSeq_GSGameFreakLogoStar
|
||||
dw AnimSeq_GSGameFreakLogoSparkle
|
||||
dw AnimSeq_SlotsGolem
|
||||
dw AnimSeq_SlotsChansey
|
||||
dw AnimSeq_SlotsChanseyEgg
|
||||
dw AnimSeq_MailCursor
|
||||
dw AnimSeq_UnusedCursor
|
||||
dw AnimSeq_MemoryGameCursor
|
||||
dw AnimSeq_PokegearArrow
|
||||
dw AnimSeq_TradePokeBall
|
||||
dw AnimSeq_TradeTubeBulge
|
||||
dw AnimSeq_TrademonInTube
|
||||
dw AnimSeq_RevealNewMon
|
||||
dw AnimSeq_RadioTuningKnob
|
||||
dw AnimSeq_CutLeaves
|
||||
dw AnimSeq_FlyFrom
|
||||
dw AnimSeq_FlyLeaf
|
||||
dw AnimSeq_FlyTo
|
||||
dw AnimSeq_GSIntroHoOhLugia
|
||||
dw AnimSeq_EZChatCursor
|
||||
dw AnimSeq_MobileTradeSentPulse
|
||||
dw AnimSeq_MobileTradeOTPulse
|
||||
dw AnimSeq_IntroSuicune
|
||||
dw AnimSeq_IntroPichuWooper
|
||||
dw AnimSeq_Celebi
|
||||
dw AnimSeq_IntroUnown
|
||||
dw AnimSeq_IntroUnownF
|
||||
dw AnimSeq_IntroSuicuneAway
|
||||
assert_table_length NUM_SPRITE_ANIM_SEQS
|
||||
|
||||
AnimSeq_Null:
|
||||
ret
|
||||
|
||||
AnimSeq_PartyMon:
|
||||
ld a, [wMenuCursorY]
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_INDEX
|
||||
add hl, bc
|
||||
cp [hl]
|
||||
jr z, AnimSeq_PartyMonSwitch
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld [hl], 8 * 2
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], 0
|
||||
ret
|
||||
|
||||
AnimSeq_PartyMonSwitch:
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld [hl], 8 * 3
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld d, a
|
||||
inc [hl]
|
||||
and $f
|
||||
ret nz
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
ld e, [hl]
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld a, d
|
||||
and $10 ; bit 4
|
||||
jr z, .load_zero
|
||||
ld a, e
|
||||
and a
|
||||
jr z, .load_minus_two
|
||||
cp $1
|
||||
jr z, .load_minus_one
|
||||
.load_zero
|
||||
xor a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.load_minus_one
|
||||
ld a, -1
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.load_minus_two
|
||||
ld a, -2
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
AnimSeq_PartyMonSelected:
|
||||
ld a, [wMenuCursorY]
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_INDEX
|
||||
add hl, bc
|
||||
cp [hl]
|
||||
jr z, .three_offset_right
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld [hl], 8 * 2
|
||||
ret
|
||||
|
||||
.three_offset_right
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld [hl], 8 * 3
|
||||
ret
|
||||
|
||||
AnimSeq_GSTitleTrail:
|
||||
call AnimSeqs_AnonJumptable
|
||||
jp hl
|
||||
.anon_dw
|
||||
dw .zero
|
||||
dw .one
|
||||
|
||||
.zero
|
||||
call AnimSeqs_IncAnonJumptableIndex
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_INDEX
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
and $3
|
||||
ld [hl], a
|
||||
inc [hl]
|
||||
swap a
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
|
||||
.one
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp $a4
|
||||
jr nc, .delete
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
add 4
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YCOORD
|
||||
add hl, bc
|
||||
inc [hl]
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
sla a
|
||||
sla a
|
||||
|
||||
ld d, 2
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
add 3
|
||||
ld [hl], a
|
||||
call AnimSeqs_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.delete
|
||||
call DeinitializeSprite
|
||||
ret
|
||||
|
||||
AnimSeq_GSIntroHoOhLugia:
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
inc a
|
||||
ld [hl], a
|
||||
ld d, 2
|
||||
call AnimSeqs_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
AnimSeq_NamingScreenCursor:
|
||||
callfar NamingScreen_AnimateCursor
|
||||
ret
|
||||
|
||||
AnimSeq_MailCursor:
|
||||
callfar ComposeMail_AnimateCursor
|
||||
ret
|
||||
|
||||
AnimSeq_GameFreakLogo:
|
||||
callfar GameFreakLogoSpriteAnim
|
||||
ret
|
||||
|
||||
AnimSeq_GSGameFreakLogoStar:
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .delete
|
||||
|
||||
dec [hl]
|
||||
dec [hl]
|
||||
ld d, a
|
||||
and $1f
|
||||
jr nz, .stay
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
dec [hl]
|
||||
|
||||
.stay
|
||||
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
push af
|
||||
push de
|
||||
call AnimSeqs_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
pop de
|
||||
pop af
|
||||
call AnimSeqs_Cosine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
add hl, bc
|
||||
add [hl]
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.delete
|
||||
ld a, 1
|
||||
ld [wIntroSceneFrameCounter], a
|
||||
call DeinitializeSprite
|
||||
ret
|
||||
|
||||
AnimSeq_GSGameFreakLogoSparkle:
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
or [hl]
|
||||
jr z, .delete
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR4
|
||||
add hl, bc
|
||||
ld d, [hl]
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
push af
|
||||
push de
|
||||
call AnimSeqs_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
pop de
|
||||
pop af
|
||||
call AnimSeqs_Cosine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR3
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR3
|
||||
add hl, bc
|
||||
ld [hl], e
|
||||
inc hl
|
||||
ld [hl], d
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ld de, -$10
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld [hl], e
|
||||
inc hl
|
||||
ld [hl], d
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
xor $20
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.delete
|
||||
call DeinitializeSprite
|
||||
ret
|
||||
|
||||
AnimSeq_SlotsGolem:
|
||||
callfar Slots_AnimateGolem
|
||||
ret
|
||||
|
||||
AnimSeq_SlotsChansey:
|
||||
callfar Slots_AnimateChansey
|
||||
ld hl, wSlotsDelay
|
||||
ld a, [hl]
|
||||
cp $2
|
||||
ret nz
|
||||
ld [hl], $3
|
||||
ld a, SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY_2
|
||||
call _ReinitSpriteAnimFrame
|
||||
ret
|
||||
|
||||
AnimSeq_SlotsChanseyEgg:
|
||||
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
dec [hl]
|
||||
ld e, a
|
||||
and $1
|
||||
jr z, .move_vertical
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp 15 * 8
|
||||
jr c, .move_right
|
||||
call DeinitializeSprite
|
||||
ld a, $4
|
||||
ld [wSlotsDelay], a
|
||||
ld de, SFX_PLACE_PUZZLE_PIECE_DOWN
|
||||
call PlaySFX
|
||||
ret
|
||||
|
||||
.move_right
|
||||
inc [hl]
|
||||
.move_vertical
|
||||
ld a, e
|
||||
ld d, 32
|
||||
call AnimSeqs_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
AnimSeq_UnusedCursor:
|
||||
callfar UnusedCursor_InterpretJoypad_AnimateCursor
|
||||
ret
|
||||
|
||||
AnimSeq_PokegearArrow:
|
||||
callfar AnimatePokegearModeIndicatorArrow
|
||||
ret
|
||||
|
||||
AnimSeq_MemoryGameCursor:
|
||||
callfar MemoryGame_InterpretJoypad_AnimateCursor
|
||||
ret
|
||||
|
||||
AnimSeq_TradePokeBall:
|
||||
call AnimSeqs_AnonJumptable
|
||||
jp hl
|
||||
.anon_dw
|
||||
dw .zero
|
||||
dw .one
|
||||
dw .two
|
||||
dw .three
|
||||
dw .four
|
||||
dw .delete
|
||||
|
||||
.zero
|
||||
ld a, SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL_WOBBLE
|
||||
call _ReinitSpriteAnimFrame
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
add hl, bc
|
||||
ld [hl], 2 ; .two
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld [hl], $20
|
||||
ret
|
||||
|
||||
.two
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .next
|
||||
dec [hl]
|
||||
ret
|
||||
|
||||
.next
|
||||
call AnimSeqs_IncAnonJumptableIndex
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld [hl], $40
|
||||
|
||||
.three
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp 48
|
||||
jr c, .done
|
||||
dec [hl]
|
||||
ld d, 40
|
||||
call AnimSeqs_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.done
|
||||
ld de, SFX_GOT_SAFARI_BALLS
|
||||
call PlaySFX
|
||||
jr .delete
|
||||
|
||||
.one
|
||||
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
add hl, bc
|
||||
ld [hl], $4
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld [hl], $30
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
ld [hl], $24
|
||||
ret
|
||||
|
||||
.four
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .done2
|
||||
|
||||
ld d, a
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
call Sprites_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
inc [hl]
|
||||
ld a, [hl]
|
||||
and $3f
|
||||
ret nz
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld [hl], $20
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
sub $c
|
||||
ld [hl], a
|
||||
ld de, SFX_SWITCH_POKEMON
|
||||
call PlaySFX
|
||||
ret
|
||||
|
||||
.done2
|
||||
xor a
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
call AnimSeqs_IncAnonJumptableIndex
|
||||
ret
|
||||
|
||||
.delete
|
||||
call DeinitializeSprite
|
||||
ret
|
||||
|
||||
AnimSeq_TradeTubeBulge:
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
inc [hl]
|
||||
inc [hl]
|
||||
cp $b0
|
||||
jr nc, .delete
|
||||
and $3
|
||||
ret nz
|
||||
ld de, SFX_POKEBALLS_PLACED_ON_TABLE
|
||||
call PlaySFX
|
||||
ret
|
||||
|
||||
.delete
|
||||
call DeinitializeSprite
|
||||
ret
|
||||
|
||||
AnimSeq_TrademonInTube:
|
||||
callfar TradeAnim_AnimateTrademonInTube
|
||||
ret
|
||||
|
||||
AnimSeq_RevealNewMon:
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp $80
|
||||
jr nc, .finish_EggShell
|
||||
ld d, a
|
||||
add 8
|
||||
ld [hl], a
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
xor $20
|
||||
ld [hl], a
|
||||
|
||||
push af
|
||||
push de
|
||||
call AnimSeqs_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
|
||||
pop de
|
||||
pop af
|
||||
call AnimSeqs_Cosine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.finish_EggShell
|
||||
call DeinitializeSprite
|
||||
ret
|
||||
|
||||
AnimSeq_RadioTuningKnob:
|
||||
callfar AnimateTuningKnob
|
||||
ret
|
||||
|
||||
AnimSeq_CutLeaves:
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
ld hl, $80
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
ld [hl], e
|
||||
inc hl
|
||||
ld [hl], d
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
inc [hl]
|
||||
inc [hl]
|
||||
inc [hl]
|
||||
push af
|
||||
push de
|
||||
call AnimSeqs_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
pop de
|
||||
pop af
|
||||
call AnimSeqs_Cosine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
AnimSeq_FlyFrom:
|
||||
ld hl, SPRITEANIMSTRUCT_YCOORD
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
inc [hl]
|
||||
cp $40
|
||||
ret c
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YCOORD
|
||||
add hl, bc
|
||||
dec [hl]
|
||||
dec [hl]
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR4
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld d, a
|
||||
cp $40
|
||||
jr nc, .skip
|
||||
add 8
|
||||
ld [hl], a
|
||||
.skip
|
||||
ld hl, SPRITEANIMSTRUCT_VAR3
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
inc [hl]
|
||||
call AnimSeqs_Cosine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
AnimSeq_FlyLeaf:
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp -9 * 8
|
||||
jr nc, .delete_leaf
|
||||
inc [hl]
|
||||
inc [hl]
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YCOORD
|
||||
add hl, bc
|
||||
dec [hl]
|
||||
|
||||
ld d, $40
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
inc [hl]
|
||||
call AnimSeqs_Cosine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.delete_leaf
|
||||
call DeinitializeSprite
|
||||
ret
|
||||
|
||||
AnimSeq_FlyTo:
|
||||
ld hl, SPRITEANIMSTRUCT_YCOORD
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp 10 * 8 + 4
|
||||
ret z
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YCOORD
|
||||
add hl, bc
|
||||
inc [hl]
|
||||
inc [hl]
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR4
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld d, a
|
||||
and a
|
||||
jr z, .stay
|
||||
sub $2
|
||||
ld [hl], a
|
||||
.stay
|
||||
ld hl, SPRITEANIMSTRUCT_VAR3
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
inc [hl]
|
||||
call AnimSeqs_Cosine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
AnimSeq_MobileTradeSentPulse:
|
||||
farcall MobileTradeAnim_AnimateSentPulse
|
||||
ret
|
||||
|
||||
AnimSeq_MobileTradeOTPulse:
|
||||
farcall MobileTradeAnim_AnimateOTPulse
|
||||
ret
|
||||
|
||||
AnimSeq_IntroSuicune:
|
||||
ld a, [wIntroSceneTimer]
|
||||
and a
|
||||
jr nz, .continue
|
||||
ret
|
||||
|
||||
.continue
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], $0
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_VAR2
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
add 2
|
||||
ld [hl], a
|
||||
xor $ff
|
||||
inc a
|
||||
ld d, 32
|
||||
call AnimSeqs_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ld a, SPRITE_ANIM_FRAMESET_INTRO_SUICUNE_2
|
||||
call _ReinitSpriteAnimFrame
|
||||
ret
|
||||
|
||||
AnimSeq_IntroPichuWooper:
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp 20
|
||||
jr nc, .done
|
||||
add 2
|
||||
ld [hl], a
|
||||
xor $ff
|
||||
inc a
|
||||
ld d, 32
|
||||
call AnimSeqs_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
.done
|
||||
ret
|
||||
|
||||
AnimSeq_IntroUnown:
|
||||
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
add hl, bc
|
||||
ld d, [hl]
|
||||
inc [hl]
|
||||
inc [hl]
|
||||
inc [hl]
|
||||
ld hl, SPRITEANIMSTRUCT_VAR1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
push af
|
||||
push de
|
||||
call AnimSeqs_Sine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
pop de
|
||||
pop af
|
||||
call AnimSeqs_Cosine
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XOFFSET
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
AnimSeq_IntroUnownF:
|
||||
ld a, [wSlotsDelay]
|
||||
cp $40
|
||||
ret nz
|
||||
ld a, SPRITE_ANIM_FRAMESET_INTRO_UNOWN_F_2
|
||||
call _ReinitSpriteAnimFrame
|
||||
ret
|
||||
|
||||
AnimSeq_IntroSuicuneAway:
|
||||
ld hl, SPRITEANIMSTRUCT_YCOORD
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
add 16
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
AnimSeq_EZChatCursor:
|
||||
farcall AnimateEZChatCursor
|
||||
ret
|
||||
|
||||
AnimSeq_Celebi:
|
||||
farcall UpdateCelebiPosition
|
||||
ret
|
||||
|
||||
AnimSeqs_AnonJumptable:
|
||||
ld hl, sp+0
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
inc de
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
add hl, bc
|
||||
ld l, [hl]
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ret
|
||||
|
||||
AnimSeqs_IncAnonJumptableIndex:
|
||||
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
add hl, bc
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
AnimSeqs_Sine:
|
||||
call Sprites_Sine
|
||||
ret
|
||||
|
||||
AnimSeqs_Cosine:
|
||||
call Sprites_Cosine
|
||||
ret
|
||||
633
engine/gfx/sprites.asm
Normal file
633
engine/gfx/sprites.asm
Normal file
|
|
@ -0,0 +1,633 @@
|
|||
ClearSpriteAnims:
|
||||
ld hl, wSpriteAnimData
|
||||
ld bc, wSpriteAnimDataEnd - wSpriteAnimData
|
||||
.loop
|
||||
ld [hl], 0
|
||||
inc hl
|
||||
dec bc
|
||||
ld a, c
|
||||
or b
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
PlaySpriteAnimationsAndDelayFrame:
|
||||
call PlaySpriteAnimations
|
||||
call DelayFrame
|
||||
ret
|
||||
|
||||
PlaySpriteAnimations:
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
push af
|
||||
|
||||
ld a, LOW(wShadowOAM)
|
||||
ld [wCurSpriteOAMAddr], a
|
||||
call DoNextFrameForAllSprites
|
||||
|
||||
pop af
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
DoNextFrameForAllSprites:
|
||||
ld hl, wSpriteAnimationStructs
|
||||
ld e, NUM_SPRITE_ANIM_STRUCTS
|
||||
|
||||
.loop
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .next ; This struct is deinitialized.
|
||||
ld c, l
|
||||
ld b, h
|
||||
push hl
|
||||
push de
|
||||
call DoAnimFrame ; Uses a massive dw
|
||||
call UpdateAnimFrame
|
||||
pop de
|
||||
pop hl
|
||||
jr c, .done
|
||||
|
||||
.next
|
||||
ld bc, SPRITEANIMSTRUCT_LENGTH
|
||||
add hl, bc
|
||||
dec e
|
||||
jr nz, .loop
|
||||
|
||||
ld a, [wCurSpriteOAMAddr]
|
||||
ld l, a
|
||||
ld h, HIGH(wShadowOAM)
|
||||
|
||||
.loop2 ; Clear (wShadowOAM + [wCurSpriteOAMAddr] --> wShadowOAMEnd)
|
||||
ld a, l
|
||||
cp LOW(wShadowOAMEnd)
|
||||
jr nc, .done
|
||||
xor a
|
||||
ld [hli], a
|
||||
jr .loop2
|
||||
|
||||
.done
|
||||
ret
|
||||
|
||||
DoNextFrameForFirst16Sprites:
|
||||
ld hl, wSpriteAnimationStructs
|
||||
ld e, NUM_SPRITE_ANIM_STRUCTS
|
||||
|
||||
.loop
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .next
|
||||
ld c, l
|
||||
ld b, h
|
||||
push hl
|
||||
push de
|
||||
call DoAnimFrame ; Uses a massive dw
|
||||
call UpdateAnimFrame
|
||||
pop de
|
||||
pop hl
|
||||
jr c, .done
|
||||
|
||||
.next
|
||||
ld bc, SPRITEANIMSTRUCT_LENGTH
|
||||
add hl, bc
|
||||
dec e
|
||||
jr nz, .loop
|
||||
|
||||
ld a, [wCurSpriteOAMAddr]
|
||||
ld l, a
|
||||
ld h, HIGH(wShadowOAMSprite16)
|
||||
|
||||
.loop2 ; Clear (wShadowOAM + [wCurSpriteOAMAddr] --> Sprites + $40)
|
||||
ld a, l
|
||||
cp LOW(wShadowOAMSprite16)
|
||||
jr nc, .done
|
||||
xor a
|
||||
ld [hli], a
|
||||
jr .loop2
|
||||
|
||||
.done
|
||||
ret
|
||||
|
||||
_InitSpriteAnimStruct::
|
||||
; Initialize animation a at pixel x=e, y=d
|
||||
; Find if there's any room in the wSpriteAnimationStructs array, which is 10x16
|
||||
push de
|
||||
push af
|
||||
ld hl, wSpriteAnimationStructs
|
||||
ld e, NUM_SPRITE_ANIM_STRUCTS
|
||||
.loop
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .found
|
||||
ld bc, SPRITEANIMSTRUCT_LENGTH
|
||||
add hl, bc
|
||||
dec e
|
||||
jr nz, .loop
|
||||
; We've reached the end. There is no more room here.
|
||||
; Return carry.
|
||||
pop af
|
||||
pop de
|
||||
scf
|
||||
ret
|
||||
|
||||
.found
|
||||
; Back up the structure address to bc.
|
||||
ld c, l
|
||||
ld b, h
|
||||
|
||||
; Increment [wSpriteAnimCount], skipping a 0 value.
|
||||
ld hl, wSpriteAnimCount
|
||||
inc [hl]
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr nz, .nonzero
|
||||
inc [hl]
|
||||
.nonzero
|
||||
|
||||
; Get row a of SpriteAnimSeqData, copy the pointer into de
|
||||
pop af
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, SpriteAnimSeqData
|
||||
add hl, de
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
; Set hl to the first field (field 0) in the current structure.
|
||||
ld hl, SPRITEANIMSTRUCT_INDEX
|
||||
add hl, bc
|
||||
; Load the index.
|
||||
ld a, [wSpriteAnimCount]
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_INDEX
|
||||
; Copy the table entry to the next two fields.
|
||||
ld a, [de]
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_FRAMESET_ID
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
||||
inc de
|
||||
; Look up the third field in the wSpriteAnimDict mapping.
|
||||
; Take the mapped value and load it in.
|
||||
ld a, [de]
|
||||
call GetSpriteAnimVTile
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_TILE_ID
|
||||
pop de
|
||||
; Set hl to field 4 (X coordinate). Kinda pointless, because we're presumably already here.
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
; Load the original value of de into here.
|
||||
ld a, e
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_XCOORD
|
||||
ld a, d
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_YCOORD
|
||||
; load 0 into the next four fields
|
||||
xor a
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_XOFFSET
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_YOFFSET
|
||||
xor a
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_DURATION
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_DURATIONOFFSET
|
||||
; load -1 into the next field
|
||||
dec a
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_FRAME
|
||||
; load 0 into the last five fields
|
||||
xor a
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_VAR1
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_VAR2
|
||||
ld [hli], a ; SPRITEANIMSTRUCT_VAR3
|
||||
ld [hl], a ; SPRITEANIMSTRUCT_VAR4
|
||||
; back up the address of the first field to wSpriteAnimAddrBackup
|
||||
ld a, c
|
||||
ld [wSpriteAnimAddrBackup], a
|
||||
ld a, b
|
||||
ld [wSpriteAnimAddrBackup + 1], a
|
||||
ret
|
||||
|
||||
DeinitializeSprite:
|
||||
; Clear the index field of the struct in bc.
|
||||
ld hl, SPRITEANIMSTRUCT_INDEX
|
||||
add hl, bc
|
||||
ld [hl], 0
|
||||
ret
|
||||
|
||||
DeinitializeAllSprites:
|
||||
; Clear the index field of every struct in the wSpriteAnimationStructs array.
|
||||
ld hl, wSpriteAnimationStructs
|
||||
ld bc, SPRITEANIMSTRUCT_LENGTH
|
||||
ld e, NUM_SPRITE_ANIM_STRUCTS
|
||||
xor a
|
||||
.loop
|
||||
ld [hl], a
|
||||
add hl, bc
|
||||
dec e
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
UpdateAnimFrame:
|
||||
call InitSpriteAnimBuffer ; init WRAM
|
||||
call GetSpriteAnimFrame ; read from a memory array
|
||||
cp oamwait_command
|
||||
jr z, .done
|
||||
cp oamdelete_command
|
||||
jr z, .delete
|
||||
call GetFrameOAMPointer
|
||||
; add byte to [wCurAnimVTile]
|
||||
ld a, [wCurAnimVTile]
|
||||
add [hl]
|
||||
ld [wCurAnimVTile], a
|
||||
inc hl
|
||||
; load pointer into hl
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
push bc
|
||||
ld a, [wCurSpriteOAMAddr]
|
||||
ld e, a
|
||||
ld d, HIGH(wShadowOAM)
|
||||
ld a, [hli]
|
||||
ld c, a ; number of objects
|
||||
.loop
|
||||
; first byte: y (px)
|
||||
; [de] = [wCurAnimYCoord] + [wCurAnimYOffset] + [wGlobalAnimYOffset] + AddOrSubtractY([hl])
|
||||
ld a, [wCurAnimYCoord]
|
||||
ld b, a
|
||||
ld a, [wCurAnimYOffset]
|
||||
add b
|
||||
ld b, a
|
||||
ld a, [wGlobalAnimYOffset]
|
||||
add b
|
||||
ld b, a
|
||||
call AddOrSubtractY
|
||||
add b
|
||||
ld [de], a
|
||||
inc hl
|
||||
inc de
|
||||
; second byte: x (px)
|
||||
; [de] = [wCurAnimXCoord] + [wCurAnimXOffset] + [wGlobalAnimXOffset] + AddOrSubtractX([hl])
|
||||
ld a, [wCurAnimXCoord]
|
||||
ld b, a
|
||||
ld a, [wCurAnimXOffset]
|
||||
add b
|
||||
ld b, a
|
||||
ld a, [wGlobalAnimXOffset]
|
||||
add b
|
||||
ld b, a
|
||||
call AddOrSubtractX
|
||||
add b
|
||||
ld [de], a
|
||||
inc hl
|
||||
inc de
|
||||
; third byte: vtile
|
||||
; [de] = [wCurAnimVTile] + [hl]
|
||||
ld a, [wCurAnimVTile]
|
||||
add [hl]
|
||||
ld [de], a
|
||||
inc hl
|
||||
inc de
|
||||
; fourth byte: attributes
|
||||
; [de] = GetSpriteOAMAttr([hl])
|
||||
call GetSpriteOAMAttr
|
||||
ld [de], a
|
||||
inc hl
|
||||
inc de
|
||||
ld a, e
|
||||
ld [wCurSpriteOAMAddr], a
|
||||
cp LOW(wShadowOAMEnd)
|
||||
jr nc, .reached_the_end
|
||||
dec c
|
||||
jr nz, .loop
|
||||
pop bc
|
||||
jr .done
|
||||
|
||||
.delete
|
||||
; Removes the object from the screen, as opposed to `oamend` which just stops all motion
|
||||
call DeinitializeSprite
|
||||
.done
|
||||
and a
|
||||
ret
|
||||
|
||||
.reached_the_end
|
||||
pop bc
|
||||
scf
|
||||
ret
|
||||
|
||||
AddOrSubtractY:
|
||||
push hl
|
||||
ld a, [hl]
|
||||
ld hl, wCurSpriteOAMFlags
|
||||
bit OAM_Y_FLIP, [hl]
|
||||
jr z, .ok
|
||||
; -8 - a
|
||||
add 8
|
||||
xor $ff
|
||||
inc a
|
||||
|
||||
.ok
|
||||
pop hl
|
||||
ret
|
||||
|
||||
AddOrSubtractX:
|
||||
push hl
|
||||
ld a, [hl]
|
||||
ld hl, wCurSpriteOAMFlags
|
||||
bit OAM_X_FLIP, [hl]
|
||||
jr z, .ok
|
||||
; -8 - a
|
||||
add 8
|
||||
xor $ff
|
||||
inc a
|
||||
|
||||
.ok
|
||||
pop hl
|
||||
ret
|
||||
|
||||
GetSpriteOAMAttr:
|
||||
ld a, [wCurSpriteOAMFlags]
|
||||
ld b, a
|
||||
ld a, [hl]
|
||||
xor b
|
||||
and PRIORITY | Y_FLIP | X_FLIP
|
||||
ld b, a
|
||||
ld a, [hl]
|
||||
and ~(PRIORITY | Y_FLIP | X_FLIP)
|
||||
or b
|
||||
ret
|
||||
|
||||
InitSpriteAnimBuffer:
|
||||
xor a
|
||||
ld [wCurSpriteOAMFlags], a
|
||||
ld hl, SPRITEANIMSTRUCT_TILE_ID
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld [wCurAnimVTile], a
|
||||
ld a, [hli]
|
||||
ld [wCurAnimXCoord], a
|
||||
ld a, [hli]
|
||||
ld [wCurAnimYCoord], a
|
||||
ld a, [hli]
|
||||
ld [wCurAnimXOffset], a
|
||||
ld a, [hli]
|
||||
ld [wCurAnimYOffset], a
|
||||
ret
|
||||
|
||||
GetSpriteAnimVTile:
|
||||
; a = wSpriteAnimDict[a] if a in wSpriteAnimDict else vtile offset $00
|
||||
push hl
|
||||
push bc
|
||||
ld hl, wSpriteAnimDict
|
||||
ld b, a
|
||||
ld c, NUM_SPRITEANIMDICT_ENTRIES
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr z, .ok
|
||||
inc hl
|
||||
dec c
|
||||
jr nz, .loop
|
||||
xor a
|
||||
jr .done
|
||||
|
||||
.ok
|
||||
ld a, [hl]
|
||||
|
||||
.done
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
_ReinitSpriteAnimFrame::
|
||||
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ld hl, SPRITEANIMSTRUCT_DURATION
|
||||
add hl, bc
|
||||
ld [hl], 0
|
||||
ld hl, SPRITEANIMSTRUCT_FRAME
|
||||
add hl, bc
|
||||
ld [hl], -1
|
||||
ret
|
||||
|
||||
GetSpriteAnimFrame:
|
||||
.loop
|
||||
ld hl, SPRITEANIMSTRUCT_DURATION
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .next_frame
|
||||
dec [hl]
|
||||
call .GetPointer
|
||||
ld a, [hli]
|
||||
push af
|
||||
jr .okay
|
||||
|
||||
.next_frame
|
||||
ld hl, SPRITEANIMSTRUCT_FRAME
|
||||
add hl, bc
|
||||
inc [hl]
|
||||
call .GetPointer
|
||||
ld a, [hli]
|
||||
cp oamrestart_command
|
||||
jr z, .restart
|
||||
cp oamend_command
|
||||
jr z, .repeat_last
|
||||
|
||||
push af
|
||||
ld a, [hl]
|
||||
push hl
|
||||
and ~(Y_FLIP << 1 | X_FLIP << 1)
|
||||
ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET
|
||||
add hl, bc
|
||||
add [hl]
|
||||
ld hl, SPRITEANIMSTRUCT_DURATION
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
pop hl
|
||||
.okay
|
||||
ld a, [hl]
|
||||
and Y_FLIP << 1 | X_FLIP << 1 ; The << 1 is compensated in the "oamframe" macro
|
||||
srl a
|
||||
ld [wCurSpriteOAMFlags], a
|
||||
pop af
|
||||
ret
|
||||
|
||||
.repeat_last
|
||||
xor a
|
||||
ld hl, SPRITEANIMSTRUCT_DURATION
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_FRAME
|
||||
add hl, bc
|
||||
dec [hl]
|
||||
dec [hl]
|
||||
jr .loop
|
||||
|
||||
.restart
|
||||
xor a
|
||||
ld hl, SPRITEANIMSTRUCT_DURATION
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
|
||||
dec a
|
||||
ld hl, SPRITEANIMSTRUCT_FRAME
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
jr .loop
|
||||
|
||||
.GetPointer:
|
||||
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
|
||||
add hl, bc
|
||||
ld e, [hl]
|
||||
ld d, 0
|
||||
ld hl, SpriteAnimFrameData
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
ld hl, SPRITEANIMSTRUCT_FRAME
|
||||
add hl, bc
|
||||
ld l, [hl]
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
add hl, de
|
||||
ret
|
||||
|
||||
GetFrameOAMPointer:
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, SpriteAnimOAMData
|
||||
add hl, de
|
||||
add hl, de
|
||||
add hl, de
|
||||
ret
|
||||
|
||||
UnusedLoadSpriteAnimGFX: ; unreferenced
|
||||
push hl
|
||||
ld l, a
|
||||
ld h, 0
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld de, UnusedSpriteAnimGFX
|
||||
add hl, de
|
||||
ld c, [hl]
|
||||
inc hl
|
||||
ld b, [hl]
|
||||
inc hl
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
pop hl
|
||||
push bc
|
||||
call Request2bpp
|
||||
pop bc
|
||||
ret
|
||||
|
||||
INCLUDE "data/sprite_anims/sequences.asm"
|
||||
|
||||
INCLUDE "engine/gfx/sprite_anims.asm"
|
||||
|
||||
INCLUDE "data/sprite_anims/framesets.asm"
|
||||
|
||||
INCLUDE "data/sprite_anims/oam.asm"
|
||||
|
||||
INCLUDE "data/sprite_anims/unused_gfx.asm"
|
||||
|
||||
Sprites_Cosine:
|
||||
; a = d * cos(a * pi/32)
|
||||
add %010000 ; cos(x) = sin(x + pi/2)
|
||||
; fallthrough
|
||||
Sprites_Sine:
|
||||
; a = d * sin(a * pi/32)
|
||||
calc_sine_wave
|
||||
|
||||
AnimateEndOfExpBar:
|
||||
ldh a, [hSGB]
|
||||
ld de, EndOfExpBarGFX
|
||||
and a
|
||||
jr z, .load
|
||||
ld de, SGBEndOfExpBarGFX
|
||||
|
||||
.load
|
||||
ld hl, vTiles0 tile $00
|
||||
lb bc, BANK(EndOfExpBarGFX), 1
|
||||
call Request2bpp
|
||||
ld c, 8
|
||||
ld d, 0
|
||||
.loop
|
||||
push bc
|
||||
call .AnimateFrame
|
||||
call DelayFrame
|
||||
pop bc
|
||||
inc d
|
||||
inc d
|
||||
dec c
|
||||
jr nz, .loop
|
||||
call ClearSprites
|
||||
ret
|
||||
|
||||
.AnimateFrame:
|
||||
ld hl, wShadowOAMSprite00
|
||||
ld c, 8 ; number of animated circles
|
||||
.anim_loop
|
||||
ld a, c
|
||||
and a
|
||||
ret z
|
||||
dec c
|
||||
ld a, c
|
||||
; multiply by 8
|
||||
sla a
|
||||
sla a
|
||||
sla a
|
||||
push af
|
||||
|
||||
push de
|
||||
push hl
|
||||
call Sprites_Sine
|
||||
pop hl
|
||||
pop de
|
||||
add 13 * TILE_WIDTH
|
||||
ld [hli], a ; y
|
||||
|
||||
pop af
|
||||
push de
|
||||
push hl
|
||||
call Sprites_Cosine
|
||||
pop hl
|
||||
pop de
|
||||
add 10 * TILE_WIDTH + 4
|
||||
ld [hli], a ; x
|
||||
|
||||
ld a, $0
|
||||
ld [hli], a ; tile id
|
||||
ld a, PAL_BATTLE_OB_BLUE
|
||||
ld [hli], a ; attributes
|
||||
jr .anim_loop
|
||||
|
||||
EndOfExpBarGFX:
|
||||
INCBIN "gfx/battle/expbarend.2bpp"
|
||||
SGBEndOfExpBarGFX:
|
||||
INCBIN "gfx/battle/expbarend_sgb.2bpp"
|
||||
|
||||
ClearSpriteAnims2:
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
push af
|
||||
ld hl, wSpriteAnimData
|
||||
ld bc, wSpriteAnimDataEnd - wSpriteAnimData
|
||||
.loop
|
||||
ld [hl], 0
|
||||
inc hl
|
||||
dec bc
|
||||
ld a, c
|
||||
or b
|
||||
jr nz, .loop
|
||||
pop af
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
38
engine/gfx/trademon_frontpic.asm
Normal file
38
engine/gfx/trademon_frontpic.asm
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
GetTrademonFrontpic:
|
||||
ld a, [wOTTrademonSpecies]
|
||||
ld hl, wOTTrademonDVs
|
||||
ld de, vTiles2
|
||||
push de
|
||||
push af
|
||||
predef GetUnownLetter
|
||||
pop af
|
||||
ld [wCurPartySpecies], a
|
||||
ld [wCurSpecies], a
|
||||
call GetBaseData
|
||||
pop de
|
||||
predef GetAnimatedFrontpic
|
||||
ret
|
||||
|
||||
AnimateTrademonFrontpic:
|
||||
ld a, [wOTTrademonSpecies]
|
||||
call IsAPokemon
|
||||
ret c
|
||||
farcall ShowOTTrademonStats
|
||||
ld a, [wOTTrademonSpecies]
|
||||
ld [wCurPartySpecies], a
|
||||
ld a, [wOTTrademonDVs]
|
||||
ld [wTempMonDVs], a
|
||||
ld a, [wOTTrademonDVs + 1]
|
||||
ld [wTempMonDVs + 1], a
|
||||
ld b, SCGB_PLAYER_OR_MON_FRONTPIC_PALS
|
||||
call GetSGBLayout
|
||||
ld a, %11100100 ; 3,2,1,0
|
||||
call DmgToCgbBGPals
|
||||
farcall TradeAnim_ShowGetmonFrontpic
|
||||
ld a, [wOTTrademonSpecies]
|
||||
ld [wCurPartySpecies], a
|
||||
hlcoord 7, 2
|
||||
ld d, $0
|
||||
ld e, ANIM_MON_TRADE
|
||||
predef AnimateFrontpic
|
||||
ret
|
||||
Loading…
Add table
Add a link
Reference in a new issue