Decompile getting_fully_powered_suit.c cutscene

This commit is contained in:
YohannDR 2023-02-06 15:58:39 +01:00
parent 55699eda45
commit 623f9e14b3
16 changed files with 780 additions and 999 deletions

View File

@ -21340,8 +21340,8 @@ unk_61f0c: @ 0x08061f0c
lbl_08061f20: .4byte 0x08754bc4
lbl_08061f24: .4byte 0x030013ae
thumb_func_start sub_08061f28
sub_08061f28: @ 0x08061f28
thumb_func_start unk_61f28
unk_61f28: @ 0x08061f28
ldr r0, lbl_08061f3c @ =0x08754bc4
ldr r2, [r0]
movs r0, #0

File diff suppressed because it is too large Load Diff

View File

@ -740,6 +740,16 @@ cutscenes/MechaSeesSamus/EyeCover.gfx.lz;2671;0x3c3334;4
cutscenes/MechaSeesSamus/Palette.pal;160;0x3c5cf0;2
cutscenes/MechaSeesSamus/Metal.tt;368;0x3c5e30;4
# Getting fully powered suit
cutscenes/GettingFullyPoweredSuit/Palette.pal;304;0x3c66a0;2
cutscenes/GettingFullyPoweredSuit/Samus.gfx.lz;2608;0x3c6900;4
cutscenes/GettingFullyPoweredSuit/RingSparkles.gfx.lz;646;0x3c91c0;4
cutscenes/GettingFullyPoweredSuit/Samus.tt;387;0x3c9bd8;4
cutscenes/GettingFullyPoweredSuit/Background.gfx.lz;15072;0x3ca1e4;1
cutscenes/GettingFullyPoweredSuit/Background.tt;734;0x3cd814;4
cutscenes/GettingFullyPoweredSuit/RingPalette.pal;112;0x3ce38c;2
# Blobs
Blob_8cad0_8cee2.bin;1042;0x8cad0;1
@ -752,10 +762,10 @@ Blob_34099c_345868.bin;20172;0x34099c;1
Blob_345d00_360130.bin;107568;0x345d00;1
Blob_3602e8_36bdac.bin;47812;0x3602e8;1
Blob_375cc4_386f60.bin;70300;0x375cc4;1
Blob_3c63f0_45f45c.bin;626796;0x3c63f0;1
Blob_3ce46c_45f45c.bin;593904;0x3c63f0;1
Blob_479400_754bb4.bin;2996148;0x479400;1
Blob_754bd0_75e6a8.bin;39640;0x754bd0;1
Blob_75fae4_75fd88.bin;676;0x75fae4;1
Blob_75fdbc_75fde0.bin;36;0x75fdbc;1
Blob_75fdfc_75fe5c.bin;96;0x75fdfc;1
Blob_76002c_7f7734.bin;620296;0x76002c;1
Blob_760044_7f7734.bin;620272;0x760044c;1

View File

@ -0,0 +1,22 @@
#ifndef GETTING_FULLY_POWERED_SUIT_CUTSCENE
#define GETTING_FULLY_POWERED_SUIT_CUTSCENE
#include "types.h"
#include "structs/cutscene.h"
#define GETTING_FULLY_POWERED_SUIT_OAM_ID_SPARKLE_GOING_UP 1
#define GETTING_FULLY_POWERED_SUIT_OAM_ID_SPARKLE_AROUND_RING1 2
#define GETTING_FULLY_POWERED_SUIT_OAM_ID_SPARKLE_AROUND_RING2 3
#define GETTING_FULLY_POWERED_SUIT_OAM_ID_RING_BOTTOM 4
#define GETTING_FULLY_POWERED_SUIT_OAM_ID_RING_TOP 5
u8 GettingFullyPoweredSuitAnimation(void);
void GettingFullyPoweredSuitUpdateRingPalette(struct CutscenePaletteData* pPalette);
void GettingFullyPoweredSuitUpdateRing(struct CutsceneOamData* pOam);
void GettingFullyPoweredSuitUpdateSparkleAroundRing(struct CutsceneOamData* pOam, u8 sparkleId);
void GettingFullyPoweredSuitUpdateSparkleGoingUp(struct CutsceneOamData* pOam, u8 sparkleId);
u8 GettingFullyPoweredSuitInit(void);
u8 GettingFullyPoweredSuitSubroutine(void);
void GettingFullyPoweredSuitProcessOAM(void);
#endif /* GETTING_FULLY_POWERED_SUIT_CUTSCENE */

View File

@ -0,0 +1,23 @@
#ifndef GETTING_FULLY_POWERED_SUIT_DATA_H
#define GETTING_FULLY_POWERED_SUIT_DATA_H
#include "structs/cutscene.h"
extern const struct CutscenePageData sGettingFullyPoweredSuitPageData[3];
extern const struct CutscenePaletteData sGettingFullyPoweredSuitPaletteData;
extern const u8 sGettingFullyPoweredSuitRingPaletteRows[7];
extern const u16 sGettingFullyPoweredSuitRingSparklesSpawnPositions[6][2];
extern const u16 sGettingFullyPoweredSuit_3c642c[6];
extern const struct OamArray sGettingFullyPoweredSuitCutsceneOAM[6];
extern const u16 sGettingFullyPoweredSuitPAL[19 * 16];
extern const u32 sGettingFullyPoweredSuitSamusGFX[2608];
extern const u32 sGettingFullyPoweredSuitRingSparklesGFX[646];
extern const u32 sGettingFullyPoweredSuitSamusTileTable[387];
extern const u8 sGettingFullyPoweredSuitBackgroundGFX[15072];
extern const u32 sGettingFullyPoweredSuitBackgroundTileTable[734];
extern const u16 sGettingFullyPoweredSuitRingPAL[7 * 16];
#endif /* GETTING_FULLY_POWERED_SUIT_DATA_H */

View File

@ -0,0 +1,9 @@
#ifndef INTERNAL_GETTING_FULLY_POWERED_SUIT_DATA_H
#define INTERNAL_GETTING_FULLY_POWERED_SUIT_DATA_H
#include "types.h"
#include "structs/cutscene.h"
extern const struct CutsceneSubroutineData sGettingFullyPoweredSuitSubroutineData[3];
#endif /* INTERNAL_GETTING_FULLY_POWERED_SUIT_DATA_H */

View File

@ -28,7 +28,7 @@
#define REG_WIN0V (REG_BASE + 0x044)
#define REG_WIN1V (REG_BASE + 0x046)
#define REG_WININ (REG_BASE + 0x048)
#define REG_WINOUT (REG_BASE + 0x048)
#define REG_WINOUT (REG_BASE + 0x04A)
#define REG_MOSAIC (REG_BASE + 0x04C)
#define REG_BLDCNT (REG_BASE + 0x050)
#define REG_BLDALPHA (REG_BASE + 0x052)

View File

@ -188,7 +188,7 @@ struct CutsceneData {
extern u8 gCutsceneToSkip;
extern i8 gCurrentCutscene;
extern i8 sOamXOffset_NonGameplay;
extern i8 sOamYOffset_NonGameplay;
extern i8 gOamXOffset_NonGameplay;
extern i8 gOamYOffset_NonGameplay;
#endif

View File

@ -254,8 +254,8 @@ SECTIONS {
. = 0x00005704; gClipdataCodePointer = .;
. = 0x00005708; gCurrentRoomScrollDataPointer = .;
. = 0x00005714; gUnk_3005714 = .;
. = 0x00005804; sOamXOffset_NonGameplay = .;
. = 0x00005805; sOamYOffset_NonGameplay = .;
. = 0x00005804; gOamXOffset_NonGameplay = .;
. = 0x00005805; gOamYOffset_NonGameplay = .;
. = 0x000058e0; src/libgcc/fp-bit-base.o(.bss);
@ -400,6 +400,7 @@ SECTIONS {
src/cutscenes/ridley_landing.o(.text);
src/cutscenes/ridley_spawn.o(.text);
src/cutscenes/mecha_sees_samus.o(.text);
src/cutscenes/getting_fully_powered_suit.o(.text);
asm/disasm_0x08065bd8.o(.text);
src/intro.o(.text);
asm/disasm_0x0808117c.o(.text);
@ -517,6 +518,7 @@ SECTIONS {
src/data/cutscenes/ridley_landing_data.o(.rodata);
src/data/cutscenes/ridley_spawn_data.o(.rodata);
src/data/cutscenes/mecha_sees_samus_data.o(.rodata);
src/data/cutscenes/getting_fully_powered_suit_data.o(.rodata);
/* 3c63f0-45f45c */
src/data/intro_data.o(.rodata);
/* 479400-754bb4 */
@ -533,6 +535,7 @@ SECTIONS {
src/data/cutscenes/internal_ridley_landing_data.o(.rodata);
src/data/cutscenes/internal_ridley_spawn_data.o(.rodata);
src/data/cutscenes/internal_mecha_sees_samus_data.o(.rodata);
src/data/cutscenes/internal_getting_fully_powered_suit_data.o(.rodata);
/* 76002c-7f7734 */
} >rom
}

View File

@ -245,7 +245,7 @@ void CutsceneInit(void)
CallbackSetVBlank(CutsceneLoadingVBlank);
BitFill(3, 0, &gNonGameplayRAM, sizeof(union NonGameplayRAM), 0x20);
sOamXOffset_NonGameplay = sOamYOffset_NonGameplay = 0;
gOamXOffset_NonGameplay = gOamYOffset_NonGameplay = 0;
gNextOamSlot = 0;
ResetFreeOAM();

View File

@ -0,0 +1,368 @@
#include "cutscenes/getting_fully_powered_suit.h"
#include "cutscenes/cutscene_utils.h"
#include "macros.h"
#include "data/shortcut_pointers.h"
#include "data/generic_data.h"
#include "data/cutscenes/getting_fully_powered_suit_data.h"
#include "data/cutscenes/internal_getting_fully_powered_suit_data.h"
#include "constants/audio.h"
#include "constants/cutscene.h"
#include "constants/game_state.h"
#include "structs/game_state.h"
#include "structs/display.h"
/**
* @brief 65bd8 | 204 | Handles the animation part (entire cutscene)
*
* @return u8 FALSE
*/
u8 GettingFullyPoweredSuitAnimation(void)
{
i32 i;
u16* bgPosition;
switch (CUTSCENE_DATA.timeInfo.subStage)
{
case 0:
CutsceneStartSpriteEffect(CUTSCENE_DATA.bldcnt, 12, 8, 1);
CUTSCENE_DATA.timeInfo.timer = 0;
CUTSCENE_DATA.timeInfo.subStage++;
break;
case 1:
if (CUTSCENE_DATA.timeInfo.timer > 20)
{
CUTSCENE_DATA.oam[6].unk_D = 2;
CUTSCENE_DATA.timeInfo.timer = 0;
CUTSCENE_DATA.timeInfo.subStage++;
}
break;
case 2:
if (CUTSCENE_DATA.oam[6].yPosition <= BLOCK_SIZE * 17)
{
CUTSCENE_DATA.timeInfo.timer = 0;
CUTSCENE_DATA.timeInfo.subStage++;
}
break;
case 3:
bgPosition = CutsceneGetBGVOFSPointer(sGettingFullyPoweredSuitPageData[0].bg);
if (*bgPosition - 4 > BLOCK_SIZE * 32)
(*bgPosition) -= 4;
else
{
*bgPosition = BLOCK_SIZE * 32;
CUTSCENE_DATA.timeInfo.timer = 0;
CUTSCENE_DATA.timeInfo.subStage++;
}
break;
case 4:
if (CUTSCENE_DATA.oam[6].yPosition < BLOCK_SIZE * 8)
{
CUTSCENE_DATA.dispcnt ^= DCNT_WIN1;
CutsceneStartSpriteEffect(CUTSCENE_DATA.bldcnt | BLDCNT_BG0_FIRST_TARGET_PIXEL |
BLDCNT_BG1_FIRST_TARGET_PIXEL | BLDCNT_BG2_FIRST_TARGET_PIXEL |
BLDCNT_BG3_FIRST_TARGET_PIXEL | BLDCNT_OBJ_FIRST_TARGET_PIXEL |
BLDCNT_BACKDROP_FIRST_TARGET_PIXEL, 16, 8, 1);
CUTSCENE_DATA.oam[6].unk_D |= 4;
CUTSCENE_DATA.timeInfo.timer = 0;
CUTSCENE_DATA.timeInfo.subStage++;
}
break;
case 5:
if (CUTSCENE_DATA.timeInfo.timer > 60)
{
CUTSCENE_DATA.timeInfo.timer = 0;
CUTSCENE_DATA.timeInfo.subStage++;
}
break;
case 6:
unk_61f28();
CUTSCENE_DATA.timeInfo.stage++;
MACRO_CUTSCENE_NEXT_STAGE();
break;
}
GettingFullyPoweredSuitUpdateRingPalette(&CUTSCENE_DATA.paletteData[0]);
*CutsceneGetBGVOFSPointer(sGettingFullyPoweredSuitPageData[1].bg) = *CutsceneGetBGHOFSPointer(sGettingFullyPoweredSuitPageData[0].bg);
GettingFullyPoweredSuitUpdateRing(&CUTSCENE_DATA.oam[6]);
for (i = 0; i < 6; i++)
GettingFullyPoweredSuitUpdateSparkleAroundRing(&CUTSCENE_DATA.oam[i], i);
// ...
i = -0x800 + *CutsceneGetBGVOFSPointer(sGettingFullyPoweredSuitPageData[0].bg);
i = (CUTSCENE_DATA.oam[6].yPosition - i >> 2) + 8;
if (i < 0)
i = 0;
else if (i > 0xA0)
i = 0xA0;
write16(REG_WIN1V, i);
for (i = 7; i < 12; i++)
GettingFullyPoweredSuitUpdateSparkleGoingUp(&CUTSCENE_DATA.oam[i], i);
return FALSE;
}
/**
* @brief 65ddc | 60 | Updates the ring palette
*
* @param pPalette Cutscene palette data pointer
*/
void GettingFullyPoweredSuitUpdateRingPalette(struct CutscenePaletteData* pPalette)
{
if (!(pPalette->active & TRUE))
return;
if (pPalette->timer != 0)
{
pPalette->timer--;
return;
}
pPalette->timer = pPalette->maxTimer;
pPalette->paletteRow++;
if (pPalette->paletteRow >= ARRAY_SIZE(sGettingFullyPoweredSuitRingPaletteRows))
pPalette->paletteRow = 0;
DMATransfer(3, &sGettingFullyPoweredSuitRingPAL[sGettingFullyPoweredSuitRingPaletteRows[pPalette->paletteRow] * 16],
PALRAM_BASE + 0x340, 32, 0x10);
}
/**
* @brief 65e3c | 70 | Updates the ring object
*
* @param pOam Cutscene OAM data pointer
*/
void GettingFullyPoweredSuitUpdateRing(struct CutsceneOamData* pOam)
{
u16 unk;
if (pOam->unk_D & 4)
{
unk = ++pOam->unk_18;
pOam->unk_10 = -4 - (unk / 4);
}
else
{
pOam->unk_10 = -4;
pOam->unk_18 = 0;
}
if (pOam->unk_D & 2)
{
pOam->yPosition += pOam->unk_10;
if (pOam->yPosition < -0xBF)
pOam->unk_D = 0;
}
CUTSCENE_DATA.oam[13].yPosition = pOam->yPosition;
}
/**
* @brief 65eac | c4 | Updates a sparkle around the ring
*
* @param pOam Cutscene OAM data pointer
* @param sparkleId Sparkle ID
*/
void GettingFullyPoweredSuitUpdateSparkleAroundRing(struct CutsceneOamData* pOam, u8 sparkleId)
{
if (pOam->unk_D == 0)
{
pOam->timer = sRandomNumberTable[(gFrameCounter8Bit + sparkleId) & 0xFF] & 0x1F;
pOam->unk_D = 1;
}
else if (pOam->unk_D == 1)
{
if (pOam->timer != 0)
pOam->timer--;
else
{
if (sRandomNumberTable[gFrameCounter8Bit] & 1)
update_cutscene_oam_data_id(pOam, GETTING_FULLY_POWERED_SUIT_OAM_ID_SPARKLE_AROUND_RING2);
else
update_cutscene_oam_data_id(pOam, GETTING_FULLY_POWERED_SUIT_OAM_ID_SPARKLE_AROUND_RING1);
pOam->unk_D = 2;
}
}
else if (!pOam->idChanged)
pOam->unk_D = 0;
if (pOam->idChanged)
{
pOam->xPosition = CUTSCENE_DATA.oam[6].xPosition + sGettingFullyPoweredSuitRingSparklesSpawnPositions[sparkleId][0];
pOam->yPosition = CUTSCENE_DATA.oam[6].yPosition + sGettingFullyPoweredSuitRingSparklesSpawnPositions[sparkleId][1];
}
}
/**
* @brief 65f70 | b0 | Updates a sparkle going up
*
* @param pOam Cutscene OAM data pointer
* @param sparkleId Sparkle ID
*/
void GettingFullyPoweredSuitUpdateSparkleGoingUp(struct CutsceneOamData* pOam, u8 sparkleId)
{
u16 unk;
if (pOam->unk_D & 2)
{
unk = ++pOam->unk_18;
pOam->unk_10 += (unk / 16);
if (pOam->unk_10 > 0x20)
pOam->unk_10 = 0x20;
pOam->yPosition -= pOam->unk_10;
if (pOam->yPosition >= -0xDF)
return;
pOam->unk_D = 0;
pOam->timer = sGettingFullyPoweredSuitBackgroundGFX[gFrameCounter8Bit + sparkleId] & 0x3F;
}
else
{
if (pOam->timer == 0)
{
pOam->unk_D = 2;
pOam->unk_10 = 0;
pOam->xPosition = sGettingFullyPoweredSuit_3c642c[sparkleId - 7] + (sRandomNumberTable[gFrameCounter8Bit] & 0x3F);
pOam->yPosition = BLOCK_SIZE * 11;
pOam->unk_18 = 0;
return;
}
pOam->timer--;
}
}
/**
* @brief 66020 | 33c | Initializes the getting fully powered suit cutscene
*
* @return u8 FALSE
*/
u8 GettingFullyPoweredSuitInit(void)
{
i32 i;
unk_61f0c();
DMATransfer(3, sGettingFullyPoweredSuitPAL, PALRAM_BASE, 352, 0x10);
DMATransfer(3, PALRAM_BASE, PALRAM_BASE + 0x200, 0x200, 0x20);
write16(PALRAM_BASE, 0);
LZ77UncompVRAM(sGettingFullyPoweredSuitSamusGFX, VRAM_BASE + sGettingFullyPoweredSuitPageData[0].graphicsPage * 0x4000);
LZ77UncompVRAM(sGettingFullyPoweredSuitSamusTileTable, VRAM_BASE + sGettingFullyPoweredSuitPageData[0].tiletablePage * 0x800);
LZ77UncompVRAM(sGettingFullyPoweredSuitBackgroundGFX, VRAM_BASE + sGettingFullyPoweredSuitPageData[1].graphicsPage * 0x4000);
LZ77UncompVRAM(sGettingFullyPoweredSuitBackgroundTileTable, VRAM_BASE + sGettingFullyPoweredSuitPageData[1].tiletablePage * 0x800);
LZ77UncompVRAM(sGettingFullyPoweredSuitRingSparklesGFX, VRAM_BASE + 0x10000);
CutsceneSetBGCNTPageData(sGettingFullyPoweredSuitPageData[0]);
CutsceneSetBGCNTPageData(sGettingFullyPoweredSuitPageData[1]);
CutsceneReset();
CUTSCENE_DATA.bldcnt = BLDCNT_BG2_FIRST_TARGET_PIXEL | BLDCNT_BRIGHTNESS_INCREASE_EFFECT |
BLDCNT_BG0_SECOND_TARGET_PIXEL | BLDCNT_BG1_SECOND_TARGET_PIXEL | BLDCNT_BG3_SECOND_TARGET_PIXEL |
BLDCNT_OBJ_SECOND_TARGET_PIXEL | BLDCNT_BACKDROP_SECOND_TARGET_PIXEL;
gWrittenToBLDY_NonGameplay = 0;
gWrittenToBLDALPHA_L = 0;
gWrittenToBLDALPHA_H = 16;
CutsceneSetBackgroundPosition(CUTSCENE_BG_EDIT_HOFS, sGettingFullyPoweredSuitPageData[0].bg, 0x800);
CutsceneSetBackgroundPosition(CUTSCENE_BG_EDIT_HOFS, sGettingFullyPoweredSuitPageData[1].bg, 0x800);
CutsceneSetBackgroundPosition(CUTSCENE_BG_EDIT_VOFS, sGettingFullyPoweredSuitPageData[0].bg, 0xA80);
CutsceneSetBackgroundPosition(CUTSCENE_BG_EDIT_VOFS, sGettingFullyPoweredSuitPageData[1].bg, 0xA80);
CUTSCENE_DATA.oam[6].xPosition = BLOCK_SIZE * 8 - QUARTER_BLOCK_SIZE;
CUTSCENE_DATA.oam[6].yPosition = BLOCK_SIZE * 22;
CUTSCENE_DATA.oam[6].priority = sGettingFullyPoweredSuitPageData[0].priority;
CUTSCENE_DATA.oam[6].unk_B_4 = 0;
CUTSCENE_DATA.oam[6].unk_C_0 = 2;
update_cutscene_oam_data_id(&CUTSCENE_DATA.oam[6], GETTING_FULLY_POWERED_SUIT_OAM_ID_RING_BOTTOM);
CUTSCENE_DATA.oam[13] = CUTSCENE_DATA.oam[6];
CUTSCENE_DATA.oam[13].priority = sGettingFullyPoweredSuitPageData[0].priority + 1;
update_cutscene_oam_data_id(&CUTSCENE_DATA.oam[13], GETTING_FULLY_POWERED_SUIT_OAM_ID_RING_TOP);
for (i = 0; i < 6; i++)
{
CUTSCENE_DATA.oam[i].priority = sGettingFullyPoweredSuitPageData[0].priority;
CUTSCENE_DATA.oam[i].unk_C_0 = 2;
}
CUTSCENE_DATA.oam[7].xPosition = sGettingFullyPoweredSuit_3c642c[0];
CUTSCENE_DATA.oam[7].yPosition = BLOCK_SIZE * 11;
CUTSCENE_DATA.oam[7].priority = sGettingFullyPoweredSuitPageData[0].priority;
CUTSCENE_DATA.oam[i].timer = sRandomNumberTable[gFrameCounter8Bit] & 0x3F;
update_cutscene_oam_data_id(&CUTSCENE_DATA.oam[7], GETTING_FULLY_POWERED_SUIT_OAM_ID_SPARKLE_GOING_UP);
for (i = 8; i < 12; i++)
{
CUTSCENE_DATA.oam[i] = CUTSCENE_DATA.oam[7];
CUTSCENE_DATA.oam[i].xPosition = sGettingFullyPoweredSuit_3c642c[i - 7];
CUTSCENE_DATA.oam[i].timer = sGettingFullyPoweredSuitBackgroundGFX[gFrameCounter8Bit + i] & 0x3F;
}
CUTSCENE_DATA.paletteData[0] = sGettingFullyPoweredSuitPaletteData;
CUTSCENE_DATA.dispcnt = DCNT_OBJ | DCNT_WIN1 | sGettingFullyPoweredSuitPageData[0].bg | sGettingFullyPoweredSuitPageData[1].bg;
write8(REG_WINOUT, 0x3F);
write8(REG_WININ + 1, 0x1F);
write16(REG_WIN1H, 0xF0);
write16(REG_WIN1V, 0xA0);
gPauseScreenFlag = PAUSE_SCREEN_NONE;
PlayMusic(MUSIC_GETTING_FULLY_POWERED_SUIT_CUTSCENE, 0);
CUTSCENE_DATA.timeInfo.timer = 0;
CUTSCENE_DATA.timeInfo.subStage = 0;
CUTSCENE_DATA.timeInfo.stage++;
return FALSE;
}
/**
* @brief 6635c | 34 | Subroutine for the getting fully powered suit cutscene
*
* @return u8 bool, ended
*/
u8 GettingFullyPoweredSuitSubroutine(void)
{
u8 ended;
ended = sGettingFullyPoweredSuitSubroutineData[CUTSCENE_DATA.timeInfo.stage].pFunction();
CutsceneUpdateBackgroundsPosition(TRUE);
GettingFullyPoweredSuitProcessOAM();
return ended;
}
/**
* @brief 66390 | 38 | Processes the OAM
*
*/
void GettingFullyPoweredSuitProcessOAM(void)
{
gNextOamSlot = 0;
process_cutscene_oam(sGettingFullyPoweredSuitSubroutineData[CUTSCENE_DATA.timeInfo.stage].oamLength, CUTSCENE_DATA.oam, sGettingFullyPoweredSuitCutsceneOAM);
ResetFreeOAM();
}

View File

@ -0,0 +1,310 @@
#include "data/cutscenes/getting_fully_powered_suit_data.h"
#include "cutscenes/getting_fully_powered_suit.h"
#include "gba.h"
#include "macros.h"
const struct CutscenePageData sGettingFullyPoweredSuitPageData[3] = {
[0] = {
.graphicsPage = 0,
.tiletablePage = 0x1E,
.priority = 2,
.bg = DCNT_BG2,
.screenSize = 0x8000
},
[1] = {
.graphicsPage = 2,
.tiletablePage = 0x1C,
.priority = 3,
.bg = DCNT_BG3,
.screenSize = 0x8000
},
[2] = {
.graphicsPage = 0,
.tiletablePage = 0x1F,
.priority = 3,
.bg = DCNT_BG3,
.screenSize = 0
}
};
const struct CutscenePaletteData sGettingFullyPoweredSuitPaletteData = {
.active = TRUE,
.timer = 0,
.paletteRow = 0,
.maxTimer = 2
};
const u8 sGettingFullyPoweredSuitRingPaletteRows[7] = {
0, 1, 2, 3, 4, 5, 6
};
const u16 sGettingFullyPoweredSuitRingSparklesSpawnPositions[6][2] = {
[0] = {
-(BLOCK_SIZE * 3 + HALF_BLOCK_SIZE + 8), 0x18
},
[1] = {
-(BLOCK_SIZE * 2 + HALF_BLOCK_SIZE + 8), HALF_BLOCK_SIZE + 8
},
[2] = {
BLOCK_SIZE * 3 + 8, 0x18
},
[3] = {
BLOCK_SIZE + QUARTER_BLOCK_SIZE, HALF_BLOCK_SIZE + 12
},
[4] = {
BLOCK_SIZE * 4 + HALF_BLOCK_SIZE + 4, -QUARTER_BLOCK_SIZE
},
[5] = {
-(BLOCK_SIZE * 4 + HALF_BLOCK_SIZE), 20
}
};
const u16 sGettingFullyPoweredSuit_3c642c[6] = {
BLOCK_SIZE * 6 + HALF_BLOCK_SIZE, BLOCK_SIZE * 10 + 8, BLOCK_SIZE * 5,
BLOCK_SIZE * 12 + QUARTER_BLOCK_SIZE, BLOCK_SIZE * 3, 0
};
extern const struct FrameData sGettingFullyPoweredSuitOAM_SparkleGoingUp[7];
extern const struct FrameData sGettingFullyPoweredSuitOAM_SparkleAroundRing1[11];
extern const struct FrameData sGettingFullyPoweredSuitOAM_RingBottom[3];
extern const struct FrameData sGettingFullyPoweredSuitOAM_RingTop[3];
extern const struct FrameData sGettingFullyPoweredSuitOAM_SparkleAroundRing2[9];
const struct OamArray sGettingFullyPoweredSuitCutsceneOAM[6] = {
[0] = {
.pOam = sGettingFullyPoweredSuitOAM_SparkleGoingUp,
.preAction = OAM_ARRAY_PRE_ACTION_NONE
},
[GETTING_FULLY_POWERED_SUIT_OAM_ID_SPARKLE_GOING_UP] = {
.pOam = sGettingFullyPoweredSuitOAM_SparkleGoingUp,
.preAction = OAM_ARRAY_PRE_ACTION_CHANGE_FRAME
},
[GETTING_FULLY_POWERED_SUIT_OAM_ID_SPARKLE_AROUND_RING1] = {
.pOam = sGettingFullyPoweredSuitOAM_SparkleAroundRing1,
.preAction = OAM_ARRAY_PRE_ACTION_KILL_AFTER_END
},
[GETTING_FULLY_POWERED_SUIT_OAM_ID_SPARKLE_AROUND_RING2] = {
.pOam = sGettingFullyPoweredSuitOAM_SparkleAroundRing2,
.preAction = OAM_ARRAY_PRE_ACTION_KILL_AFTER_END
},
[GETTING_FULLY_POWERED_SUIT_OAM_ID_RING_BOTTOM] = {
.pOam = sGettingFullyPoweredSuitOAM_RingBottom,
.preAction = OAM_ARRAY_PRE_ACTION_CHANGE_FRAME
},
[GETTING_FULLY_POWERED_SUIT_OAM_ID_RING_TOP] = {
.pOam = sGettingFullyPoweredSuitOAM_RingTop,
.preAction = OAM_ARRAY_PRE_ACTION_CHANGE_FRAME
},
};
const u16 sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame0[7] = {
0x2,
0x8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2080,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2040
};
const u16 sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame1[7] = {
0x2,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2000,
0x8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x20c0
};
const u16 sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame2[7] = {
0x2,
0x8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2100,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2040
};
const u16 sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame3[10] = {
0x3,
0x8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2140,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2000,
0xfe, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2080
};
const u16 sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame4[7] = {
0x2,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2040,
0x2, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x20c0
};
const u16 sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame5[10] = {
0x3,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2000,
0x0, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2100,
OBJ_SHAPE_VERTICAL | 0x3, 0x1f8, OBJ_SPRITE_OAM | 0x2140
};
const u16 sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame2[4] = {
0x1,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2052
};
const u16 sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame3[4] = {
0x1,
0xf0, OBJ_SIZE_32x32 | 0x1f0, OBJ_SPRITE_OAM | 0x2002
};
const u16 sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame4[4] = {
0x1,
0xf0, OBJ_SIZE_32x32 | 0x1f0, OBJ_SPRITE_OAM | 0x2006
};
const u16 sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame9[4] = {
0x1,
0xf0, OBJ_SIZE_32x32 | 0x1f0, OBJ_SPRITE_OAM | 0x200a
};
const u16 sGettingFullyPoweredSuitOAM_RingBottom_Frame0[16] = {
0x5,
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x16 | 0x1b0, OBJ_SPRITE_OAM | 0x20c3,
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x16 | 0x1d0, OBJ_SPRITE_OAM | 0x20c7,
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x16 | 0x1f0, OBJ_SPRITE_OAM | 0x20cb,
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x16 | 0x10, OBJ_SPRITE_OAM | 0x20cf,
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x16 | 0x30, OBJ_SPRITE_OAM | 0x20d3
};
const u16 sGettingFullyPoweredSuitOAM_RingBottom_Frame1[16] = {
0x5,
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x16 | 0x1b8, OBJ_SPRITE_OAM | 0x2144,
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x16 | 0x1d8, OBJ_SPRITE_OAM | 0x2148,
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x16 | 0x1f8, OBJ_SPRITE_OAM | 0x214c,
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x16 | 0x18, OBJ_SPRITE_OAM | 0x2150,
0x0, OBJ_SIZE_16x16 | 0x38, OBJ_SPRITE_OAM | 0x2154
};
const u16 sGettingFullyPoweredSuitOAM_RingTop_Frame0[19] = {
0x6,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x1a8, OBJ_SPRITE_OAM | 0x2082,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x1c8, OBJ_SPRITE_OAM | 0x2086,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x1e8, OBJ_SPRITE_OAM | 0x208a,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x8, OBJ_SPRITE_OAM | 0x208e,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x28, OBJ_SPRITE_OAM | 0x2092,
0xf0, OBJ_SIZE_16x16 | 0x48, OBJ_SPRITE_OAM | 0x2096
};
const u16 sGettingFullyPoweredSuitOAM_RingTop_Frame1[16] = {
0x5,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x1b0, OBJ_SPRITE_OAM | 0x2103,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x1d0, OBJ_SPRITE_OAM | 0x2107,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x1f0, OBJ_SPRITE_OAM | 0x210b,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x10, OBJ_SPRITE_OAM | 0x210f,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x30, OBJ_SPRITE_OAM | 0x2113
};
const u16 sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame0[4] = {
0x1,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2012
};
const u16 sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame1[4] = {
0x1,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2014
};
const u16 sGettingFullyPoweredSuitOAM_SparkleAroundRing2_Frame2[4] = {
0x1,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2016
};
const u16 sGettingFullyPoweredSuitOAM_SparkleAroundRing2_Frame4[4] = {
0x1,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x2018
};
const u16 sGettingFullyPoweredSuitOAM_SparkleAroundRing2_Frame3[4] = {
0x1,
0xf8, OBJ_SIZE_16x16 | 0x1f8, OBJ_SPRITE_OAM | 0x201a
};
const struct FrameData sGettingFullyPoweredSuitOAM_SparkleGoingUp[7] = {
sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame0,
4,
sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame1,
4,
sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame2,
4,
sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame3,
4,
sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame4,
4,
sGettingFullyPoweredSuitOAM_SparkleGoingUp_Frame5,
4,
NULL,
0
};
const struct FrameData sGettingFullyPoweredSuitOAM_SparkleAroundRing1[11] = {
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame0,
2,
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame1,
2,
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame2,
2,
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame3,
3,
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame4,
3,
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame3,
3,
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame4,
3,
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame3,
3,
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame4,
3,
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame9,
3,
NULL,
0
};
const struct FrameData sGettingFullyPoweredSuitOAM_RingBottom[3] = {
sGettingFullyPoweredSuitOAM_RingBottom_Frame0,
4,
sGettingFullyPoweredSuitOAM_RingBottom_Frame1,
4,
NULL,
0
};
const struct FrameData sGettingFullyPoweredSuitOAM_RingTop[3] = {
sGettingFullyPoweredSuitOAM_RingTop_Frame0,
4,
sGettingFullyPoweredSuitOAM_RingTop_Frame1,
4,
NULL,
0
};
const struct FrameData sGettingFullyPoweredSuitOAM_SparkleAroundRing2[9] = {
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame0,
4,
sGettingFullyPoweredSuitOAM_SparkleAroundRing1_Frame1,
4,
sGettingFullyPoweredSuitOAM_SparkleAroundRing2_Frame2,
4,
sGettingFullyPoweredSuitOAM_SparkleAroundRing2_Frame3,
4,
sGettingFullyPoweredSuitOAM_SparkleAroundRing2_Frame4,
4,
sGettingFullyPoweredSuitOAM_SparkleAroundRing2_Frame4,
4,
sGettingFullyPoweredSuitOAM_SparkleAroundRing2_Frame3,
4,
sGettingFullyPoweredSuitOAM_SparkleAroundRing2_Frame4,
4,
NULL,
0
};
const u16 sGettingFullyPoweredSuitPAL[19 * 16] = INCBIN_U16("data/cutscenes/GettingFullyPoweredSuit/Palette.pal");
const u32 sGettingFullyPoweredSuitSamusGFX[2608] = INCBIN_U32("data/cutscenes/GettingFullyPoweredSuit/Samus.gfx.lz");
const u32 sGettingFullyPoweredSuitRingSparklesGFX[646] = INCBIN_U32("data/cutscenes/GettingFullyPoweredSuit/RingSparkles.gfx.lz");
const u32 sGettingFullyPoweredSuitSamusTileTable[387] = INCBIN_U32("data/cutscenes/GettingFullyPoweredSuit/Samus.tt");
const u8 sGettingFullyPoweredSuitBackgroundGFX[15072] = INCBIN_U8("data/cutscenes/GettingFullyPoweredSuit/Background.gfx.lz");
const u32 sGettingFullyPoweredSuitBackgroundTileTable[734] = INCBIN_U32("data/cutscenes/GettingFullyPoweredSuit/Background.tt");
const u16 sGettingFullyPoweredSuitRingPAL[7 * 16] = INCBIN_U16("data/cutscenes/GettingFullyPoweredSuit/RingPalette.pal");
const u8 sTempArray_3ce46c[0x90ff0] = INCBIN_U8("data/Blob_3ce46c_45f45c.bin");

View File

@ -0,0 +1,20 @@
#include "data/cutscenes/internal_getting_fully_powered_suit_data.h"
#include "cutscenes/getting_fully_powered_suit.h"
#include "macros.h"
const struct CutsceneSubroutineData sGettingFullyPoweredSuitSubroutineData[3] = {
[0] = {
.pFunction = GettingFullyPoweredSuitInit,
.oamLength = 14
},
[1] = {
.pFunction = GettingFullyPoweredSuitAnimation,
.oamLength = 14
},
[2] = {
.pFunction = (CutsceneFunc_T)0x8061228,//CutsceneEndFunction,
.oamLength = 0
}
};
const u8 sTempArray_760044[0x976f0] = INCBIN_U8("data/Blob_760044_7f7734.bin");

View File

@ -13,9 +13,7 @@ const struct CutsceneSubroutineData sMechaSeesSamusSubroutineData[3] = {
.oamLength = 2
},
{
.pFunction = (CutsceneFunc_T)0x8061229, //CutsceneEndFunction,
.pFunction = (CutsceneFunc_T)0x8061229,//CutsceneEndFunction,
.oamLength = 2
}
};
const u8 sTempArray_76002c[0x97708] = INCBIN_U8("data/Blob_76002c_7f7734.bin");

View File

@ -267,5 +267,3 @@ const u32 sMechaSeesSamusMetalGFX[2382] = INCBIN_U32("data/cutscenes/MechaSeesSa
const u32 sMechaSeesSamusCoverEyeGFX[2671] = INCBIN_U32("data/cutscenes/MechaSeesSamus/EyeCover.gfx.lz");
const u16 sMechaSeesSamusPAL[10 * 16] = INCBIN_U16("data/cutscenes/MechaSeesSamus/Palette.pal");
const u32 sMechaSeesSamusCoverMetalTileTable[368] = INCBIN_U32("data/cutscenes/MechaSeesSamus/Metal.tt");
const u8 sTempArray_3c63f0[0x9906c] = INCBIN_U8("data/Blob_3c63f0_45f45c.bin");

View File

@ -16,7 +16,8 @@ subDirs: array = [
"cutscenes/RidleyInSpace/",
"cutscenes/RidleyLanding/",
"cutscenes/RidleySpawn/",
"cutscenes/MechaSeesSamus/"
"cutscenes/MechaSeesSamus/",
"cutscenes/GettingFullyPoweredSuit/",
]
try: