Organize the engine/ directory
This is an informed attempt at reorganizing the engine/ directory by creating categorized subdirectories, in order to make it easier to navigate and find things. The directories created are as follows: * engine/game: Contains all "minigames", things like the unown puzzle and slot machine. * engine/gfx: Contains all handling of graphics. From loading palettes to playing animations. * engine/link: Contains all multiplayer functionality. * engine/menu: Contains all generic/misc. menus and menu code. Other, more specialized menus are in their own subdirectories (pokedex, pokegear, party menu, etc). * engine/overworld: Contains all handling of the overworld. From loading and connecting maps to wild encounters and the scripting engine. * engine/pokegear: In the same vein as engine/pokedex, except it could use some more splitting up. * engine/pokemon: Contains everything related to manipulating pokemon data. From the pokemon storage system to evolution and mail. * engine/printer: Contains everything related to printing things as well as the printer communication. * engine/title: Contains intro sequences, title screens and credits.
This commit is contained in:
491
engine/gfx/load_pics.asm
Executable file
491
engine/gfx/load_pics.asm
Executable file
@@ -0,0 +1,491 @@
|
||||
GetUnownLetter: ; 51040
|
||||
; 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
|
||||
ld [hDividend + 3], a
|
||||
xor a
|
||||
ld [hDividend], a
|
||||
ld [hDividend + 1], a
|
||||
ld [hDividend + 2], a
|
||||
ld a, $ff / NUM_UNOWN + 1
|
||||
ld [hDivisor], a
|
||||
ld b, 4
|
||||
call Divide
|
||||
|
||||
; Increment to get 1-26
|
||||
ld a, [hQuotient + 2]
|
||||
inc a
|
||||
ld [wUnownLetter], a
|
||||
ret
|
||||
|
||||
GetMonFrontpic: ; 51077
|
||||
ld a, [wCurPartySpecies]
|
||||
ld [wCurSpecies], a
|
||||
call IsAPokemon
|
||||
ret c
|
||||
ld a, [rSVBK]
|
||||
push af
|
||||
call _GetFrontpic
|
||||
pop af
|
||||
ld [rSVBK], a
|
||||
ret
|
||||
|
||||
GetAnimatedFrontpic: ; 5108b
|
||||
ld a, [wCurPartySpecies]
|
||||
ld [wCurSpecies], a
|
||||
call IsAPokemon
|
||||
ret c
|
||||
ld a, [rSVBK]
|
||||
push af
|
||||
xor a
|
||||
ld [hBGMapMode], a
|
||||
call _GetFrontpic
|
||||
call GetAnimatedEnemyFrontpic
|
||||
pop af
|
||||
ld [rSVBK], a
|
||||
ret
|
||||
|
||||
_GetFrontpic: ; 510a5
|
||||
push de
|
||||
call GetBaseData
|
||||
ld a, [wBasePicSize]
|
||||
and $f
|
||||
ld b, a
|
||||
push bc
|
||||
call GetFrontpicPointer
|
||||
ld a, BANK(wDecompressEnemyFrontpic)
|
||||
ld [rSVBK], a
|
||||
ld a, b
|
||||
ld de, wDecompressEnemyFrontpic
|
||||
call FarDecompress
|
||||
pop bc
|
||||
ld hl, wDecompressScratch
|
||||
ld de, wDecompressEnemyFrontpic
|
||||
call PadFrontpic
|
||||
pop hl
|
||||
push hl
|
||||
ld de, wDecompressScratch
|
||||
ld c, 7 * 7
|
||||
ld a, [hROMBank]
|
||||
ld b, a
|
||||
call Get2bpp
|
||||
pop hl
|
||||
ret
|
||||
|
||||
GetFrontpicPointer: ; 510d7
|
||||
ld a, [wCurPartySpecies]
|
||||
cp UNOWN
|
||||
jr z, .unown
|
||||
ld a, [wCurPartySpecies]
|
||||
ld d, BANK(PokemonPicPointers)
|
||||
jr .ok
|
||||
|
||||
.unown
|
||||
ld a, [wUnownLetter]
|
||||
ld d, BANK(UnownPicPointers)
|
||||
|
||||
.ok
|
||||
ld hl, PokemonPicPointers ; UnownPicPointers
|
||||
dec a
|
||||
ld bc, 6
|
||||
call AddNTimes
|
||||
ld a, d
|
||||
call GetFarByte
|
||||
call FixPicBank
|
||||
push af
|
||||
inc hl
|
||||
ld a, d
|
||||
call GetFarHalfword
|
||||
pop bc
|
||||
ret
|
||||
|
||||
GetAnimatedEnemyFrontpic: ; 51103
|
||||
ld a, BANK(vTiles3)
|
||||
ld [rVBK], a
|
||||
push hl
|
||||
ld de, wDecompressScratch
|
||||
ld c, 7 * 7
|
||||
ld 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, wDecompressEnemyFrontpic + 5 * 5 tiles
|
||||
ld c, 5 * 5
|
||||
cp 5
|
||||
jr z, .got_dims
|
||||
ld de, wDecompressEnemyFrontpic + 6 * 6 tiles
|
||||
ld c, 6 * 6
|
||||
cp 6
|
||||
jr z, .got_dims
|
||||
ld de, wDecompressEnemyFrontpic + 7 * 7 tiles
|
||||
ld c, 7 * 7
|
||||
.got_dims
|
||||
|
||||
push hl
|
||||
push bc
|
||||
call LoadFrontpicTiles
|
||||
pop bc
|
||||
pop hl
|
||||
ld de, wDecompressScratch
|
||||
ld a, [hROMBank]
|
||||
ld b, a
|
||||
call Get2bpp
|
||||
xor a
|
||||
ld [rVBK], a
|
||||
ret
|
||||
|
||||
LoadFrontpicTiles: ; 5114f
|
||||
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
|
||||
.loop
|
||||
push bc
|
||||
ld c, 0
|
||||
call LoadOrientedFrontpic
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
GetMonBackpic: ; 5116c
|
||||
ld a, [wCurPartySpecies]
|
||||
call IsAPokemon
|
||||
ret c
|
||||
|
||||
ld a, [wCurPartySpecies]
|
||||
ld b, a
|
||||
ld a, [wUnownLetter]
|
||||
ld c, a
|
||||
ld a, [rSVBK]
|
||||
push af
|
||||
ld a, BANK(wDecompressScratch)
|
||||
ld [rSVBK], a
|
||||
push de
|
||||
|
||||
; These are assumed to be at the same address in their respective banks.
|
||||
ld hl, PokemonPicPointers ; UnownPicPointers
|
||||
ld a, b
|
||||
ld d, BANK(PokemonPicPointers)
|
||||
cp UNOWN
|
||||
jr nz, .ok
|
||||
ld a, c
|
||||
ld d, BANK(UnownPicPointers)
|
||||
.ok
|
||||
dec a
|
||||
ld bc, 6
|
||||
call AddNTimes
|
||||
ld bc, 3
|
||||
add hl, bc
|
||||
ld a, d
|
||||
call GetFarByte
|
||||
call FixPicBank
|
||||
push af
|
||||
inc hl
|
||||
ld a, d
|
||||
call GetFarHalfword
|
||||
ld de, wDecompressScratch
|
||||
pop af
|
||||
call FarDecompress
|
||||
ld hl, wDecompressScratch
|
||||
ld c, 6 * 6
|
||||
call FixBackpicAlignment
|
||||
pop hl
|
||||
ld de, wDecompressScratch
|
||||
ld a, [hROMBank]
|
||||
ld b, a
|
||||
call Get2bpp
|
||||
pop af
|
||||
ld [rSVBK], a
|
||||
ret
|
||||
|
||||
FixPicBank: ; 511c5
|
||||
; This is a thing for some reason.
|
||||
|
||||
PICS_FIX EQU $36
|
||||
GLOBAL PICS_FIX
|
||||
|
||||
push hl
|
||||
push bc
|
||||
sub BANK(Pics_1) - PICS_FIX
|
||||
ld c, a
|
||||
ld b, 0
|
||||
ld hl, .PicsBanks
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
.PicsBanks: ; 511d4
|
||||
db BANK(Pics_1) + 0
|
||||
db BANK(Pics_1) + 1
|
||||
db BANK(Pics_1) + 2
|
||||
db BANK(Pics_1) + 3
|
||||
db BANK(Pics_1) + 4
|
||||
db BANK(Pics_1) + 5
|
||||
db BANK(Pics_1) + 6
|
||||
db BANK(Pics_1) + 7
|
||||
db BANK(Pics_1) + 8
|
||||
db BANK(Pics_1) + 9
|
||||
db BANK(Pics_1) + 10
|
||||
db BANK(Pics_1) + 11
|
||||
db BANK(Pics_1) + 12
|
||||
db BANK(Pics_1) + 13
|
||||
db BANK(Pics_1) + 14
|
||||
db BANK(Pics_1) + 15
|
||||
db BANK(Pics_1) + 16
|
||||
db BANK(Pics_1) + 17
|
||||
db BANK(Pics_1) + 18
|
||||
db BANK(Pics_1) + 19
|
||||
db BANK(Pics_1) + 20
|
||||
db BANK(Pics_1) + 21
|
||||
db BANK(Pics_1) + 22
|
||||
db BANK(Pics_1) + 23
|
||||
|
||||
Function511ec: ; 511ec
|
||||
ld a, c
|
||||
push de
|
||||
ld hl, PokemonPicPointers
|
||||
dec a
|
||||
ld bc, 6
|
||||
call AddNTimes
|
||||
ld a, BANK(PokemonPicPointers)
|
||||
call GetFarByte
|
||||
call FixPicBank
|
||||
push af
|
||||
inc hl
|
||||
ld a, BANK(PokemonPicPointers)
|
||||
call GetFarHalfword
|
||||
pop af
|
||||
pop de
|
||||
call FarDecompress
|
||||
ret
|
||||
|
||||
GetTrainerPic: ; 5120d
|
||||
ld a, [wTrainerClass]
|
||||
and a
|
||||
ret z
|
||||
cp NUM_TRAINER_CLASSES
|
||||
ret nc
|
||||
call WaitBGMap
|
||||
xor a
|
||||
ld [hBGMapMode], a
|
||||
ld hl, TrainerPicPointers
|
||||
ld a, [wTrainerClass]
|
||||
dec a
|
||||
ld bc, 3
|
||||
call AddNTimes
|
||||
ld a, [rSVBK]
|
||||
push af
|
||||
ld a, BANK(wDecompressScratch)
|
||||
ld [rSVBK], a
|
||||
push de
|
||||
ld a, BANK(TrainerPicPointers)
|
||||
call GetFarByte
|
||||
call FixPicBank
|
||||
push af
|
||||
inc hl
|
||||
ld a, BANK(TrainerPicPointers)
|
||||
call GetFarHalfword
|
||||
pop af
|
||||
ld de, wDecompressScratch
|
||||
call FarDecompress
|
||||
pop hl
|
||||
ld de, wDecompressScratch
|
||||
ld c, 7 * 7
|
||||
ld a, [hROMBank]
|
||||
ld b, a
|
||||
call Get2bpp
|
||||
pop af
|
||||
ld [rSVBK], a
|
||||
call WaitBGMap
|
||||
ld a, $1
|
||||
ld [hBGMapMode], a
|
||||
ret
|
||||
|
||||
DecompressGet2bpp: ; 5125d
|
||||
; Decompress lz data from b:hl to scratch space at 6:d000, then copy it to address de.
|
||||
|
||||
ld a, [rSVBK]
|
||||
push af
|
||||
ld a, BANK(wDecompressScratch)
|
||||
ld [rSVBK], a
|
||||
|
||||
push de
|
||||
push bc
|
||||
ld a, b
|
||||
ld de, wDecompressScratch
|
||||
call FarDecompress
|
||||
pop bc
|
||||
ld de, wDecompressScratch
|
||||
pop hl
|
||||
ld a, [hROMBank]
|
||||
ld b, a
|
||||
call Get2bpp
|
||||
|
||||
pop af
|
||||
ld [rSVBK], a
|
||||
ret
|
||||
|
||||
FixBackpicAlignment: ; 5127c
|
||||
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: ; 512ab
|
||||
; pads frontpic to fill 7x7 box
|
||||
ld a, b
|
||||
cp 6
|
||||
jr z, .six
|
||||
cp 5
|
||||
jr z, .five
|
||||
|
||||
.seven_loop
|
||||
ld c, $70
|
||||
call LoadOrientedFrontpic
|
||||
dec b
|
||||
jr nz, .seven_loop
|
||||
ret
|
||||
|
||||
.six
|
||||
ld c, $70
|
||||
xor a
|
||||
call .Fill
|
||||
.six_loop
|
||||
ld c, $10
|
||||
xor a
|
||||
call .Fill
|
||||
ld c, $60
|
||||
call LoadOrientedFrontpic
|
||||
dec b
|
||||
jr nz, .six_loop
|
||||
ret
|
||||
|
||||
.five
|
||||
ld c, $70
|
||||
xor a
|
||||
call .Fill
|
||||
.five_loop
|
||||
ld c, $20
|
||||
xor a
|
||||
call .Fill
|
||||
ld c, $50
|
||||
call LoadOrientedFrontpic
|
||||
dec b
|
||||
jr nz, .five_loop
|
||||
ld c, $70
|
||||
xor a
|
||||
call .Fill
|
||||
ret
|
||||
|
||||
.Fill:
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .Fill
|
||||
ret
|
||||
|
||||
LoadOrientedFrontpic: ; 512f2
|
||||
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
|
Reference in New Issue
Block a user