mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
1371 lines
18 KiB
NASM
1371 lines
18 KiB
NASM
INCLUDE "engine/sgb_layouts.asm"
|
|
|
|
SHINY_ATK_BIT EQU 5
|
|
SHINY_DEF_VAL EQU 10
|
|
SHINY_SPD_VAL EQU 10
|
|
SHINY_SPC_VAL EQU 10
|
|
|
|
CheckShininess:
|
|
; Check if a mon is shiny by DVs at bc.
|
|
; Return carry if shiny.
|
|
|
|
ld l, c
|
|
ld h, b
|
|
|
|
; Attack
|
|
ld a, [hl]
|
|
and 1 << SHINY_ATK_BIT
|
|
jr z, .NotShiny
|
|
|
|
; Defense
|
|
ld a, [hli]
|
|
and $f
|
|
cp SHINY_DEF_VAL
|
|
jr nz, .NotShiny
|
|
|
|
; Speed
|
|
ld a, [hl]
|
|
and $f0
|
|
cp SHINY_SPD_VAL << 4
|
|
jr nz, .NotShiny
|
|
|
|
; Special
|
|
ld a, [hl]
|
|
and $f
|
|
cp SHINY_SPC_VAL
|
|
jr nz, .NotShiny
|
|
|
|
.Shiny:
|
|
scf
|
|
ret
|
|
|
|
.NotShiny:
|
|
and a
|
|
ret
|
|
|
|
; unreferenced
|
|
CheckContestMon:
|
|
; Check a mon's DVs at hl in the bug catching contest.
|
|
; Return carry if its DVs are good enough to place in the contest.
|
|
|
|
; Attack
|
|
ld a, [hl]
|
|
cp 10 << 4
|
|
jr c, .Bad
|
|
|
|
; Defense
|
|
ld a, [hli]
|
|
and $f
|
|
cp 10
|
|
jr c, .Bad
|
|
|
|
; Speed
|
|
ld a, [hl]
|
|
cp 10 << 4
|
|
jr c, .Bad
|
|
|
|
; Special
|
|
ld a, [hl]
|
|
and $f
|
|
cp 10
|
|
jr c, .Bad
|
|
|
|
.Good:
|
|
scf
|
|
ret
|
|
|
|
.Bad:
|
|
and a
|
|
ret
|
|
|
|
Function8aa4:
|
|
; XXX
|
|
push de
|
|
push bc
|
|
ld hl, PalPacket_9ce6
|
|
ld de, wSGBPals
|
|
ld bc, PALPACKET_LENGTH
|
|
call CopyBytes
|
|
pop bc
|
|
pop de
|
|
ld a, c
|
|
ld [wSGBPals + 3], a
|
|
ld a, b
|
|
ld [wSGBPals + 4], a
|
|
ld a, e
|
|
ld [wSGBPals + 5], a
|
|
ld a, d
|
|
ld [wSGBPals + 6], a
|
|
ld hl, wSGBPals
|
|
call PushSGBPals_
|
|
ld hl, BlkPacket_9a86
|
|
call PushSGBPals_
|
|
ret
|
|
|
|
InitPartyMenuPalettes:
|
|
ld hl, PalPacket_9c56 + 1
|
|
call CopyFourPalettes
|
|
call InitPartyMenuOBPals
|
|
call WipeAttrMap
|
|
ret
|
|
|
|
; SGB layout for SCGB_PARTY_MENU_HP_PALS
|
|
SGB_ApplyPartyMenuHPPals: ; 8ade
|
|
ld hl, wHPPals
|
|
ld a, [wSGBPals]
|
|
ld e, a
|
|
ld d, $0
|
|
add hl, de
|
|
ld e, l
|
|
ld d, h
|
|
ld a, [de]
|
|
and a
|
|
ld e, $5
|
|
jr z, .okay
|
|
dec a
|
|
ld e, $a
|
|
jr z, .okay
|
|
ld e, $f
|
|
.okay
|
|
push de
|
|
ld hl, wSGBPals + 10
|
|
ld bc, $6
|
|
ld a, [wSGBPals]
|
|
call AddNTimes
|
|
pop de
|
|
ld [hl], e
|
|
ret
|
|
|
|
Function8b07:
|
|
; Unreferenced
|
|
call CheckCGB
|
|
ret z
|
|
; CGB only
|
|
ld hl, .BGPal
|
|
ld de, UnknBGPals
|
|
ld bc, 1 palettes
|
|
ld a, $5
|
|
call FarCopyWRAM
|
|
|
|
ld hl, .OBPal
|
|
ld de, UnknOBPals
|
|
ld bc, 1 palettes
|
|
ld a, $5
|
|
call FarCopyWRAM
|
|
|
|
call ApplyPals
|
|
ld a, $1
|
|
ld [hCGBPalUpdate], a
|
|
ret
|
|
|
|
.BGPal:
|
|
RGB 31, 31, 31
|
|
RGB 18, 23, 31
|
|
RGB 15, 20, 31
|
|
RGB 00, 00, 00
|
|
|
|
.OBPal:
|
|
RGB 31, 31, 31
|
|
RGB 31, 31, 12
|
|
RGB 08, 16, 28
|
|
RGB 00, 00, 00
|
|
|
|
Function8b3f:
|
|
; Unreferenced
|
|
call CheckCGB
|
|
ret nz
|
|
ld a, [hSGB]
|
|
and a
|
|
ret z
|
|
ld hl, BlkPacket_9a86
|
|
jp PushSGBPals_
|
|
|
|
Function8b4d:
|
|
; XXX
|
|
call CheckCGB
|
|
jr nz, .cgb
|
|
ld a, [hSGB]
|
|
and a
|
|
ret z
|
|
ld hl, PalPacket_9c26
|
|
jp PushSGBPals_
|
|
|
|
.cgb
|
|
ld de, UnknOBPals
|
|
ld a, $3b
|
|
call GetPredefPal
|
|
jp LoadHLPaletteIntoDE
|
|
|
|
Function8b67:
|
|
; XXX
|
|
call CheckCGB
|
|
jr nz, .cgb
|
|
ld a, [hSGB]
|
|
and a
|
|
ret z
|
|
ld hl, PalPacket_9c36
|
|
jp PushSGBPals_
|
|
|
|
.cgb
|
|
ld de, UnknOBPals
|
|
ld a, $3c
|
|
call GetPredefPal
|
|
jp LoadHLPaletteIntoDE
|
|
|
|
Function8b81:
|
|
; XXX
|
|
call CheckCGB
|
|
jr nz, .cgb
|
|
ld a, [hSGB]
|
|
and a
|
|
ret z
|
|
ld a, c
|
|
push af
|
|
ld hl, PalPacket_9ce6
|
|
ld de, wSGBPals
|
|
ld bc, PALPACKET_LENGTH
|
|
call CopyBytes
|
|
pop af
|
|
call GetMonPalettePointer_
|
|
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
|
|
jp PushSGBPals_
|
|
|
|
.cgb
|
|
ld de, UnknOBPals
|
|
ld a, c
|
|
call GetMonPalettePointer_
|
|
call LoadPalette_White_Col1_Col2_Black
|
|
ret
|
|
|
|
LoadTrainerClassPaletteAsNthBGPal:
|
|
ld a, [TrainerClass]
|
|
call GetTrainerPalettePointer
|
|
ld a, e
|
|
jr got_palette_pointer_8bd7
|
|
|
|
LoadMonPaletteAsNthBGPal:
|
|
ld a, [CurPartySpecies]
|
|
call GetMonPalettePointer
|
|
ld a, e
|
|
bit 7, a
|
|
jr z, got_palette_pointer_8bd7
|
|
and $7f
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
|
|
got_palette_pointer_8bd7
|
|
push hl
|
|
ld hl, UnknBGPals
|
|
ld de, 1 palettes
|
|
.loop
|
|
and a
|
|
jr z, .got_addr
|
|
add hl, de
|
|
dec a
|
|
jr .loop
|
|
|
|
.got_addr
|
|
ld e, l
|
|
ld d, h
|
|
pop hl
|
|
call LoadPalette_White_Col1_Col2_Black
|
|
ret
|
|
|
|
Function8bec:
|
|
; XXX
|
|
ld a, [hCGB]
|
|
and a
|
|
jr nz, .cgb
|
|
ld hl, PlayerLightScreenCount
|
|
jp PushSGBPals_
|
|
|
|
.cgb
|
|
ld a, [EnemyLightScreenCount] ; col
|
|
ld c, a
|
|
ld a, [EnemyReflectCount] ; row
|
|
hlcoord 0, 0, AttrMap
|
|
ld de, SCREEN_WIDTH
|
|
.loop
|
|
and a
|
|
jr z, .done
|
|
add hl, de
|
|
dec a
|
|
jr .loop
|
|
|
|
.done
|
|
ld b, $0
|
|
add hl, bc
|
|
lb bc, 6, 4
|
|
ld a, [EnemySafeguardCount] ; value
|
|
and $3
|
|
call FillBoxCGB
|
|
call CopyTilemapAtOnce
|
|
ret
|
|
|
|
ApplyMonOrTrainerPals:
|
|
call CheckCGB
|
|
ret z
|
|
ld a, e
|
|
and a
|
|
jr z, .get_trainer
|
|
ld a, [CurPartySpecies]
|
|
call GetMonPalettePointer_
|
|
jr .load_palettes
|
|
|
|
.get_trainer
|
|
ld a, [TrainerClass]
|
|
call GetTrainerPalettePointer
|
|
|
|
.load_palettes
|
|
ld de, UnknBGPals
|
|
call LoadPalette_White_Col1_Col2_Black
|
|
call WipeAttrMap
|
|
call ApplyAttrMap
|
|
call ApplyPals
|
|
ret
|
|
|
|
ApplyHPBarPals:
|
|
ld a, [wWhichHPBar]
|
|
and a
|
|
jr z, .Enemy
|
|
cp $1
|
|
jr z, .Player
|
|
cp $2
|
|
jr z, .PartyMenu
|
|
ret
|
|
|
|
.Enemy:
|
|
ld de, BGPals palette PAL_BATTLE_BG_ENEMY_HP + 2
|
|
jr .okay
|
|
|
|
.Player:
|
|
ld de, BGPals palette PAL_BATTLE_BG_PLAYER_HP + 2
|
|
|
|
.okay
|
|
ld l, c
|
|
ld h, $0
|
|
add hl, hl
|
|
add hl, hl
|
|
ld bc, HPBarPals
|
|
add hl, bc
|
|
ld bc, 4
|
|
ld a, $5
|
|
call FarCopyWRAM
|
|
ld a, $1
|
|
ld [hCGBPalUpdate], a
|
|
ret
|
|
|
|
.PartyMenu:
|
|
ld e, c
|
|
inc e
|
|
hlcoord 11, 1, AttrMap
|
|
ld bc, 2 * SCREEN_WIDTH
|
|
ld a, [CurPartyMon]
|
|
.loop
|
|
and a
|
|
jr z, .done
|
|
add hl, bc
|
|
dec a
|
|
jr .loop
|
|
|
|
.done
|
|
lb bc, 2, 8
|
|
ld a, e
|
|
call FillBoxCGB
|
|
ret
|
|
|
|
LoadStatsScreenPals:
|
|
call CheckCGB
|
|
ret z
|
|
ld hl, StatsScreenPals
|
|
ld b, 0
|
|
dec c
|
|
add hl, bc
|
|
add hl, bc
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, $5
|
|
ld [rSVBK], a
|
|
ld a, [hli]
|
|
ld [UnknBGPals palette 0], a
|
|
ld [UnknBGPals palette 2], a
|
|
ld a, [hl]
|
|
ld [UnknBGPals palette 0 + 1], a
|
|
ld [UnknBGPals palette 2 + 1], a
|
|
pop af
|
|
ld [rSVBK], a
|
|
call ApplyPals
|
|
ld a, $1
|
|
ret
|
|
|
|
LoadMailPalettes:
|
|
ld l, e
|
|
ld h, 0
|
|
add hl, hl
|
|
add hl, hl
|
|
add hl, hl
|
|
ld de, .MailPals
|
|
add hl, de
|
|
call CheckCGB
|
|
jr nz, .cgb
|
|
push hl
|
|
ld hl, PalPacket_9ce6
|
|
ld de, wSGBPals
|
|
ld bc, PALPACKET_LENGTH
|
|
call CopyBytes
|
|
pop hl
|
|
inc hl
|
|
inc hl
|
|
ld a, [hli]
|
|
ld [wSGBPals + 3], a
|
|
ld a, [hli]
|
|
ld [wSGBPals + 4], a
|
|
ld a, [hli]
|
|
ld [wSGBPals + 5], a
|
|
ld a, [hli]
|
|
ld [wSGBPals + 6], a
|
|
ld hl, wSGBPals
|
|
call PushSGBPals_
|
|
ld hl, BlkPacket_9a86
|
|
call PushSGBPals_
|
|
ret
|
|
|
|
.cgb
|
|
ld de, UnknBGPals
|
|
ld bc, 1 palettes
|
|
ld a, $5
|
|
call FarCopyWRAM
|
|
call ApplyPals
|
|
call WipeAttrMap
|
|
call ApplyAttrMap
|
|
ret
|
|
|
|
.MailPals:
|
|
INCLUDE "data/palettes/mail.pal"
|
|
|
|
INCLUDE "engine/cgb_layouts.asm"
|
|
|
|
Function95f0:
|
|
; XXX
|
|
ld hl, .Palette
|
|
ld de, UnknBGPals
|
|
ld bc, 1 palettes
|
|
ld a, $5
|
|
call FarCopyWRAM
|
|
call ApplyPals
|
|
call WipeAttrMap
|
|
call ApplyAttrMap
|
|
ret
|
|
|
|
.Palette:
|
|
RGB 31, 31, 31
|
|
RGB 09, 31, 31
|
|
RGB 10, 12, 31
|
|
RGB 00, 03, 19
|
|
|
|
CopyFourPalettes:
|
|
ld de, UnknBGPals
|
|
ld c, $4
|
|
|
|
CopyPalettes:
|
|
.loop
|
|
push bc
|
|
ld a, [hli]
|
|
push hl
|
|
call GetPredefPal
|
|
call LoadHLPaletteIntoDE
|
|
pop hl
|
|
inc hl
|
|
pop bc
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
GetPredefPal:
|
|
ld l, a
|
|
ld h, $0
|
|
add hl, hl
|
|
add hl, hl
|
|
add hl, hl
|
|
ld bc, PredefPals
|
|
add hl, bc
|
|
ret
|
|
|
|
LoadHLPaletteIntoDE:
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, $5
|
|
ld [rSVBK], a
|
|
ld c, $8
|
|
.loop
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec c
|
|
jr nz, .loop
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
|
|
LoadPalette_White_Col1_Col2_Black:
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, $5
|
|
ld [rSVBK], a
|
|
|
|
ld a, LOW(palred 31 + palgreen 31 + palblue 31)
|
|
ld [de], a
|
|
inc de
|
|
ld a, HIGH(palred 31 + palgreen 31 + palblue 31)
|
|
ld [de], a
|
|
inc de
|
|
|
|
ld c, 2 * 2
|
|
.loop
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec c
|
|
jr nz, .loop
|
|
|
|
xor a
|
|
ld [de], a
|
|
inc de
|
|
ld [de], a
|
|
inc de
|
|
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
|
|
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
|
|
|
|
ResetBGPals:
|
|
push af
|
|
push bc
|
|
push de
|
|
push hl
|
|
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, $5
|
|
ld [rSVBK], a
|
|
|
|
ld hl, UnknBGPals
|
|
ld c, 1 palettes
|
|
.loop
|
|
ld a, $ff
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
xor a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .loop
|
|
|
|
pop af
|
|
ld [rSVBK], a
|
|
|
|
pop hl
|
|
pop de
|
|
pop bc
|
|
pop af
|
|
ret
|
|
|
|
WipeAttrMap:
|
|
hlcoord 0, 0, AttrMap
|
|
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
|
|
xor a
|
|
call ByteFill
|
|
ret
|
|
|
|
ApplyPals:
|
|
ld hl, UnknBGPals
|
|
ld de, BGPals
|
|
ld bc, 16 palettes
|
|
ld a, $5
|
|
call FarCopyWRAM
|
|
ret
|
|
|
|
ApplyAttrMap:
|
|
ld a, [rLCDC]
|
|
bit 7, a
|
|
jr z, .UpdateVBank1
|
|
ld a, [hBGMapMode]
|
|
push af
|
|
ld a, $2
|
|
ld [hBGMapMode], a
|
|
call DelayFrame
|
|
call DelayFrame
|
|
call DelayFrame
|
|
call DelayFrame
|
|
pop af
|
|
ld [hBGMapMode], a
|
|
ret
|
|
|
|
.UpdateVBank1:
|
|
hlcoord 0, 0, AttrMap
|
|
debgcoord 0, 0
|
|
ld b, SCREEN_HEIGHT
|
|
ld a, $1
|
|
ld [rVBK], a
|
|
.row
|
|
ld c, SCREEN_WIDTH
|
|
.col
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec c
|
|
jr nz, .col
|
|
ld a, BG_MAP_WIDTH - SCREEN_WIDTH
|
|
add e
|
|
jr nc, .okay
|
|
inc d
|
|
.okay
|
|
ld e, a
|
|
dec b
|
|
jr nz, .row
|
|
ld a, $0
|
|
ld [rVBK], a
|
|
ret
|
|
|
|
; CGB layout for SCGB_PARTY_MENU_HP_PALS
|
|
CGB_ApplyPartyMenuHPPals: ; 96f3
|
|
ld hl, wHPPals
|
|
ld a, [wSGBPals]
|
|
ld e, a
|
|
ld d, $0
|
|
add hl, de
|
|
ld e, l
|
|
ld d, h
|
|
ld a, [de]
|
|
inc a
|
|
ld e, a
|
|
hlcoord 11, 2, AttrMap
|
|
ld bc, 2 * SCREEN_WIDTH
|
|
ld a, [wSGBPals]
|
|
.loop
|
|
and a
|
|
jr z, .done
|
|
add hl, bc
|
|
dec a
|
|
jr .loop
|
|
.done
|
|
lb bc, 2, 8
|
|
ld a, e
|
|
call FillBoxCGB
|
|
ret
|
|
|
|
InitPartyMenuOBPals:
|
|
ld hl, PartyMenuOBPals
|
|
ld de, UnknOBPals
|
|
ld bc, 2 palettes
|
|
ld a, $5
|
|
call FarCopyWRAM
|
|
ret
|
|
|
|
GetBattlemonBackpicPalettePointer:
|
|
push de
|
|
farcall GetPartyMonDVs
|
|
ld c, l
|
|
ld b, h
|
|
ld a, [TempBattleMonSpecies]
|
|
call GetPlayerOrMonPalettePointer
|
|
pop de
|
|
ret
|
|
|
|
GetEnemyFrontpicPalettePointer:
|
|
push de
|
|
farcall GetEnemyMonDVs
|
|
ld c, l
|
|
ld b, h
|
|
ld a, [TempEnemyMonSpecies]
|
|
call GetFrontpicPalettePointer
|
|
pop de
|
|
ret
|
|
|
|
GetPlayerOrMonPalettePointer:
|
|
and a
|
|
jp nz, GetMonNormalOrShinyPalettePointer
|
|
ld a, [wPlayerSpriteSetupFlags]
|
|
bit 2, a ; transformed to male
|
|
jr nz, .male
|
|
ld a, [PlayerGender]
|
|
and a
|
|
jr z, .male
|
|
ld hl, KrisPalette
|
|
ret
|
|
|
|
.male
|
|
ld hl, PlayerPalette
|
|
ret
|
|
|
|
GetFrontpicPalettePointer:
|
|
and a
|
|
jp nz, GetMonNormalOrShinyPalettePointer
|
|
ld a, [TrainerClass]
|
|
|
|
GetTrainerPalettePointer:
|
|
ld l, a
|
|
ld h, 0
|
|
add hl, hl
|
|
add hl, hl
|
|
ld bc, TrainerPalettes
|
|
add hl, bc
|
|
ret
|
|
|
|
GetMonPalettePointer_:
|
|
call GetMonPalettePointer
|
|
ret
|
|
|
|
Function9779: mobile
|
|
call CheckCGB
|
|
ret z
|
|
ld hl, BattleObjectPals
|
|
ld a, $90
|
|
ld [rOBPI], a
|
|
ld c, 6 palettes
|
|
.loop
|
|
ld a, [hli]
|
|
ld [rOBPD], a
|
|
dec c
|
|
jr nz, .loop
|
|
ld hl, BattleObjectPals
|
|
ld de, UnknOBPals palette 2
|
|
ld bc, 2 palettes
|
|
ld a, $5
|
|
call FarCopyWRAM
|
|
ret
|
|
|
|
BattleObjectPals:
|
|
INCLUDE "data/palettes/battle_objects.pal"
|
|
|
|
Function97cc:
|
|
; XXX
|
|
call CheckCGB
|
|
ret z
|
|
ld a, $90
|
|
ld [rOBPI], a
|
|
ld a, $1c
|
|
call GetPredefPal
|
|
call .PushPalette
|
|
ld a, $21
|
|
call GetPredefPal
|
|
call .PushPalette
|
|
ret
|
|
|
|
.PushPalette:
|
|
ld c, 1 palettes
|
|
.loop
|
|
ld a, [hli]
|
|
ld [rOBPD], a
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
GetMonPalettePointer:
|
|
ld l, a
|
|
ld h, $0
|
|
add hl, hl
|
|
add hl, hl
|
|
add hl, hl
|
|
ld bc, PokemonPalettes
|
|
add hl, bc
|
|
ret
|
|
|
|
GetMonNormalOrShinyPalettePointer:
|
|
push bc
|
|
call GetMonPalettePointer
|
|
pop bc
|
|
push hl
|
|
call CheckShininess
|
|
pop hl
|
|
ret nc
|
|
rept 4
|
|
inc hl
|
|
endr
|
|
ret
|
|
|
|
PushSGBPals_:
|
|
ld a, [wcfbe]
|
|
push af
|
|
set 7, a
|
|
ld [wcfbe], a
|
|
call PushSGBPals
|
|
pop af
|
|
ld [wcfbe], a
|
|
ret
|
|
|
|
PushSGBPals:
|
|
ld a, [hl]
|
|
and $7
|
|
ret z
|
|
ld b, a
|
|
.loop
|
|
push bc
|
|
xor a
|
|
ld [rJOYP], a
|
|
ld a, $30
|
|
ld [rJOYP], a
|
|
ld b, $10
|
|
.loop2
|
|
ld e, $8
|
|
ld a, [hli]
|
|
ld d, a
|
|
.loop3
|
|
bit 0, d
|
|
ld a, $10
|
|
jr nz, .okay
|
|
ld a, $20
|
|
.okay
|
|
ld [rJOYP], a
|
|
ld a, $30
|
|
ld [rJOYP], a
|
|
rr d
|
|
dec e
|
|
jr nz, .loop3
|
|
dec b
|
|
jr nz, .loop2
|
|
ld a, $20
|
|
ld [rJOYP], a
|
|
ld a, $30
|
|
ld [rJOYP], a
|
|
call SGBDelayCycles
|
|
pop bc
|
|
dec b
|
|
jr nz, .loop
|
|
ret
|
|
|
|
InitSGBBorder:
|
|
call CheckCGB
|
|
ret nz
|
|
; SGB/DMG only
|
|
di
|
|
ld a, [wcfbe]
|
|
push af
|
|
set 7, a
|
|
ld [wcfbe], a
|
|
xor a
|
|
ld [rJOYP], a
|
|
ld [hSGB], a
|
|
call PushSGBBorderPalsAndWait
|
|
jr nc, .skip
|
|
ld a, $1
|
|
ld [hSGB], a
|
|
call _InitSGBBorderPals
|
|
call SGBBorder_PushBGPals
|
|
call SGBDelayCycles
|
|
call SGB_ClearVRAM
|
|
call PushSGBBorder
|
|
call SGBDelayCycles
|
|
call SGB_ClearVRAM
|
|
ld hl, PalPacket_9d66
|
|
call PushSGBPals
|
|
|
|
.skip
|
|
pop af
|
|
ld [wcfbe], a
|
|
ei
|
|
ret
|
|
|
|
InitCGBPals::
|
|
call CheckCGB
|
|
ret z
|
|
; CGB only
|
|
ld a, $1
|
|
ld [rVBK], a
|
|
ld hl, VTiles0
|
|
ld bc, $200 tiles
|
|
xor a
|
|
call ByteFill
|
|
ld a, $0
|
|
ld [rVBK], a
|
|
ld a, $80
|
|
ld [rBGPI], a
|
|
ld c, 4 * 8
|
|
.bgpals_loop
|
|
ld a, LOW(palred 31 + palgreen 31 + palblue 31)
|
|
ld [rBGPD], a
|
|
ld a, HIGH(palred 31 + palgreen 31 + palblue 31)
|
|
ld [rBGPD], a
|
|
dec c
|
|
jr nz, .bgpals_loop
|
|
ld a, $80
|
|
ld [rOBPI], a
|
|
ld c, 4 * 8
|
|
.obpals_loop
|
|
ld a, LOW(palred 31 + palgreen 31 + palblue 31)
|
|
ld [rOBPD], a
|
|
ld a, HIGH(palred 31 + palgreen 31 + palblue 31)
|
|
ld [rOBPD], a
|
|
dec c
|
|
jr nz, .obpals_loop
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, $5
|
|
ld [rSVBK], a
|
|
ld hl, UnknBGPals
|
|
call .LoadWhitePals
|
|
ld hl, BGPals
|
|
call .LoadWhitePals
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
|
|
.LoadWhitePals:
|
|
ld c, 4 * 16
|
|
.loop
|
|
ld a, LOW(palred 31 + palgreen 31 + palblue 31)
|
|
ld [hli], a
|
|
ld a, HIGH(palred 31 + palgreen 31 + palblue 31)
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
_InitSGBBorderPals:
|
|
ld hl, .PalPacketPointerTable
|
|
ld c, 9
|
|
.loop
|
|
push bc
|
|
ld a, [hli]
|
|
push hl
|
|
ld h, [hl]
|
|
ld l, a
|
|
call PushSGBPals
|
|
pop hl
|
|
inc hl
|
|
pop bc
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
.PalPacketPointerTable:
|
|
dw PalPacket_9d56
|
|
dw PalPacket_9d76
|
|
dw PalPacket_9d86
|
|
dw PalPacket_9d96
|
|
dw PalPacket_9da6
|
|
dw PalPacket_9db6
|
|
dw PalPacket_9dc6
|
|
dw PalPacket_9dd6
|
|
dw PalPacket_9de6
|
|
|
|
Function9911:
|
|
; XXX
|
|
di
|
|
xor a
|
|
ld [rJOYP], a
|
|
ld hl, PalPacket_9d56
|
|
call PushSGBPals
|
|
call PushSGBBorder
|
|
call SGBDelayCycles
|
|
call SGB_ClearVRAM
|
|
ld hl, PalPacket_9d66
|
|
call PushSGBPals
|
|
ei
|
|
ret
|
|
|
|
PushSGBBorder:
|
|
call .LoadSGBBorderPointers
|
|
push de
|
|
call SGBBorder_YetMorePalPushing
|
|
pop hl
|
|
call SGBBorder_MorePalPushing
|
|
ret
|
|
|
|
.LoadSGBBorderPointers:
|
|
ld hl, SGBBorder
|
|
ld de, SGBBorderMap
|
|
ret
|
|
|
|
SGB_ClearVRAM:
|
|
ld hl, VRAM_Begin
|
|
ld bc, VRAM_End - VRAM_Begin
|
|
xor a
|
|
call ByteFill
|
|
ret
|
|
|
|
PushSGBBorderPalsAndWait:
|
|
ld hl, PalPacket_9d26
|
|
call PushSGBPals
|
|
call SGBDelayCycles
|
|
ld a, [rJOYP]
|
|
and $3
|
|
cp $3
|
|
jr nz, .carry
|
|
ld a, $20
|
|
ld [rJOYP], a
|
|
ld a, [rJOYP]
|
|
ld a, [rJOYP]
|
|
call SGBDelayCycles
|
|
call SGBDelayCycles
|
|
ld a, $30
|
|
ld [rJOYP], a
|
|
call SGBDelayCycles
|
|
call SGBDelayCycles
|
|
ld a, $10
|
|
ld [rJOYP], a
|
|
rept 6
|
|
ld a, [rJOYP]
|
|
endr
|
|
call SGBDelayCycles
|
|
call SGBDelayCycles
|
|
ld a, $30
|
|
ld [rJOYP], a
|
|
ld a, [rJOYP]
|
|
ld a, [rJOYP]
|
|
ld a, [rJOYP]
|
|
call SGBDelayCycles
|
|
call SGBDelayCycles
|
|
ld a, [rJOYP]
|
|
and $3
|
|
cp $3
|
|
jr nz, .carry
|
|
call .FinalPush
|
|
and a
|
|
ret
|
|
|
|
.carry
|
|
call .FinalPush
|
|
scf
|
|
ret
|
|
|
|
.FinalPush:
|
|
ld hl, PalPacket_9d16
|
|
call PushSGBPals
|
|
jp SGBDelayCycles
|
|
|
|
SGBBorder_PushBGPals:
|
|
call DisableLCD
|
|
ld a, %11100100
|
|
ld [rBGP], a
|
|
ld hl, PredefPals
|
|
ld de, VTiles1
|
|
ld bc, $100 tiles
|
|
call CopyData
|
|
call DrawDefaultTiles
|
|
ld a, $e3
|
|
ld [rLCDC], a
|
|
ld hl, PalPacket_9d06
|
|
call PushSGBPals
|
|
xor a
|
|
ld [rBGP], a
|
|
ret
|
|
|
|
SGBBorder_MorePalPushing:
|
|
call DisableLCD
|
|
ld a, $e4
|
|
ld [rBGP], a
|
|
ld de, VTiles1
|
|
ld bc, 20 tiles
|
|
call CopyData
|
|
ld b, 18
|
|
.loop
|
|
push bc
|
|
ld bc, $c
|
|
call CopyData
|
|
ld bc, $28
|
|
call ClearBytes
|
|
ld bc, $c
|
|
call CopyData
|
|
pop bc
|
|
dec b
|
|
jr nz, .loop
|
|
ld bc, $140
|
|
call CopyData
|
|
ld bc, Start
|
|
call ClearBytes
|
|
ld bc, 16 palettes
|
|
call CopyData
|
|
call DrawDefaultTiles
|
|
ld a, $e3
|
|
ld [rLCDC], a
|
|
ld hl, PalPacket_9d46
|
|
call PushSGBPals
|
|
xor a
|
|
ld [rBGP], a
|
|
ret
|
|
|
|
SGBBorder_YetMorePalPushing:
|
|
call DisableLCD
|
|
ld a, %11100100
|
|
ld [rBGP], a
|
|
ld de, VTiles1
|
|
ld b, $80
|
|
.loop
|
|
push bc
|
|
ld bc, 1 tiles
|
|
call CopyData
|
|
ld bc, 1 tiles
|
|
call ClearBytes
|
|
pop bc
|
|
dec b
|
|
jr nz, .loop
|
|
call DrawDefaultTiles
|
|
ld a, $e3
|
|
ld [rLCDC], a
|
|
ld hl, PalPacket_9d36
|
|
call PushSGBPals
|
|
xor a
|
|
ld [rBGP], a
|
|
ret
|
|
|
|
CopyData: ; 0x9a52
|
|
; copy bc bytes of data from hl to de
|
|
.loop
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec bc
|
|
ld a, c
|
|
or b
|
|
jr nz, .loop
|
|
ret
|
|
; 0x9a5b
|
|
|
|
ClearBytes: ; 0x9a5b
|
|
; clear bc bytes of data starting from de
|
|
.loop
|
|
xor a
|
|
ld [de], a
|
|
inc de
|
|
dec bc
|
|
ld a, c
|
|
or b
|
|
jr nz, .loop
|
|
ret
|
|
; 0x9a64
|
|
|
|
DrawDefaultTiles: ; 0x9a64
|
|
; Draw 240 tiles (2/3 of the screen) from tiles in VRAM
|
|
hlbgcoord 0, 0 ; BG Map 0
|
|
ld de, BG_MAP_WIDTH - SCREEN_WIDTH
|
|
ld a, $80 ; starting tile
|
|
ld c, 12 + 1
|
|
.line
|
|
ld b, 20
|
|
.tile
|
|
ld [hli], a
|
|
inc a
|
|
dec b
|
|
jr nz, .tile
|
|
; next line
|
|
add hl, de
|
|
dec c
|
|
jr nz, .line
|
|
ret
|
|
; 0x9a7a
|
|
|
|
SGBDelayCycles:
|
|
ld de, 7000
|
|
.wait
|
|
nop
|
|
nop
|
|
nop
|
|
dec de
|
|
ld a, d
|
|
or e
|
|
jr nz, .wait
|
|
ret
|
|
|
|
INCLUDE "data/palettes/blk_packets.asm"
|
|
|
|
INCLUDE "data/palettes/pal_packets.asm"
|
|
|
|
PredefPals:
|
|
INCLUDE "data/palettes/predef.pal"
|
|
|
|
INCLUDE "data/sgb_border_map.asm"
|
|
|
|
SGBBorderPalettes:
|
|
INCLUDE "data/palettes/sgb_border.pal"
|
|
|
|
SGBBorder:
|
|
INCBIN "gfx/sgb/sgb_border.2bpp"
|
|
|
|
HPBarPals:
|
|
INCLUDE "data/palettes/hp_bar.pal"
|
|
|
|
ExpBarPalette:
|
|
INCLUDE "data/palettes/exp_bar.pal"
|
|
|
|
INCLUDE "data/pokemon/palettes.asm"
|
|
|
|
INCLUDE "data/trainers/palettes.asm"
|
|
|
|
LoadMapPals:
|
|
farcall LoadSpecialMapPalette
|
|
jr c, .got_pals
|
|
|
|
; Which palette group is based on whether we're outside or inside
|
|
ld a, [wEnvironment]
|
|
and 7
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, EnvironmentColorsPointers
|
|
add hl, de
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
; Futher refine by time of day
|
|
ld a, [TimeOfDayPal]
|
|
and 3
|
|
add a
|
|
add a
|
|
add a
|
|
ld e, a
|
|
ld d, 0
|
|
add hl, de
|
|
ld e, l
|
|
ld d, h
|
|
; Switch to palettes WRAM bank
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, $5
|
|
ld [rSVBK], a
|
|
ld hl, UnknBGPals
|
|
ld b, 8
|
|
.outer_loop
|
|
ld a, [de] ; lookup index for TilesetBGPalette
|
|
push de
|
|
push hl
|
|
ld l, a
|
|
ld h, 0
|
|
add hl, hl
|
|
add hl, hl
|
|
add hl, hl
|
|
ld de, TilesetBGPalette
|
|
add hl, de
|
|
ld e, l
|
|
ld d, h
|
|
pop hl
|
|
ld c, 1 palettes
|
|
.inner_loop
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .inner_loop
|
|
pop de
|
|
inc de
|
|
dec b
|
|
jr nz, .outer_loop
|
|
pop af
|
|
ld [rSVBK], a
|
|
|
|
.got_pals
|
|
ld a, [TimeOfDayPal]
|
|
and 3
|
|
ld bc, 8 palettes
|
|
ld hl, MapObjectPals
|
|
call AddNTimes
|
|
ld de, UnknOBPals
|
|
ld bc, 8 palettes
|
|
ld a, BANK(UnknOBPals)
|
|
call FarCopyWRAM
|
|
|
|
ld a, [wEnvironment]
|
|
cp TOWN
|
|
jr z, .outside
|
|
cp ROUTE
|
|
ret nz
|
|
.outside
|
|
ld a, [MapGroup]
|
|
ld l, a
|
|
ld h, 0
|
|
add hl, hl
|
|
add hl, hl
|
|
add hl, hl
|
|
ld de, RoofPals
|
|
add hl, de
|
|
ld a, [TimeOfDayPal]
|
|
and 3
|
|
cp NITE_F
|
|
jr c, .morn_day
|
|
rept 4
|
|
inc hl
|
|
endr
|
|
.morn_day
|
|
ld de, UnknBGPals palette PAL_BG_ROOF + 2
|
|
ld bc, 4
|
|
ld a, $5
|
|
call FarCopyWRAM
|
|
ret
|
|
|
|
INCLUDE "data/maps/environment_colors.asm"
|
|
|
|
Palette_b309: ; b309 mobile
|
|
RGB 31, 31, 31
|
|
RGB 31, 19, 24
|
|
RGB 30, 10, 06
|
|
RGB 00, 00, 00
|
|
|
|
Palette_b311: ; b311 not mobile
|
|
RGB 31, 31, 31
|
|
RGB 17, 19, 31
|
|
RGB 14, 16, 31
|
|
RGB 00, 00, 00
|
|
|
|
TilesetBGPalette:
|
|
INCLUDE "data/palettes/overworld/tileset_bg.pal"
|
|
|
|
MapObjectPals::
|
|
INCLUDE "data/palettes/overworld/map_objects.pal"
|
|
|
|
RoofPals:
|
|
INCLUDE "data/palettes/overworld/roofs.pal"
|
|
|
|
DiplomaPalettes:
|
|
INCLUDE "data/palettes/diploma.pal"
|
|
|
|
PartyMenuOBPals:
|
|
INCLUDE "data/palettes/party_menu.pal"
|
|
|
|
Palettes_b6f1:
|
|
INCLUDE "data/palettes/unknown/b6f1.pal"
|
|
|
|
Palettes_b719:
|
|
INCLUDE "data/palettes/unknown/b719.pal"
|
|
|
|
MalePokegearPals:
|
|
INCLUDE "data/palettes/pokegear.pal"
|
|
|
|
FemalePokegearPals:
|
|
INCLUDE "data/palettes/pokegear_f.pal"
|
|
|
|
Palettes_b789:
|
|
INCLUDE "data/palettes/unknown/b789.pal"
|
|
|
|
SlotMachinePals:
|
|
INCLUDE "data/palettes/slot_machine.pal"
|