diff options
author | Daniel Harding <33dannye@gmail.com> | 2021-11-15 13:31:15 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-15 13:31:15 -0600 |
commit | f516a91f5fa02a741631c77b9097598f466d1328 (patch) | |
tree | bac2ee5e3fad02983b061580f5c085baecb5439a /src/engine/scenes.asm | |
parent | 15e986d374fdd11ed0f412fbdc9b858d4c4b9f50 (diff) | |
parent | 1fd16cd27fcd4f432bfc09fc5b7a262798b72430 (diff) |
Some more bank splitting
Diffstat (limited to 'src/engine/scenes.asm')
-rw-r--r-- | src/engine/scenes.asm | 528 |
1 files changed, 528 insertions, 0 deletions
diff --git a/src/engine/scenes.asm b/src/engine/scenes.asm new file mode 100644 index 0000000..f7c7b42 --- /dev/null +++ b/src/engine/scenes.asm @@ -0,0 +1,528 @@ +; input: +; a = scene ID (SCENE_* constant) +; b = base X position of scene in tiles +; c = base Y position of scene in tiles +_LoadScene: + push hl + push bc + push de + ld e, a + ld a, [wCurTilemap] + push af + ld a, [wd291] + push af + ld a, e + push bc + push af + ld a, b + add a + add a + add a + add $08 + ld [wSceneBaseX], a + ld a, c + add a + add a + add a + add $10 + ld [wSceneBaseY], a + pop af + add a + ld c, a + ld b, 0 + ld hl, ScenePointers + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hli] + ld [wSceneSGBPacketPtr], a + ld a, [hli] + ld [wSceneSGBPacketPtr + 1], a + ld a, [hli] + ld [wSceneSGBRoutinePtr], a + ld a, [hli] + ld [wSceneSGBRoutinePtr + 1], a + call LoadScene_LoadCompressedSGBPacket + ld a, %11100100 + ld [wBGP], a + ld a, [wConsole] + cp CONSOLE_CGB + ld a, [hli] + jr nz, .not_cgb_1 + ld a, [hl] +.not_cgb_1 + inc hl + push af ; palette + xor a + ld [wd4ca], a + ld a, [hli] + ld [wd4cb], a ; palette offset + ld [wd291], a ; palette offset + pop af ; palette + farcall SetBGPAndLoadedPal ; load palette + ld a, [wConsole] + cp CONSOLE_CGB + ld a, [hli] + jr nz, .not_cgb_2 + ld a, [hl] +.not_cgb_2 + inc hl + ld [wCurTilemap], a + pop bc + push bc + farcall LoadTilemap_ToVRAM + pop bc ; base x,y + call LoadScene_LoadSGBPacket + ld a, [hli] + ld [wd4ca], a ; tile offset + ld a, [hli] + ld [wd4cb], a ; vram0 or vram1 + farcall LoadTilesetGfx +.next_sprite + ld a, [hli] + or a + jr z, .done ; no sprite + ld [wSceneSprite], a + ld a, [wConsole] + cp CONSOLE_CGB + ld a, [hli] + jr nz, .not_cgb_3 + ld a, [hl] +.not_cgb_3 + inc hl + push af ; sprite palette + xor a + ld [wd4ca], a + ld a, [hli] + ld [wd4cb], a ; palette offset + pop af ; sprite palette + farcall LoadPaletteData +.next_animation + ld a, [hli] + or a + jr z, .next_sprite + dec hl + ld a, [wConsole] + cp CONSOLE_CGB + ld a, [hli] + jr nz, .not_cgb_4 + ld a, [hl] +.not_cgb_4 + inc hl + ld [wSceneSpriteAnimation], a + ld a, [wSceneSprite] + farcall CreateSpriteAndAnimBufferEntry + ld a, [wWhichSprite] + ld [wSceneSpriteIndex], a + push hl + ld c, SPRITE_ANIM_COORD_X + call GetSpriteAnimBufferProperty + ld e, l + ld d, h + pop hl + ld a, [wSceneBaseX] + add [hl] + ld [de], a + inc hl + inc de + ld a, [wSceneBaseY] + add [hl] + ld [de], a + inc hl + ld a, [wSceneSpriteAnimation] + cp $ff + jr z, .no_animation + farcall StartSpriteAnimation +.no_animation + jr .next_animation +.done + pop af + ld [wd291], a + pop af + ld [wCurTilemap], a + pop de + pop bc + pop hl + ret + +INCLUDE "data/scenes.asm" + +LoadScene_LoadCompressedSGBPacket: + ld a, [wConsole] + cp CONSOLE_SGB + ret nz + push hl + ld hl, wSceneSGBPacketPtr + ld a, [hli] + ld h, [hl] + ld l, a + or h + jr z, .skip + farcall Func_703cb +.skip + pop hl + ret + +LoadScene_LoadSGBPacket: + ld a, [wConsole] + cp CONSOLE_SGB + ret nz + push hl + push bc + push de + ld hl, wSceneSGBPacketPtr + ld a, [hli] + or [hl] + jr z, .done + ld hl, wSceneSGBRoutinePtr + 1 + ld a, [hld] + or [hl] + jr z, .use_default + ld a, [hli] + ld h, [hl] + ld l, a + call CallHL2 + jr .done +.use_default + ld l, %001010 ; outside, border, inside palette numbers + ld a, [wBGMapWidth] + ld d, a + ld a, [wBGMapHeight] + ld e, a + farcall Func_70498 +.done + pop de + pop bc + pop hl + ret + +LoadScene_SetGameBoyPrinterAttrBlk: + push hl + push bc + push de + ld hl, SGBPacket_GameBoyPrinter + call SendSGB + pop de + pop bc + pop hl + ret + +SGBPacket_GameBoyPrinter: + sgb ATTR_BLK, 1 + db 1 ; number of data sets + db ATTR_BLK_CTRL_OUTSIDE | ATTR_BLK_CTRL_LINE | ATTR_BLK_CTRL_INSIDE + db %101111 ; Color Palette Designation + db 11 ; x1 + db 0 ; y1 + db 16 ; x2 + db 9 ; y2 + ds 6 ; data set 2 + ds 2 ; data set 3 + +LoadScene_SetCardPopAttrBlk: + push hl + push bc + push de + ld hl, SGBPacket_CardPop + call SendSGB + pop de + pop bc + pop hl + ret + +SGBPacket_CardPop: + sgb ATTR_BLK, 1 + db 1 ; number of data sets + db ATTR_BLK_CTRL_OUTSIDE | ATTR_BLK_CTRL_LINE | ATTR_BLK_CTRL_INSIDE + db %101111 ; Color Palette Designation + db 0 ; x1 + db 0 ; y1 + db 19 ; x2 + db 4 ; y3 + ds 6 ; data set 2 + ds 2 ; data set 3 + +Func_12fc6: + ld a, [wd291] + push af + push de + push bc + lb de, $d0, $07 + ld a, [wCurTilemap] + cp TILEMAP_PLAYER + jr z, .asm_12fd9 + lb de, $a0, $06 +.asm_12fd9 + ld a, e + ld [wd291], a + farcall LoadTilemap_ToVRAM + ld a, [wd61e] + add a + add a + ld c, a + ld b, $00 + ld hl, PortraitGfxData + add hl, bc + ld a, [hli] + push hl + ld [wCurTileset], a + ld a, d + ld [wd4ca], a + xor a + ld [wd4cb], a + farcall LoadTilesetGfx + pop hl + xor a + ld [wd4ca], a + ld a, [wd291] + ld [wd4cb], a + ld a, [hli] + push hl + farcall SetBGPAndLoadedPal + pop hl + ld a, [hli] + ld h, [hl] + ld l, a + pop bc + farcall SendSGBPortraitPalettes + pop de + pop af + ld [wd291], a + ret + +PortraitGfxData: + db TILESET_PLAYER, PALETTE_119 + dw SGBData_PlayerPortraitPals + + db TILESET_PLAYER, PALETTE_119 + dw SGBData_PlayerPortraitPals + + db TILESET_RONALD, PALETTE_121 + dw SGBData_RonaldPortraitPals + + db TILESET_SAM, PALETTE_122 + dw SGBData_SamPortraitPals + + db TILESET_IMAKUNI, PALETTE_123 + dw SGBData_ImakuniPortraitPals + + db TILESET_NIKKI, PALETTE_124 + dw SGBData_NikkiPortraitPals + + db TILESET_RICK, PALETTE_125 + dw SGBData_RickPortraitPals + + db TILESET_KEN, PALETTE_126 + dw SGBData_KenPortraitPals + + db TILESET_AMY, PALETTE_127 + dw SGBData_AmyPortraitPals + + db TILESET_ISAAC, PALETTE_128 + dw SGBData_IsaacPortraitPals + + db TILESET_MITCH, PALETTE_129 + dw SGBData_MitchPortraitPals + + db TILESET_GENE, PALETTE_130 + dw SGBData_GenePortraitPals + + db TILESET_MURRAY, PALETTE_131 + dw SGBData_MurrayPortraitPals + + db TILESET_COURTNEY, PALETTE_132 + dw SGBData_CourtneyPortraitPals + + db TILESET_STEVE, PALETTE_133 + dw SGBData_StevePortraitPals + + db TILESET_JACK, PALETTE_134 + dw SGBData_JackPortraitPals + + db TILESET_ROD, PALETTE_135 + dw SGBData_RodPortraitPals + + db TILESET_JOSEPH, PALETTE_136 + dw SGBData_JosephPortraitPals + + db TILESET_DAVID, PALETTE_137 + dw SGBData_DavidPortraitPals + + db TILESET_ERIK, PALETTE_138 + dw SGBData_ErikPortraitPals + + db TILESET_JOHN, PALETTE_139 + dw SGBData_JohnPortraitPals + + db TILESET_ADAM, PALETTE_140 + dw SGBData_AdamPortraitPals + + db TILESET_JONATHAN, PALETTE_141 + dw SGBData_JonathanPortraitPals + + db TILESET_JOSHUA, PALETTE_142 + dw SGBData_JoshuaPortraitPals + + db TILESET_NICHOLAS, PALETTE_143 + dw SGBData_NicholasPortraitPals + + db TILESET_BRANDON, PALETTE_144 + dw SGBData_BrandonPortraitPals + + db TILESET_MATTHEW, PALETTE_145 + dw SGBData_MatthewPortraitPals + + db TILESET_RYAN, PALETTE_146 + dw SGBData_RyanPortraitPals + + db TILESET_ANDREW, PALETTE_147 + dw SGBData_AndrewPortraitPals + + db TILESET_CHRIS, PALETTE_148 + dw SGBData_ChrisPortraitPals + + db TILESET_MICHAEL, PALETTE_149 + dw SGBData_MichaelPortraitPals + + db TILESET_DANIEL, PALETTE_150 + dw SGBData_DanielPortraitPals + + db TILESET_ROBERT, PALETTE_151 + dw SGBData_RobertPortraitPals + + db TILESET_BRITTANY, PALETTE_152 + dw SGBData_BrittanyPortraitPals + + db TILESET_KRISTIN, PALETTE_153 + dw SGBData_KristinPortraitPals + + db TILESET_HEATHER, PALETTE_154 + dw SGBData_HeatherPortraitPals + + db TILESET_SARA, PALETTE_155 + dw SGBData_SaraPortraitPals + + db TILESET_AMANDA, PALETTE_156 + dw SGBData_AmandaPortraitPals + + db TILESET_JENNIFER, PALETTE_157 + dw SGBData_JenniferPortraitPals + + db TILESET_JESSICA, PALETTE_158 + dw SGBData_JessicaPortraitPals + + db TILESET_STEPHANIE, PALETTE_159 + dw SGBData_StephaniePortraitPals + + db TILESET_AARON, PALETTE_160 + dw SGBData_AaronPortraitPals + + db TILESET_PLAYER, PALETTE_120 + dw SGBData_LinkOpponentPortraitPals + +LoadBoosterGfx: + push hl + push bc + push de + ld e, a + ld a, [wCurTilemap] + push af + push bc + ld a, e + call _LoadScene + call FlushAllPalettes + call SetBoosterLogoOAM + pop bc + pop af + ld [wCurTilemap], a + pop de + pop bc + pop hl + ret + +SetBoosterLogoOAM: + ld a, [wConsole] + cp CONSOLE_CGB + ret nz + push hl + push bc + push de + push bc + xor a + ld [wd4cb], a + ld [wd4ca], a + ld a, SPRITE_BOOSTER_PACK_OAM + farcall Func_8025b + pop bc + call ZeroObjectPositions + ld hl, BoosterLogoOAM + ld c, [hl] + inc hl +.oam_loop + push bc + ldh a, [hSCX] + ld d, a + ldh a, [hSCY] + ld e, a + ld a, [wSceneBaseY] + sub e + add [hl] + ld e, a + inc hl + ld a, [wSceneBaseX] + sub d + add [hl] + ld d, a + inc hl + ld a, [wd61f] + add [hl] + ld c, a + inc hl + ld b, [hl] + inc hl + call SetOneObjectAttributes + pop bc + dec c + jr nz, .oam_loop + ld hl, wVBlankOAMCopyToggle + inc [hl] + pop de + pop bc + pop hl + ret + +BoosterLogoOAM: + db $20 + db $00, $00, $00, $00 + db $00, $08, $01, $00 + db $00, $10, $02, $00 + db $00, $18, $03, $00 + db $00, $20, $04, $00 + db $00, $28, $05, $00 + db $00, $30, $06, $00 + db $00, $38, $07, $00 + db $08, $00, $10, $00 + db $08, $08, $11, $00 + db $08, $10, $12, $00 + db $08, $18, $13, $00 + db $08, $20, $14, $00 + db $08, $28, $15, $00 + db $08, $30, $16, $00 + db $08, $38, $17, $00 + db $10, $00, $08, $00 + db $10, $08, $09, $00 + db $10, $10, $0a, $00 + db $10, $18, $0b, $00 + db $10, $20, $0c, $00 + db $10, $28, $0d, $00 + db $10, $30, $0e, $00 + db $10, $38, $0f, $00 + db $18, $00, $18, $00 + db $18, $08, $19, $00 + db $18, $10, $1a, $00 + db $18, $18, $1b, $00 + db $18, $20, $1c, $00 + db $18, $28, $1d, $00 + db $18, $30, $1e, $00 + db $18, $38, $1f, $00 |