This commit is contained in:
luckytyphlosion
2021-05-27 16:36:47 -04:00
6 changed files with 61 additions and 45 deletions
+19 -27
View File
@@ -55,7 +55,7 @@ void ResetBgs(void)
static void SetBgModeInternal(u8 bgMode) static void SetBgModeInternal(u8 bgMode)
{ {
sGpuBgConfigs.bgVisibilityAndMode &= 0xFFF8; sGpuBgConfigs.bgVisibilityAndMode &= ~0x7;
sGpuBgConfigs.bgVisibilityAndMode |= bgMode; sGpuBgConfigs.bgVisibilityAndMode |= bgMode;
} }
@@ -66,13 +66,11 @@ u8 GetBgMode(void)
void ResetBgControlStructs(void) void ResetBgControlStructs(void)
{ {
struct BgConfig* bgConfigs = &sGpuBgConfigs.configs[0];
struct BgConfig zeroedConfig = sZeroedBgControlStruct;
int i; int i;
for (i = 0; i < NUM_BACKGROUNDS; i++) for (i = 0; i < NUM_BACKGROUNDS; i++)
{ {
bgConfigs[i] = zeroedConfig; sGpuBgConfigs.configs[i] = sZeroedBgControlStruct;
} }
} }
@@ -175,36 +173,30 @@ u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode)
u16 offset; u16 offset;
s8 cursor; s8 cursor;
if (!IsInvalidBg(bg) && sGpuBgConfigs.configs[bg].visible) if (IsInvalidBg(bg) || !sGpuBgConfigs.configs[bg].visible)
{ return -1;
switch (mode) switch (mode)
{ {
case 0x1: case 0x1:
offset = sGpuBgConfigs.configs[bg].charBaseIndex * BG_CHAR_SIZE; offset = sGpuBgConfigs.configs[bg].charBaseIndex * BG_CHAR_SIZE;
offset = destOffset + offset;
cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0);
if (cursor == -1)
return -1;
break; break;
case 0x2: case 0x2:
offset = sGpuBgConfigs.configs[bg].mapBaseIndex * BG_SCREEN_SIZE; offset = sGpuBgConfigs.configs[bg].mapBaseIndex * BG_SCREEN_SIZE;
offset = destOffset + offset;
cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0);
if (cursor == -1)
return -1;
break; break;
default: default:
cursor = -1; cursor = -1;
goto end; break;
} }
offset = destOffset + offset;
cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0);
if (cursor == -1)
{
return -1;
}
}
else
{
return -1;
}
end:
return cursor; return cursor;
} }
@@ -254,17 +246,17 @@ static void SetBgAffineInternal(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispC
switch (sGpuBgConfigs.bgVisibilityAndMode & 0x7) switch (sGpuBgConfigs.bgVisibilityAndMode & 0x7)
{ {
default:
case 0:
return;
case 1: case 1:
if (bg != 2) if (bg != 2)
return; return;
break; break;
case 2: case 2:
if (bg < 2 || bg >= NUM_BACKGROUNDS) if (bg != 2 && bg != 3)
return; return;
break; break;
case 0:
default:
return;
} }
src.texX = srcCenterX; src.texX = srcCenterX;
@@ -697,7 +689,7 @@ s32 ChangeBgY(u8 bg, s32 value, u8 op)
return sGpuBgConfigs2[bg].bg_y; return sGpuBgConfigs2[bg].bg_y;
} }
s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op) s32 ChangeBgY_ScreenOff(u8 bg, s32 value, u8 op)
{ {
u8 mode; u8 mode;
u16 temp1; u16 temp1;
+1 -1
View File
@@ -59,7 +59,7 @@ u16 GetBgAttribute(u8 bg, u8 attributeId);
s32 ChangeBgX(u8 bg, s32 value, u8 op); s32 ChangeBgX(u8 bg, s32 value, u8 op);
s32 GetBgX(u8 bg); s32 GetBgX(u8 bg);
s32 ChangeBgY(u8 bg, s32 value, u8 op); s32 ChangeBgY(u8 bg, s32 value, u8 op);
s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op); s32 ChangeBgY_ScreenOff(u8 bg, s32 value, u8 op);
s32 GetBgY(u8 bg); s32 GetBgY(u8 bg);
void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle); void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle);
u8 Unused_AdjustBgMosaic(u8 a1, u8 a2); u8 Unused_AdjustBgMosaic(u8 a1, u8 a2);
+1 -1
View File
@@ -38,7 +38,7 @@ static void GenerateInitialRentalMons(void);
static void GetOpponentMostCommonMonType(void); static void GetOpponentMostCommonMonType(void);
static void GetOpponentBattleStyle(void); static void GetOpponentBattleStyle(void);
static void RestorePlayerPartyHeldItems(void); static void RestorePlayerPartyHeldItems(void);
static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 arg2); static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 useBetterRange);
static u8 GetMoveBattleStyle(u16 move); static u8 GetMoveBattleStyle(u16 move);
// Number of moves needed on the team to be considered using a certain battle style // Number of moves needed on the team to be considered using a certain battle style
+9
View File
@@ -1525,6 +1525,10 @@ void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track
{ {
u32 wav; u32 wav;
#ifdef UBFIX
wav = 0;
#endif
READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable
READ_XCMD_BYTE(wav, 1) READ_XCMD_BYTE(wav, 1)
READ_XCMD_BYTE(wav, 2) READ_XCMD_BYTE(wav, 2)
@@ -1592,6 +1596,10 @@ void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tra
{ {
u32 unk; u32 unk;
#ifdef UBFIX
unk = 0;
#endif
READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable
READ_XCMD_BYTE(unk, 1) READ_XCMD_BYTE(unk, 1)
@@ -1611,6 +1619,7 @@ void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tra
void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
{ {
u32 unk; u32 unk;
#ifdef UBFIX #ifdef UBFIX
unk = 0; unk = 0;
#endif #endif
+4 -3
View File
@@ -5437,15 +5437,16 @@ static bool32 WaitForWallpaperGfxLoad(void)
static void DrawWallpaper(const void *tilemap, s8 direction, u8 offset) static void DrawWallpaper(const void *tilemap, s8 direction, u8 offset)
{ {
s16 var = (offset * 2) + 3; s16 var = offset * 256;
s16 var2 = (offset * 2) + 3;
s16 x = ((sStorage->bg2_X / 8 + 10) + (direction * 24)) & 0x3F; s16 x = ((sStorage->bg2_X / 8 + 10) + (direction * 24)) & 0x3F;
CopyRectToBgTilemapBufferRect(2, tilemap, 0, 0, 0x14, 0x12, x, 2, 0x14, 0x12, 0x11, offset << 8, var); CopyRectToBgTilemapBufferRect(2, tilemap, 0, 0, 0x14, 0x12, x, 2, 0x14, 0x12, 0x11, var, var2);
if (direction == 0) if (direction == 0)
return; return;
if (direction > 0) if (direction > 0)
x *= 1, x += 0x14; // x * 1 is needed to match, but can be safely removed as it makes no functional difference x += 0x14;
else else
x -= 4; x -= 4;
+20 -6
View File
@@ -71,6 +71,7 @@ static bool8 sLocked;
static int WriteCommand(u8 value); static int WriteCommand(u8 value);
static int WriteData(u8 value); static int WriteData(u8 value);
static u8 ReadData(); static u8 ReadData();
static void EnableGpioPortRead(); static void EnableGpioPortRead();
static void DisableGpioPortRead(); static void DisableGpioPortRead();
@@ -98,8 +99,12 @@ u8 SiiRtcProbe(void)
errorCode = 0; errorCode = 0;
#ifdef BUGFIX
if (!(rtc.status & SIIRTCINFO_24HOUR) || (rtc.status & SIIRTCINFO_POWER))
#else
if ((rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == SIIRTCINFO_POWER if ((rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == SIIRTCINFO_POWER
|| (rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == 0) || (rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == 0)
#endif
{ {
// The RTC is in 12-hour mode. Reset it and switch to 24-hour mode. // The RTC is in 12-hour mode. Reset it and switch to 24-hour mode.
@@ -131,7 +136,7 @@ u8 SiiRtcProbe(void)
bool8 SiiRtcReset(void) bool8 SiiRtcReset(void)
{ {
u8 result; bool8 result;
struct SiiRtcInfo rtc; struct SiiRtcInfo rtc;
if (sLocked == TRUE) if (sLocked == TRUE)
@@ -392,7 +397,11 @@ static int WriteCommand(u8 value)
GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI; GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI;
} }
// control reaches end of non-void function // Nothing uses the returned value from this function,
// so the undefined behavior is harmless in the vanilla game.
#ifdef UBFIX
return 0;
#endif
} }
static int WriteData(u8 value) static int WriteData(u8 value)
@@ -409,7 +418,11 @@ static int WriteData(u8 value)
GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI; GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI;
} }
// control reaches end of non-void function // Nothing uses the returned value from this function,
// so the undefined behavior is harmless in the vanilla game.
#ifdef UBFIX
return 0;
#endif
} }
static u8 ReadData() static u8 ReadData()
@@ -417,6 +430,7 @@ static u8 ReadData()
u8 i; u8 i;
u8 temp; u8 temp;
u8 value; u8 value;
#ifdef UBFIX #ifdef UBFIX
value = 0; value = 0;
#endif #endif
@@ -431,7 +445,7 @@ static u8 ReadData()
GPIO_PORT_DATA = SCK_HI | CS_HI; GPIO_PORT_DATA = SCK_HI | CS_HI;
temp = ((GPIO_PORT_DATA & SIO_HI) >> 1); temp = ((GPIO_PORT_DATA & SIO_HI) >> 1);
value = (value >> 1) | (temp << 7); // UB: value is uninitialized on first iteration value = (value >> 1) | (temp << 7);
} }
return value; return value;
@@ -439,10 +453,10 @@ static u8 ReadData()
static void EnableGpioPortRead() static void EnableGpioPortRead()
{ {
GPIO_PORT_READ_ENABLE = 1; GPIO_PORT_READ_ENABLE = TRUE;
} }
static void DisableGpioPortRead() static void DisableGpioPortRead()
{ {
GPIO_PORT_READ_ENABLE = 0; GPIO_PORT_READ_ENABLE = FALSE;
} }