Some functions

This commit is contained in:
YohannDR 2022-12-26 16:02:46 +01:00
parent 62b2d600d4
commit 50cb813712
15 changed files with 424 additions and 38 deletions

View File

@ -3,7 +3,7 @@
This is a work in progress decompilation of Metroid - Zero Mission. This is a work in progress decompilation of Metroid - Zero Mission.
Progress can be seen here : https://docs.google.com/spreadsheets/d/1X8XarD5evY8ZI7r_GQqh1pYmdVMbBcINYfRBUlogmKY/edit#gid=0 Progress can be seen here : https://docs.google.com/spreadsheets/d/1X8XarD5evY8ZI7r_GQqh1pYmdVMbBcINYfRBUlogmKY/edit#gid=0
**This decomp is not yet matching, it's also not shiftable, don't use it as a base to work on anything** **This decomp not shiftable, don't use it as a base to work on anything**
This produces the following ROMs: This produces the following ROMs:

View File

@ -3,6 +3,11 @@
#include "types.h" #include "types.h"
#define FADING_TYPE_IN 0
#define FADING_TYPE_FLASH 1
#define FADING_TYPE_OUT 2
#define FADING_TYPE_UNK 3
// Functions // Functions
void unk_5b24c(void); void unk_5b24c(void);
@ -21,6 +26,6 @@ void ApplySmoothPaletteTransition(u16* srcStart, u16* srcEnd, u16* dst, u8 stage
void ApplySpecialBackgroundEffectColorOnBG(u16 mask, u16 color, u8 stage); void ApplySpecialBackgroundEffectColorOnBG(u16 mask, u16 color, u8 stage);
void ApplySpecialBackgroundEffectColorOnOBJ(u16 mask, u16 color, u8 stage); void ApplySpecialBackgroundEffectColorOnOBJ(u16 mask, u16 color, u8 stage);
void ApplySpecialBackgroundFadingColor(u8 type, u8 color, u16** ppSrc, u16** ppDst, u16 mask); void ApplySpecialBackgroundFadingColor(u8 type, u8 color, u16** ppSrc, u16** ppDst, u16 mask);
u16 ApplyFadeOnColor(u8 type, u16 color, u16 currentColor); u16 ApplyFadeOnColor(u8 type, u16 color, u8 currentColor);
#endif /* COLOR_EFFECTS_H */ #endif /* COLOR_EFFECTS_H */

View File

@ -8,6 +8,7 @@
#include "structs/scroll.h" #include "structs/scroll.h"
#include "structs/room.h" #include "structs/room.h"
#include "structs/power_bomb_explosion.h" #include "structs/power_bomb_explosion.h"
#include "structs/visual_effects.h"
// 345868 // 345868
@ -17,7 +18,7 @@ extern const struct RawCoordsX sCoordsX_Empty;
extern const struct LockScreen sLockScreen_Empty; extern const struct LockScreen sLockScreen_Empty;
// Empty special background effect extern const struct BackgroundEffect sBackgroundEffect_Empty;
extern const struct BrokenBlock sBrokenBlock_Empty; extern const struct BrokenBlock sBrokenBlock_Empty;
@ -31,7 +32,7 @@ extern const struct BG0Movement sBg0Movement_Empty;
extern const struct BG3Movement sBg3Movement_Empty; extern const struct BG3Movement sBg3Movement_Empty;
extern const u32 sUnusedStruct_3005504_Empty[2]; extern const struct Unused_3005504 sUnusedStruct_3005504_Empty;
extern const struct WaterMovement sWaterMovement_Empty; extern const struct WaterMovement sWaterMovement_Empty;

View File

@ -10,10 +10,11 @@
#define check_samus_turning() ((pData->direction ^ (KEY_RIGHT | KEY_LEFT)) & gButtonInput) #define check_samus_turning() ((pData->direction ^ (KEY_RIGHT | KEY_LEFT)) & gButtonInput)
#define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0])) #define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0]))
#define RED(c) ((c) & 0x1F) #define RED(c) ((c) & COLOR_MASK)
#define GREEN(c) (((c) & 0x3E0) >> 5) #define GREEN(c) (((c) & (COLOR_MASK << 5)) >> 5)
#define BLUE(c) do{b=((c) & 0x7C00) >> 10;}while(0) #define BLUE(c) do{b=((c) & (COLOR_MASK << 10)) >> 10;}while(0)
#define COLOR(r, g, b) (((b) << 10) | ((g) << 5) | (r)) #define COLOR(r, g, b) (((b) << 10) | ((g) << 5) | (r))
#define COLOR_MASK 0x1F
#define PI 128 #define PI 128
#define sin(a) (sSineTable[(a)]) #define sin(a) (sSineTable[(a)])

View File

@ -51,4 +51,4 @@ extern struct TilemapAndClipPointers gTilemapAndClipPointers;
extern u16 gEffectYPosition; extern u16 gEffectYPosition;
extern i16 gEffectYPositionOffset; extern i16 gEffectYPositionOffset;
#endif #endif

View File

@ -9,9 +9,10 @@ struct ColorFading {
u8 type; u8 type;
u8 stage; u8 stage;
u8 timer; u8 timer;
u8 unk; u8 unk_3;
u8 status; u8 status;
u8 unk_flag; u8 unk_5;
u16 unk_6;
}; };
// Typedef // Typedef

View File

@ -3,7 +3,14 @@
#include "types.h" #include "types.h"
extern u8 gDemoState; struct Demo {
extern u32 gCurrentDemo; /* XXX: type */ u8 number;
u8 playing;
u8 status;
u8 unk_3;
};
#endif extern u8 gDemoState;
extern struct Demo gCurrentDemo; /* XXX: type */
#endif

View File

@ -43,6 +43,9 @@ extern struct SuitFlashEffect gSuitFlashEffect;
extern u16 gWrittenToWIN1H; extern u16 gWrittenToWIN1H;
extern u16 gWrittenToWIN1V; extern u16 gWrittenToWIN1V;
extern u16 gWrittenToBLDCNT; extern u16 gWrittenToBLDCNT;
extern u16 gWrittenToBLDCNT_Internal;
extern u16 gWrittenTo0x05000000;
extern u16 gWrittenToBLDALPHA; extern u16 gWrittenToBLDALPHA;
extern u16 gWrittenToBLDALPHA_H; extern u16 gWrittenToBLDALPHA_H;

View File

@ -93,6 +93,11 @@ struct BG3Movement {
u16 xOffset; u16 xOffset;
}; };
struct Unused_3005504 {
u32 field_0;
u32 field_4;
};
extern u16 gDecompClipdataMap[1024]; extern u16 gDecompClipdataMap[1024];
extern u16 gDecompBG0Map[1024]; extern u16 gDecompBG0Map[1024];
@ -110,4 +115,9 @@ extern u8 gScrollCounter;
extern struct RoomEntry gCurrentRoomEntry; extern struct RoomEntry gCurrentRoomEntry;
extern struct BackgroundPositions gBackgroundPositions; extern struct BackgroundPositions gBackgroundPositions;
#endif extern struct Unused_3005504 gUnusedStruct_3005504;
// Temp
extern i8 gCurrentItemBeingAcquired;
#endif

26
include/structs/text.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef TEXT_STRUCT_H
#define TEXT_STRUCT_H
#include "types.h"
struct Message {
u16 textIndex;
u16 indent;
u16 delay;
u8 color;
u8 line;
u8 unk_8;
u8 unk_9;
u8 messageID;
u8 gfxSlot;
u8 stage;
u8 isMessage;
u8 messageEnded;
u8 unk_F;
};
extern struct Message gCurrentMessage;
#endif /* TEXT_STRUCT_H */

View File

@ -3,7 +3,19 @@
#include "types.h" #include "types.h"
struct BackgroundEffect {
u8 unused;
u16 timer;
u8 colorStage;
u8 type;
u8 stage;
u8 unk_7;
};
extern struct BackgroundEffect gBackgroundEffect;
extern u8 gMonochromeBGFading; extern u8 gMonochromeBGFading;
extern i8 gDisableAnimatedPalette; extern i8 gDisableAnimatedPalette;
extern i8 gDisableAnimatedGraphicsTimer;
#endif #endif

View File

@ -1,5 +1,6 @@
#include "gba.h" #include "gba.h"
#include "bg_clip.h" #include "bg_clip.h"
#include "transparency.h"
#include "sprites_AI/item_banner.h" #include "sprites_AI/item_banner.h"
#include "data/block_data.h" #include "data/block_data.h"
@ -14,6 +15,7 @@
#include "structs/bg_clip.h" #include "structs/bg_clip.h"
#include "structs/clipdata.h" #include "structs/clipdata.h"
#include "structs/connection.h" #include "structs/connection.h"
#include "structs/transparency.h"
#include "structs/game_state.h" #include "structs/game_state.h"
#include "structs/samus.h" #include "structs/samus.h"
@ -103,7 +105,45 @@ void BGClipCheckTouchingSpecialClipdata(void)
void BGClipApplyClipdataChangingTransparency(void) void BGClipApplyClipdataChangingTransparency(void)
{ {
// https://decomp.me/scratch/qCOUj
u32 bldalpha;
u16 clipdata;
i32 xPosition;
i32 yPosition;
i32 clipLimit;
xPosition = gSamusData.xPosition;
clipLimit = gBGPointersAndDimensions.clipdataWidth * BLOCK_SIZE;
if (xPosition > clipLimit)
xPosition = clipLimit;
xPosition >>= 6;
yPosition = gSamusData.yPosition + (gSamusPhysics.drawDistanceTopOffset >> 1);
if (yPosition < 0)
yPosition = 0;
else
{
clipLimit = gBGPointersAndDimensions.clipdataHeight * BLOCK_SIZE;
if (yPosition > clipLimit)
yPosition = clipLimit;
}
yPosition >>= 6;
clipdata = gTilemapAndClipPointers.pClipBehaviors[gBGPointersAndDimensions.pClipDecomp[yPosition * gBGPointersAndDimensions.clipdataWidth + xPosition]];
if (clipdata == CLIP_BEHAVIOR_AIR_SOLID)
return;
bldalpha = BGClipGetNewBLDALPHAValue(clipdata);
if (bldalpha == 0)
return;
if (bldalpha == USHORT_MAX)
TransparencyUpdateBLDALPHA(gDefaultTransparency.evaCoef, gDefaultTransparency.evbCoef, 1, 1);
else
TransparencyUpdateBLDALPHA(bldalpha & UCHAR_MAX, bldalpha >> 8, 1, 1);
} }
u16 BGClipGetNewBLDALPHAValue(u16 clip) u16 BGClipGetNewBLDALPHAValue(u16 clip)

View File

@ -81,8 +81,8 @@ void ApplyMonochromeToPalette(u16* src, u16* dst, i8 additionalValue)
if (result < 0) if (result < 0)
result = 0; result = 0;
else if (result > 0x1F) else if (result > COLOR_MASK)
result = 0x1F; result = COLOR_MASK;
// Create grey color // Create grey color
*dst = COLOR(result, result, result); *dst = COLOR(result, result, result);
@ -124,13 +124,13 @@ void ApplySmoothMonochromeToPalette(u16* srcBase, u16* srcMonochrome, u16* dst,
{ {
colorMono = *srcMonochrome; colorMono = *srcMonochrome;
monoR = RED(colorMono); monoR = RED(colorMono);
monoG = (colorMono >> 5) & 0x1F; monoG = (colorMono >> 5) & COLOR_MASK;
monoB = (colorMono >> 10) & 0x1F; monoB = (colorMono >> 10) & COLOR_MASK;
colorBase = *srcBase; colorBase = *srcBase;
baseR = RED(colorBase); baseR = RED(colorBase);
baseG = (colorBase >> 5) & 0x1F; baseG = (colorBase >> 5) & COLOR_MASK;
baseB = (colorBase >> 10) & 0x1F; baseB = (colorBase >> 10) & COLOR_MASK;
newR = (stage * (monoR - baseR) / 32); newR = (stage * (monoR - baseR) / 32);
newG = (stage * (monoG - baseG) / 32); newG = (stage * (monoG - baseG) / 32);
@ -166,7 +166,44 @@ void ApplySpecialBackgroundFadingColor(u8 type, u8 color, u16** ppSrc, u16** ppD
} }
u16 ApplyFadeOnColor(u8 type, u16 color, u16 currentColor) u16 ApplyFadeOnColor(u8 type, u16 color, u8 currentColor)
{ {
// https://decomp.me/scratch/RdwBt
i32 red;
i32 green;
i32 b;
red = RED(color);
green = GREEN(color);
BLUE(color);
switch (type)
{
case FADING_TYPE_IN:
red = (currentColor * red) >> 5 & COLOR_MASK;
green = (currentColor * green) >> 5 & COLOR_MASK;
b = (currentColor * b) >> 5 & COLOR_MASK;
break;
case FADING_TYPE_FLASH:
red = (COLOR_MASK - ((currentColor * (COLOR_MASK - red)) >> 5)) & COLOR_MASK;
green = (COLOR_MASK - ((currentColor * (COLOR_MASK - green)) >> 5)) & COLOR_MASK;
b = (COLOR_MASK - ((currentColor * (COLOR_MASK - b)) >> 5)) & COLOR_MASK;
break;
case FADING_TYPE_OUT:
red = (red - ((currentColor * red) >> 5)) & COLOR_MASK;
green = (green - ((currentColor * green) >> 5)) & COLOR_MASK;
b =( b - ((currentColor * b) >> 5) )& COLOR_MASK;
break;
case FADING_TYPE_UNK:
red = (red + ((currentColor * (COLOR_MASK - red)) >> 5)) & COLOR_MASK;
green = (green + ((currentColor * (COLOR_MASK - green)) >> 5)) & COLOR_MASK;
b = (b + ((currentColor * (COLOR_MASK - b)) >> 5)) & COLOR_MASK;
break;
}
return COLOR(red, green, b);
} }

View File

@ -34,8 +34,14 @@ const struct LockScreen sLockScreen_Empty = {
.yPositionCenter = USHORT_MAX, .yPositionCenter = USHORT_MAX,
}; };
// Empty special background effect const struct BackgroundEffect sBackgroundEffect_Empty = {
const u8 sTempArray_34587c[8] = {0}; .unused = 0,
.timer = 0,
.colorStage = 0,
.type = 0,
.stage = 0,
.unk_7 = 0
};
const struct BrokenBlock sBrokenBlock_Empty = { const struct BrokenBlock sBrokenBlock_Empty = {
.broken = FALSE, .broken = FALSE,
@ -94,8 +100,9 @@ const struct BG3Movement sBg3Movement_Empty = {
.undefined = 0 .undefined = 0
}; };
const u32 sUnusedStruct_3005504_Empty[2] = { const struct Unused_3005504 sUnusedStruct_3005504_Empty = {
0, 0 .field_0 = 0,
.field_4 = 0
}; };
const struct WaterMovement sWaterMovement_Empty = { const struct WaterMovement sWaterMovement_Empty = {

View File

@ -2,51 +2,95 @@
#include "gba.h" #include "gba.h"
#include "data/engine_pointers.h" #include "data/engine_pointers.h"
#include "data/empty_datatypes.h"
#include "constants/audio.h"
#include "constants/clipdata.h"
#include "constants/event.h" #include "constants/event.h"
#include "constants/game_state.h" #include "constants/game_state.h"
#include "constants/samus.h" #include "constants/samus.h"
#include "constants/room.h" #include "constants/room.h"
#include "structs/game_state.h" #include "structs/audio.h"
#include "structs/color_effects.h"
#include "structs/bg_clip.h" #include "structs/bg_clip.h"
#include "structs/color_effects.h"
#include "structs/clipdata.h"
#include "structs/cutscene.h"
#include "structs/display.h"
#include "structs/demo.h"
#include "structs/game_state.h"
#include "structs/scroll.h" #include "structs/scroll.h"
#include "structs/room.h" #include "structs/room.h"
#include "structs/samus.h" #include "structs/samus.h"
#include "structs/screen_shake.h" #include "structs/screen_shake.h"
#include "structs/visual_effects.h" #include "structs/visual_effects.h"
/**
* @brief 55f7c | 26c | Loads the current room
*
*/
void RoomLoad(void) void RoomLoad(void)
{ {
/*ClipdataSetupCode(); ClipdataSetupCode();
RoomReset(); RoomReset();
// Check for PSF
if (gPauseScreenFlag == PAUSE_SCREEN_NONE) if (gPauseScreenFlag == PAUSE_SCREEN_NONE)
{ {
// No PSF, fully load room
RoomLoadEntry(); RoomLoadEntry();
ScrollLoad(); ScrollLoad();
RoomSetBackgroundScrolling(); RoomSetBackgroundScrolling();
} }
// Getting an item, init cutscene
else if (gPauseScreenFlag == PAUSE_SCREEN_ITEM_ACQUISITION) else if (gPauseScreenFlag == PAUSE_SCREEN_ITEM_ACQUISITION)
{ {
// Varia
if (gCurrentItemBeingAcquired == 0xE)
{
gEquipment.suitMiscActivation &= ~SMF_VARIA_SUIT;
SamusSetPose(SPOSE_FACING_THE_FOREGROUND);
gSamusData.xPosition = 0x278;
gSamusData.yPosition = 0x1FF;
gInGameCutscene.stage = 0;
gInGameCutscene.cutsceneNumber_Copy = 0x9;
start_in_game_cutscene(9); // Undefined
gDisablePause = TRUE;
gSamusWeaponInfo.chargeCounter = 0;
gSamusData.lastWallTouchedMidAir = TRUE;
}
} }
else if (gPauseScreenFlag == PAUSE_SCREEN_FULLY_POWERED_SUIT_ITEMS) else if (gPauseScreenFlag == PAUSE_SCREEN_FULLY_POWERED_SUIT_ITEMS)
{ {
gEquipment.suitMiscActivation &= ~SMF_GRAVITY_SUIT;
SamusSetPose(SPOSE_FACING_THE_FOREGROUND);
gSamusData.xPosition = 0x620;
gSamusData.yPosition = 0x7BF;
gInGameCutscene.stage = 0;
gInGameCutscene.cutsceneNumber_Copy = 0xA;
start_in_game_cutscene(10); // Undefined
gDisablePause = TRUE;
gSamusData.lastWallTouchedMidAir = TRUE;
gCurrentItemBeingAcquired = 0xF; // Gravity
gSamusWeaponInfo.chargeCounter = 0;
} }
else if (gPauseScreenFlag == PAUSE_SCREEN_SUITLESS_ITEMS) else if (gPauseScreenFlag == PAUSE_SCREEN_SUITLESS_ITEMS)
PlayMusic(MUSIC_CHOZO_RUINS, 0x10); PlayMusic(MUSIC_CHOZO_RUINS, 0x10);
// Load graphics
RoomLoadTileset(); RoomLoadTileset();
RoomLoadBackgrounds(); RoomLoadBackgrounds();
RoomRemoveNeverReformBlocksAndCollectedTanks(); RoomRemoveNeverReformBlocksAndCollectedTanks();
gPreviousXPosition = gSamusData.xPosition; gPreviousXPosition = gSamusData.xPosition;
gPreviousYPosition = gSamusData.yPosition; gPreviousYPosition = gSamusData.yPosition;
TransparencySetRoomEffectsTransparency(); TransparencySetRoomEffectsTransparency();
LoadFirstRoom(); // Undefined load_first_room(); // Undefined
if (gPauseScreenFlag == PAUSE_SCREEN_NONE && !gIsLoadingFile) if (gPauseScreenFlag == PAUSE_SCREEN_NONE && !gIsLoadingFile)
{ {
@ -57,6 +101,7 @@ void RoomLoad(void)
ScrollProcessGeneral(); ScrollProcessGeneral();
} }
// Load states, entities
check_play_lightning_effect(); // Undefined check_play_lightning_effect(); // Undefined
RoomUpdateBackgroundsPosition(); RoomUpdateBackgroundsPosition();
ConnectionLoadDoors(); ConnectionLoadDoors();
@ -65,22 +110,24 @@ void RoomLoad(void)
RoomSetInitialTilemap(0x1); RoomSetInitialTilemap(0x1);
RoomSetInitialTilemap(0x2); RoomSetInitialTilemap(0x2);
load_animated_graphics(); // Undefined load_animated_graphics(); // Undefined
ResetTanksAnimation(); // Undefined reset_tanks_animation(); // Undefined
SetBGHazeEffect(); // Undefined set_bg_haze_effect(); // Undefined
ProcessHaze(); // Undefined process_haze(); // Undefined
MinimapCheckOnTransition(); // Undefined MinimapCheckOnTransition();
// Check using elevator
if (!gIsLoadingFile && gGameModeSub3 != 0x0 && gPauseScreenFlag == PAUSE_SCREEN_NONE && gSamusData.pose == SPOSE_USING_AN_ELEVATOR) if (!gIsLoadingFile && gGameModeSub3 != 0x0 && gPauseScreenFlag == PAUSE_SCREEN_NONE && gSamusData.pose == SPOSE_USING_AN_ELEVATOR)
{ {
if (gSamusData.elevatorDirection == KEY_UP) if (gSamusData.elevatorDirection == KEY_UP)
gSamusData.yPosition += 0xC0; gSamusData.yPosition += BLOCK_SIZE * 3;
else else
gSamusData.yPosition -= 0xC0; gSamusData.yPosition -= BLOCK_SIZE * 3;
gPreviousYPosition = gSamusData.yPosition; gPreviousYPosition = gSamusData.yPosition;
} }
sub_08060800(); // Undefined sub_08060800(); // Undefined
// Update rain sound effect
if (gRainSoundEffect != RAIN_SOUND_NONE) if (gRainSoundEffect != RAIN_SOUND_NONE)
{ {
if (gPauseScreenFlag == PAUSE_SCREEN_NONE) if (gPauseScreenFlag == PAUSE_SCREEN_NONE)
@ -88,8 +135,10 @@ void RoomLoad(void)
if (gRainSoundEffect & RAIN_SOUND_PLAYING) if (gRainSoundEffect & RAIN_SOUND_PLAYING)
{ {
if (!(gRainSoundEffect & RAIN_SOUND_ENABLED)) if (!(gRainSoundEffect & RAIN_SOUND_ENABLED))
{
SoundFade(0x121, 0xA); // Rain SoundFade(0x121, 0xA); // Rain
gRainSoundEffect &= ~RAIN_SOUND_PLAYING; gRainSoundEffect &= ~RAIN_SOUND_PLAYING;
}
} }
else if (gRainSoundEffect & RAIN_SOUND_ENABLED) else if (gRainSoundEffect & RAIN_SOUND_ENABLED)
{ {
@ -98,7 +147,7 @@ void RoomLoad(void)
} }
} }
gRainSoundEffect &= ~RAIN_SOUND_ENABLED; gRainSoundEffect &= ~RAIN_SOUND_ENABLED;
}*/ }
} }
void RoomLoadTileset(void) void RoomLoadTileset(void)
@ -259,12 +308,199 @@ void RoomRemoveNeverReformBlocksAndCollectedTanks(void)
void RoomReset(void) void RoomReset(void)
{ {
// https://decomp.me/scratch/TZ1cZ
const struct Door* pDoor;
i32 i;
i32 yOffset;
i32 xOffset;
u16 count;
u16* ptr;
u16 temp;
gColorFading.unk_3 = 0;
gColorFading.timer = 0;
gColorFading.status = 0;
gColorFading.stage = 0;
gColorFading.unk_6 = 0;
if (gCurrentPowerBomb.animationState != 0)
gScreenShakeX = sScreenShake_Empty;
gCurrentPowerBomb = sPowerBomb_Empty;
gWrittenToBLDCNT_Internal = 0;
gScrollCounter = 0;
gMusicTrackInfo.takingNormalTransition = FALSE;
if (gGameModeSub3 == 0)
{
gMusicTrackInfo.currentRoomTrack = MUSIC_NONE;
gMusicTrackInfo.unk = 0;
gMusicTrackInfo.pauseScreenFlag = PAUSE_SCREEN_NONE;
gCurrentClipdataAffectingAction = CAA_NONE;
gAreaBeforeTransition = UCHAR_MAX;
gDisableDoorAndTanks = FALSE;
gCurrentCutscene = 0;
gLastElevatorUsed = sLastElevatorUsed_Empty;
gRainSoundEffect = RAIN_SOUND_NONE;
if (!gIsLoadingFile && gCurrentDemo.status & 0xF0)
init_demo_related(FALSE);
gDoorPositionStart.x = 0;
gDoorPositionStart.y = 0;
gCurrentItemBeingAcquired = 0;
save_most_recent_file_to_sram(); // Undefined
}
unk_5c158(); // Undefined
if (gPauseScreenFlag != PAUSE_SCREEN_NONE)
return;
gDisableScrolling = FALSE;
gSlowScrollingTimer = 0;
gCollectingTank = FALSE;
gScreenShakeRelated = 0;
gDisablePause = FALSE;
gDisableClipdataChangingTransparency = FALSE;
gWrittenTo0x05000000 = 0;
gScreenYOffset = 0;
gScreenXOffset = 0;
gDISPCNTBackup = 0;
gInGameCutscene.cutsceneNumber = 0;
gInGameCutscene.cutsceneNumber_Copy = 0;
gEffectYPosition = 0;
gHatchesState.unlocking = FALSE;
gHatchesState.hatchesLockedWithTimer = 0;
gHatchesState.unk = FALSE;
gHatchesState.hatchesLockedWithEvent = 0;
gHatchesState.unk2 = FALSE;
gDoorUnlockTimer = 0;
pDoor = &sAreaDoorsPointers[gCurrentArea][0];
pDoor += gLastDoorUsed;
gCurrentRoom = pDoor->sourceRoom;
gLastDoorProperties = pDoor->type;
gDisplayLocationText = (pDoor->type >> 6) & 1;
gDoorPositionStart.x = pDoor->xStart;
gDoorPositionStart.y = pDoor->yStart;
gWaitingSpacePiratesPosition = sCoordsX_Empty;
gLockScreen = sLockScreen_Empty;
gBackgroundEffect = sBackgroundEffect_Empty;
gWaterMovement = sWaterMovement_Empty;
gEffectYPositionOffset = 0;
gUnusedStruct_3005504 = sUnusedStruct_3005504_Empty;
gBG0Movement = sBg0Movement_Empty;
gBG2Movement.xOffset = 0;
gBG2Movement.yOffset = 0;
for (i = 0; i < MAX_AMOUNT_OF_BROKEN_BLOCKS; i++)
gBrokenBlocks[i] = sBrokenBlock_Empty;
for (i = 0; i < MAX_AMOUNT_OF_BOMB_CHAINS; i++)
gBombChains[i] = sBombChain_Empty;
gActiveBombChainTypes = 0;
gDisableAnimatedGraphicsTimer = 0;
count = 64;
while (count != 0)
{
ptr = &gMakeSolidBlocks[count];
*--ptr = 0;
count--;
}
gScreenShakeY = sScreenShake_Empty;
gScreenShakeX = sScreenShake_Empty;
gScreenShakeXOffset = 0;
gScreenShakeYOffset = 0;
if (gIsLoadingFile)
return;
gCamera.xPosition = 0;
gCamera.yPosition = 0;
gCamera.xVelocity = 0;
gCamera.yVelocity = 0;
xOffset = pDoor->xStart;
yOffset = pDoor->yEnd + 1;
gSamusData.xPosition = xOffset * BLOCK_SIZE + (pDoor->xExit + 8) * 4;
gSamusData.yPosition = (yOffset) * BLOCK_SIZE + pDoor->yExit * 4 - 1;
if (gCurrentDemo.status & 0xF0)
init_demo_related(TRUE);
gWaitingSpacePiratesPosition.x = gSamusData.xPosition;
gWaitingSpacePiratesPosition.y = gSamusData.yPosition;
if (pDoor->xExit > 0)
gWaitingSpacePiratesPosition.x -= HALF_BLOCK_SIZE;
else if (pDoor->xExit < 0)
gWaitingSpacePiratesPosition.x += HALF_BLOCK_SIZE;
if (gSamusDoorPositionOffset != 0)
{
if (gSamusDoorPositionOffset < 0)
gSamusDoorPositionOffset = 0;
else
{
yOffset = -gSamusPhysics.drawDistanceTopOffset;
temp = (u16)yOffset;
if (temp + gSamusDoorPositionOffset > UCHAR_MAX)
gSamusDoorPositionOffset = UCHAR_MAX - temp;
}
gSamusData.yPosition -= gSamusDoorPositionOffset;
gSamusDoorPositionOffset = 0;
}
if (gSamusData.standingStatus == STANDING_ENEMY)
gSamusData.standingStatus = STANDING_MIDAIR;
gBG1XPosition = 0;
gBG1YPosition = 0;
gBG0XPosition = 0;
gBG0YPosition = 0;
} }
/**
* @brief 56ac8 | 60 | Sets the automatic background scrolling (BG0 and BG3)
*
*/
void RoomSetBackgroundScrolling(void) void RoomSetBackgroundScrolling(void)
{ {
gBG3Movement = sBg3Movement_Empty;
switch (gCurrentRoomEntry.BG3Scrolling)
{
case 0x7:
case 0x8:
case 0xA:
gBG3Movement.direction = TRUE;
}
if (gCurrentRoomEntry.visualEffect == EFFECT_WATER)
gBG0Movement.type = BG0_MOVEMENT_WATER_CLOUDS;
else if (gCurrentRoomEntry.visualEffect == EFFECT_SNOWFLAKES_COLD_KNOCKBACK)
gBG0Movement.type = BG0_MOVEMENT_SNOWFLAKES;
else if (gCurrentRoomEntry.visualEffect == EFFECT_SNOWFLAKES_COLD)
gBG0Movement.type = BG0_MOVEMENT_SNOWFLAKES;
gInGameCutscene.cutsceneNumber_Copy = 0;
} }
void RoomSetInitialTilemap(u8 bgNumber) void RoomSetInitialTilemap(u8 bgNumber)