Some stuff

This commit is contained in:
YohannDR 2024-10-06 16:46:23 +02:00
parent b71a739093
commit 5ed2607da9
16 changed files with 469 additions and 401 deletions

View File

@ -1,7 +1,16 @@
#define ESCAPE_NONE 0
#define ESCAPE_MOTHER_BRAIN 1
#define ESCAPE_MECHA_RIDLEY 2
#ifndef ESCAPE_CONSTANTS_H
#define ESCAPE_CONSTANTS_H
#define ESCAPE_STATUS_NONE 0
#define ESCAPE_STATUS_HAPPENNING 1
#define ESCAPE_STATUS_FAILED 2
enum Escape {
ESCAPE_NONE,
ESCAPE_MOTHER_BRAIN,
ESCAPE_MECHA_RIDLEY,
};
enum EscapeStatus {
ESCAPE_STATUS_NONE,
ESCAPE_STATUS_HAPPENNING,
ESCAPE_STATUS_FAILED
};
#endif /* ESCAPE_CONSTANTS_H */

View File

@ -1,6 +1,6 @@
#define INTRO_TEXT_ACTION_NONE 0
#define INTRO_TEXT_ACTION_START 1
#define INTRO_TEXT_ACTION_SPACE 2
#define INTRO_TEXT_ACTION_UNKNOWN 3
#define INTRO_TEXT_ACTION_SKIP_CHARACTER 3
#define INTRO_TEXT_ACTION_NEW_LINE 4
#define INTRO_TEXT_ACTION_END 5

View File

@ -5,14 +5,16 @@
// Defines
#define HIGHLIGHT_STATUS_NOT_HIGHLIGHTED 0
#define HIGHLIGHT_STATUS_SELECTED 1
#define HIGHLIGHT_STATUS_HIGHLIGHTED 2
enum HudHighlightStatus {
HIGHLIGHT_STATUS_NOT_HIGHLIGHTED,
HIGHLIGHT_STATUS_SELECTED,
HIGHLIGHT_STATUS_HIGHLIGHTED
};
// Functions
void HUDUpdateOAM(void);
void HUDUpdateEnergyTanks(u8* pDst, const u8* pSrcNormal, const u8* pSrcRefill, u8 nbrTanks, u8 refillStage);
void HudUpdateOam(void);
void HudUpdateEnergyTanks(u8* pDst, const u8* pSrcNormal, const u8* pSrcRefill, u8 nbrTanks, u8 refillStage);
void HudDrawEnergy(u8 fileNumber);
void HudDrawMissileDigits(u16 hundreds, u16 tens, u16 ones, u16 highlightStatus);
void HudDrawSuperMissileDigits(u16 tens, u16 ones, u16 highlightStatus);
@ -20,7 +22,7 @@ void HudDrawPowerBombDigits(u16 tens, u16 ones, u16 highlightStatus);
void HudDrawMissiles(u8 updateHighlight);
void HudDrawPowerBomb(u8 updateHighlight);
void HudDrawSuperMissiles(u8 updateHighlight);
void HUDUpdateGfx(void);
void HudUpdateGfx(void);
void HudDrawSuitless(void);
void HudDraw(void);

View File

@ -6,10 +6,10 @@
void IntroVBlank(void);
void IntroFuzzVBlank(void);
void IntroInit(void);
void IntroTextProcessOAM(void);
void IntroTextProcessOam(void);
u8 IntroProcessText(u8 action, u16 indent);
u8 IntroEmergencyOrder(void);
void IntroShipFlyingTowardsCameraProcessOAM(void);
void IntroShipFlyingTowardsCameraProcessOam(void);
u8 IntroShipFlyingTowardsCamera(void);
u8 IntroSamusInHerShip(void);
u8 IntroExterminate(void);

View File

@ -19,6 +19,10 @@
#define OAM_OBJ_MODE_SEMI_TRANSPARENT 1
#define OAM_OBJ_MODE_WINDOW 2
#define OAM_SHAPE_SQUARE 0
#define OAM_SHAPE_HORIZONTAL 1
#define OAM_SHAPE_VERTICAL 2
// Attribute 1
#define OBJ_X_FLIP 0x1000
@ -33,6 +37,21 @@
#define OBJ_SIZE_64x32 0xC000
#define OBJ_SIZE_32x64 0xC000
#define OAM_SIZE_S_8x8 0
#define OAM_SIZE_S_16x16 1
#define OAM_SIZE_S_32x32 2
#define OAM_SIZE_S_64x64 3
#define OAM_SIZE_H_16x8 0
#define OAM_SIZE_H_32x8 1
#define OAM_SIZE_H_32x16 2
#define OAM_SIZE_H_64x32 3
#define OAM_SIZE_V_8x16 0
#define OAM_SIZE_V_8x32 1
#define OAM_SIZE_V_16x32 2
#define OAM_SIZE_V_32x64 3
// Attribute 2
#define OBJ_SPRITE_OAM 0x8000 // Not sure what this is, sprite OAM doesn't work without it

View File

@ -9,7 +9,7 @@ struct IntroData {
u8 stage; // 0
u8 currentCharacter; // 1
u8 characterPalette; // 2
u8 nextCharacter; // 3
u8 finalCharacter; // 3
s16 charDrawerX; // 4
u16 charDrawerY; // 6

View File

@ -59,6 +59,8 @@ typedef volatile signed int vs32;
// Target FPS
#define FRAMES_PER_SECOND 60
// The amount of frames the games considers 1 second internally (used by detailed timers)
#define SIMULATED_FPS 64
// Amount of time that happens in one frame
#define DELTA_TIME 1
// Converts a floating point value of seconds to an amount of frames (CONVERT_SECONDS(1.f) == FRAMES_PER_SECOND)

View File

@ -749,7 +749,9 @@ u8 BgClipCheckOpeningHatch(u16 xPosition, u16 yPosition)
gHatchData[i].flashingTimer = 1; // Set flashing
}
else
{
gHatchData[i].hits = 0; // Locked, reset
}
gHatchData[i].hitTimer = 0;
break;

View File

@ -291,129 +291,129 @@ const u8 sArray_45fd30[3][4] = {
const u8 sIntroEmergencyOrderActions[16] = {
INTRO_TEXT_ACTION_START,
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // G
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // C
INTRO_TEXT_ACTION_NONE, // Y
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // D
INTRO_TEXT_ACTION_UNKNOWN, // E
INTRO_TEXT_ACTION_END, // R
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // G
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // C
INTRO_TEXT_ACTION_NONE, // Y
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // D
INTRO_TEXT_ACTION_SKIP_CHARACTER, // E
INTRO_TEXT_ACTION_END, // R
};
const u8 sIntroExterminateAllActions[52] = {
INTRO_TEXT_ACTION_START,
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // X
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // I
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // L
INTRO_TEXT_ACTION_NONE, // L
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_UNKNOWN, // I
INTRO_TEXT_ACTION_NEW_LINE, // D
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // G
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // I
INTRO_TEXT_ACTION_NONE, // S
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // S
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // P
INTRO_TEXT_ACTION_NONE, // L
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // Z
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // B
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // S
INTRO_TEXT_ACTION_NONE, // .
INTRO_TEXT_ACTION_UNKNOWN, // .
INTRO_TEXT_ACTION_END, // .
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // X
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // I
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // L
INTRO_TEXT_ACTION_NONE, // L
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_SKIP_CHARACTER, // I
INTRO_TEXT_ACTION_NEW_LINE, // D
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // G
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // I
INTRO_TEXT_ACTION_NONE, // S
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // S
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // P
INTRO_TEXT_ACTION_NONE, // L
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // Z
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // B
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // S
INTRO_TEXT_ACTION_NONE, // .
INTRO_TEXT_ACTION_SKIP_CHARACTER, // .
INTRO_TEXT_ACTION_END, // .
};
const u8 sIntroDefeatTheActions[50] = {
INTRO_TEXT_ACTION_START,
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // D
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // D
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // F
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_NONE, // H
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // C
INTRO_TEXT_ACTION_NONE, // H
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // I
INTRO_TEXT_ACTION_NONE, // C
INTRO_TEXT_ACTION_UNKNOWN, // A
INTRO_TEXT_ACTION_NEW_LINE, // L
INTRO_TEXT_ACTION_NONE, // L
INTRO_TEXT_ACTION_NONE, // I
INTRO_TEXT_ACTION_NONE, // F
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // -
INTRO_TEXT_ACTION_NONE, // F
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // ,
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_NONE, // H
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // B
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // I
INTRO_TEXT_ACTION_UNKNOWN, // N
INTRO_TEXT_ACTION_END, // .
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // D
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // D
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // F
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_NONE, // H
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // C
INTRO_TEXT_ACTION_NONE, // H
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // N
INTRO_TEXT_ACTION_NONE, // I
INTRO_TEXT_ACTION_NONE, // C
INTRO_TEXT_ACTION_SKIP_CHARACTER, // A
INTRO_TEXT_ACTION_NEW_LINE, //
INTRO_TEXT_ACTION_NONE, // L
INTRO_TEXT_ACTION_NONE, // I
INTRO_TEXT_ACTION_NONE, // F
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // -
INTRO_TEXT_ACTION_NONE, // F
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // ,
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // M
INTRO_TEXT_ACTION_NONE, // O
INTRO_TEXT_ACTION_NONE, // T
INTRO_TEXT_ACTION_NONE, // H
INTRO_TEXT_ACTION_NONE, // E
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_SPACE, //
INTRO_TEXT_ACTION_NONE, // B
INTRO_TEXT_ACTION_NONE, // R
INTRO_TEXT_ACTION_NONE, // A
INTRO_TEXT_ACTION_NONE, // I
INTRO_TEXT_ACTION_SKIP_CHARACTER, // N
INTRO_TEXT_ACTION_END, // .
};

View File

@ -47,19 +47,20 @@ u8 EscapeDetermineTimer(void)
*/
u8 EscapeCheckHasEscaped(void)
{
if (EventFunction(EVENT_ACTION_CHECKING, EVENT_MECHA_RIDLEY_KILLED))
{
// Chozodia escape
if (EventFunction(EVENT_ACTION_CHECKING, EVENT_ESCAPED_CHOZODIA))
return TRUE;
}
else
else if (EventFunction(EVENT_ACTION_CHECKING, EVENT_MOTHER_BRAIN_KILLED))
{
if (!EventFunction(EVENT_ACTION_CHECKING, EVENT_MOTHER_BRAIN_KILLED))
return FALSE;
// Tourian escape
if (EventFunction(EVENT_ACTION_CHECKING, EVENT_ESCAPED_ZEBES))
return TRUE;
}
return FALSE;
}
@ -90,7 +91,7 @@ void EscapeCheckReloadGraphics(void)
{
if (EscapeDetermineTimer() != ESCAPE_NONE)
{
DMA_SET(3, sEscapeTimerDigitsGfx, VRAM_BASE + 0x17800, C_32_2_16(DMA_ENABLE, sizeof(sEscapeTimerDigitsGfx) / 2));
DMA_SET(3, sEscapeTimerDigitsGfx, VRAM_OBJ + 0x7800, C_32_2_16(DMA_ENABLE, sizeof(sEscapeTimerDigitsGfx) / 2));
}
}
@ -100,8 +101,8 @@ void EscapeCheckReloadGraphics(void)
*/
void EscapeStart(void)
{
DMA_SET(3, sEscapeTimerDigitsGfx, VRAM_BASE + 0x17800, C_32_2_16(DMA_ENABLE, 0xB0));
DMA_SET(3, sEscapeTimerDigitsGfx + 1024, VRAM_BASE + 0x17c00, C_32_2_16(DMA_ENABLE, 0xB0));
DMA_SET(3, sEscapeTimerDigitsGfx, VRAM_OBJ + 0x7800, C_32_2_16(DMA_ENABLE, 0xB0));
DMA_SET(3, sEscapeTimerDigitsGfx + 1024, VRAM_OBJ + 0x7C00, C_32_2_16(DMA_ENABLE, 0xB0));
// Setup oam
DMA_SET(3, sParticleEscapeOam, gParticleEscapeOamFrames, C_32_2_16(DMA_ENABLE, ARRAY_SIZE(gParticleEscapeOamFrames)));
@ -176,9 +177,9 @@ void EscaepUpdateTimer(void)
if (gPreventMovementTimer != 0)
return;
counter = ++gEscapeTimerCounter;
counter = APPLY_DELTA_TIME_INC(gEscapeTimerCounter);
if (counter % 2)
if (counter % CONVERT_SECONDS(1.f / 30))
{
if (gEscapeTimerDigits.hundredths > 1)
{
@ -211,7 +212,7 @@ void EscaepUpdateTimer(void)
}
}
if (counter % 64 == 0)
if (counter % SIMULATED_FPS == 0)
{
gEscapeTimerDigits.hundredths = 99 / 10;
gEscapeTimerDigits.tenths = 99 % 10;

397
src/hud.c
View File

@ -13,143 +13,166 @@
#include "structs/samus.h"
#include "structs/game_state.h"
#define HUD_HEALTH_BAR_Y (SUB_PIXEL_TO_PIXEL(PIXEL_SIZE * 2))
#define HUD_HEALTH_BAR_X (SUB_PIXEL_TO_PIXEL(0))
#define HUD_CHARGE_BAR_Y (SUB_PIXEL_TO_PIXEL(HALF_BLOCK_SIZE + EIGHTH_BLOCK_SIZE))
#define HUD_CHARGE_BAR_X (SUB_PIXEL_TO_PIXEL(PIXEL_SIZE))
#define HUD_MISSILES_Y (SUB_PIXEL_TO_PIXEL(PIXEL_SIZE * 2))
#define HUD_MISSILES_X (SUB_PIXEL_TO_PIXEL(BLOCK_SIZE * 3 + QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE))
#define HUD_SUPER_MISSILES_Y (SUB_PIXEL_TO_PIXEL(PIXEL_SIZE * 2))
#define HUD_SUPER_MISSILES_X (SUB_PIXEL_TO_PIXEL(BLOCK_SIZE * 5))
#define HUD_POWER_BOMBS_Y (SUB_PIXEL_TO_PIXEL(PIXEL_SIZE * 2))
#define HUD_POWER_BOMBS_X (SUB_PIXEL_TO_PIXEL(BLOCK_SIZE * 6 + HALF_BLOCK_SIZE + EIGHTH_BLOCK_SIZE))
#define HUD_MINIMAP_Y (-SUB_PIXEL_TO_PIXEL(PIXEL_SIZE * 6))
#define HUD_MINIMAP_X (SCREEN_SIZE_X - SUB_PIXEL_TO_PIXEL(BLOCK_SIZE + HALF_BLOCK_SIZE + EIGHTH_BLOCK_SIZE))
#define HUD_MINIMAP_SQUARE_Y (HUD_MINIMAP_Y + SUB_PIXEL_TO_PIXEL(BLOCK_SIZE))
#define HUD_MINIMAP_SQUARE_X (HUD_MINIMAP_X + SUB_PIXEL_TO_PIXEL(HALF_BLOCK_SIZE))
/**
* @brief 52308 | 35c | Updates the OAM of the HUD
*
*/
void HUDUpdateOAM(void)
void HudUpdateOam(void)
{
u32 oamSlot;
u16* dst;
struct Equipment* pEquipment = &gEquipment;
oamSlot = 0x0;
oamSlot = 0;
if (!gHideHud)
{
dst = (u16*)gOamData;
// Left part of health bar
*dst++ = 0x0;
gOamData[oamSlot].split.y = 0x2;
gOamData[oamSlot].split.shape = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.y = HUD_HEALTH_BAR_Y;
gOamData[oamSlot].split.shape = OAM_SHAPE_HORIZONTAL;
*dst++ = 0x0;
gOamData[oamSlot].split.x = 0x0;
gOamData[oamSlot].split.size = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.x = HUD_HEALTH_BAR_X;
gOamData[oamSlot].split.size = OAM_SIZE_H_32x8;
*dst++ = 0x0;
gOamData[oamSlot].split.tileNum = 0x50;
gOamData[oamSlot].split.paletteNum = 0x4;
*dst++ = 0;
gOamData[oamSlot].split.tileNum = 0x20 * 2 + 0x10;
gOamData[oamSlot].split.paletteNum = 4;
dst++;
oamSlot++;
// Right part of health bar
*dst++ = 0x0;
gOamData[oamSlot].split.y = 0x2;
gOamData[oamSlot].split.shape = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.y = HUD_HEALTH_BAR_Y;
gOamData[oamSlot].split.shape = OAM_SHAPE_HORIZONTAL;
*dst++ = 0;
gOamData[oamSlot].split.x = HUD_HEALTH_BAR_X + 32;
gOamData[oamSlot].split.size = OAM_SIZE_H_32x8;
*dst++ = 0x0;
gOamData[oamSlot].split.x = 0x20;
gOamData[oamSlot].split.size = 0x1;
*dst++ = 0x0;
gOamData[oamSlot].split.tileNum = 0x54;
gOamData[oamSlot].split.paletteNum = 0x4;
*dst++ = 0;
gOamData[oamSlot].split.tileNum = 0x20 * 2 + 0x14;
gOamData[oamSlot].split.paletteNum = 4;
dst++;
oamSlot++;
if (pEquipment->suitType == SUIT_SUITLESS)
{
// Left part of charge bar
*dst++ = 0x0;
gOamData[oamSlot].split.y = 0xA;
gOamData[oamSlot].split.shape = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.y = HUD_CHARGE_BAR_Y;
gOamData[oamSlot].split.shape = OAM_SHAPE_HORIZONTAL;
*dst++ = 0x0;
gOamData[oamSlot].split.x = 0x1;
gOamData[oamSlot].split.size = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.x = HUD_CHARGE_BAR_X;
gOamData[oamSlot].split.size = OAM_SIZE_H_32x8;
*dst++ = 0x0;
gOamData[oamSlot].split.tileNum = 0x88;
gOamData[oamSlot].split.paletteNum = 0x4;
*dst++ = 0;
gOamData[oamSlot].split.tileNum = 0x20 * 4 + 0x8;
gOamData[oamSlot].split.paletteNum = 4;
dst++;
oamSlot++;
// Right part of charge bar
*dst++ = 0x0;
gOamData[oamSlot].split.y = 0xA;
gOamData[oamSlot].split.shape = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.y = HUD_CHARGE_BAR_Y;
gOamData[oamSlot].split.shape = OAM_SHAPE_HORIZONTAL;
*dst++ = 0x0;
gOamData[oamSlot].split.x = 0x21;
gOamData[oamSlot].split.size = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.x = HUD_CHARGE_BAR_X + 32;
gOamData[oamSlot].split.size = OAM_SIZE_H_32x8;
*dst++ = 0x0;
gOamData[oamSlot].split.tileNum = 0x8C;
gOamData[oamSlot].split.paletteNum = 0x4;
*dst++ = 0;
gOamData[oamSlot].split.tileNum = 0x20 * 4 + 0xC;
gOamData[oamSlot].split.paletteNum = 4;
dst++;
oamSlot++;
}
else
{
if (pEquipment->maxMissiles != 0x0)
if (pEquipment->maxMissiles != 0)
{
// Missile digits
*dst++ = 0x0;
gOamData[oamSlot].split.y = 0x2;
gOamData[oamSlot].split.shape = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.y = HUD_MISSILES_Y;
gOamData[oamSlot].split.shape = OAM_SHAPE_HORIZONTAL;
*dst++ = 0x0;
gOamData[oamSlot].split.x = 0x36;
gOamData[oamSlot].split.size = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.x = HUD_MISSILES_X;
gOamData[oamSlot].split.size = OAM_SIZE_H_32x8;
*dst++ = 0x0;
gOamData[oamSlot].split.tileNum = 0x70;
gOamData[oamSlot].split.paletteNum = 0x4;
*dst++ = 0;
gOamData[oamSlot].split.tileNum = 0x20 * 3 + 0x10;
gOamData[oamSlot].split.paletteNum = 4;
dst++;
oamSlot++;
}
if (pEquipment->maxSuperMissiles != 0x0)
if (pEquipment->maxSuperMissiles != 0)
{
// Super missile digits
*dst++ = 0x0;
gOamData[oamSlot].split.y = 0x2;
gOamData[oamSlot].split.shape = 0x1;
*dst++ = 0x0;
gOamData[oamSlot].split.x = 0x50;
gOamData[oamSlot].split.size = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.y = HUD_SUPER_MISSILES_Y;
gOamData[oamSlot].split.shape = OAM_SHAPE_HORIZONTAL;
*dst++ = 0x0;
gOamData[oamSlot].split.tileNum = 0x74;
gOamData[oamSlot].split.paletteNum = 0x4;
*dst++ = 0;
gOamData[oamSlot].split.x = HUD_SUPER_MISSILES_X;
gOamData[oamSlot].split.size = OAM_SIZE_H_32x8;
*dst++ = 0;
gOamData[oamSlot].split.tileNum = 0x20 * 3 + 0x14;
gOamData[oamSlot].split.paletteNum = 4;
dst++;
oamSlot++;
}
if (pEquipment->maxPowerBombs != 0x0)
if (pEquipment->maxPowerBombs != 0)
{
// Power bomb digits
*dst++ = 0x0;
gOamData[oamSlot].split.y = 0x2;
gOamData[oamSlot].split.shape = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.y = HUD_POWER_BOMBS_Y;
gOamData[oamSlot].split.shape = OAM_SHAPE_HORIZONTAL;
*dst++ = 0x0;
gOamData[oamSlot].split.x = 0x6A;
gOamData[oamSlot].split.size = 0x1;
*dst++ = 0;
gOamData[oamSlot].split.x = HUD_POWER_BOMBS_X;
gOamData[oamSlot].split.size = OAM_SIZE_H_32x8;
*dst++ = 0x0;
gOamData[oamSlot].split.tileNum = 0x58;
gOamData[oamSlot].split.paletteNum = 0x4;
*dst++ = 0;
gOamData[oamSlot].split.tileNum = 0x20 * 2 + 0x18;
gOamData[oamSlot].split.paletteNum = 4;
dst++;
oamSlot++;
@ -157,38 +180,38 @@ void HUDUpdateOAM(void)
}
// Minimap white square
*dst++ = 0;
gOamData[oamSlot].split.y = HUD_MINIMAP_SQUARE_Y;
gOamData[oamSlot].split.shape = OAM_SHAPE_SQUARE;
*dst++ = 0x0;
gOamData[oamSlot].split.y = 0xA;
gOamData[oamSlot].split.shape = 0x0;
*dst++ = 0;
gOamData[oamSlot].split.x = HUD_MINIMAP_SQUARE_X;
gOamData[oamSlot].split.size = OAM_SIZE_S_8x8;
*dst++ = 0x0;
gOamData[oamSlot].split.x = 0xDE;
gOamData[oamSlot].split.size = 0x0;
*dst++ = 0;
*dst++ = 0x0;
if (gFrameCounter8Bit & 0x8)
gOamData[oamSlot].split.tileNum = 0xBF;
if (MOD_BLOCK_AND(gFrameCounter8Bit, CONVERT_SECONDS(2.f / 15)))
gOamData[oamSlot].split.tileNum = 0x20 * 5 + 0x1F;
else
gOamData[oamSlot].split.tileNum = 0x140;
gOamData[oamSlot].split.paletteNum = 0x5;
gOamData[oamSlot].split.tileNum = 0x20 * 10;
gOamData[oamSlot].split.paletteNum = 5;
dst++;
oamSlot++;
// Minimap
*dst++ = 0x0;
gOamData[oamSlot].split.y = 0xFA;
gOamData[oamSlot].split.shape = 0x0;
*dst++ = 0;
gOamData[oamSlot].split.y = HUD_MINIMAP_Y;
gOamData[oamSlot].split.shape = OAM_SHAPE_SQUARE;
*dst++ = 0x0;
gOamData[oamSlot].split.x = 0xD6;
gOamData[oamSlot].split.size = 0x2;
*dst++ = 0;
gOamData[oamSlot].split.x = HUD_MINIMAP_X;
gOamData[oamSlot].split.size = OAM_SIZE_S_32x32;
*dst = 0x0;
gOamData[oamSlot].split.tileNum = 0xDC;
gOamData[oamSlot].split.paletteNum = 0x5;
*dst = 0;
gOamData[oamSlot].split.tileNum = 0x20 * 6 + 0x1C;
gOamData[oamSlot].split.paletteNum = 5;
oamSlot++;
}
@ -205,23 +228,23 @@ void HUDUpdateOAM(void)
* @param nbrTanks Number of energy tanks
* @param refillStage Refill stage
*/
void HUDUpdateEnergyTanks(u8* pDst, const u8* pSrcNormal, const u8* pSrcRefill, u8 nbrTanks, u8 refillStage)
void HudUpdateEnergyTanks(u8* pDst, const u8* pSrcNormal, const u8* pSrcRefill, u8 nbrTanks, u8 refillStage)
{
if (refillStage == 0x0)
if (refillStage == 0)
{
DMA_SET(3, pSrcRefill, pDst + 0x40, (DMA_ENABLE << 16) | 0x50);
DMA_SET(3, pSrcRefill, pDst + 0x40, C_32_2_16(DMA_ENABLE, 0x50));
}
else if (refillStage == 0x1)
{
DMA_SET(3, pSrcRefill + 0xA0 * refillStage, pDst + 0x40, (DMA_ENABLE << 16) | 0x50);
DMA_SET(3, pSrcRefill + 0xA0 * refillStage, pDst + 0x40, C_32_2_16(DMA_ENABLE, 0x50));
}
else if (refillStage == 0x2)
{
DMA_SET(3, pSrcRefill + 0xA0 * refillStage, pDst + 0x40, (DMA_ENABLE << 16) | 0x50);
DMA_SET(3, pSrcRefill + 0xA0 * refillStage, pDst + 0x40, C_32_2_16(DMA_ENABLE, 0x50));
}
else if (refillStage == 0x3)
{
DMA_SET(3, pSrcNormal + 0xA0 * nbrTanks, pDst + 0x40, (DMA_ENABLE << 16) | 0x50);
DMA_SET(3, pSrcNormal + 0xA0 * nbrTanks, pDst + 0x40, C_32_2_16(DMA_ENABLE, 0x50));
}
}
@ -259,7 +282,7 @@ void HudDrawEnergy(u8 fileNumber)
return;
}
else
dst = (VRAM_BASE + 0x10A00);
dst = VRAM_OBJ + 0xA00;
needUpdate = FALSE;
@ -317,7 +340,7 @@ void HudDrawEnergy(u8 fileNumber)
gEnergyDigits.tens = digit;
needUpdate++;
DMA_SET(3, &sEnergyDigitsTensGfx[digit * 32], dst, DMA_ENABLE << 16 | 16);
DMA_SET(3, &sEnergyDigitsTensGfx[digit * 32], dst, C_32_2_16(DMA_ENABLE, 16));
}
digit = energy % 10;
@ -326,7 +349,7 @@ void HudDrawEnergy(u8 fileNumber)
gEnergyDigits.ones = digit;
needUpdate++;
DMA_SET(3, &sEnergyDigitsOnesGfx[digit * 32], dst + 32, DMA_ENABLE << 16 | 16);
DMA_SET(3, &sEnergyDigitsOnesGfx[digit * 32], dst + 32, C_32_2_16(DMA_ENABLE, 16));
}
if (needUpdate)
@ -339,83 +362,83 @@ void HudDrawEnergy(u8 fileNumber)
switch (nbrTanks)
{
case 0:
DMA_SET(3, sEnergyTanksGfx_Zero, dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, sEnergyTanksGfx_Zero, dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 1:
DMA_SET(3, (sEnergyTanksGfx_One + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_One + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 2:
DMA_SET(3, (sEnergyTanksGfx_Two + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_Two + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 3:
DMA_SET(3, (sEnergyTanksGfx_Three + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_Three + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 4:
DMA_SET(3, (sEnergyTanksGfx_Four + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_Four + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 5:
DMA_SET(3, (sEnergyTanksGfx_Five + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_Five + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 6:
DMA_SET(3, (sEnergyTanksGfx_Six + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_Six + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 7:
DMA_SET(3, (sEnergyTanksGfx_Seven + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_Seven + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 8:
DMA_SET(3, (sEnergyTanksGfx_Eight + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_Eight + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 9:
DMA_SET(3, (sEnergyTanksGfx_Nine + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_Nine + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 10:
DMA_SET(3, (sEnergyTanksGfx_Ten + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_Ten + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 11:
DMA_SET(3, (sEnergyTanksGfx_Eleven + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_Eleven + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
case 12:
DMA_SET(3, (sEnergyTanksGfx_Twelve + (maxEnergy * 160)), dst + 64, DMA_ENABLE << 16 | 80);
DMA_SET(3, (sEnergyTanksGfx_Twelve + (maxEnergy * 160)), dst + 64, C_32_2_16(DMA_ENABLE, 80));
break;
}
}
if (gEnergyRefillAnimation != 0x0)
if (gEnergyRefillAnimation != 0)
{
if (gEnergyRefillAnimation == 0xD)
{
DMA_SET(3, &sEnergyDigitsRefill1Gfx[gEnergyDigits.tens * 32], dst, DMA_ENABLE << 16 | 16);
DMA_SET(3, &sEnergyDigitsRefill1Gfx[gEnergyDigits.ones * 32 + 10 * 32], dst + 32, DMA_ENABLE << 16 | 16);
DMA_SET(3, &sEnergyDigitsRefill1Gfx[gEnergyDigits.tens * 32], dst, C_32_2_16(DMA_ENABLE, 16));
DMA_SET(3, &sEnergyDigitsRefill1Gfx[gEnergyDigits.ones * 32 + 10 * 32], dst + 32, C_32_2_16(DMA_ENABLE, 16));
needUpdate = 0;
}
else if (gEnergyRefillAnimation == 0xA)
{
DMA_SET(3, &sEnergyDigitsRefill2Gfx[gEnergyDigits.tens * 32], dst, DMA_ENABLE << 16 | 16);
DMA_SET(3, &sEnergyDigitsRefill2Gfx[gEnergyDigits.ones * 32 + 10 * 32], dst + 32, DMA_ENABLE << 16 | 16);
DMA_SET(3, &sEnergyDigitsRefill2Gfx[gEnergyDigits.tens * 32], dst, C_32_2_16(DMA_ENABLE, 16));
DMA_SET(3, &sEnergyDigitsRefill2Gfx[gEnergyDigits.ones * 32 + 10 * 32], dst + 32, C_32_2_16(DMA_ENABLE, 16));
needUpdate = 1;
}
else if (gEnergyRefillAnimation == 0x4)
{
DMA_SET(3, &sEnergyDigitsRefill3Gfx[gEnergyDigits.tens * 32], dst, DMA_ENABLE << 16 | 16);
DMA_SET(3, &sEnergyDigitsRefill3Gfx[gEnergyDigits.ones * 32 + 10 * 32], dst + 32, DMA_ENABLE << 16 | 16);
DMA_SET(3, &sEnergyDigitsRefill3Gfx[gEnergyDigits.tens * 32], dst, C_32_2_16(DMA_ENABLE, 16));
DMA_SET(3, &sEnergyDigitsRefill3Gfx[gEnergyDigits.ones * 32 + 10 * 32], dst + 32, C_32_2_16(DMA_ENABLE, 16));
needUpdate = 2;
}
else if (gEnergyRefillAnimation == 0x1)
{
DMA_SET(3, &sEnergyDigitsTensGfx[gEnergyDigits.tens * 32], dst, DMA_ENABLE << 16 | 16);
DMA_SET(3, &sEnergyDigitsTensGfx[gEnergyDigits.ones * 32 + 10 * 32], dst + 32, DMA_ENABLE << 16 | 16);
DMA_SET(3, &sEnergyDigitsTensGfx[gEnergyDigits.tens * 32], dst, C_32_2_16(DMA_ENABLE, 16));
DMA_SET(3, &sEnergyDigitsTensGfx[gEnergyDigits.ones * 32 + 10 * 32], dst + 32, C_32_2_16(DMA_ENABLE, 16));
needUpdate = 3;
}
else
@ -423,51 +446,51 @@ void HudDrawEnergy(u8 fileNumber)
switch (nbrTanks)
{
case 1:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_One, sEnergyTanksRefillGfx_One, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_One, sEnergyTanksRefillGfx_One, nbrTanks, needUpdate);
break;
case 2:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_Two, sEnergyTanksRefillGfx_Two, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_Two, sEnergyTanksRefillGfx_Two, nbrTanks, needUpdate);
break;
case 3:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_Three, sEnergyTanksRefillGfx_Three, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_Three, sEnergyTanksRefillGfx_Three, nbrTanks, needUpdate);
break;
case 4:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_Four, sEnergyTanksRefillGfx_Four, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_Four, sEnergyTanksRefillGfx_Four, nbrTanks, needUpdate);
break;
case 5:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_Five, sEnergyTanksRefillGfx_Five, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_Five, sEnergyTanksRefillGfx_Five, nbrTanks, needUpdate);
break;
case 6:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_Six, sEnergyTanksRefillGfx_Six, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_Six, sEnergyTanksRefillGfx_Six, nbrTanks, needUpdate);
break;
case 7:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_Seven, sEnergyTanksRefillGfx_Seven, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_Seven, sEnergyTanksRefillGfx_Seven, nbrTanks, needUpdate);
break;
case 8:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_Eight, sEnergyTanksRefillGfx_Eight, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_Eight, sEnergyTanksRefillGfx_Eight, nbrTanks, needUpdate);
break;
case 9:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_Nine, sEnergyTanksRefillGfx_Nine, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_Nine, sEnergyTanksRefillGfx_Nine, nbrTanks, needUpdate);
break;
case 10:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_Ten, sEnergyTanksRefillGfx_Ten, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_Ten, sEnergyTanksRefillGfx_Ten, nbrTanks, needUpdate);
break;
case 11:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_Eleven, sEnergyTanksRefillGfx_Eleven, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_Eleven, sEnergyTanksRefillGfx_Eleven, nbrTanks, needUpdate);
break;
case 12:
HUDUpdateEnergyTanks(dst, sEnergyTanksGfx_Twelve, sEnergyTanksRefillGfx_Twelve, nbrTanks, needUpdate);
HudUpdateEnergyTanks(dst, sEnergyTanksGfx_Twelve, sEnergyTanksRefillGfx_Twelve, nbrTanks, needUpdate);
break;
}
}
@ -559,9 +582,9 @@ void HudDrawSuperMissileDigits(u16 tens, u16 ones, u16 highlightStatus)
gAmmoDigitsGfx[row] = sMissileDigitsGfx[highlightStatus];
row++;
highlightStatus += 0x3;
gAmmoDigitsGfx[row] = 0x0;
gAmmoDigitsGfx[row] = 0;
row++;
gAmmoDigitsGfx[row] = 0x0;
gAmmoDigitsGfx[row] = 0;
row++;
}
}
@ -604,9 +627,9 @@ void HudDrawPowerBombDigits(u16 tens, u16 ones, u16 highlightStatus)
gAmmoDigitsGfx[row] = sPowerBombDigitsGfx[highlightStatus];
row++;
highlightStatus += 0x3;
gAmmoDigitsGfx[row] = 0x0;
gAmmoDigitsGfx[row] = 0;
row++;
gAmmoDigitsGfx[row] = 0x0;
gAmmoDigitsGfx[row] = 0;
row++;
}
}
@ -689,10 +712,10 @@ void HudDrawMissiles(u8 updateHighlight)
// Update Gfx
HudDrawMissileDigits(hundreds, tens, ones, refillStage);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10E40, DMA_ENABLE << 16 | 32);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10E40, C_32_2_16(DMA_ENABLE, 32));
}
if (gMissileRefillAnimation != 0x0 && !updateHighlight)
if (gMissileRefillAnimation != 0 && !updateHighlight)
{
hundreds = gMissileDigits.hundreds;
tens = gMissileDigits.tens;
@ -715,23 +738,23 @@ void HudDrawMissiles(u8 updateHighlight)
if (gMissileRefillAnimation == 0xD)
{
missiles = 0x480;
DMA_SET(3, sMissileHUDGfx_Refill1, VRAM_BASE + 0x10E00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sMissileHUDGfx_Refill1, VRAM_BASE + 0x10E00, C_32_2_16(DMA_ENABLE, 32));
}
else if (gMissileRefillAnimation == 0xA)
{
missiles = 0x600;
DMA_SET(3, sMissileHUDGfx_Refill2, VRAM_BASE + 0x10E00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sMissileHUDGfx_Refill2, VRAM_BASE + 0x10E00, C_32_2_16(DMA_ENABLE, 32));
}
else if (gMissileRefillAnimation == 0x4)
{
missiles = 0x780;
DMA_SET(3, sMissileHUDGfx_Refill3, VRAM_BASE + 0x10E00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sMissileHUDGfx_Refill3, VRAM_BASE + 0x10E00, C_32_2_16(DMA_ENABLE, 32));
}
else if (gMissileRefillAnimation == 0x1)
{
needUpdate = gMissileHighlightStatus;
missiles = needUpdate * 384;
DMA_SET(3, sMissileHUDGfx_Inactive + (gMissileHighlightStatus * 64), VRAM_BASE + 0x10E00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sMissileHUDGfx_Inactive + (gMissileHighlightStatus * 64), VRAM_BASE + 0x10E00, C_32_2_16(DMA_ENABLE, 32));
}
else
return;
@ -742,7 +765,7 @@ void HudDrawMissiles(u8 updateHighlight)
refillStage += missiles;
HudDrawMissileDigits(hundreds, tens, ones, refillStage);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10E40, DMA_ENABLE << 16 | 32);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10E40, C_32_2_16(DMA_ENABLE, 32));
}
}
@ -822,10 +845,10 @@ void HudDrawPowerBomb(u8 updateHighlight)
// Update Gfx
HudDrawPowerBombDigits(tens, ones, refillStage);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10B40, DMA_ENABLE << 16 | 32);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10B40, C_32_2_16(DMA_ENABLE, 32));
}
if (gPowerBombRefillAnimation != 0x0 && !updateHighlight)
if (gPowerBombRefillAnimation != 0 && !updateHighlight)
{
hundreds = gPowerBombDigits.hundreds;
tens = gPowerBombDigits.tens;
@ -847,23 +870,23 @@ void HudDrawPowerBomb(u8 updateHighlight)
if (gPowerBombRefillAnimation == 0xD)
{
powerBombs = 0x480;
DMA_SET(3, sPowerBombHUDGfx_Refill1, VRAM_BASE + 0x10B00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sPowerBombHUDGfx_Refill1, VRAM_BASE + 0x10B00, C_32_2_16(DMA_ENABLE, 32));
}
else if (gPowerBombRefillAnimation == 0xA)
{
powerBombs = 0x600;
DMA_SET(3, sPowerBombHUDGfx_Refill2, VRAM_BASE + 0x10B00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sPowerBombHUDGfx_Refill2, VRAM_BASE + 0x10B00, C_32_2_16(DMA_ENABLE, 32));
}
else if (gPowerBombRefillAnimation == 0x4)
{
powerBombs = 0x780;
DMA_SET(3, sPowerBombHUDGfx_Refill3, VRAM_BASE + 0x10B00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sPowerBombHUDGfx_Refill3, VRAM_BASE + 0x10B00, C_32_2_16(DMA_ENABLE, 32));
}
else if (gPowerBombRefillAnimation == 0x1)
{
needUpdate = gPowerBombHighlightStatus;
powerBombs = needUpdate * 384;
DMA_SET(3, sPowerBombHUDGfx_Inactive + (gPowerBombHighlightStatus * 64), VRAM_BASE + 0x10B00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sPowerBombHUDGfx_Inactive + (gPowerBombHighlightStatus * 64), VRAM_BASE + 0x10B00, C_32_2_16(DMA_ENABLE, 32));
}
else
return;
@ -873,7 +896,7 @@ void HudDrawPowerBomb(u8 updateHighlight)
refillStage += powerBombs;
HudDrawPowerBombDigits(tens, ones, refillStage);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10B40, DMA_ENABLE << 16 | 32);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10B40, C_32_2_16(DMA_ENABLE, 32));
}
}
@ -953,10 +976,10 @@ void HudDrawSuperMissiles(u8 updateHighlight)
// Update Gfx
HudDrawSuperMissileDigits(tens, ones, refillStage);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10EC0, DMA_ENABLE << 16 | 32);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10EC0, C_32_2_16(DMA_ENABLE, 32));
}
if (gSuperMissileRefillAnimation != 0x0 && !updateHighlight)
if (gSuperMissileRefillAnimation != 0 && !updateHighlight)
{
hundreds = gSuperMissileDigits.hundreds;
tens = gSuperMissileDigits.tens;
@ -978,23 +1001,23 @@ void HudDrawSuperMissiles(u8 updateHighlight)
if (gSuperMissileRefillAnimation == 0xD)
{
superMissiles = 0x480;
DMA_SET(3, sSuperMissileHUDGfx_Refill1, VRAM_BASE + 0x10E80, DMA_ENABLE << 16 | 32);
DMA_SET(3, sSuperMissileHUDGfx_Refill1, VRAM_BASE + 0x10E80, C_32_2_16(DMA_ENABLE, 32));
}
else if (gSuperMissileRefillAnimation == 0xA)
{
superMissiles = 0x600;
DMA_SET(3, sSuperMissileHUDGfx_Refill2, VRAM_BASE + 0x10E80, DMA_ENABLE << 16 | 32);
DMA_SET(3, sSuperMissileHUDGfx_Refill2, VRAM_BASE + 0x10E80, C_32_2_16(DMA_ENABLE, 32));
}
else if (gSuperMissileRefillAnimation == 0x4)
{
superMissiles = 0x780;
DMA_SET(3, sSuperMissileHUDGfx_Refill3, VRAM_BASE + 0x10E80, DMA_ENABLE << 16 | 32);
DMA_SET(3, sSuperMissileHUDGfx_Refill3, VRAM_BASE + 0x10E80, C_32_2_16(DMA_ENABLE, 32));
}
else if (gSuperMissileRefillAnimation == 0x1)
{
needUpdate = gSuperMissileHighlightStatus;
superMissiles = needUpdate * 384;
DMA_SET(3, sSuperMissileHUDGfx_Inactive + (gSuperMissileHighlightStatus * 64), VRAM_BASE + 0x10E80, DMA_ENABLE << 16 | 32);
DMA_SET(3, sSuperMissileHUDGfx_Inactive + (gSuperMissileHighlightStatus * 64), VRAM_BASE + 0x10E80, C_32_2_16(DMA_ENABLE, 32));
}
else
return;
@ -1004,7 +1027,7 @@ void HudDrawSuperMissiles(u8 updateHighlight)
refillStage += superMissiles;
HudDrawSuperMissileDigits(tens, ones, refillStage);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10EC0, DMA_ENABLE << 16 | 32);
DMA_SET(3, gAmmoDigitsGfx, VRAM_BASE + 0x10EC0, C_32_2_16(DMA_ENABLE, 32));
}
}
@ -1012,21 +1035,21 @@ void HudDrawSuperMissiles(u8 updateHighlight)
* @brief 5352c | 3bc | Updates the Gfx of the HUD
*
*/
void HUDUpdateGfx(void)
void HudUpdateGfx(void)
{
// Update missile Gfx
if (gMissileHighlightStatus == HIGHLIGHT_STATUS_HIGHLIGHTED)
{
if (!(gSamusWeaponInfo.weaponHighlighted & WH_MISSILE))
{
if (gSamusWeaponInfo.missilesSelected || gEquipment.currentMissiles == 0x0)
if (gSamusWeaponInfo.missilesSelected || gEquipment.currentMissiles == 0)
{
DMA_SET(3, sMissileHUDGfx_Inactive, VRAM_BASE + 0x10E00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sMissileHUDGfx_Inactive, VRAM_BASE + 0x10E00, C_32_2_16(DMA_ENABLE, 32));
gMissileHighlightStatus = HIGHLIGHT_STATUS_NOT_HIGHLIGHTED;
}
else
{
DMA_SET(3, sMissileHUDGfx_Selected, VRAM_BASE + 0x10E00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sMissileHUDGfx_Selected, VRAM_BASE + 0x10E00, C_32_2_16(DMA_ENABLE, 32));
gMissileHighlightStatus = HIGHLIGHT_STATUS_SELECTED;
}
@ -1037,9 +1060,9 @@ void HUDUpdateGfx(void)
{
if (!(gSamusWeaponInfo.weaponHighlighted & WH_MISSILE))
{
if (gSamusWeaponInfo.missilesSelected || gEquipment.currentMissiles == 0x0)
if (gSamusWeaponInfo.missilesSelected || gEquipment.currentMissiles == 0)
{
DMA_SET(3, sMissileHUDGfx_Inactive, VRAM_BASE + 0x10E00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sMissileHUDGfx_Inactive, VRAM_BASE + 0x10E00, C_32_2_16(DMA_ENABLE, 32));
gMissileHighlightStatus = HIGHLIGHT_STATUS_NOT_HIGHLIGHTED;
HudDrawMissiles(TRUE);
@ -1047,7 +1070,7 @@ void HUDUpdateGfx(void)
}
else
{
DMA_SET(3, sMissileHUDGfx_Active, VRAM_BASE + 0x10E00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sMissileHUDGfx_Active, VRAM_BASE + 0x10E00, C_32_2_16(DMA_ENABLE, 32));
gMissileHighlightStatus = HIGHLIGHT_STATUS_HIGHLIGHTED;
HudDrawMissiles(TRUE);
@ -1057,16 +1080,16 @@ void HUDUpdateGfx(void)
{
if (gSamusWeaponInfo.weaponHighlighted & WH_MISSILE)
{
DMA_SET(3, sMissileHUDGfx_Active, VRAM_BASE + 0x10E00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sMissileHUDGfx_Active, VRAM_BASE + 0x10E00, C_32_2_16(DMA_ENABLE, 32));
gMissileHighlightStatus = HIGHLIGHT_STATUS_HIGHLIGHTED;
HudDrawMissiles(TRUE);
}
else
{
if (!gSamusWeaponInfo.missilesSelected && gEquipment.currentMissiles != 0x0)
if (!gSamusWeaponInfo.missilesSelected && gEquipment.currentMissiles != 0)
{
DMA_SET(3, sMissileHUDGfx_Selected, VRAM_BASE + 0x10E00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sMissileHUDGfx_Selected, VRAM_BASE + 0x10E00, C_32_2_16(DMA_ENABLE, 32));
gMissileHighlightStatus = HIGHLIGHT_STATUS_SELECTED;
HudDrawMissiles(TRUE);
@ -1079,14 +1102,14 @@ void HUDUpdateGfx(void)
{
if (!(gSamusWeaponInfo.weaponHighlighted & WH_POWER_BOMB))
{
if (gEquipment.currentPowerBombs != 0x0)
if (gEquipment.currentPowerBombs != 0)
{
DMA_SET(3, sPowerBombHUDGfx_Selected, VRAM_BASE + 0x10B00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sPowerBombHUDGfx_Selected, VRAM_BASE + 0x10B00, C_32_2_16(DMA_ENABLE, 32));
gPowerBombHighlightStatus = HIGHLIGHT_STATUS_SELECTED;
}
else
{
DMA_SET(3, sPowerBombHUDGfx_Inactive, VRAM_BASE + 0x10B00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sPowerBombHUDGfx_Inactive, VRAM_BASE + 0x10B00, C_32_2_16(DMA_ENABLE, 32));
gPowerBombHighlightStatus = HIGHLIGHT_STATUS_NOT_HIGHLIGHTED;
}
@ -1098,9 +1121,9 @@ void HUDUpdateGfx(void)
{
if (!(gSamusWeaponInfo.weaponHighlighted & WH_POWER_BOMB))
{
if (gEquipment.currentPowerBombs == 0x0)
if (gEquipment.currentPowerBombs == 0)
{
DMA_SET(3, sPowerBombHUDGfx_Inactive, VRAM_BASE + 0x10B00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sPowerBombHUDGfx_Inactive, VRAM_BASE + 0x10B00, C_32_2_16(DMA_ENABLE, 32));
gPowerBombHighlightStatus = HIGHLIGHT_STATUS_NOT_HIGHLIGHTED;
HudDrawPowerBomb(TRUE);
@ -1108,7 +1131,7 @@ void HUDUpdateGfx(void)
}
else
{
DMA_SET(3, sPowerBombHUDGfx_Active, VRAM_BASE + 0x10B00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sPowerBombHUDGfx_Active, VRAM_BASE + 0x10B00, C_32_2_16(DMA_ENABLE, 32));
gPowerBombHighlightStatus = HIGHLIGHT_STATUS_HIGHLIGHTED;
HudDrawPowerBomb(TRUE);
@ -1118,16 +1141,16 @@ void HUDUpdateGfx(void)
{
if (gSamusWeaponInfo.weaponHighlighted & WH_POWER_BOMB)
{
DMA_SET(3, sPowerBombHUDGfx_Active, VRAM_BASE + 0x10B00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sPowerBombHUDGfx_Active, VRAM_BASE + 0x10B00, C_32_2_16(DMA_ENABLE, 32));
gPowerBombHighlightStatus = HIGHLIGHT_STATUS_HIGHLIGHTED;
HudDrawPowerBomb(TRUE);
}
else
{
if (gEquipment.currentPowerBombs != 0x0)
if (gEquipment.currentPowerBombs != 0)
{
DMA_SET(3, sPowerBombHUDGfx_Selected, VRAM_BASE + 0x10B00, DMA_ENABLE << 16 | 32);
DMA_SET(3, sPowerBombHUDGfx_Selected, VRAM_BASE + 0x10B00, C_32_2_16(DMA_ENABLE, 32));
gPowerBombHighlightStatus = HIGHLIGHT_STATUS_SELECTED;
HudDrawPowerBomb(TRUE);
@ -1142,12 +1165,12 @@ void HUDUpdateGfx(void)
{
if (!gSamusWeaponInfo.missilesSelected)
{
DMA_SET(3, sSuperMissileHUDGfx_Inactive, VRAM_BASE + 0x10E80, DMA_ENABLE << 16 | 32);
DMA_SET(3, sSuperMissileHUDGfx_Inactive, VRAM_BASE + 0x10E80, C_32_2_16(DMA_ENABLE, 32));
gSuperMissileHighlightStatus = HIGHLIGHT_STATUS_NOT_HIGHLIGHTED;
}
else
{
DMA_SET(3, sSuperMissileHUDGfx_Selected, VRAM_BASE + 0x10E80, DMA_ENABLE << 16 | 32);
DMA_SET(3, sSuperMissileHUDGfx_Selected, VRAM_BASE + 0x10E80, C_32_2_16(DMA_ENABLE, 32));
gSuperMissileHighlightStatus = HIGHLIGHT_STATUS_SELECTED;
}
@ -1160,7 +1183,7 @@ void HUDUpdateGfx(void)
{
if (!gSamusWeaponInfo.missilesSelected)
{
DMA_SET(3, sSuperMissileHUDGfx_Inactive, VRAM_BASE + 0x10E80, DMA_ENABLE << 16 | 32);
DMA_SET(3, sSuperMissileHUDGfx_Inactive, VRAM_BASE + 0x10E80, C_32_2_16(DMA_ENABLE, 32));
gSuperMissileHighlightStatus = HIGHLIGHT_STATUS_NOT_HIGHLIGHTED;
HudDrawSuperMissiles(TRUE);
@ -1168,7 +1191,7 @@ void HUDUpdateGfx(void)
}
else
{
DMA_SET(3, sSuperMissileHUDGfx_Active, VRAM_BASE + 0x10E80, DMA_ENABLE << 16 | 32);
DMA_SET(3, sSuperMissileHUDGfx_Active, VRAM_BASE + 0x10E80, C_32_2_16(DMA_ENABLE, 32));
gSuperMissileHighlightStatus = HIGHLIGHT_STATUS_HIGHLIGHTED;
HudDrawSuperMissiles(TRUE);
@ -1178,7 +1201,7 @@ void HUDUpdateGfx(void)
{
if (gSamusWeaponInfo.weaponHighlighted & WH_SUPER_MISSILE)
{
DMA_SET(3, sSuperMissileHUDGfx_Active, VRAM_BASE + 0x10E80, DMA_ENABLE << 16 | 32);
DMA_SET(3, sSuperMissileHUDGfx_Active, VRAM_BASE + 0x10E80, C_32_2_16(DMA_ENABLE, 32));
gSuperMissileHighlightStatus = HIGHLIGHT_STATUS_HIGHLIGHTED;
HudDrawSuperMissiles(TRUE);
@ -1187,7 +1210,7 @@ void HUDUpdateGfx(void)
{
if (gSamusWeaponInfo.missilesSelected)
{
DMA_SET(3, sSuperMissileHUDGfx_Selected, VRAM_BASE + 0x10E80, DMA_ENABLE << 16 | 32);
DMA_SET(3, sSuperMissileHUDGfx_Selected, VRAM_BASE + 0x10E80, C_32_2_16(DMA_ENABLE, 32));
gSuperMissileHighlightStatus = HIGHLIGHT_STATUS_SELECTED;
HudDrawSuperMissiles(TRUE);
@ -1199,7 +1222,7 @@ void HUDUpdateGfx(void)
if (gUpdateMinimapFlag != MINIMAP_UPDATE_FLAG_NONE)
{
gUpdateMinimapFlag--;
DMA_SET(3, (gMinimapTilesGfx + gUpdateMinimapFlag * 24), (VRAM_BASE + 0x11F80) + (gUpdateMinimapFlag * 1024), DMA_ENABLE << 16 | 48);
DMA_SET(3, (gMinimapTilesGfx + gUpdateMinimapFlag * 24), (VRAM_BASE + 0x11F80) + (gUpdateMinimapFlag * 1024), C_32_2_16(DMA_ENABLE, 48));
}
}
@ -1246,10 +1269,10 @@ void HudDraw(void)
HudDrawPowerBomb(FALSE);
HudDrawSuperMissiles(FALSE);
HUDUpdateGfx();
HudUpdateGfx();
if (gEquipment.suitType == SUIT_SUITLESS)
HudDrawSuitless();
HUDUpdateOAM();
HudUpdateOam();
}

View File

@ -21,7 +21,7 @@
*/
void HudGenericLoadCommonSpriteGfx(void)
{
DMA_SET(3, sCommonSpritesGfx, VRAM_BASE + 0x10800, C_32_2_16(DMA_ENABLE, 0x1C00));
DMA_SET(3, sCommonSpritesGfx, VRAM_OBJ + 0x800, C_32_2_16(DMA_ENABLE, 0x1C00));
}
/**

View File

@ -900,7 +900,7 @@ void UpdateAnimatedPaletteAfterTransitionOrReload(void)
{
if (gPauseScreenFlag)
{
if (gAnimatedGraphicsEntry.palette != 0) // FIXME add symbol for ewram address
if (gAnimatedGraphicsEntry.palette != 0)
DMA_SET(3, ANIMATED_PALETTE_EWRAM, ANIMATED_PALETTE_PALRAM, C_32_2_16(DMA_ENABLE, 16));
}
else

View File

@ -11,7 +11,7 @@ void InGameTimerUpdate(void)
return;
gInGameTimer.frames++;
if (gInGameTimer.frames > 63)
if (gInGameTimer.frames >= SIMULATED_FPS)
{
gInGameTimer.frames = 0;
gInGameTimer.seconds++;

View File

@ -73,8 +73,8 @@ void IntroInit(void)
DMA_SET(3, &zero, &gNonGameplayRAM, C_32_2_16(DMA_ENABLE | DMA_SRC_FIXED | DMA_32BIT, sizeof(gNonGameplayRAM) / 4));
INTRO_DATA.scaling = Q_8_8(.125f);
INTRO_DATA.charDrawerX = 0x38;
INTRO_DATA.charDrawerY = 0x60;
INTRO_DATA.charDrawerX = 56;
INTRO_DATA.charDrawerY = SCREEN_SIZE_Y / 2 + 16;
ClearGfxRam();
@ -116,12 +116,12 @@ void IntroInit(void)
INTRO_DATA.dispcnt = DCNT_OBJ;
INTRO_DATA.bldcnt = BLDCNT_SCREEN_FIRST_TARGET | BLDCNT_ALPHA_BLENDING_EFFECT | BLDCNT_BRIGHTNESS_INCREASE_EFFECT;
gWrittenToBLDY_NonGameplay = 16;
gWrittenToBLDY_NonGameplay = BLDY_MAX_VALUE;
IntroVBlank();
}
void IntroTextProcessOAM(void)
void IntroTextProcessOam(void)
{
const u16* src;
u16* dst;
@ -150,17 +150,17 @@ void IntroTextProcessOAM(void)
dst = (u16*)gOamData;
i = 0;
yPosition = BLOCK_SIZE * 2;
xPosition = BLOCK_SIZE + QUARTER_BLOCK_SIZE * 3 + PIXEL_SIZE * 2;
yPosition = SCREEN_SIZE_Y * 0.8f;
xPosition = SCREEN_SIZE_X / 2;
if (INTRO_DATA.nextCharacter != 0)
if (INTRO_DATA.finalCharacter != 0)
{
src = INTRO_DATA.pTextOamFramePointer;
partCount = *src++;
for (; i < partCount; i++)
{
// Brackets are necesary
if (i >= INTRO_DATA.nextCharacter)
if (i >= INTRO_DATA.finalCharacter)
{
break;
}
@ -176,7 +176,7 @@ void IntroTextProcessOAM(void)
gOamData[i].split.x = MOD_AND(part + xPosition, 512);
*dst++ = *src++;
if (i == INTRO_DATA.nextCharacter - 1)
if (i == INTRO_DATA.finalCharacter - 1)
gOamData[i].split.paletteNum = INTRO_DATA.characterPalette;
else
gOamData[i].split.paletteNum = 0;
@ -222,21 +222,21 @@ void IntroTextProcessOAM(void)
u8 IntroProcessText(u8 action, u16 indent)
{
u8 dontProcess;
u8 flag_unk2;
u8 skipCharacter;
u8 newLine;
u8 flag_unk3;
s32 previousY;
s32 previousX;
s32 newY;
// TODO macro
do{newY = (s16)indent;}while(0);
dontProcess = FALSE;
flag_unk2 = FALSE;
skipCharacter = FALSE;
newLine = FALSE;
flag_unk3 = FALSE;
previousY = INTRO_DATA.charDrawerX;
previousX = INTRO_DATA.charDrawerX;
switch (action)
{
@ -256,7 +256,7 @@ u8 IntroProcessText(u8 action, u16 indent)
case INTRO_TEXT_ACTION_START:
if (INTRO_DATA.unk_A > 3)
{
INTRO_DATA.nextCharacter += 2;
INTRO_DATA.finalCharacter += 2;
INTRO_DATA.currentCharacter++;
flag_unk3++;
}
@ -265,10 +265,12 @@ u8 IntroProcessText(u8 action, u16 indent)
case INTRO_TEXT_ACTION_SPACE:
if (INTRO_DATA.unk_A == 1)
{
INTRO_DATA.charDrawerX += 8;
}
else if (INTRO_DATA.unk_A > 3)
{
INTRO_DATA.nextCharacter++;
INTRO_DATA.finalCharacter++;
INTRO_DATA.currentCharacter++;
flag_unk3++;
}
@ -279,8 +281,8 @@ u8 IntroProcessText(u8 action, u16 indent)
case INTRO_TEXT_ACTION_NEW_LINE:
newLine++;
case INTRO_TEXT_ACTION_UNKNOWN:
flag_unk2++;
case INTRO_TEXT_ACTION_SKIP_CHARACTER:
skipCharacter++;
}
if (!dontProcess)
@ -297,10 +299,10 @@ u8 IntroProcessText(u8 action, u16 indent)
if (newLine)
{
INTRO_DATA.charDrawerX = newY;
INTRO_DATA.charDrawerY += 0x18;
INTRO_DATA.charDrawerY += 24;
}
else
INTRO_DATA.charDrawerX += 0x8;
INTRO_DATA.charDrawerX += 8;
break;
case 4:
@ -309,15 +311,16 @@ u8 IntroProcessText(u8 action, u16 indent)
case 5:
INTRO_DATA.currentCharacter++;
if (flag_unk2)
INTRO_DATA.nextCharacter += 2;
if (skipCharacter)
INTRO_DATA.finalCharacter += 2;
else
INTRO_DATA.nextCharacter++;
INTRO_DATA.finalCharacter++;
flag_unk3++;
}
}
if (previousY != INTRO_DATA.charDrawerX && action != INTRO_TEXT_ACTION_SPACE)
// Check play letter sound
if (previousX != INTRO_DATA.charDrawerX && action != INTRO_TEXT_ACTION_SPACE)
SoundPlay(SOUND_INTRO_TEXT_LETTER);
if (flag_unk3 != 0)
@ -354,7 +357,7 @@ u8 IntroEmergencyOrder(void)
if (textResult == 2)
{
INTRO_DATA.stage++;
INTRO_DATA.nextCharacter = 0;
INTRO_DATA.finalCharacter = 0;
INTRO_DATA.currentCharacter = 0;
INTRO_DATA.unk_A = 0;
INTRO_DATA.timer = 0;
@ -367,7 +370,7 @@ u8 IntroEmergencyOrder(void)
else
{
INTRO_DATA.pTextOamFramePointer = sIntroEmergencyOrderTextOAM;
IntroTextProcessOAM();
IntroTextProcessOam();
if (textResult != 0)
INTRO_DATA.unk_A = 0;
else
@ -381,7 +384,7 @@ u8 IntroEmergencyOrder(void)
* @brief 807b8 | 134 | Processes the OAM for the ship flying towards the camera
*
*/
void IntroShipFlyingTowardsCameraProcessOAM(void)
void IntroShipFlyingTowardsCameraProcessOam(void)
{
const u16* src;
u16* dst;
@ -393,15 +396,15 @@ void IntroShipFlyingTowardsCameraProcessOAM(void)
dst = (u16*)gOamData;
if (INTRO_DATA.timer < 4)
if (INTRO_DATA.timer < CONVERT_SECONDS(1.f / 15))
INTRO_DATA.shipFlyingTowardsCameraY += 8;
else if (INTRO_DATA.timer < 8)
else if (INTRO_DATA.timer < CONVERT_SECONDS(2.f / 15))
INTRO_DATA.shipFlyingTowardsCameraY += 6;
else if (INTRO_DATA.timer < 16)
else if (INTRO_DATA.timer < CONVERT_SECONDS(4.f / 15))
INTRO_DATA.shipFlyingTowardsCameraY += 3;
else if (INTRO_DATA.timer < 20)
else if (INTRO_DATA.timer < CONVERT_SECONDS(5.f / 15))
INTRO_DATA.shipFlyingTowardsCameraY += 1;
else if (INTRO_DATA.timer < 28)
else if (INTRO_DATA.timer < CONVERT_SECONDS(7.f / 15))
INTRO_DATA.shipFlyingTowardsCameraY -= 1;
if (INTRO_DATA.scaling < Q_8_8(.5f))
@ -457,24 +460,24 @@ u8 IntroShipFlyingTowardsCamera(void)
gWrittenToBLDALPHA_H = 7;
break;
case 1:
case DELTA_TIME:
INTRO_DATA.dispcnt = DCNT_BG0 | DCNT_OBJ;
SoundPlay(MUSIC_INTRO);
SoundPlay(SOUND_INTRO_SHIP_FLYING_TOWARDS_CAMERA);
break;
case 0x20:
case CONVERT_SECONDS(.5f + 1.f / 30):
INTRO_DATA.dispcnt = 0;
INTRO_DATA.bldcnt = 0;
INTRO_DATA.stage++;
ended = TRUE;
}
IntroShipFlyingTowardsCameraProcessOAM();
IntroShipFlyingTowardsCameraProcessOam();
if (ended)
INTRO_DATA.timer = 0;
else
INTRO_DATA.timer++;
APPLY_DELTA_TIME_INC(INTRO_DATA.timer);
return FALSE;
}
@ -496,20 +499,20 @@ u8 IntroSamusInHerShip(void)
LZ77UncompVRAM(sIntroSamusInHerShipGfx, VRAM_BASE);
break;
case 1:
case DELTA_TIME * 1:
LZ77UncompVRAM(sIntroSamusInHerShipTileTable, VRAM_BASE + 0x8000);
break;
case 2:
case DELTA_TIME * 2:
DMA_SET(3, sIntroSamusInHerShipPal, PALRAM_BASE, C_32_2_16(DMA_ENABLE, ARRAY_SIZE(sIntroSamusInHerShipPal)));
break;
case 3:
case DELTA_TIME * 3:
INTRO_DATA.dispcnt = DCNT_BG0;
SoundPlay(SOUND_INTRO_SHIP_INTERIOR);
break;
case 0x50:
case CONVERT_SECONDS(1.f) + ONE_THIRD_SECOND:
INTRO_DATA.dispcnt = 0;
SoundFade(SOUND_INTRO_SHIP_INTERIOR, 0);
INTRO_DATA.stage++;
@ -534,7 +537,9 @@ u8 IntroSamusInHerShip(void)
INTRO_DATA.unk_A = 0;
}
else
INTRO_DATA.timer++;
{
APPLY_DELTA_TIME_INC(INTRO_DATA.timer);
}
return FALSE;
}
@ -568,7 +573,7 @@ u8 IntroExterminate(void)
if (textResult == 2)
{
INTRO_DATA.stage++;
INTRO_DATA.nextCharacter = 0;
INTRO_DATA.finalCharacter = 0;
INTRO_DATA.currentCharacter = 0;
INTRO_DATA.unk_A = 0;
INTRO_DATA.timer = 0;
@ -580,7 +585,7 @@ u8 IntroExterminate(void)
else
{
INTRO_DATA.pTextOamFramePointer = sIntroExterminateAllTextOAM;
IntroTextProcessOAM();
IntroTextProcessOam();
if (textResult != 0)
INTRO_DATA.unk_A = 0;
else
@ -761,7 +766,7 @@ u8 IntroDefeat(void)
if (textResult == 2)
{
INTRO_DATA.stage++;
INTRO_DATA.nextCharacter = 0;
INTRO_DATA.finalCharacter = 0;
INTRO_DATA.currentCharacter = 0;
INTRO_DATA.unk_A = 0;
INTRO_DATA.timer = 0;
@ -771,7 +776,7 @@ u8 IntroDefeat(void)
else
{
INTRO_DATA.pTextOamFramePointer = sIntroDefeatTheTextOAM;
IntroTextProcessOAM();
IntroTextProcessOam();
if (textResult != 0)
INTRO_DATA.unk_A = 0;
else

View File

@ -1,5 +1,8 @@
#include "sprites_AI/falling_chozo_pillar.h"
#include "sprites_AI/ruins_test.h"
#include "macros.h"
#include "gba/display.h"
#include "data/sprites/falling_chozo_pillar.h"
@ -21,33 +24,34 @@ void FallingChozoPillar(void)
switch (gCurrentSprite.pose)
{
case 0x0:
case SPRITE_POSE_UNINITIALIZED:
gCurrentSprite.status |= SPRITE_STATUS_NOT_DRAWN;
gCurrentSprite.xPosition += 0x20;
gCurrentSprite.xPosition += HALF_BLOCK_SIZE;
gCurrentSprite.hitboxTop = -0x100;
gCurrentSprite.hitboxBottom = 0x0;
gCurrentSprite.hitboxLeft = -0x80;
gCurrentSprite.hitboxRight = 0x80;
gCurrentSprite.hitboxTop = -(BLOCK_SIZE * 4);
gCurrentSprite.hitboxBottom = 0;
gCurrentSprite.hitboxLeft = -(BLOCK_SIZE * 2);
gCurrentSprite.hitboxRight = BLOCK_SIZE * 2;
gCurrentSprite.drawDistanceTop = 0x40;
gCurrentSprite.drawDistanceBottom = 0x0;
gCurrentSprite.drawDistanceHorizontal = 0x20;
gCurrentSprite.drawDistanceTop = SUB_PIXEL_TO_PIXEL(BLOCK_SIZE * 4);
gCurrentSprite.drawDistanceBottom = SUB_PIXEL_TO_PIXEL(0);
gCurrentSprite.drawDistanceHorizontal = SUB_PIXEL_TO_PIXEL(BLOCK_SIZE * 2);
gCurrentSprite.samusCollision = SSC_NONE;
gCurrentSprite.bgPriority = gIoRegistersBackup.BG1CNT & 0x3;
gCurrentSprite.bgPriority = BGCNT_GET_PRIORITY(gIoRegistersBackup.BG1CNT);
gCurrentSprite.pOam = sFallingChozoPillarOAM_Falling;
gCurrentSprite.currentAnimationFrame = 0x0;
gCurrentSprite.animationDurationCounter = 0x0;
gCurrentSprite.currentAnimationFrame = 0;
gCurrentSprite.animationDurationCounter = 0;
gCurrentSprite.pose = FALLING_CHOZO_PILLAR_POSE_CHECK_SUIT_ANIM_ENDED;
gCurrentSprite.yPositionSpawn = 0x100;
gCurrentSprite.work0 = 0x0;
gCurrentSprite.yPositionSpawn = CONVERT_SECONDS(4.25f + 1.f / 60);
gCurrentSprite.work0 = 0;
break;
case FALLING_CHOZO_PILLAR_POSE_CHECK_SUIT_ANIM_ENDED:
if (gSubSpriteData1.workVariable3 == RUINS_TEST_FIGHT_STAGE_SUIT_ANIM_ENDED) // Check suit animation ended
// Check suit animation ended
if (gSubSpriteData1.workVariable3 == RUINS_TEST_FIGHT_STAGE_SUIT_ANIM_ENDED)
{
gCurrentSprite.status &= ~SPRITE_STATUS_NOT_DRAWN;
gCurrentSprite.pose = FALLING_CHOZO_PILLAR_POSE_CHECK_ON_SCREEN;
@ -64,38 +68,39 @@ void FallingChozoPillar(void)
break;
case FALLING_CHOZO_PILLAR_POSE_FALLING:
if (gCurrentSprite.yPositionSpawn != 0x0)
if (gCurrentSprite.yPositionSpawn != 0)
{
if (!(gCurrentSprite.work0++ & 0xF))
{
// Start screen shake/play particle
ScreenShakeStartVertical(0x14, 0x81);
if (gFrameCounter8Bit & 0x1)
ScreenShakeStartVertical(ONE_THIRD_SECOND, 0x80 | 1);
if (MOD_AND(gFrameCounter8Bit, CONVERT_SECONDS(1.f / 30)))
effect = PE_SECOND_MEDIUM_DUST;
else
effect = PE_SECOND_TWO_MEDIUM_DUST;
ParticleSet(gCurrentSprite.yPosition - 0x100, gCurrentSprite.xPosition - 0x38 + gSpriteRng * 0x8, effect);
ParticleSet(gCurrentSprite.yPosition - BLOCK_SIZE * 4,
gCurrentSprite.xPosition - (BLOCK_SIZE - EIGHTH_BLOCK_SIZE) + gSpriteRng * EIGHTH_BLOCK_SIZE, effect);
}
gCurrentSprite.yPositionSpawn--; // Timer
// Timer
APPLY_DELTA_TIME_DEC(gCurrentSprite.yPositionSpawn);
gCurrentSprite.yPosition++; // Move down
}
else
{
// Timer done, set fallen behavior
gCurrentSprite.pose = FALLING_CHOZO_PILLAR_POSE_FALLEN;
ScreenShakeStartVertical(0x3C, 0x81);
gCurrentSprite.work0 = 0x28;
ScreenShakeStartVertical(CONVERT_SECONDS(1.f), 0x80 | 1);
gCurrentSprite.work0 = TWO_THIRD_SECOND;
}
break;
case FALLING_CHOZO_PILLAR_POSE_FALLEN:
gCurrentSprite.work0--;
if (gCurrentSprite.work0 == 0x0)
APPLY_DELTA_TIME_DEC(gCurrentSprite.work0);
if (gCurrentSprite.work0 == 0)
{
// Unknown, AI doesn't handle this case, most likely removed code
gCurrentSprite.pose = 0x29;
gCurrentSprite.pose = FALLING_CHOZO_PILLAR_POSE_IDLE;
SoundPlay(SOUND_CHOZO_PILLAR_FELL);
}
break;