Merge remote-tracking branch 'pret/master' into IE-pretSync

This commit is contained in:
Eduardo Quezada D'Ottone 2020-11-07 14:54:52 -03:00
commit 8d86169283
99 changed files with 1814 additions and 1672 deletions

View File

@ -69,7 +69,7 @@ OBJ_DIR := build/emerald
LIBPATH := -L ../../tools/agbcc/lib LIBPATH := -L ../../tools/agbcc/lib
else else
CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet
override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mcpu=arm7tdmi -fno-toplevel-reorder -Wno-pointer-to-int-cast override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast
ROM := pokeemerald_modern.gba ROM := pokeemerald_modern.gba
OBJ_DIR := build/modern OBJ_DIR := build/modern
LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))"

View File

@ -109,7 +109,7 @@ _1a0:
strh r1, [r0, 0xa] @ SIOMLT_SEND strh r1, [r0, 0xa] @ SIOMLT_SEND
ldr r0, =_data_2f0 ldr r0, =_data_2f0
ldr r1, =gCode ldr r1, =gCode
svc 0x11 << 16 swi 0x11 << 16
ldr lr, =gCode ldr lr, =gCode
bx lr bx lr
.pool .pool

View File

@ -100,12 +100,12 @@ struct CgbChannel
u8 le; u8 le;
u8 sw; u8 sw;
u32 fr; u32 fr;
u32 *wp; u32 wp;
u32 *cp; u32 cp;
void *tp; u32 tp;
void *pp; u32 pp;
void *np; u32 np;
u32 d4[2]; u8 d4[8];
}; };
struct MusicPlayerTrack; struct MusicPlayerTrack;
@ -138,10 +138,10 @@ struct SoundChannel
u32 fw; u32 fw;
u32 freq; u32 freq;
struct WaveData *wav; struct WaveData *wav;
s8 *cp; u32 cp;
struct MusicPlayerTrack *track; struct MusicPlayerTrack *track;
void *pp; u32 pp;
void *np; u32 np;
u32 d4; u32 d4;
u16 xpi; u16 xpi;
u16 xpc; u16 xpc;
@ -172,11 +172,11 @@ struct SoundInfo
u8 pcmDmaPeriod; // number of V-blanks per PCM DMA u8 pcmDmaPeriod; // number of V-blanks per PCM DMA
u8 maxLines; u8 maxLines;
u8 gap[3]; u8 gap[3];
u32 pcmSamplesPerVBlank; s32 pcmSamplesPerVBlank;
u32 pcmFreq; s32 pcmFreq;
u32 divFreq; s32 divFreq;
struct CgbChannel *cgbChans; struct CgbChannel *cgbChans;
void (*func)(); u32 func;
u32 intp; u32 intp;
void (*CgbSound)(void); void (*CgbSound)(void);
void (*CgbOscOff)(u8); void (*CgbOscOff)(u8);
@ -184,7 +184,7 @@ struct SoundInfo
u32 MPlayJumpTable; u32 MPlayJumpTable;
u32 plynote; u32 plynote;
u32 ExtVolPit; u32 ExtVolPit;
u32 gap2[4]; u8 gap2[16];
struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS];
s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2];
}; };
@ -248,7 +248,7 @@ struct MusicPlayerTrack
u8 key; u8 key;
u8 velocity; u8 velocity;
u8 runningStatus; u8 runningStatus;
s8 keyM; u8 keyM;
u8 pitM; u8 pitM;
s8 keyShift; s8 keyShift;
s8 keyShiftX; s8 keyShiftX;
@ -312,7 +312,7 @@ struct MusicPlayerInfo
struct MusicPlayerTrack *tracks; struct MusicPlayerTrack *tracks;
struct ToneData *tone; struct ToneData *tone;
u32 ident; u32 ident;
void (*func)(); u32 func;
u32 intp; u32 intp;
}; };
@ -447,7 +447,7 @@ void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_note(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
// extended sound command handler functions // extended sound command handler functions
void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *);

View File

@ -296,7 +296,7 @@ u8 HandleWriteSectorNBytes(u8 sectorNum, u8 *data, u16 size)
u8 TryWriteSector(u8 sectorNum, u8 *data) u8 TryWriteSector(u8 sectorNum, u8 *data)
{ {
if (ProgramFlashSectorAndVerify(sectorNum, data)) // is damaged? if (ProgramFlashSectorAndVerify(sectorNum, data) != 0) // is damaged?
{ {
SetSectorDamagedStatus(SECTOR_DAMAGED, sectorNum); // set damaged sector bits. SetSectorDamagedStatus(SECTOR_DAMAGED, sectorNum); // set damaged sector bits.
return SAVE_STATUS_ERROR; return SAVE_STATUS_ERROR;

View File

@ -26,9 +26,9 @@
.set OAM, 0x7000000 .set OAM, 0x7000000
.set SOUND_INFO_PTR, IWRAM_END - 0x10 .set SOUND_INFO_PTR, 0x3007FF0
.set INTR_CHECK, IWRAM_END - 0x8 .set INTR_CHECK, 0x3007FF8
.set INTR_VECTOR, IWRAM_END - 0x4 .set INTR_VECTOR, 0x3007FFC
.set INTR_FLAG_VBLANK, 1 << 0 .set INTR_FLAG_VBLANK, 1 << 0
.set INTR_FLAG_HBLANK, 1 << 1 .set INTR_FLAG_HBLANK, 1 << 1

View File

@ -34,8 +34,8 @@ struct BgConfig2
u32 unk_3:18; u32 unk_3:18;
void* tilemap; void* tilemap;
s32 bg_x; // Maybe unsigned, but game treats it as if it is signed a LOT. s32 bg_x;
s32 bg_y; // Same for this variable. s32 bg_y;
}; };
static struct BgControl sGpuBgConfigs; static struct BgControl sGpuBgConfigs;
@ -621,15 +621,17 @@ s32 GetBgX(u8 bg)
{ {
if (IsInvalidBg32(bg)) if (IsInvalidBg32(bg))
return -1; return -1;
if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
return -1; return -1;
return sGpuBgConfigs2[bg].bg_x; else
return sGpuBgConfigs2[bg].bg_x;
} }
s32 ChangeBgY(u8 bg, s32 value, u8 op) s32 ChangeBgY(u8 bg, s32 value, u8 op)
{ {
u8 mode; u8 mode;
u16 temp1, temp2; u16 temp1;
u16 temp2;
if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
{ {
@ -698,7 +700,8 @@ s32 ChangeBgY(u8 bg, s32 value, u8 op)
s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op) s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op)
{ {
u8 mode; u8 mode;
u16 temp1, temp2; u16 temp1;
u16 temp2;
if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
{ {
@ -769,9 +772,10 @@ s32 GetBgY(u8 bg)
{ {
if (IsInvalidBg32(bg)) if (IsInvalidBg32(bg))
return -1; return -1;
if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
return -1; return -1;
return sGpuBgConfigs2[bg].bg_y; else
return sGpuBgConfigs2[bg].bg_y;
} }
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)
@ -870,77 +874,81 @@ void* GetBgTilemapBuffer(u8 bg)
{ {
if (IsInvalidBg32(bg)) if (IsInvalidBg32(bg))
return NULL; return NULL;
if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
return NULL; return NULL;
return sGpuBgConfigs2[bg].tilemap; else
return sGpuBgConfigs2[bg].tilemap;
} }
void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset) void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset)
{ {
if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
return; {
if (mode != 0) if (mode != 0)
CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode); CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode);
else else
LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2))); LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)));
}
} }
void CopyBgTilemapBufferToVram(u8 bg) void CopyBgTilemapBufferToVram(u8 bg)
{ {
u16 sizeToLoad; u16 sizeToLoad;
if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
return;
switch (GetBgType(bg))
{ {
case 0: switch (GetBgType(bg))
sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800; {
break; case 0:
case 1: sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800;
sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100; break;
break; case 1:
default: sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100;
sizeToLoad = 0; break;
break; default:
sizeToLoad = 0;
break;
}
LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2);
} }
LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2);
} }
void CopyToBgTilemapBufferRect(u8 bg, const void *src, u8 destX, u8 destY, u8 width, u8 height) void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height)
{ {
u16 destX16, destY16; u16 destX16;
u16 destY16;
u16 mode; u16 mode;
if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
return;
switch (GetBgType(bg))
{ {
case 0: switch (GetBgType(bg))
{
const u16 *srcCopy = src;
for (destY16 = destY; destY16 < (destY + height); destY16++)
{ {
for (destX16 = destX; destX16 < (destX + width); destX16++) case 0:
{
((u16 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++;
}
}
break;
}
case 1:
{
const u8 *srcCopy = src;
mode = GetBgMetricAffineMode(bg, 0x1);
for (destY16 = destY; destY16 < (destY + height); destY16++)
{ {
for (destX16 = destX; destX16 < (destX + width); destX16++) const u16 * srcCopy = src;
for (destY16 = destY; destY16 < (destY + height); destY16++)
{ {
((u8 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; for (destX16 = destX; destX16 < (destX + width); destX16++)
{
((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++;
}
} }
break;
}
case 1:
{
const u8 * srcCopy = src;
mode = GetBgMetricAffineMode(bg, 0x1);
for (destY16 = destY; destY16 < (destY + height); destY16++)
{
for (destX16 = destX; destX16 < (destX + width); destX16++)
{
((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++;
}
}
break;
}
} }
break;
}
} }
} }

View File

@ -21,7 +21,7 @@ static u16 gLastTextFgColor;
static u16 gLastTextShadowColor; static u16 gLastTextShadowColor;
const struct FontInfo *gFonts; const struct FontInfo *gFonts;
bool8 gUnknown_03002F84; u8 gUnknown_03002F84;
struct Struct_03002F90 gUnknown_03002F90; struct Struct_03002F90 gUnknown_03002F90;
TextFlags gTextFlags; TextFlags gTextFlags;
@ -154,7 +154,7 @@ u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8
printerTemplate.currentY = y; printerTemplate.currentY = y;
printerTemplate.letterSpacing = gFonts[fontId].letterSpacing; printerTemplate.letterSpacing = gFonts[fontId].letterSpacing;
printerTemplate.lineSpacing = gFonts[fontId].lineSpacing; printerTemplate.lineSpacing = gFonts[fontId].lineSpacing;
printerTemplate.style = gFonts[fontId].style; printerTemplate.unk = gFonts[fontId].unk;
printerTemplate.fgColor = gFonts[fontId].fgColor; printerTemplate.fgColor = gFonts[fontId].fgColor;
printerTemplate.bgColor = gFonts[fontId].bgColor; printerTemplate.bgColor = gFonts[fontId].bgColor;
printerTemplate.shadowColor = gFonts[fontId].shadowColor; printerTemplate.shadowColor = gFonts[fontId].shadowColor;
@ -205,7 +205,7 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, voi
CopyWindowToVram(gTempTextPrinter.printerTemplate.windowId, 2); CopyWindowToVram(gTempTextPrinter.printerTemplate.windowId, 2);
gTextPrinters[printerTemplate->windowId].active = 0; gTextPrinters[printerTemplate->windowId].active = 0;
} }
gUnknown_03002F84 = FALSE; gUnknown_03002F84 = 0;
return TRUE; return TRUE;
} }
@ -213,7 +213,7 @@ void RunTextPrinters(void)
{ {
int i; int i;
if (!gUnknown_03002F84) if (gUnknown_03002F84 == 0)
{ {
for (i = 0; i < NUM_TEXT_PRINTERS; ++i) for (i = 0; i < NUM_TEXT_PRINTERS; ++i)
{ {
@ -451,18 +451,18 @@ u8 GetLastTextColor(u8 colorType)
{ {
switch (colorType) switch (colorType)
{ {
case COLOR_FOREGROUND: case 0:
return gLastTextFgColor; return gLastTextFgColor;
case COLOR_BACKGROUND: case 2:
return gLastTextBgColor; return gLastTextBgColor;
case COLOR_SHADOW: case 1:
return gLastTextShadowColor; return gLastTextShadowColor;
default: default:
return 0; return 0;
} }
} }
inline static void GLYPH_COPY(u8 *windowTiles, u32 widthOffset, u32 j, u32 i, u32 *ptr, s32 width, s32 height) // inline static void GLYPH_COPY(u8 *windowTiles, u32 widthOffset, u32 j, u32 i, u32 *ptr, s32 width, s32 height)
{ {
u32 xAdd, yAdd, r5, bits, toOrr, dummyX; u32 xAdd, yAdd, r5, bits, toOrr, dummyX;
u8 *dst; u8 *dst;
@ -570,7 +570,7 @@ u16 Font0Func(struct TextPrinter *textPrinter)
{ {
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
if (!subStruct->hasGlyphIdBeenSet) if (subStruct->hasGlyphIdBeenSet == FALSE)
{ {
subStruct->glyphId = 0; subStruct->glyphId = 0;
subStruct->hasGlyphIdBeenSet = TRUE; subStruct->hasGlyphIdBeenSet = TRUE;
@ -582,7 +582,7 @@ u16 Font1Func(struct TextPrinter *textPrinter)
{ {
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
if (!subStruct->hasGlyphIdBeenSet) if (subStruct->hasGlyphIdBeenSet == FALSE)
{ {
subStruct->glyphId = 1; subStruct->glyphId = 1;
subStruct->hasGlyphIdBeenSet = TRUE; subStruct->hasGlyphIdBeenSet = TRUE;
@ -594,7 +594,7 @@ u16 Font2Func(struct TextPrinter *textPrinter)
{ {
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
if (!subStruct->hasGlyphIdBeenSet) if (subStruct->hasGlyphIdBeenSet == FALSE)
{ {
subStruct->glyphId = 2; subStruct->glyphId = 2;
subStruct->hasGlyphIdBeenSet = TRUE; subStruct->hasGlyphIdBeenSet = TRUE;
@ -606,7 +606,7 @@ u16 Font3Func(struct TextPrinter *textPrinter)
{ {
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
if (!subStruct->hasGlyphIdBeenSet) if (subStruct->hasGlyphIdBeenSet == FALSE)
{ {
subStruct->glyphId = 3; subStruct->glyphId = 3;
subStruct->hasGlyphIdBeenSet = TRUE; subStruct->hasGlyphIdBeenSet = TRUE;
@ -618,7 +618,7 @@ u16 Font4Func(struct TextPrinter *textPrinter)
{ {
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
if (!subStruct->hasGlyphIdBeenSet) if (subStruct->hasGlyphIdBeenSet == FALSE)
{ {
subStruct->glyphId = 4; subStruct->glyphId = 4;
subStruct->hasGlyphIdBeenSet = TRUE; subStruct->hasGlyphIdBeenSet = TRUE;
@ -630,7 +630,7 @@ u16 Font5Func(struct TextPrinter *textPrinter)
{ {
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
if (!subStruct->hasGlyphIdBeenSet) if (subStruct->hasGlyphIdBeenSet == FALSE)
{ {
subStruct->glyphId = 5; subStruct->glyphId = 5;
subStruct->hasGlyphIdBeenSet = TRUE; subStruct->hasGlyphIdBeenSet = TRUE;
@ -642,7 +642,7 @@ u16 Font7Func(struct TextPrinter *textPrinter)
{ {
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
if (!subStruct->hasGlyphIdBeenSet) if (subStruct->hasGlyphIdBeenSet == FALSE)
{ {
subStruct->glyphId = 7; subStruct->glyphId = 7;
subStruct->hasGlyphIdBeenSet = TRUE; subStruct->hasGlyphIdBeenSet = TRUE;
@ -654,7 +654,7 @@ u16 Font8Func(struct TextPrinter *textPrinter)
{ {
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
if (!subStruct->hasGlyphIdBeenSet) if (subStruct->hasGlyphIdBeenSet == FALSE)
{ {
subStruct->glyphId = 8; subStruct->glyphId = 8;
subStruct->hasGlyphIdBeenSet = TRUE; subStruct->hasGlyphIdBeenSet = TRUE;
@ -666,7 +666,7 @@ void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter)
{ {
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
if (gTextFlags.autoScroll == TRUE) if (gTextFlags.autoScroll == 1)
{ {
subStruct->autoScrollDelay = 0; subStruct->autoScrollDelay = 0;
} }
@ -682,7 +682,7 @@ void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter)
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
const u8 *arrowTiles; const u8 *arrowTiles;
if (!gTextFlags.autoScroll) if (gTextFlags.autoScroll == 0)
{ {
if (subStruct->downArrowDelay != 0) if (subStruct->downArrowDelay != 0)
{ {
@ -758,7 +758,7 @@ bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter)
bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
{ {
bool8 result = FALSE; bool8 result = FALSE;
if (gTextFlags.autoScroll) if (gTextFlags.autoScroll != 0)
{ {
result = TextPrinterWaitAutoMode(textPrinter); result = TextPrinterWaitAutoMode(textPrinter);
} }
@ -777,14 +777,17 @@ bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
bool16 TextPrinterWait(struct TextPrinter *textPrinter) bool16 TextPrinterWait(struct TextPrinter *textPrinter)
{ {
bool16 result = FALSE; bool16 result = FALSE;
if (gTextFlags.autoScroll) if (gTextFlags.autoScroll != 0)
{ {
result = TextPrinterWaitAutoMode(textPrinter); result = TextPrinterWaitAutoMode(textPrinter);
} }
else if (JOY_NEW(A_BUTTON | B_BUTTON)) else
{ {
result = TRUE; if (JOY_NEW(A_BUTTON | B_BUTTON))
PlaySE(SE_SELECT); {
result = TRUE;
PlaySE(SE_SELECT);
}
} }
return result; return result;
} }
@ -800,7 +803,7 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c
else else
{ {
FillWindowPixelRect(windowId, (bgColor << 4) | bgColor, x, y, 0x8, 0x10); FillWindowPixelRect(windowId, (bgColor << 4) | bgColor, x, y, 0x8, 0x10);
if (!drawArrow) if (drawArrow == 0)
{ {
switch (gTextFlags.useAlternateDownArrow) switch (gTextFlags.useAlternateDownArrow)
{ {
@ -992,10 +995,10 @@ u16 RenderText(struct TextPrinter *textPrinter)
textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++; textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++;
return 2; return 2;
case EXT_CTRL_CODE_JPN: case EXT_CTRL_CODE_JPN:
textPrinter->japanese = TRUE; textPrinter->japanese = 1;
return 2; return 2;
case EXT_CTRL_CODE_ENG: case EXT_CTRL_CODE_ENG:
textPrinter->japanese = FALSE; textPrinter->japanese = 0;
return 2; return 2;
} }
break; break;
@ -1056,10 +1059,13 @@ u16 RenderText(struct TextPrinter *textPrinter)
textPrinter->printerTemplate.currentX += width; textPrinter->printerTemplate.currentX += width;
} }
} }
else if (textPrinter->japanese)
textPrinter->printerTemplate.currentX += (gUnknown_03002F90.width + textPrinter->printerTemplate.letterSpacing);
else else
textPrinter->printerTemplate.currentX += gUnknown_03002F90.width; {
if (textPrinter->japanese)
textPrinter->printerTemplate.currentX += (gUnknown_03002F90.width + textPrinter->printerTemplate.letterSpacing);
else
textPrinter->printerTemplate.currentX += gUnknown_03002F90.width;
}
return 0; return 0;
case 1: case 1:
if (TextPrinterWait(textPrinter)) if (TextPrinterWait(textPrinter))
@ -1545,7 +1551,7 @@ void SetDefaultFontsPointer(void)
u8 GetFontAttribute(u8 fontId, u8 attributeId) u8 GetFontAttribute(u8 fontId, u8 attributeId)
{ {
u8 result = 0; int result = 0;
switch (attributeId) switch (attributeId)
{ {
case FONTATTR_MAX_LETTER_WIDTH: case FONTATTR_MAX_LETTER_WIDTH:
@ -1560,8 +1566,8 @@ u8 GetFontAttribute(u8 fontId, u8 attributeId)
case FONTATTR_LINE_SPACING: case FONTATTR_LINE_SPACING:
result = gFontInfos[fontId].lineSpacing; result = gFontInfos[fontId].lineSpacing;
break; break;
case FONTATTR_STYLE: case FONTATTR_UNKNOWN:
result = gFontInfos[fontId].style; result = gFontInfos[fontId].unk;
break; break;
case FONTATTR_COLOR_FOREGROUND: case FONTATTR_COLOR_FOREGROUND:
result = gFontInfos[fontId].fgColor; result = gFontInfos[fontId].fgColor;
@ -1591,7 +1597,7 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese)
DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
gUnknown_03002F90.width = 8; // gGlyphWidth gUnknown_03002F90.width = 8; // gGlyphWidth
gUnknown_03002F90.height = 12; // gGlyphHeight gUnknown_03002F90.height = 12; // gGlyphHeight
} }
else else
{ {
@ -1634,7 +1640,7 @@ void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese)
DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
gUnknown_03002F90.width = 8; // gGlyphWidth gUnknown_03002F90.width = 8; // gGlyphWidth
gUnknown_03002F90.height = 15; // gGlyphHeight gUnknown_03002F90.height = 15; // gGlyphHeight
} }
else else
{ {
@ -1676,7 +1682,7 @@ void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese)
DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
gUnknown_03002F90.width = 8; // gGlyphWidth gUnknown_03002F90.width = 8; // gGlyphWidth
gUnknown_03002F90.height = 12; // gGlyphHeight gUnknown_03002F90.height = 12; // gGlyphHeight
} }
else else
{ {
@ -1716,10 +1722,10 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese)
{ {
glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7));
DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); // gUnknown_03002F90 + 0x40
DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x20
DecompressGlyphTile(glyphs + 0x88, gUnknown_03002F90.unk60); DecompressGlyphTile(glyphs + 0x88, gUnknown_03002F90.unk60); // gUnknown_03002F90 + 0x60
gUnknown_03002F90.width = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth gUnknown_03002F90.width = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth
gUnknown_03002F90.height = 14; // gGlyphHeight gUnknown_03002F90.height = 14; // gGlyphHeight
} }
else else
@ -1763,7 +1769,7 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese)
DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
gUnknown_03002F90.width = 8; // gGlyphWidth gUnknown_03002F90.width = 8; // gGlyphWidth
gUnknown_03002F90.height = 15; // gGlyphHeight gUnknown_03002F90.height = 15; // gGlyphHeight
} }
else else
{ {

View File

@ -269,20 +269,13 @@
#define TEXT_SPEED_FF 0xFF #define TEXT_SPEED_FF 0xFF
enum
{
COLOR_FOREGROUND,
COLOR_SHADOW,
COLOR_BACKGROUND
};
enum enum
{ {
FONTATTR_MAX_LETTER_WIDTH, FONTATTR_MAX_LETTER_WIDTH,
FONTATTR_MAX_LETTER_HEIGHT, FONTATTR_MAX_LETTER_HEIGHT,
FONTATTR_LETTER_SPACING, FONTATTR_LETTER_SPACING,
FONTATTR_LINE_SPACING, FONTATTR_LINE_SPACING,
FONTATTR_STYLE, FONTATTR_UNKNOWN, // dunno what this is yet
FONTATTR_COLOR_FOREGROUND, FONTATTR_COLOR_FOREGROUND,
FONTATTR_COLOR_BACKGROUND, FONTATTR_COLOR_BACKGROUND,
FONTATTR_COLOR_SHADOW FONTATTR_COLOR_SHADOW
@ -310,7 +303,7 @@ struct TextPrinterTemplate
u8 currentY; u8 currentY;
u8 letterSpacing; u8 letterSpacing;
u8 lineSpacing; u8 lineSpacing;
u8 style:4; // 0xC u8 unk:4; // 0xC
u8 fgColor:4; u8 fgColor:4;
u8 bgColor:4; u8 bgColor:4;
u8 shadowColor:4; u8 shadowColor:4;
@ -329,7 +322,7 @@ struct TextPrinter
u8 delayCounter; u8 delayCounter;
u8 scrollDistance; u8 scrollDistance;
u8 minLetterSpacing; // 0x20 u8 minLetterSpacing; // 0x20
bool8 japanese; u8 japanese;
}; };
struct FontInfo struct FontInfo
@ -339,7 +332,7 @@ struct FontInfo
u8 maxLetterHeight; u8 maxLetterHeight;
u8 letterSpacing; u8 letterSpacing;
u8 lineSpacing; u8 lineSpacing;
u8 style:4; //unused u8 unk:4;
u8 fgColor:4; u8 fgColor:4;
u8 bgColor:4; u8 bgColor:4;
u8 shadowColor:4; u8 shadowColor:4;
@ -379,7 +372,7 @@ struct Struct_03002F90
extern TextFlags gTextFlags; extern TextFlags gTextFlags;
extern bool8 gUnknown_03002F84; extern u8 gUnknown_03002F84;
extern struct Struct_03002F90 gUnknown_03002F90; extern struct Struct_03002F90 gUnknown_03002F90;
void SetFontsPointer(const struct FontInfo *fonts); void SetFontsPointer(const struct FontInfo *fonts);

View File

@ -30,18 +30,21 @@ static void nullsub_8(void)
bool16 InitWindows(const struct WindowTemplate *templates) bool16 InitWindows(const struct WindowTemplate *templates)
{ {
int i, j; int i;
u8* allocatedTilemapBuffer; void *bgTilemapBuffer;
u16 attrib; int j;
int allocatedBaseBlock;
u8 bgLayer; u8 bgLayer;
u16 attrib;
u8* allocatedTilemapBuffer;
int allocatedBaseBlock;
for (i = 0; i < 0x4; ++i) for (i = 0; i < 0x4; ++i)
{ {
if (GetBgTilemapBuffer(i) != NULL) bgTilemapBuffer = GetBgTilemapBuffer(i);
if (bgTilemapBuffer != NULL)
gUnknown_03002F70[i] = nullsub_8; gUnknown_03002F70[i] = nullsub_8;
else else
gUnknown_03002F70[i] = NULL; gUnknown_03002F70[i] = bgTilemapBuffer;
} }
for (i = 0; i < 0x20; ++i) for (i = 0; i < 0x20; ++i)
@ -564,19 +567,19 @@ u32 GetWindowAttribute(u8 windowId, u8 attributeId)
switch (attributeId) switch (attributeId)
{ {
case WINDOW_BG: case WINDOW_BG:
return (u32)gWindows[windowId].window.bg; return gWindows[windowId].window.bg;
case WINDOW_TILEMAP_LEFT: case WINDOW_TILEMAP_LEFT:
return (u32)gWindows[windowId].window.tilemapLeft; return gWindows[windowId].window.tilemapLeft;
case WINDOW_TILEMAP_TOP: case WINDOW_TILEMAP_TOP:
return (u32)gWindows[windowId].window.tilemapTop; return gWindows[windowId].window.tilemapTop;
case WINDOW_WIDTH: case WINDOW_WIDTH:
return (u32)gWindows[windowId].window.width; return gWindows[windowId].window.width;
case WINDOW_HEIGHT: case WINDOW_HEIGHT:
return (u32)gWindows[windowId].window.height; return gWindows[windowId].window.height;
case WINDOW_PALETTE_NUM: case WINDOW_PALETTE_NUM:
return (u32)gWindows[windowId].window.paletteNum; return gWindows[windowId].window.paletteNum;
case WINDOW_BASE_BLOCK: case WINDOW_BASE_BLOCK:
return (u32)gWindows[windowId].window.baseBlock; return gWindows[windowId].window.baseBlock;
case WINDOW_TILE_DATA: case WINDOW_TILE_DATA:
return (u32)(gWindows[windowId].tileData); return (u32)(gWindows[windowId].tileData);
default: default:
@ -640,9 +643,12 @@ u16 AddWindow8Bit(const struct WindowTemplate *template)
} }
return 0xFF; return 0xFF;
} }
gWindows[windowId].tileData = memAddress; else
gWindows[windowId].window = *template; {
return windowId; gWindows[windowId].tileData = memAddress;
gWindows[windowId].window = *template;
return windowId;
}
} }
void FillWindowPixelBuffer8Bit(u8 windowId, u8 fillValue) void FillWindowPixelBuffer8Bit(u8 windowId, u8 fillValue)

View File

@ -176,8 +176,8 @@ typedef struct linkManagerTag
/* 0x024 */ VBL_TIMER nameAcceptTimer; /* 0x024 */ VBL_TIMER nameAcceptTimer;
/* 0x030 */ VBL_TIMER linkRecoveryTimer; /* 0x030 */ VBL_TIMER linkRecoveryTimer;
/* 0x03c */ INIT_PARAM *init_param; /* 0x03c */ INIT_PARAM *init_param;
/* 0x040 */ void (*LMAN_callback)(u8 msg, u8 paramCount); /* 0x040 */ void (*LMAN_callback)(u8, u8);
/* 0x044 */ void (*MSC_callback)(u16 REQ_commandID); /* 0x044 */ void (*MSC_callback)(u16);
} LINK_MANAGER; } LINK_MANAGER;
extern struct linkManagerTag lman; extern struct linkManagerTag lman;

View File

@ -11,6 +11,7 @@
#include "battle_gfx_sfx_util.h" #include "battle_gfx_sfx_util.h"
#include "battle_util2.h" #include "battle_util2.h"
#include "battle_bg.h" #include "battle_bg.h"
#include "pokeball.h"
#define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler]) #define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler])
#define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE) #define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE)
@ -124,8 +125,8 @@ struct ProtectStruct
u32 flinchImmobility:1; u32 flinchImmobility:1;
u32 notFirstStrike:1; u32 notFirstStrike:1;
u32 palaceUnableToUseMove:1; u32 palaceUnableToUseMove:1;
s32 physicalDmg; u32 physicalDmg;
s32 specialDmg; u32 specialDmg;
u8 physicalBattlerId; u8 physicalBattlerId;
u8 specialBattlerId; u8 specialBattlerId;
}; };
@ -254,8 +255,8 @@ struct BattleResults
u16 playerMon2Species; // 0x26 u16 playerMon2Species; // 0x26
u16 caughtMonSpecies; // 0x28 u16 caughtMonSpecies; // 0x28
u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A
u8 filler35; // 0x35 u8 filler35; // 0x35
u8 catchAttempts[11]; // 0x36 u8 catchAttempts[POKEBALL_COUNT - 1]; // 0x36 Doesn't include Master ball
}; };
struct BattleTv_Side struct BattleTv_Side

View File

@ -145,7 +145,7 @@
{ \ { \
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_STRING; \ textVar[1] = B_BUFF_STRING; \
textVar[2] = (stringId & 0xFF); \ textVar[2] = stringId; \
textVar[3] = (stringId & 0xFF00) >> 8; \ textVar[3] = (stringId & 0xFF00) >> 8; \
textVar[4] = B_BUFF_EOS; \ textVar[4] = B_BUFF_EOS; \
} }

View File

@ -7,6 +7,16 @@
#define FLOOR_WALKABLE_METATILE 0x28D #define FLOOR_WALKABLE_METATILE 0x28D
#define FLOOR_EXIT_METATILE 0x28E #define FLOOR_EXIT_METATILE 0x28E
#define HINT_EXIT_DIRECTION 0
#define HINT_REMAINING_ITEMS 1
#define HINT_REMAINING_TRAINERS 2
#define HINT_EXIT_SHORT_REMAINING_TRAINERS 3
#define HINT_EXIT_SHORT_REMAINING_ITEMS 4
#define HINT_EXIT_MEDIUM_REMAINING_TRAINERS 5
#define HINT_EXIT_MEDIUM_REMAINING_ITEMS 6
#define HINT_EXIT_FAR_REMAINING_TRAINERS 7
#define HINT_EXIT_FAR_REMAINING_ITEMS 8
#define OBJ_TRAINERS 0 #define OBJ_TRAINERS 0
#define OBJ_ITEMS 1 #define OBJ_ITEMS 1

View File

@ -140,13 +140,55 @@ struct SoundChannel
struct WaveData *wav; struct WaveData *wav;
u32 cp; u32 cp;
struct MusicPlayerTrack *track; struct MusicPlayerTrack *track;
void *pp; u32 pp;
void *np; u32 np;
void *d4; u32 d4;
u16 xpi; u16 xpi;
u16 xpc; u16 xpc;
}; };
#define MAX_DIRECTSOUND_CHANNELS 12
#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer
struct SoundInfo
{
// This field is normally equal to ID_NUMBER but it is set to other
// values during sensitive operations for locking purposes.
// This field should be volatile but isn't. This could potentially cause
// race conditions.
u32 ident;
vu8 pcmDmaCounter;
// Direct Sound
u8 reverb;
u8 maxChans;
u8 masterVolume;
u8 freq;
u8 mode;
u8 c15;
u8 pcmDmaPeriod; // number of V-blanks per PCM DMA
u8 maxLines;
u8 gap[3];
s32 pcmSamplesPerVBlank;
s32 pcmFreq;
s32 divFreq;
struct CgbChannel *cgbChans;
u32 func;
u32 intp;
void (*CgbSound)(void);
void (*CgbOscOff)(u8);
u32 (*MidiKeyToCgbFreq)(u8, u8, u8);
u32 MPlayJumpTable;
u32 plynote;
u32 ExtVolPit;
u8 gap2[16];
struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS];
s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2];
};
struct SongHeader struct SongHeader
{ {
u8 trackCount; u8 trackCount;
@ -270,7 +312,7 @@ struct MusicPlayerInfo
struct MusicPlayerTrack *tracks; struct MusicPlayerTrack *tracks;
struct ToneData *tone; struct ToneData *tone;
u32 ident; u32 ident;
void (*func)(); u32 func;
u32 intp; u32 intp;
}; };
@ -292,47 +334,7 @@ struct Song
extern const struct MusicPlayer gMPlayTable[]; extern const struct MusicPlayer gMPlayTable[];
extern const struct Song gSongTable[]; extern const struct Song gSongTable[];
#define MAX_DIRECTSOUND_CHANNELS 12
#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer
struct SoundInfo
{
// This field is normally equal to ID_NUMBER but it is set to other
// values during sensitive operations for locking purposes.
// This field should be volatile but isn't. This could potentially cause
// race conditions.
u32 ident;
vu8 pcmDmaCounter;
// Direct Sound
u8 reverb;
u8 maxChans;
u8 masterVolume;
u8 freq;
u8 mode;
u8 c15;
u8 pcmDmaPeriod; // number of V-blanks per PCM DMA
u8 maxLines;
u8 gap[3];
s32 pcmSamplesPerVBlank;
s32 pcmFreq;
s32 divFreq;
struct CgbChannel *cgbChans;
void (*func)();
u32 intp;
void (*CgbSound)();
void (*CgbOscOff)(u8);
u32 (*MidiKeyToCgbFreq)(u8, u8, u8);
void (**MPlayJumpTable)();
void (*plynote)(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void (*ExtVolPit)(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
u32 gap2[4];
struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS];
s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2];
};
extern u8 gMPlayMemAccArea[]; extern u8 gMPlayMemAccArea[];
@ -446,7 +448,7 @@ void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_note(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
// extended sound command handler functions // extended sound command handler functions
void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *);

View File

@ -98,7 +98,7 @@
#define T2_READ_PTR(ptr) (void*) T2_READ_32(ptr) #define T2_READ_PTR(ptr) (void*) T2_READ_32(ptr)
// Macros for checking the joypad // Macros for checking the joypad
#define TEST_BUTTON(field, button) ((field) & (button)) #define TEST_BUTTON(field, button) ({(field) & (button);})
#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button) #define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
#define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button) #define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button)
#define JOY_HELD_RAW(button) TEST_BUTTON(gMain.heldKeysRaw, button) #define JOY_HELD_RAW(button) TEST_BUTTON(gMain.heldKeysRaw, button)

View File

@ -24,7 +24,7 @@ struct ListMenu;
struct ListMenuItem struct ListMenuItem
{ {
const u8 *name; const u8 *name;
u32 id; s32 id;
}; };
struct ListMenuTemplate struct ListMenuTemplate
@ -98,7 +98,7 @@ struct CursorStruct
extern struct ScrollArrowsTemplate gTempScrollArrowTemplate; extern struct ScrollArrowsTemplate gTempScrollArrowTemplate;
extern struct ListMenuTemplate gMultiuseListMenuTemplate; extern struct ListMenuTemplate gMultiuseListMenuTemplate;
u32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum); s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum);
u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow); u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow);
u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *arg1, u16 scrollOffset, u16 selectedRow); u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *arg1, u16 scrollOffset, u16 selectedRow);
s32 ListMenu_ProcessInput(u8 listTaskId); s32 ListMenu_ProcessInput(u8 listTaskId);

View File

@ -4,6 +4,7 @@
#include "task.h" #include "task.h"
#include "text.h" #include "text.h"
#include "window.h" #include "window.h"
#include "constants/pokemon.h"
#define MENU_NOTHING_CHOSEN -2 #define MENU_NOTHING_CHOSEN -2
#define MENU_B_PRESSED -1 #define MENU_B_PRESSED -1
@ -14,6 +15,14 @@
#define MENU_CURSOR_DELTA_LEFT -1 #define MENU_CURSOR_DELTA_LEFT -1
#define MENU_CURSOR_DELTA_RIGHT 1 #define MENU_CURSOR_DELTA_RIGHT 1
#define MENU_INFO_ICON_TYPE (NUMBER_OF_MON_TYPES + 1)
#define MENU_INFO_ICON_POWER (NUMBER_OF_MON_TYPES + 2)
#define MENU_INFO_ICON_ACCURACY (NUMBER_OF_MON_TYPES + 3)
#define MENU_INFO_ICON_PP (NUMBER_OF_MON_TYPES + 4)
#define MENU_INFO_ICON_EFFECT (NUMBER_OF_MON_TYPES + 5)
#define MENU_INFO_ICON_BALL_RED (NUMBER_OF_MON_TYPES + 6)
#define MENU_INFO_ICON_BALL_BLUE (NUMBER_OF_MON_TYPES + 7)
enum enum
{ {
SAVE_MENU_NAME, SAVE_MENU_NAME,
@ -61,7 +70,7 @@ u8 InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 windowId, u8 numItems, u8 i
u8 Menu_GetCursorPos(void); u8 Menu_GetCursorPos(void);
s8 Menu_ProcessInput(void); s8 Menu_ProcessInput(void);
s8 Menu_ProcessInputNoWrap(void); s8 Menu_ProcessInputNoWrap(void);
void blit_move_info_icon(u8 winId, u8 a2, u16 x, u16 y); void BlitMenuInfoIcon(u8 winId, u8 a2, u16 x, u16 y);
void ResetTempTileDataBuffers(void); void ResetTempTileDataBuffers(void);
void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode);
bool8 FreeTempTileDataBuffersIfPossible(void); bool8 FreeTempTileDataBuffersIfPossible(void);

View File

@ -130,8 +130,8 @@ struct Unknown_806F160_Struct
u32 field_0_1:4; u32 field_0_1:4;
u32 field_1:8; u32 field_1:8;
u16 magic:8; u16 magic:8;
u32 size:4; u32 field_3_0:4;
u16 field_3_1:4; u32 field_3_1:4;
void *bytes; void *bytes;
u8 **byteArrays; u8 **byteArrays;
struct SpriteTemplate *templates; struct SpriteTemplate *templates;

View File

@ -1,12 +1,9 @@
.include "../constants/gba_constants.inc" .include "../constants/gba_constants.inc"
.include "../asm/macros/function.inc" .include "../asm/macros/function.inc"
.syntax unified
.text .text
.set SOFT_RESET_DIRECT_BUF, 0x03007FFA .set SOFT_RESET_DIRECT_BUF, 0x03007FFA
.set USER_STACK, 0x03007F00
.set RESET_EX_WRAM_FLAG, 0x1 .set RESET_EX_WRAM_FLAG, 0x1
.ifdef NO_GRANULAR_AGBSYSCALL .ifdef NO_GRANULAR_AGBSYSCALL
@ -109,7 +106,7 @@ SoundDriverVSyncOn:
thumb_func_start Mod thumb_func_start Mod
Mod: Mod:
svc #6 svc #6
adds r0, r1, #0 mov r0, r1
bx lr bx lr
thumb_func_end Mod thumb_func_end Mod
.endif .endif
@ -148,7 +145,7 @@ HuffUnComp:
.endif .endif
.ifdef L_SoftResetExram .ifdef L_SoftResetExram
thumb_func_start SoftResetExram arm_func_start SoftResetExram
SoftResetExram: SoftResetExram:
ldr r3, =REG_IME ldr r3, =REG_IME
movs r2, #0 movs r2, #0
@ -156,14 +153,14 @@ SoftResetExram:
ldr r3, =SOFT_RESET_DIRECT_BUF ldr r3, =SOFT_RESET_DIRECT_BUF
movs r2, #1 movs r2, #1
strb r2, [r3, #0] strb r2, [r3, #0]
subs r3, #SOFT_RESET_DIRECT_BUF - USER_STACK subs r3, #SOFT_RESET_DIRECT_BUF - 0x3007f00
mov sp, r3 mov sp, r3
movs r2, #RESET_EX_WRAM_FLAG movs r2, #RESET_EX_WRAM_FLAG
bics r0, r2 bics r0, r2
svc #1 svc #1
svc #0 svc #0
.pool .pool
thumb_func_end SoftResetExram arm_func_end SoftResetExram
.endif .endif
.ifdef L_MusicPlayerFadeOut .ifdef L_MusicPlayerFadeOut
@ -234,7 +231,7 @@ DivArm:
thumb_func_start ModArm thumb_func_start ModArm
ModArm: ModArm:
svc #7 svc #7
adds r0, r1, #0 mov r0, r1
bx lr bx lr
thumb_func_end ModArm thumb_func_end ModArm
.endif .endif
@ -274,7 +271,7 @@ Diff8bitUnFilterWram:
.ifdef L_MultiBoot .ifdef L_MultiBoot
thumb_func_start MultiBoot thumb_func_start MultiBoot
MultiBoot: MultiBoot:
movs r1, #1 mov r1, #1
svc #37 svc #37
bx lr bx lr
thumb_func_end MultiBoot thumb_func_end MultiBoot
@ -329,7 +326,7 @@ SoftResetRom:
ldr r3, =SOFT_RESET_DIRECT_BUF ldr r3, =SOFT_RESET_DIRECT_BUF
movs r2, #0 movs r2, #0
strb r2, [r3, #0] strb r2, [r3, #0]
subs r3, #SOFT_RESET_DIRECT_BUF - USER_STACK sub r3, #SOFT_RESET_DIRECT_BUF - 0x3007f00
mov sp, r3 mov sp, r3
svc #1 svc #1
svc #0 svc #0
@ -416,7 +413,7 @@ SoftReset:
ldr r3, =REG_IME ldr r3, =REG_IME
movs r2, #0 movs r2, #0
strb r2, [r3, #0] strb r2, [r3, #0]
ldr r1, =USER_STACK ldr r1, =0x3007f00
mov sp, r1 mov sp, r1
svc #1 svc #1
svc #0 svc #0

View File

@ -352,7 +352,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID)
{ {
for (i = 0; i < RFU_CHILD_MAX; i++) for (i = 0; i < RFU_CHILD_MAX; i++)
{ {
if (bm_linkLossSlot & (1 << i)) if ((bm_linkLossSlot >> i) & 1)
{ {
lman.linkRecoveryTimer.active |= (1 << i); lman.linkRecoveryTimer.active |= (1 << i);
lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max; lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max;
@ -396,7 +396,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID)
bm_disconnectSlot = 0; bm_disconnectSlot = 0;
for (i = 0; i < RFU_CHILD_MAX; i++) for (i = 0; i < RFU_CHILD_MAX; i++)
{ {
if ((lman.linkRecoveryTimer.active) & (1 << i) && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0) if ((lman.linkRecoveryTimer.active >> i) & 1 && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0)
{ {
lman.linkRecoveryTimer.active &= ~(1 << i); lman.linkRecoveryTimer.active &= ~(1 << i);
bm_disconnectSlot |= (1 << i); bm_disconnectSlot |= (1 << i);

View File

@ -41,7 +41,7 @@ u16 ReadFlashId(void)
u8 (*readFlash1)(u8 *); u8 (*readFlash1)(u8 *);
SetReadFlash1(readFlash1Buffer); SetReadFlash1(readFlash1Buffer);
readFlash1 = (u8 (*)(u8 *))((uintptr_t)readFlash1Buffer + 1); readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1);
// Enter ID mode. // Enter ID mode.
FLASH_WRITE(0x5555, 0xAA); FLASH_WRITE(0x5555, 0xAA);
@ -113,12 +113,12 @@ void SetReadFlash1(u16 *dest)
u16 *src; u16 *src;
u16 i; u16 i;
PollFlashStatus = (u8 (*)(u8 *))((uintptr_t)dest + 1); PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1);
src = (u16 *)ReadFlash1; src = (u16 *)ReadFlash1;
src = (u16 *)((uintptr_t)src ^ 1); src = (u16 *)((s32)src ^ 1);
i = ((uintptr_t)SetReadFlash1 - (uintptr_t)ReadFlash1) >> 1; i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1;
while (i != 0) while (i != 0)
{ {
@ -154,10 +154,10 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size)
} }
funcSrc = (vu16 *)ReadFlash_Core; funcSrc = (vu16 *)ReadFlash_Core;
funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1); funcSrc = (vu16 *)((s32)funcSrc ^ 1);
funcDest = readFlash_Core_Buffer; funcDest = readFlash_Core_Buffer;
i = ((uintptr_t)ReadFlash - (uintptr_t)ReadFlash_Core) >> 1; i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1;
while (i != 0) while (i != 0)
{ {
@ -165,7 +165,7 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size)
i--; i--;
} }
readFlash_Core = (void (*)(vu8 *, u8 *, u32))((uintptr_t)readFlash_Core_Buffer + 1); readFlash_Core = (void (*)(vu8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1);
src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset;
@ -202,10 +202,10 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src)
} }
funcSrc = (vu16 *)VerifyFlashSector_Core; funcSrc = (vu16 *)VerifyFlashSector_Core;
funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1); funcSrc = (vu16 *)((s32)funcSrc ^ 1);
funcDest = verifyFlashSector_Core_Buffer; funcDest = verifyFlashSector_Core_Buffer;
i = (u16)(((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1); i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1;
while (i != 0) while (i != 0)
{ {
@ -213,7 +213,7 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src)
i--; i--;
} }
verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1); verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1);
tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift);
size = gFlash->sector.size; size = gFlash->sector.size;
@ -239,10 +239,10 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n)
REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8;
funcSrc = (vu16 *)VerifyFlashSector_Core; funcSrc = (vu16 *)VerifyFlashSector_Core;
funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1); funcSrc = (vu16 *)((s32)funcSrc ^ 1);
funcDest = verifyFlashSector_Core_Buffer; funcDest = verifyFlashSector_Core_Buffer;
i = ((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1; i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1;
while (i != 0) while (i != 0)
{ {
@ -250,7 +250,7 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n)
i--; i--;
} }
verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1); verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1);
tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift);

View File

@ -1298,7 +1298,7 @@ static void Cmd_count_usable_party_mons(void)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{ {
u8 position; u32 position;
battlerOnField1 = gBattlerPartyIndexes[battlerId]; battlerOnField1 = gBattlerPartyIndexes[battlerId];
position = GetBattlerPosition(battlerId) ^ BIT_FLANK; position = GetBattlerPosition(battlerId) ^ BIT_FLANK;
battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)]; battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)];

View File

@ -372,11 +372,14 @@ static void AnimTranslateStinger(struct Sprite *sprite)
{ {
gBattleAnimArgs[2] = -gBattleAnimArgs[2]; gBattleAnimArgs[2] = -gBattleAnimArgs[2];
} }
else if (GetBattlerSide(gBattleAnimAttacker)) else
{ {
gBattleAnimArgs[2] = -gBattleAnimArgs[2]; if (GetBattlerSide(gBattleAnimAttacker))
gBattleAnimArgs[1] = -gBattleAnimArgs[1]; {
gBattleAnimArgs[3] = -gBattleAnimArgs[3]; gBattleAnimArgs[2] = -gBattleAnimArgs[2];
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
}
} }
if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
@ -440,24 +443,28 @@ static void AnimMissileArc_Step(struct Sprite *sprite)
else else
{ {
s16 tempData[8]; s16 tempData[8];
s16 xpos, ypos; u16 *data = sprite->data;
u16 x1 = sprite->pos1.x;
s16 x2 = sprite->pos2.x;
u16 y1 = sprite->pos1.y;
s16 y2 = sprite->pos2.y;
int i; int i;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
tempData[i] = sprite->data[i]; tempData[i] = data[i];
xpos = sprite->pos1.x + sprite->pos2.x; x2 += x1;
ypos = sprite->pos1.y + sprite->pos2.y; y2 += y1;
if (!TranslateAnimHorizontalArc(sprite)) if (!TranslateAnimHorizontalArc(sprite))
{ {
u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - xpos, //Isn't this zero lol u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2,
sprite->pos1.y + sprite->pos2.y - ypos); sprite->pos1.y + sprite->pos2.y - y2);
rotation += 0xC000; rotation += 0xC000;
TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation); TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
sprite->data[i] = tempData[i]; data[i] = tempData[i];
} }
} }
} }

View File

@ -3967,25 +3967,24 @@ static void AnimProtect(struct Sprite* sprite)
static void AnimProtect_Step(struct Sprite *sprite) static void AnimProtect_Step(struct Sprite *sprite)
{ {
int i, savedPal; int i, id, savedPal;
sprite->data[5] += 96; sprite->data[5] += 96;
sprite->pos2.x = -(sprite->data[5] >> 8); sprite->pos2.x = -(sprite->data[5] >> 8);
if (++sprite->data[1] > 1) if (++sprite->data[1] > 1)
{ {
int id;
sprite->data[1] = 0; sprite->data[1] = 0;
savedPal = gPlttBufferFaded[sprite->data[2] + 1]; savedPal = gPlttBufferFaded[sprite->data[2] + 1];
i = 0; i = 0;
do while (i < 6)
{ {
id = sprite->data[2] + ++i; id = sprite->data[2] + ++i;
gPlttBufferFaded[id] = gPlttBufferFaded[id + 1]; gPlttBufferFaded[id] = gPlttBufferFaded[id + 1];
} while (i < 6); }
gPlttBufferFaded[sprite->data[2] + 7] = savedPal; gPlttBufferFaded[sprite->data[2] + 7] = savedPal;
} }
if (sprite->data[7] > 6 && sprite->data[0] > 0 && ++sprite->data[6] > 1) if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1)
{ {
sprite->data[6] = 0; sprite->data[6] = 0;
sprite->data[7] -= 1; sprite->data[7] -= 1;

View File

@ -5002,8 +5002,8 @@ void AnimTask_GetReturnPowerLevel(u8 taskId)
void AnimTask_SnatchOpposingMonMove(u8 taskId) void AnimTask_SnatchOpposingMonMove(u8 taskId)
{ {
u8 spriteId, spriteId2; u8 spriteId, spriteId2;
u32 personality; int personality;
u32 otId; int otId;
u16 species; u16 species;
u8 subpriority; u8 subpriority;
bool8 isBackPic; bool8 isBackPic;
@ -5037,31 +5037,34 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId)
isBackPic = FALSE; isBackPic = FALSE;
x = -32; x = -32;
} }
else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
{
personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY);
otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID);
if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE)
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
else
species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies;
subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1;
isBackPic = FALSE;
x = 272;
}
else else
{ {
personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID); {
if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY);
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID);
else if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE)
species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
else
species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies;
subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1; subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1;
isBackPic = TRUE; isBackPic = FALSE;
x = -32; x = 272;
}
else
{
personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY);
otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID);
if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
else
species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies;
subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1;
isBackPic = TRUE;
x = -32;
}
} }
spriteId2 = sub_80A8394(species, isBackPic, 0, x, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker, 0); spriteId2 = sub_80A8394(species, isBackPic, 0, x, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker, 0);
@ -5088,7 +5091,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId)
if (x < GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X)) if (x < GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X))
{ {
gTasks[taskId].data[14]++; gTasks[taskId].data[14]++;
gBattleAnimArgs[7] = -1; gBattleAnimArgs[7] = 0xFFFF;
} }
} }
else else
@ -5096,7 +5099,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId)
if (x > GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X)) if (x > GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X))
{ {
gTasks[taskId].data[14]++; gTasks[taskId].data[14]++;
gBattleAnimArgs[7] = -1; gBattleAnimArgs[7] = 0xFFFF;
} }
} }
} }

View File

@ -380,18 +380,21 @@ static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId)
{ {
u8 data2; u8 data2;
u16 temp; u16 temp;
int i, base;
if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1]) if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1])
{ {
int i, base;
gTasks[taskId].data[10] = 0; gTasks[taskId].data[10] = 0;
data2 = gTasks[taskId].data[2]; data2 = gTasks[taskId].data[2];
temp = gPlttBufferFaded[16 * data2 + 0x108]; temp = gPlttBufferFaded[16 * data2 + 0x108];
i = 7; i = 7;
base = data2 * 16; base = data2 * 16;
for (; i > 0; --i) do
{
gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i]; gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i];
i--;
} while (i > 0);
gPlttBufferFaded[base + 0x101] = temp; gPlttBufferFaded[base + 0x101] = temp;
} }
@ -533,16 +536,17 @@ static void AnimFlyBallAttack_Step(struct Sprite *sprite)
void DestroyAnimSpriteAfterTimer(struct Sprite *sprite) void DestroyAnimSpriteAfterTimer(struct Sprite *sprite)
{ {
if (sprite->data[0]-- > 0) if (sprite->data[0]-- <= 0)
return;
if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
{ {
FreeOamMatrix(sprite->oam.matrixNum); if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
sprite->oam.affineMode = ST_OAM_AFFINE_OFF; {
} FreeOamMatrix(sprite->oam.matrixNum);
sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
}
DestroySprite(sprite); DestroySprite(sprite);
gAnimVisualTaskCount--; gAnimVisualTaskCount--;
}
} }
struct FeatherDanceData struct FeatherDanceData
@ -563,41 +567,35 @@ struct FeatherDanceData
u16 unkE_1:15; u16 unkE_1:15;
}; };
#define ANIM_SWITCH(sprite) \
{ \
(sprite)->hFlip ^= 1; \
(sprite)->animNum = (sprite)->hFlip; \
(sprite)->animBeginning = TRUE; \
(sprite)->animEnded = FALSE; \
}
static void AnimFallingFeather(struct Sprite *sprite) static void AnimFallingFeather(struct Sprite *sprite)
{ {
u8 battler, sinIndex; u8 battler, matrixNum, sinIndex;
u32 matrixNum; s16 spriteCoord;
s16 sinVal;
struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data; struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data;
battler = (gBattleAnimArgs[7] & 0x100) ? gBattleAnimAttacker : gBattleAnimTarget; if (gBattleAnimArgs[7] & 0x100)
battler = gBattleAnimAttacker;
else
battler = gBattleAnimTarget;
if (GetBattlerSide(battler) == B_SIDE_PLAYER) if (GetBattlerSide(battler) == B_SIDE_PLAYER)
gBattleAnimArgs[0] = -gBattleAnimArgs[0]; gBattleAnimArgs[0] = -gBattleAnimArgs[0];
sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_HEIGHT) + gBattleAnimArgs[0]; sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_HEIGHT) + gBattleAnimArgs[0];
sinVal = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH); spriteCoord = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH);
sprite->pos1.y = sinVal + gBattleAnimArgs[1]; sprite->pos1.y = spriteCoord + gBattleAnimArgs[1];
data->unk8 = (u16)(sprite->pos1.y) << 8; data->unk8 = sprite->pos1.y << 8;
data->unkE_1 = (u16)(sinVal + gBattleAnimArgs[6]); data->unkE_1 = spriteCoord + gBattleAnimArgs[6];
data->unk0_0c = 1; data->unk0_0c = 1;
data->unk2 = (u16)(gBattleAnimArgs[2] & 0xFF); data->unk2 = gBattleAnimArgs[2] & 0xFF;
data->unkA = (u16)gBattleAnimArgs[2] >> 8; data->unkA = (gBattleAnimArgs[2] >> 8) & 0xFF;
data->unk4 = gBattleAnimArgs[3]; data->unk4 = gBattleAnimArgs[3];
data->unk6 = (u16)gBattleAnimArgs[4]; data->unk6 = gBattleAnimArgs[4];
*(u16 *)(data->unkC) = (u16)gBattleAnimArgs[5]; *(u16*)(data->unkC) = gBattleAnimArgs[5];
if (data->unk2 >= 64 && data->unk2 < 192) if (data->unk2 >= 64 && data->unk2 <= 191)
{ {
if (!IsContest()) if (!IsContest())
sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
@ -608,7 +606,11 @@ static void AnimFallingFeather(struct Sprite *sprite)
if (!(data->unk4 & 0x8000)) if (!(data->unk4 & 0x8000))
{ {
ANIM_SWITCH(sprite); sprite->hFlip ^= 1;
sprite->animNum = sprite->hFlip;
sprite->animBeginning = 1;
sprite->animEnded = 0;
} }
} }
else else
@ -618,28 +620,31 @@ static void AnimFallingFeather(struct Sprite *sprite)
if (data->unk4 & 0x8000) if (data->unk4 & 0x8000)
{ {
ANIM_SWITCH(sprite); sprite->hFlip ^= 1;
sprite->animNum = sprite->hFlip;
sprite->animBeginning = 1;
sprite->animEnded = 0;
} }
} }
data->unk0_1 = data->unk2 / 64; data->unk0_1 = data->unk2 >> 6;
sprite->pos2.x = (gSineTable[data->unk2] * (s32)data->unkC[0]) >> 8; sprite->pos2.x = (gSineTable[data->unk2] * data->unkC[0]) >> 8;
matrixNum = sprite->oam.matrixNum; matrixNum = sprite->oam.matrixNum;
sinIndex = (-sprite->pos2.x >> 1) + data->unkA; sinIndex = (-sprite->pos2.x >> 1) + data->unkA;
sinVal = gSineTable[sinIndex]; spriteCoord = gSineTable[sinIndex];
gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
gOamMatrices[matrixNum].b = sinVal; gOamMatrices[matrixNum].b = spriteCoord;
gOamMatrices[matrixNum].c = -sinVal; gOamMatrices[matrixNum].c = -spriteCoord;
sprite->callback = sub_810E520; sprite->callback = sub_810E520;
} }
static void sub_810E520(struct Sprite *sprite) static void sub_810E520(struct Sprite *sprite)
{ {
u8 sinIndex; u8 matrixNum, sinIndex;
u32 matrixNum;
s16 sinVal = 0; s16 sinVal = 0;
struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data; struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data;
if (data->unk0_0a) if (data->unk0_0a)
@ -649,226 +654,240 @@ static void sub_810E520(struct Sprite *sprite)
data->unk0_0a = 0; data->unk0_0a = 0;
data->unk1 = 0; data->unk1 = 0;
} }
return;
} }
switch (data->unk2 / 64)
{
case 0:
if ((u8)data->unk0_1 == 1) // this must be cast to u8
{
data->unk0_0d = 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
else if ((u8)data->unk0_1 == 3)
{
data->unk0_0b ^= 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
else if (data->unk0_0d)
{
ANIM_SWITCH(sprite);
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
{
sprite->oam.priority--;
data->unkE_0 ^= 1;
}
else
{
sprite->oam.priority++;
data->unkE_0 ^= 1;
}
}
else
{
if (!data->unkE_0)
{
sprite->subpriority -= 12;
data->unkE_0 ^= 1;
}
else
{
sprite->subpriority += 12;
data->unkE_0 ^= 1;
}
}
}
data->unk0_0d = 0;
}
data->unk0_1 = 0;
break;
case 1:
if ((u8)data->unk0_1 == 0)
{
data->unk0_0d = 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
else if ((u8)data->unk0_1 == 2)
{
data->unk0_0a = 1;
data->unk1 = 0;
}
else if (data->unk0_0d)
{
ANIM_SWITCH(sprite);
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
{
sprite->oam.priority--;
data->unkE_0 ^= 1;
}
else
{
sprite->oam.priority++;
data->unkE_0 ^= 1;
}
}
else
{
if (!data->unkE_0)
{
sprite->subpriority -= 12;
data->unkE_0 ^= 1;
}
else
{
sprite->subpriority += 12;
data->unkE_0 ^= 1;
}
}
}
data->unk0_0d = 0;
}
data->unk0_1 = 1;
break;
case 2:
if ((u8)data->unk0_1 == 3)
{
data->unk0_0d = 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
else if ((u8)data->unk0_1 == 1)
{
data->unk0_0a = 1;
data->unk1 = 0;
}
else if (data->unk0_0d)
{
ANIM_SWITCH(sprite);
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
{
sprite->oam.priority--;
data->unkE_0 ^= 1;
}
else
{
sprite->oam.priority++;
data->unkE_0 ^= 1;
}
}
else
{
if (!data->unkE_0)
{
sprite->subpriority -= 12;
data->unkE_0 ^= 1;
}
else
{
sprite->subpriority += 12;
data->unkE_0 ^= 1;
}
}
}
data->unk0_0d = 0;
}
data->unk0_1 = 2;
break;
case 3:
if ((u8)data->unk0_1 == 2)
{
data->unk0_0d = 1;
}
else if ((u8)data->unk0_1 == 0)
{
data->unk0_0b ^= 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
else if (data->unk0_0d)
{
ANIM_SWITCH(sprite);
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
{
sprite->oam.priority--;
data->unkE_0 ^= 1;
}
else
{
sprite->oam.priority++;
data->unkE_0 ^= 1;
}
}
else
{
if (!data->unkE_0)
{
sprite->subpriority -= 12;
data->unkE_0 ^= 1;
}
else
{
sprite->subpriority += 12;
data->unkE_0 ^= 1;
}
}
}
data->unk0_0d = 0;
}
data->unk0_1 = 3;
break;
}
sprite->pos2.x = ((s32)(data->unkC[data->unk0_0b]) * gSineTable[data->unk2]) >> 8;
matrixNum = sprite->oam.matrixNum;
sinIndex = ((-sprite->pos2.x >> 1) + data->unkA);
sinVal = gSineTable[sinIndex];
gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
gOamMatrices[matrixNum].b = sinVal;
gOamMatrices[matrixNum].c = -sinVal;
data->unk8 += data->unk6;
sprite->pos1.y = (s16)(data->unk8 >> 8);
if (data->unk4 & 0x8000)
data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF;
else else
data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF;
if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1)
{ {
sprite->data[0] = 0; switch (data->unk2 / 64)
sprite->callback = DestroyAnimSpriteAfterTimer; {
case 0:
if ((u8)data->unk0_1 == 1) //casts to u8 here are necessary for matching
{
data->unk0_0d = 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
else if ((u8)data->unk0_1 == 3)
{
data->unk0_0b ^= 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
else if (data->unk0_0d)
{
sprite->hFlip ^= 1;
sprite->animNum = sprite->hFlip;
sprite->animBeginning = TRUE;
sprite->animEnded = FALSE;
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
{
sprite->oam.priority--;
data->unkE_0 ^= 1;
}
else
{
sprite->oam.priority++;
data->unkE_0 ^= 1;
}
}
else
{
if (!data->unkE_0)
{
sprite->subpriority -= 12;
data->unkE_0 ^= 1;
}
else
{
sprite->subpriority += 12;
data->unkE_0 ^= 1;
}
}
}
data->unk0_0d = 0;
data->unk2;
}
data->unk0_1 = 0;
break;
case 1:
if ((u8)data->unk0_1 == 0)
{
data->unk0_0d = 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
else if ((u8)data->unk0_1 == 2)
{
data->unk0_0a = 1;
data->unk1 = 0;
}
else if (data->unk0_0d)
{
sprite->hFlip ^= 1;
sprite->animNum = sprite->hFlip;
sprite->animBeginning = TRUE;
sprite->animEnded = FALSE;
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
{
sprite->oam.priority--;
data->unkE_0 ^= 1;
}
else
{
sprite->oam.priority++;
data->unkE_0 ^= 1;
}
}
else
{
if (!data->unkE_0)
{
sprite->subpriority -= 12;
data->unkE_0 ^= 1;
}
else
{
sprite->subpriority += 12;
data->unkE_0 ^= 1;
}
}
}
data->unk0_0d = 0;
}
data->unk0_1 = 1;
break;
case 2:
if ((u8)data->unk0_1 == 3)
{
data->unk0_0d = 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
else if ((u8)data->unk0_1 == 1)
{
data->unk0_0a = 1;
data->unk1 = 0;
}
else if (data->unk0_0d)
{
sprite->hFlip ^= 1;
sprite->animNum = sprite->hFlip;
sprite->animBeginning = TRUE;
sprite->animEnded = FALSE;
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
{
sprite->oam.priority--;
data->unkE_0 ^= 1;
}
else
{
sprite->oam.priority++;
data->unkE_0 ^= 1;
}
}
else
{
if (!data->unkE_0)
{
sprite->subpriority -= 12;
data->unkE_0 ^= 1;
}
else
{
sprite->subpriority += 12;
data->unkE_0 ^= 1;
}
}
}
data->unk0_0d = 0;
}
data->unk0_1 = 2;
break;
case 3:
if ((u8)data->unk0_1 == 2)
{
data->unk0_0d = 1;
}
else if ((u8)data->unk0_1 == 0)
{
data->unk0_0b ^= 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
else if (data->unk0_0d)
{
sprite->hFlip ^= 1;
sprite->animNum = sprite->hFlip;
sprite->animBeginning = TRUE;
sprite->animEnded = FALSE;
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
{
sprite->oam.priority--;
data->unkE_0 ^= 1;
}
else
{
sprite->oam.priority++;
data->unkE_0 ^= 1;
}
}
else
{
if (!data->unkE_0)
{
sprite->subpriority -= 12;
data->unkE_0 ^= 1;
}
else
{
sprite->subpriority += 12;
data->unkE_0 ^= 1;
}
}
}
data->unk0_0d = 0;
}
data->unk0_1 = 3;
break;
}
sprite->pos2.x = ((s32)data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8;
matrixNum = sprite->oam.matrixNum;
sinIndex = (-sprite->pos2.x >> 1) + data->unkA;
sinVal = gSineTable[sinIndex];
gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
gOamMatrices[matrixNum].b = sinVal;
gOamMatrices[matrixNum].c = -sinVal;
data->unk8 += data->unk6;
sprite->pos1.y = data->unk8 >> 8;
if (data->unk4 & 0x8000)
data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF;
else
data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF;
if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1)
{
sprite->data[0] = 0;
sprite->callback = DestroyAnimSpriteAfterTimer;
}
} }
} }
@ -912,20 +931,20 @@ static void sub_810EB40(struct Sprite *sprite)
{ {
sprite->pos2.x += sprite->data[1] >> 8; sprite->pos2.x += sprite->data[1] >> 8;
if (sprite->data[0]++ == 5) if (++sprite->data[0] == 6)
{ {
sprite->data[0] = 0; sprite->data[0] = 0;
sprite->pos2.x = 0; sprite->pos2.x = 0;
StartSpriteAnim(sprite, 0); StartSpriteAnim(sprite, 0);
} }
if (sprite->data[7]-- == 0) if (--sprite->data[7] == -1)
DestroyAnimSprite(sprite); DestroyAnimSprite(sprite);
} }
void AnimTask_DrillPeckHitSplats(u8 task) void AnimTask_DrillPeckHitSplats(u8 task)
{ {
if ((gTasks[task].data[0] % 32) == 0) if (!(gTasks[task].data[0] % 32))
{ {
gAnimVisualTaskCount++; gAnimVisualTaskCount++;
@ -1028,8 +1047,8 @@ static void AnimDiveBall_Step2(struct Sprite *sprite)
static void AnimDiveWaterSplash(struct Sprite *sprite) static void AnimDiveWaterSplash(struct Sprite *sprite)
{ {
u8 matrixNum; u32 matrixNum;
s32 t1, t2; int t1, t2;
switch (sprite->data[0]) switch (sprite->data[0])
{ {
@ -1051,7 +1070,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
sprite->data[0]++; sprite->data[0]++;
break; break;
case 1: case 1:
if (sprite->data[2] < 12) if (sprite->data[2] <= 11)
sprite->data[1] -= 40; sprite->data[1] -= 40;
else else
sprite->data[1] += 40; sprite->data[1] += 40;
@ -1059,7 +1078,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
sprite->data[2]++; sprite->data[2]++;
TrySetSpriteRotScale(sprite, 0, 256, sprite->data[1], 0); TrySetSpriteRotScale(sprite, 0, 256, sprite->data[1], 0);
matrixNum = sprite->oam.matrixNum; matrixNum = sprite->oam.matrixNum;
t1 = 15616; t1 = 15616;
@ -1083,8 +1102,8 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
// Launches a water droplet away from the specified battler. Used by Astonish and Dive // Launches a water droplet away from the specified battler. Used by Astonish and Dive
static void AnimSprayWaterDroplet(struct Sprite *sprite) static void AnimSprayWaterDroplet(struct Sprite *sprite)
{ {
const u16 v1 = Random2() & 0x1ff; int v1 = 0x1ff & Random2();
const u16 v2 = Random2() & 0x07f; int v2 = 0x7f & Random2();
if (v1 % 2) if (v1 % 2)
sprite->data[0] = 736 + v1; sprite->data[0] = 736 + v1;
@ -1128,13 +1147,13 @@ static void AnimSprayWaterDroplet_Step(struct Sprite *sprite)
sprite->pos2.y -= sprite->data[1] >> 8; sprite->pos2.y -= sprite->data[1] >> 8;
} }
sprite->data[0] -= 0; // Needed to Match sprite->data[0] = sprite->data[0];
sprite->data[1] -= 32; sprite->data[1] -= 32;
if (sprite->data[0] < 0) if (sprite->data[0] < 0)
sprite->data[0] = 0; sprite->data[0] = 0;
if (sprite->data[3]++ == 30) if (++sprite->data[3] == 31)
DestroyAnimSprite(sprite); DestroyAnimSprite(sprite);
} }
@ -1204,12 +1223,12 @@ void unref_sub_810F184(u8 taskId)
{ {
if (gBattleAnimArgs[0] == 0) if (gBattleAnimArgs[0] == 0)
{ {
const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
gSprites[spriteId].invisible = TRUE; gSprites[spriteId].invisible = TRUE;
} }
else else
{ {
const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
gSprites[spriteId].invisible = FALSE; gSprites[spriteId].invisible = FALSE;
} }
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);

View File

@ -52,7 +52,7 @@ static void CreateWaterSpoutLaunchDroplets(struct Task*, u8);
static void CreateWaterSpoutRainDroplet(struct Task*, u8); static void CreateWaterSpoutRainDroplet(struct Task*, u8);
static void AnimTask_WaterSport_Step(u8); static void AnimTask_WaterSport_Step(u8);
static void CreateWaterSportDroplet(struct Task*); static void CreateWaterSportDroplet(struct Task*);
static void CreateWaterPulseRingBubbles(struct Sprite*, s32, s32); static void CreateWaterPulseRingBubbles(struct Sprite*, int, int);
// Both unused // Both unused
const u8 gUnknown_8593C80[] = INCBIN_U8("graphics/unknown/unknown_593C80.4bpp"); const u8 gUnknown_8593C80[] = INCBIN_U8("graphics/unknown/unknown_593C80.4bpp");
@ -631,13 +631,13 @@ static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
if (++gTasks[taskId].data[10] == 3) if (++gTasks[taskId].data[10] == 3)
{ {
u16 tempPlt; u16 rgbBuffer;
gTasks[taskId].data[10] = 0; gTasks[taskId].data[10] = 0;
palIndex = gTasks[taskId].data[2] + 1; palIndex = gTasks[taskId].data[2] + 1;
tempPlt = gPlttBufferFaded[palIndex]; rgbBuffer = gPlttBufferFaded[palIndex];
for (i = 1; i < 8; i++) for (i = 1; i < 8; i++)
gPlttBufferFaded[palIndex + i - 1] = gPlttBufferFaded[palIndex + i]; gPlttBufferFaded[palIndex + i - 1] = gPlttBufferFaded[palIndex + i];
gPlttBufferFaded[palIndex + 7] = tempPlt; gPlttBufferFaded[palIndex + 7] = rgbBuffer;
} }
if (++gTasks[taskId].data[11] == gTasks[taskId].data[0]) if (++gTasks[taskId].data[11] == gTasks[taskId].data[0])
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
@ -748,7 +748,6 @@ static void AnimHydroCannonBeam(struct Sprite *sprite)
if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT) if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT)
gBattleAnimArgs[0] *= -1; gBattleAnimArgs[0] *= -1;
} }
if ((gBattleAnimArgs[5] & 0xFF00) == 0) if ((gBattleAnimArgs[5] & 0xFF00) == 0)
animType = TRUE; animType = TRUE;
else else
@ -794,7 +793,7 @@ static void AnimSmallBubblePair_Step(struct Sprite *sprite)
sprite->pos2.x = Sin(sprite->data[0], 4); sprite->pos2.x = Sin(sprite->data[0], 4);
sprite->data[1] += 48; sprite->data[1] += 48;
sprite->pos2.y = -(sprite->data[1] >> 8); sprite->pos2.y = -(sprite->data[1] >> 8);
if (sprite->data[7]-- == 0) if (--sprite->data[7] == -1)
DestroyAnimSprite(sprite); DestroyAnimSprite(sprite);
} }
@ -802,17 +801,17 @@ void AnimTask_CreateSurfWave(u8 taskId)
{ {
struct BattleAnimBgData animBg; struct BattleAnimBgData animBg;
u8 taskId2; u8 taskId2;
u16 *x, *y; //These pointers are needed to match u16 *x;
u16 *y;
x = &gBattle_BG1_X; x = &gBattle_BG1_X;
y = &gBattle_BG1_Y; y = &gBattle_BG1_Y;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
SetGpuReg(REG_OFFSET_BLDALPHA, (16 << 8)); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1); SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1);
sub_80A6B30(&animBg); sub_80A6B30(&animBg);
if (!IsContest()) if (!IsContest())
{ {
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
@ -877,13 +876,13 @@ void AnimTask_CreateSurfWave(u8 taskId)
static void AnimTask_CreateSurfWave_Step1(u8 taskId) static void AnimTask_CreateSurfWave_Step1(u8 taskId)
{ {
u16 rgbBuffer;
u8 i;
u16 *BGptrX, *BGptrY;
struct BattleAnimBgData animBg; struct BattleAnimBgData animBg;
u8 i;
BGptrX = &gBattle_BG1_X; u16 rgbBuffer;
BGptrY = &gBattle_BG1_Y; u16 *BGptrX = &gBattle_BG1_X;
u16 *BGptrY = &gBattle_BG1_Y;
u32 palOffset;
u16 palNum;
*BGptrX += gTasks[taskId].data[0]; *BGptrX += gTasks[taskId].data[0];
*BGptrY += gTasks[taskId].data[1]; *BGptrY += gTasks[taskId].data[1];
@ -891,18 +890,18 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId)
gTasks[taskId].data[2] += gTasks[taskId].data[1]; gTasks[taskId].data[2] += gTasks[taskId].data[1];
if (++gTasks[taskId].data[5] == 4) if (++gTasks[taskId].data[5] == 4)
{ {
rgbBuffer = gPlttBufferFaded[16 * animBg.paletteId + 7]; rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7];
for (i = 6; i != 0; i--) // i > 0 generates the exact same code in this context for (i = 6; i != 0; i--)
{ {
gPlttBufferFaded[16 * animBg.paletteId + 1 + i] = gPlttBufferFaded[16 * animBg.paletteId + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason gPlttBufferFaded[animBg.paletteId * 16 + 1 + i] = gPlttBufferFaded[animBg.paletteId * 16 + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason
} }
gPlttBufferFaded[16 * animBg.paletteId + 1] = rgbBuffer; gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer;
gTasks[taskId].data[5] = 0; gTasks[taskId].data[5] = 0;
} }
if (++gTasks[taskId].data[6] > 1) if (++gTasks[taskId].data[6] > 1)
{ {
gTasks[taskId].data[6] = 0; gTasks[taskId].data[6] = 0;
if (++gTasks[taskId].data[3] < 14) if (++gTasks[taskId].data[3] <= 13)
{ {
gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[3]) | ((16 - gTasks[taskId].data[3]) << 8)); gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[3]) | ((16 - gTasks[taskId].data[3]) << 8));
gTasks[taskId].data[4]++; gTasks[taskId].data[4]++;
@ -920,7 +919,6 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId)
} }
} }
static void AnimTask_CreateSurfWave_Step2(u8 taskId) static void AnimTask_CreateSurfWave_Step2(u8 taskId)
{ {
u16 *BGptrX = &gBattle_BG1_X; u16 *BGptrX = &gBattle_BG1_X;
@ -1543,50 +1541,45 @@ static void AnimWaterPulseRing_Step(struct Sprite *sprite)
sprite->data[0]++; sprite->data[0]++;
} }
static void CreateWaterPulseRingBubbles(struct Sprite *sprite, s32 xDiff, s32 yDiff) static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff)
{ {
s16 combinedX, combinedY; s16 combinedX;
s16 i, something; s16 combinedY;
s16 i;
s16 something;
s16 unusedVar = 1; //unusedVar is needed to match s16 unusedVar = 1; //unusedVar is needed to match
s16 somethingRandomX, somethingRandomY; s16 randomSomethingY;
s16 randomSomethingX;
u8 spriteId; u8 spriteId;
something = sprite->data[0] / 2; something = sprite->data[0] / 2;
combinedX = sprite->pos1.x + sprite->pos2.x; combinedX = sprite->pos1.x + sprite->pos2.x;
combinedY = sprite->pos1.y + sprite->pos2.y; combinedY = sprite->pos1.y + sprite->pos2.y;
if (yDiff < 0) if (yDiff < 0)
unusedVar *= -1; //Needed to Match unusedVar *= -1; //Needed to match
somethingRandomY = yDiff + (Random2() % 10) - 5; randomSomethingY = yDiff + (Random2() % 10) - 5;
somethingRandomX = -xDiff + (Random2() % 10) - 5; randomSomethingX = -xDiff + (Random2() % 10) - 5;
for (i = 0; i < 1; i++) for (i = 0; i <= 0; i++)
{ {
spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY + something, 130); spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY + something, 130);
gSprites[spriteId].data[0] = 20; gSprites[spriteId].data[0] = 20;
gSprites[spriteId].data[1] = somethingRandomY; gSprites[spriteId].data[1] = randomSomethingY;
gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
if (somethingRandomX < 0) if (randomSomethingX < 0)
{ gSprites[spriteId].data[2] = -randomSomethingX;
gSprites[spriteId].data[2] = -somethingRandomX;
}
else else
{ gSprites[spriteId].data[2] = randomSomethingX;
gSprites[spriteId].data[2] = somethingRandomX;
}
} }
for (i = 0; i < 1; i++) for (i = 0; i <= 0; i++)
{ {
spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY - something, 130); spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY - something, 130);
gSprites[spriteId].data[0] = 20; gSprites[spriteId].data[0] = 20;
gSprites[spriteId].data[1] = somethingRandomY; gSprites[spriteId].data[1] = randomSomethingY;
gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
if (somethingRandomX > 0) if (randomSomethingX > 0)
{ gSprites[spriteId].data[2] = -randomSomethingX;
gSprites[spriteId].data[2] = -somethingRandomX;
}
else else
{ gSprites[spriteId].data[2] = randomSomethingX;
gSprites[spriteId].data[2] = somethingRandomX;
}
} }
} }

View File

@ -1126,7 +1126,7 @@ void DrawBattleEntryBackground(void)
if (gBattleTypeFlags & BATTLE_TYPE_LINK) if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{ {
LZDecompressVram(gUnknown_08D778F0, (void*)(BG_CHAR_ADDR(1))); LZDecompressVram(gUnknown_08D778F0, (void*)(BG_CHAR_ADDR(1)));
LZDecompressVram(gVsLettersGfx, (void*)(OBJ_VRAM0)); LZDecompressVram(gVsLettersGfx, (void*)(VRAM + 0x10000));
LoadCompressedPalette(gUnknown_08D77AE4, 0x60, 0x20); LoadCompressedPalette(gUnknown_08D77AE4, 0x60, 0x20);
SetBgAttribute(1, BG_ATTR_SCREENSIZE, 1); SetBgAttribute(1, BG_ATTR_SCREENSIZE, 1);
SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04); SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04);

View File

@ -2763,10 +2763,10 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
// BUG: TYPE_x2 is not necessary and makes the condition always false if the ability is wonder guard. // BUG: TYPE_x2 is not necessary and makes the condition always false if the ability is wonder guard.
if (TYPE_EFFECT_DEF_TYPE(i) == defType1) if (TYPE_EFFECT_DEF_TYPE(i) == defType1)
if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD)
typePower = typePower * TYPE_EFFECT_MULTIPLIER(i) / 10; typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10;
if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2)
if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD)
typePower = typePower * TYPE_EFFECT_MULTIPLIER(i) / 10; typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10;
} }
i += 3; i += 3;
} }
@ -2777,10 +2777,10 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
case 0: case 0:
switch (typePower) switch (typePower)
{ {
default:
case TYPE_x0:
case TYPE_x0_25:
case TYPE_x0_50: case TYPE_x0_50:
case TYPE_x0_25:
case TYPE_x0:
default:
typePower = 0; typePower = 0;
break; break;
case TYPE_x1: case TYPE_x1:
@ -2797,19 +2797,19 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
case 1: case 1:
switch (typePower) switch (typePower)
{ {
case TYPE_x0: default:
typePower = 8; case TYPE_x1:
typePower = 0;
break; break;
case TYPE_x0_25: case TYPE_x0_25:
typePower = 4; typePower = 4;
break; break;
case TYPE_x0:
typePower = 8;
break;
case TYPE_x0_50: case TYPE_x0_50:
typePower = 2; typePower = 2;
break; break;
default:
case TYPE_x1:
typePower = 0;
break;
case TYPE_x2: case TYPE_x2:
typePower = -2; typePower = -2;
break; break;
@ -2827,8 +2827,8 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
case TYPE_x0_25: case TYPE_x0_25:
typePower = -8; typePower = -8;
break; break;
default:
case TYPE_x0_50: case TYPE_x0_50:
default:
typePower = 0; typePower = 0;
break; break;
case TYPE_x1: case TYPE_x1:
@ -4304,7 +4304,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
textPrinter.currentY = textPrinter.y; textPrinter.currentY = textPrinter.y;
textPrinter.letterSpacing = 2; textPrinter.letterSpacing = 2;
textPrinter.lineSpacing = 0; textPrinter.lineSpacing = 0;
textPrinter.style = 0; textPrinter.unk = 0;
textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5;
textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
@ -4837,7 +4837,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
textPrinter.currentY = textPrinter.y; textPrinter.currentY = textPrinter.y;
textPrinter.letterSpacing = 0; textPrinter.letterSpacing = 0;
textPrinter.lineSpacing = 0; textPrinter.lineSpacing = 0;
textPrinter.style = 0; textPrinter.unk = 0;
textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5;
textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
@ -5335,7 +5335,7 @@ static void Task_ShowTourneyTree(u8 taskId)
textPrinter.lineSpacing = 0; textPrinter.lineSpacing = 0;
textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x70, textPrinter.letterSpacing); textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x70, textPrinter.letterSpacing);
textPrinter.currentY = 1; textPrinter.currentY = 1;
textPrinter.style = 0; textPrinter.unk = 0;
textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5;
textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
@ -5516,7 +5516,7 @@ static void Task_HandleStaticTourneyTreeInput(u8 taskId)
textPrinter.y = 0; textPrinter.y = 0;
textPrinter.letterSpacing = 2; textPrinter.letterSpacing = 2;
textPrinter.lineSpacing = 0; textPrinter.lineSpacing = 0;
textPrinter.style = 0; textPrinter.unk = 0;
textPrinter.fgColor = TEXT_DYNAMIC_COLOR_2; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_2;
textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;

View File

@ -1145,7 +1145,11 @@ static void CB2_InitSelectScreen(void)
LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40);
LoadPalette(gUnknown_0861046C, 0xF0, 8); LoadPalette(gUnknown_0861046C, 0xF0, 8);
LoadPalette(gUnknown_0861046C, 0xE0, 10); LoadPalette(gUnknown_0861046C, 0xE0, 10);
#if MODERN
if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen)
#else
if (sFactorySelectScreen->fromSummaryScreen == TRUE) if (sFactorySelectScreen->fromSummaryScreen == TRUE)
#endif
gPlttBufferUnfaded[228] = sFactorySelectScreen->unk2A4; gPlttBufferUnfaded[228] = sFactorySelectScreen->unk2A4;
LoadPalette(gUnknown_0861039C, 0x20, 4); LoadPalette(gUnknown_0861039C, 0x20, 4);
gMain.state++; gMain.state++;
@ -1167,7 +1171,11 @@ static void CB2_InitSelectScreen(void)
SetVBlankCallback(Select_VblankCb); SetVBlankCallback(Select_VblankCb);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP);
#if MODERN
if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen)
#else
if (sFactorySelectScreen->fromSummaryScreen == TRUE) if (sFactorySelectScreen->fromSummaryScreen == TRUE)
#endif
{ {
Select_SetWinRegs(88, 152, 32, 96); Select_SetWinRegs(88, 152, 32, 96);
ShowBg(3); ShowBg(3);
@ -1181,7 +1189,11 @@ static void CB2_InitSelectScreen(void)
gMain.state++; gMain.state++;
break; break;
case 5: case 5:
#if MODERN
if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen)
#else
if (sFactorySelectScreen->fromSummaryScreen == TRUE) if (sFactorySelectScreen->fromSummaryScreen == TRUE)
#endif
sFactorySelectScreen->cursorPos = gLastViewedMonIndex; sFactorySelectScreen->cursorPos = gLastViewedMonIndex;
Select_InitMonsData(); Select_InitMonsData();
Select_InitAllSprites(); Select_InitAllSprites();
@ -3170,7 +3182,11 @@ static void CB2_InitSwapScreen(void)
gMain.state++; gMain.state++;
break; break;
case 5: case 5:
#if MODERN
if (sFactorySwapScreen && sFactorySwapScreen->fromSummaryScreen)
#else
if (sFactorySwapScreen->fromSummaryScreen == TRUE) if (sFactorySwapScreen->fromSummaryScreen == TRUE)
#endif
sFactorySwapScreen->cursorPos = gLastViewedMonIndex; sFactorySwapScreen->cursorPos = gLastViewedMonIndex;
gMain.state++; gMain.state++;
break; break;

View File

@ -956,7 +956,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform
} }
src = gMonSpritesGfxPtr->sprites[position]; src = gMonSpritesGfxPtr->sprites[position];
dst = (void *)(OBJ_VRAM0 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32); dst = (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32);
DmaCopy32(3, src, dst, 0x800); DmaCopy32(3, src, dst, 0x800);
paletteOffset = 0x100 + battlerAtk * 16; paletteOffset = 0x100 + battlerAtk * 16;
lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue); lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue);
@ -1013,12 +1013,15 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite)
palOffset = (battlerId * 16) + 0x100; palOffset = (battlerId * 16) + 0x100;
LoadCompressedPalette(gSubstituteDollPal, palOffset, 32); LoadCompressedPalette(gSubstituteDollPal, palOffset, 32);
} }
else if (!IsContest()) else
{ {
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) if (!IsContest())
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); {
else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
else
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
}
} }
} }

View File

@ -128,7 +128,6 @@ static void HandleEndTurn_RanFromBattle(void);
static void HandleEndTurn_MonFled(void); static void HandleEndTurn_MonFled(void);
static void HandleEndTurn_FinishBattle(void); static void HandleEndTurn_FinishBattle(void);
// EWRAM vars // EWRAM vars
EWRAM_DATA u16 gBattle_BG0_X = 0; EWRAM_DATA u16 gBattle_BG0_X = 0;
EWRAM_DATA u16 gBattle_BG0_Y = 0; EWRAM_DATA u16 gBattle_BG0_Y = 0;
@ -634,16 +633,19 @@ static void CB2_InitBattleInternal(void)
gBattle_WIN0V = 0x5051; gBattle_WIN0V = 0x5051;
ScanlineEffect_Clear(); ScanlineEffect_Clear();
for (i = 0; i < 80; i++) i = 0;
while (i < 80)
{ {
gScanlineEffectRegBuffers[0][i] = 0xF0; gScanlineEffectRegBuffers[0][i] = 0xF0;
gScanlineEffectRegBuffers[1][i] = 0xF0; gScanlineEffectRegBuffers[1][i] = 0xF0;
i++;
} }
for (; i < 160; i++) while (i < 160)
{ {
gScanlineEffectRegBuffers[0][i] = 0xFF10; gScanlineEffectRegBuffers[0][i] = 0xFF10;
gScanlineEffectRegBuffers[1][i] = 0xFF10; gScanlineEffectRegBuffers[1][i] = 0xFF10;
i++;
} }
ScanlineEffect_SetParams(sIntroScanlineParams16Bit); ScanlineEffect_SetParams(sIntroScanlineParams16Bit);
@ -770,7 +772,8 @@ static void SetPlayerBerryDataInBattleStruct(void)
static void SetAllPlayersBerryData(void) static void SetAllPlayersBerryData(void)
{ {
s32 i, j; s32 i;
s32 j;
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
{ {
@ -2686,7 +2689,8 @@ static void sub_80398BC(struct Sprite *sprite) // unused?
static void sub_80398D0(struct Sprite *sprite) static void sub_80398D0(struct Sprite *sprite)
{ {
if (--sprite->data[4] == 0) sprite->data[4]--;
if (sprite->data[4] == 0)
{ {
sprite->data[4] = 8; sprite->data[4] = 8;
sprite->invisible ^= 1; sprite->invisible ^= 1;
@ -3417,13 +3421,17 @@ static void BattleIntroDrawTrainersOrMonsSprites(void)
} }
} }
if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT || GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{ {
BtlController_EmitDrawTrainerPic(0); if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT
MarkBattlerForControllerExec(gActiveBattler); || GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)
{
BtlController_EmitDrawTrainerPic(0);
MarkBattlerForControllerExec(gActiveBattler);
}
} }
if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)) if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)
{ {
BtlController_EmitDrawTrainerPic(0); BtlController_EmitDrawTrainerPic(0);
MarkBattlerForControllerExec(gActiveBattler); MarkBattlerForControllerExec(gActiveBattler);
@ -3530,7 +3538,7 @@ static void BattleIntroPrintWildMonAttacked(void)
static void BattleIntroPrintOpponentSendsOut(void) static void BattleIntroPrintOpponentSendsOut(void)
{ {
u8 position; u32 position;
if (gBattleControllerExecFlags) if (gBattleControllerExecFlags)
return; return;
@ -3553,7 +3561,7 @@ static void BattleIntroPrintOpponentSendsOut(void)
static void BattleIntroOpponent2SendsOutMonAnimation(void) static void BattleIntroOpponent2SendsOutMonAnimation(void)
{ {
u8 position; u32 position;
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
position = B_POSITION_OPPONENT_RIGHT; position = B_POSITION_OPPONENT_RIGHT;
@ -3581,7 +3589,7 @@ static void BattleIntroOpponent2SendsOutMonAnimation(void)
static void BattleIntroOpponent1SendsOutMonAnimation(void) static void BattleIntroOpponent1SendsOutMonAnimation(void)
{ {
u8 position; u32 position;
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
{ {
@ -3596,9 +3604,7 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void)
position = B_POSITION_OPPONENT_LEFT; position = B_POSITION_OPPONENT_LEFT;
} }
else else
{
position = B_POSITION_OPPONENT_LEFT; position = B_POSITION_OPPONENT_LEFT;
}
if (gBattleControllerExecFlags) if (gBattleControllerExecFlags)
return; return;
@ -3640,7 +3646,7 @@ static void BattleIntroRecordMonsToDex(void)
} }
} }
static void sub_803B3AC(void) // unused void sub_803B3AC(void) // unused
{ {
if (gBattleControllerExecFlags == 0) if (gBattleControllerExecFlags == 0)
gBattleMainFunc = BattleIntroPrintPlayerSendsOut; gBattleMainFunc = BattleIntroPrintPlayerSendsOut;
@ -3673,7 +3679,7 @@ static void BattleIntroPrintPlayerSendsOut(void)
static void BattleIntroPlayer2SendsOutMonAnimation(void) static void BattleIntroPlayer2SendsOutMonAnimation(void)
{ {
u8 position; u32 position;
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
position = B_POSITION_PLAYER_RIGHT; position = B_POSITION_PLAYER_RIGHT;
@ -3705,7 +3711,7 @@ static void BattleIntroPlayer2SendsOutMonAnimation(void)
static void BattleIntroPlayer1SendsOutMonAnimation(void) static void BattleIntroPlayer1SendsOutMonAnimation(void)
{ {
u8 position; u32 position;
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
position = B_POSITION_PLAYER_LEFT; position = B_POSITION_PLAYER_LEFT;
@ -3743,7 +3749,7 @@ static void BattleIntroPlayer1SendsOutMonAnimation(void)
gBattleMainFunc = TryDoEventsBeforeFirstTurn; gBattleMainFunc = TryDoEventsBeforeFirstTurn;
} }
static void sub_803B598(void) // unused void sub_803B598(void) // unused
{ {
if (gBattleControllerExecFlags == 0) if (gBattleControllerExecFlags == 0)
{ {
@ -3766,7 +3772,8 @@ static void sub_803B598(void) // unused
static void TryDoEventsBeforeFirstTurn(void) static void TryDoEventsBeforeFirstTurn(void)
{ {
s32 i, j; s32 i;
s32 j;
u8 effect = 0; u8 effect = 0;
if (gBattleControllerExecFlags) if (gBattleControllerExecFlags)
@ -3956,7 +3963,11 @@ u8 IsRunningFromBattleImpossible(void)
gPotentialItemEffectBattler = gActiveBattler; gPotentialItemEffectBattler = gActiveBattler;
if ((holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) || (gBattleTypeFlags & BATTLE_TYPE_LINK) || (gBattleMons[gActiveBattler].ability == ABILITY_RUN_AWAY)) if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)
return 0;
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
return 0;
if (gBattleMons[gActiveBattler].ability == ABILITY_RUN_AWAY)
return 0; return 0;
side = GetBattlerSide(gActiveBattler); side = GetBattlerSide(gActiveBattler);
@ -4733,38 +4744,40 @@ static void SetActionsAndBattlersTurnOrder(void)
gBattleStruct->focusPunchBattlerId = 0; gBattleStruct->focusPunchBattlerId = 0;
return; return;
} }
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) else
{ {
if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH) for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{ {
gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH)
gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
turnOrderId++;
}
}
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH)
{
gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
turnOrderId++;
}
}
for (i = 0; i < gBattlersCount - 1; i++)
{
for (j = i + 1; j < gBattlersCount; j++)
{
u8 battler1 = gBattlerByTurnOrder[i];
u8 battler2 = gBattlerByTurnOrder[j];
if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[i] != B_ACTION_SWITCH
&& gActionsByTurnOrder[j] != B_ACTION_SWITCH)
{ {
if (GetWhoStrikesFirst(battler1, battler2, FALSE)) gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
SwapTurnOrder(i, j); gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
turnOrderId++;
}
}
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH)
{
gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
turnOrderId++;
}
}
for (i = 0; i < gBattlersCount - 1; i++)
{
for (j = i + 1; j < gBattlersCount; j++)
{
u8 battler1 = gBattlerByTurnOrder[i];
u8 battler2 = gBattlerByTurnOrder[j];
if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[i] != B_ACTION_SWITCH
&& gActionsByTurnOrder[j] != B_ACTION_SWITCH)
{
if (GetWhoStrikesFirst(battler1, battler2, FALSE))
SwapTurnOrder(i, j);
}
} }
} }
} }
@ -4842,8 +4855,8 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
} }
TryClearRageStatuses(); TryClearRageStatuses();
gCurrentTurnActionNumber = 0; //See comment underneath gCurrentTurnActionNumber = 0;
gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; //Should be gActionsByTurnOrder[(gCurrentTurnActionNumber = 0)], but that doesn't match gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber];
gDynamicBasePower = 0; gDynamicBasePower = 0;
gBattleStruct->dynamicMoveType = 0; gBattleStruct->dynamicMoveType = 0;
gBattleMainFunc = RunTurnActionsFunctions; gBattleMainFunc = RunTurnActionsFunctions;
@ -4866,10 +4879,13 @@ static void RunTurnActionsFunctions(void)
gHitMarker &= ~(HITMARKER_x100000); gHitMarker &= ~(HITMARKER_x100000);
gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F]; gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F];
} }
else if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId else
{ {
gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId
gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); {
gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING);
gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE);
}
} }
} }
@ -4986,15 +5002,15 @@ static void HandleEndTurn_RanFromBattle(void)
{ {
switch (gProtectStructs[gBattlerAttacker].fleeFlag) switch (gProtectStructs[gBattlerAttacker].fleeFlag)
{ {
default:
gBattlescriptCurrInstr = BattleScript_GotAwaySafely;
break;
case 1: case 1:
gBattlescriptCurrInstr = BattleScript_SmokeBallEscape; gBattlescriptCurrInstr = BattleScript_SmokeBallEscape;
break; break;
case 2: case 2:
gBattlescriptCurrInstr = BattleScript_RanAwayUsingMonAbility; gBattlescriptCurrInstr = BattleScript_RanAwayUsingMonAbility;
break; break;
default:
gBattlescriptCurrInstr = BattleScript_GotAwaySafely;
break;
} }
} }
@ -5080,7 +5096,10 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void)
gBattleMainFunc = ReturnFromBattleToOverworld; gBattleMainFunc = ReturnFromBattleToOverworld;
return; return;
} }
gBattleMainFunc = TryEvolvePokemon; else
{
gBattleMainFunc = TryEvolvePokemon;
}
} }
FreeAllWindowBuffers(); FreeAllWindowBuffers();
@ -5175,4 +5194,3 @@ void RunBattleScriptCommands(void)
if (gBattleControllerExecFlags == 0) if (gBattleControllerExecFlags == 0)
gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
} }

View File

@ -2995,7 +2995,7 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId)
printerTemplate.currentY = printerTemplate.y; printerTemplate.currentY = printerTemplate.y;
printerTemplate.letterSpacing = textInfo[windowId].letterSpacing; printerTemplate.letterSpacing = textInfo[windowId].letterSpacing;
printerTemplate.lineSpacing = textInfo[windowId].lineSpacing; printerTemplate.lineSpacing = textInfo[windowId].lineSpacing;
printerTemplate.style = 0; printerTemplate.unk = 0;
printerTemplate.fgColor = textInfo[windowId].fgColor; printerTemplate.fgColor = textInfo[windowId].fgColor;
printerTemplate.bgColor = textInfo[windowId].bgColor; printerTemplate.bgColor = textInfo[windowId].bgColor;
printerTemplate.shadowColor = textInfo[windowId].shadowColor; printerTemplate.shadowColor = textInfo[windowId].shadowColor;

View File

@ -522,19 +522,6 @@ static const u8 sTrainerTextGroups[50][2] =
{FACILITY_CLASS_HIKER, 4}, {FACILITY_CLASS_HIKER, 4},
}; };
enum
{
HINT_EXIT_DIRECTION,
HINT_REMAINING_ITEMS,
HINT_REMAINING_TRAINERS,
HINT_EXIT_SHORT_REMAINING_TRAINERS,
HINT_EXIT_SHORT_REMAINING_ITEMS,
HINT_EXIT_MEDIUM_REMAINING_TRAINERS,
HINT_EXIT_MEDIUM_REMAINING_ITEMS,
HINT_EXIT_FAR_REMAINING_TRAINERS,
HINT_EXIT_FAR_REMAINING_ITEMS,
};
static const u8 *const sExitDirectionHintTexts1[] = static const u8 *const sExitDirectionHintTexts1[] =
{ {
BattlePyramid_Text_ExitHintUp1, BattlePyramid_Text_ExitHintUp1,

View File

@ -3520,7 +3520,7 @@ static void Cmd_unknown_24(void)
if (HP_count == 0) if (HP_count == 0)
gBattleOutcome |= B_OUTCOME_LOST; gBattleOutcome |= B_OUTCOME_LOST;
HP_count = 0; HP_count = 0;
for (i = 0; i < PARTY_SIZE; i++) for (i = 0; i < PARTY_SIZE; i++)
@ -3537,14 +3537,17 @@ static void Cmd_unknown_24(void)
if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))) if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
{ {
s32 foundPlayer = 0, foundOpponent; s32 foundPlayer = 0;
s32 foundOpponent;
for (i = 0; i < gBattlersCount; i += 2) for (i = 0; i < gBattlersCount; i += 2)
{ {
if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40))
foundPlayer++; foundPlayer++;
} }
foundOpponent = 0; foundOpponent = 0;
for (i = 1; i < gBattlersCount; i += 2) for (i = 1; i < gBattlersCount; i += 2)
{ {
if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40))
@ -3554,14 +3557,14 @@ static void Cmd_unknown_24(void)
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{ {
if (foundOpponent + foundPlayer > 1) if (foundOpponent + foundPlayer > 1)
gBattlescriptCurrInstr = (u8*) T2_READ_32(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
else else
gBattlescriptCurrInstr += 5; gBattlescriptCurrInstr += 5;
} }
else else
{ {
if (foundOpponent != 0 && foundPlayer != 0) if (foundOpponent != 0 && foundPlayer != 0)
gBattlescriptCurrInstr = (u8*) T2_READ_32(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
else else
gBattlescriptCurrInstr += 5; gBattlescriptCurrInstr += 5;
} }
@ -4662,10 +4665,8 @@ static void Cmd_jumpifcantswitch(void)
|| (gStatuses3[gActiveBattler] & STATUS3_ROOTED))) || (gStatuses3[gActiveBattler] & STATUS3_ROOTED)))
{ {
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
return;
} }
else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{ {
#ifndef NONMATCHING #ifndef NONMATCHING
asm("":::"r5"); asm("":::"r5");
@ -5538,8 +5539,8 @@ static void Cmd_hitanimation(void)
static u32 GetTrainerMoneyToGive(u16 trainerId) static u32 GetTrainerMoneyToGive(u16 trainerId)
{ {
u32 i = 0; u32 i = 0;
u32 lastMonLevel = 0;
u32 moneyReward; u32 moneyReward;
u8 lastMonLevel = 0;
if (trainerId == TRAINER_SECRET_BASE) if (trainerId == TRAINER_SECRET_BASE)
{ {
@ -6039,7 +6040,7 @@ static void PutLevelAndGenderOnLvlUpBox(void)
printerTemplate.currentY = 0; printerTemplate.currentY = 0;
printerTemplate.letterSpacing = 0; printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0; printerTemplate.lineSpacing = 0;
printerTemplate.style = 0; printerTemplate.unk = 0;
printerTemplate.fgColor = TEXT_COLOR_WHITE; printerTemplate.fgColor = TEXT_COLOR_WHITE;
printerTemplate.bgColor = TEXT_COLOR_TRANSPARENT; printerTemplate.bgColor = TEXT_COLOR_TRANSPARENT;
printerTemplate.shadowColor = TEXT_COLOR_DARK_GREY; printerTemplate.shadowColor = TEXT_COLOR_DARK_GREY;
@ -7130,6 +7131,7 @@ static void Cmd_forcerandomswitch(void)
s32 i; s32 i;
s32 battler1PartyId = 0; s32 battler1PartyId = 0;
s32 battler2PartyId = 0; s32 battler2PartyId = 0;
s32 firstMonId; s32 firstMonId;
s32 lastMonId = 0; // + 1 s32 lastMonId = 0; // + 1
s32 monsCount; s32 monsCount;
@ -7251,10 +7253,11 @@ static void Cmd_forcerandomswitch(void)
{ {
i = Random() % monsCount; i = Random() % monsCount;
i += firstMonId; i += firstMonId;
} while (i == battler2PartyId || i == battler1PartyId); }
while (i == battler2PartyId || i == battler1PartyId);
} while (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE } while (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE
|| GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE || GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE
|| GetMonData(&party[i], MON_DATA_HP) == 0); // Should be one while loop, conjoined by an ||, but that doesn't match. Equivalent logic though || GetMonData(&party[i], MON_DATA_HP) == 0); //should be one while loop, but that doesn't match.
} }
*(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i; *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i;

View File

@ -1446,7 +1446,7 @@ u8 GetFrontierOpponentClass(u16 trainerId)
} }
else if (trainerId == TRAINER_FRONTIER_BRAIN) else if (trainerId == TRAINER_FRONTIER_BRAIN)
{ {
return GetFrontierBrainTrainerClass(); // This sticks out like a sore thumb, but this is the only other way that matches. Maybe it SHOULD be assigned to ret, or all early returns. I don't know. return GetFrontierBrainTrainerClass();
} }
else if (trainerId == TRAINER_STEVEN_PARTNER) else if (trainerId == TRAINER_STEVEN_PARTNER)
{ {

View File

@ -3973,7 +3973,7 @@ static bool8 Phase2_FrontierLogoWave_Func4(struct Task *task)
for (i = 0; i < 160; i++, var6 += var8) for (i = 0; i < 160; i++, var6 += var8)
{ {
const u16 index = var6 >> 8; s16 index = var6 / 256;
gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(index & 0xff, amplitude); gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(index & 0xff, amplitude);
} }

View File

@ -714,15 +714,16 @@ void BattleTv_SetDataBasedOnAnimation(u8 animationId)
void TryPutLinkBattleTvShowOnAir(void) void TryPutLinkBattleTvShowOnAir(void)
{ {
u16 playerBestSpecies = 0, opponentBestSpecies = 0, moveId = 0; u16 playerBestSpecies = 0, opponentBestSpecies = 0;
s16 sum = 0, playerBestSum = 0, opponentBestSum = SHRT_MAX; s16 playerBestSum = 0, opponentBestSum = SHRT_MAX;
u8 playerBestMonId = 0, opponentBestMonId = 0; u8 playerBestMonId = 0, opponentBestMonId = 0;
struct BattleTvMovePoints *movePoints = NULL; struct BattleTvMovePoints *movePoints = NULL;
u8 countPlayer = 0, countOpponent = 0; u8 countPlayer = 0, countOpponent = 0;
u16 species; s16 sum = 0;
u16 species = 0;
u16 moveId = 0;
s32 i, j; s32 i, j;
int zero = 0, one = 1; //needed for matching
int zero = 0, one = 1; // stupid variables needed to match. Feel free to get rid of them.
if (gBattleStruct->anyMonHasTransformed) if (gBattleStruct->anyMonHasTransformed)
return; return;

View File

@ -1,19 +1,31 @@
#include "global.h" #include "global.h"
#include "battle.h" #include "battle.h"
#include "battle_util.h"
#include "battle_anim.h" #include "battle_anim.h"
#include "battle_arena.h"
#include "battle_pyramid.h"
#include "battle_util.h"
#include "pokemon.h" #include "pokemon.h"
#include "international_string_util.h"
#include "item.h" #include "item.h"
#include "util.h" #include "util.h"
#include "battle_scripts.h" #include "battle_scripts.h"
#include "random.h" #include "random.h"
#include "text.h"
#include "safari_zone.h"
#include "sound.h"
#include "sprite.h"
#include "string_util.h" #include "string_util.h"
#include "task.h"
#include "trig.h"
#include "window.h"
#include "battle_message.h"
#include "battle_ai_script_commands.h" #include "battle_ai_script_commands.h"
#include "battle_controllers.h" #include "battle_controllers.h"
#include "event_data.h" #include "event_data.h"
#include "link.h" #include "link.h"
#include "field_weather.h" #include "field_weather.h"
#include "constants/abilities.h" #include "constants/abilities.h"
#include "constants/battle_anim.h"
#include "constants/battle_move_effects.h" #include "constants/battle_move_effects.h"
#include "constants/battle_script_commands.h" #include "constants/battle_script_commands.h"
#include "constants/battle_string_ids.h" #include "constants/battle_string_ids.h"
@ -21,16 +33,16 @@
#include "constants/hold_effects.h" #include "constants/hold_effects.h"
#include "constants/items.h" #include "constants/items.h"
#include "constants/moves.h" #include "constants/moves.h"
#include "constants/weather.h"
#include "battle_arena.h"
#include "battle_pyramid.h"
#include "international_string_util.h"
#include "safari_zone.h"
#include "sound.h"
#include "task.h"
#include "trig.h"
#include "window.h"
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/species.h"
#include "constants/weather.h"
/*
NOTE: The data and functions in this file up until (but not including) sSoundMovesTable
are actually part of battle_main.c. They needed to be moved to this file in order to
match the ROM; this is also why sSoundMovesTable's declaration is in the middle of
functions instead of at the top of the file with the other declarations.
*/
extern const u8 *const gBattleScriptsForMoveEffects[]; extern const u8 *const gBattleScriptsForMoveEffects[];
extern const u8 *const gBattlescriptsForBallThrow[]; extern const u8 *const gBattlescriptsForBallThrow[];
@ -282,9 +294,7 @@ void HandleAction_UseItem(void)
gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber]; gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0; gBattle_BG0_X = 0;
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); ClearFuryCutterDestinyBondGrudge(gBattlerAttacker);
gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8); gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8);
if (gLastUsedItem <= LAST_BALL) // is ball if (gLastUsedItem <= LAST_BALL) // is ball
@ -310,18 +320,18 @@ void HandleAction_UseItem(void)
break; break;
case AI_ITEM_CURE_CONDITION: case AI_ITEM_CURE_CONDITION:
gBattleCommunication[MULTISTRING_CHOOSER] = 0; gBattleCommunication[MULTISTRING_CHOOSER] = 0;
if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 1) if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1)
{ {
if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 0x3E) if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 0x3E)
gBattleCommunication[MULTISTRING_CHOOSER] = 5; gBattleCommunication[MULTISTRING_CHOOSER] = 5;
} }
else else
{ {
do while (!(*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1))
{ {
*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) >>= 1; *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1;
gBattleCommunication[MULTISTRING_CHOOSER]++; gBattleCommunication[MULTISTRING_CHOOSER]++;
} while (!(*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 1)); }
} }
break; break;
case AI_ITEM_X_STAT: case AI_ITEM_X_STAT:
@ -337,7 +347,7 @@ void HandleAction_UseItem(void)
while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1)) while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1))
{ {
*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) >>= 1; *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1;
gBattleTextBuff1[2]++; gBattleTextBuff1[2]++;
} }
@ -353,7 +363,7 @@ void HandleAction_UseItem(void)
break; break;
} }
gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + (gBattlerAttacker >> 1))]; gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + gBattlerAttacker / 2)];
} }
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
} }

View File

@ -1692,7 +1692,7 @@ void ResetBerryTreeSparkleFlags(void)
s16 bottom; s16 bottom;
int i; int i;
GetCameraCoords((u16*)&cam_left, (u16*)&cam_top); GetCameraCoords(&cam_left, &cam_top);
left = cam_left; left = cam_left;
top = cam_top + 3; top = cam_top + 3;
right = cam_left + 14; right = cam_left + 14;

View File

@ -168,8 +168,8 @@ struct BerryBlender
u16 progressBarValue; u16 progressBarValue;
u16 maxProgressBarValue; u16 maxProgressBarValue;
u16 centerScale; u16 centerScale;
s16 bg_X; u16 bg_X;
s16 bg_Y; u16 bg_Y;
u8 opponentTaskIds[BLENDER_MAX_PLAYERS - 1]; u8 opponentTaskIds[BLENDER_MAX_PLAYERS - 1];
u8 perfectOpponents; // for debugging, NPCs will always hit Best u8 perfectOpponents; // for debugging, NPCs will always hit Best
u16 scores[BLENDER_MAX_PLAYERS][NUM_SCORE_TYPES]; u16 scores[BLENDER_MAX_PLAYERS][NUM_SCORE_TYPES];
@ -3387,13 +3387,13 @@ static void RestoreBgCoord(s16* coord)
// For "unshaking" the screen after ShakeBgCoordForHit is called // For "unshaking" the screen after ShakeBgCoordForHit is called
static void RestoreBgCoords(void) static void RestoreBgCoords(void)
{ {
RestoreBgCoord((s16 *)&sBerryBlender->bg_X); RestoreBgCoord(&sBerryBlender->bg_X);
RestoreBgCoord((s16 *)&sBerryBlender->bg_Y); RestoreBgCoord(&sBerryBlender->bg_Y);
} }
static void BlenderLandShakeBgCoord(s16* coord, u16 timer) static void BlenderLandShakeBgCoord(s16* coord, u16 timer)
{ {
u8 strength; s32 strength;
if (timer < 10) if (timer < 10)
strength = 16; strength = 16;

View File

@ -146,49 +146,38 @@ struct BerryCrushGame
{ {
MainCallback unk0; MainCallback unk0;
u32 (* unk4)(struct BerryCrushGame *, u8 *); u32 (* unk4)(struct BerryCrushGame *, u8 *);
u8 unk8; u8 unk8;
u8 unk9; u8 unk9;
u8 unkA; u8 unkA;
u8 unkB; u8 unkB;
u8 unkC; u8 unkC;
u8 unkD; u8 unkD;
u8 unkE; u8 unkE;
u8 unkF; u8 unkF;
u16 unk10; u16 unk10;
u16 unk12; u16 unk12;
u16 unk14; u16 unk14;
u16 unk16; u16 unk16;
s16 unk18; s16 unk18;
s16 unk1A; s16 unk1A;
s32 unk1C; int unk1C;
s32 unk20; s32 unk20;
u8 unk24; u8 unk24;
u8 unk25_0:1; u8 unk25_0:1;
u8 unk25_1:1; u8 unk25_1:1;
u8 unk25_2:1; u8 unk25_2:1;
u8 unk25_3:1; u8 unk25_3:1;
u8 unk25_4:1; u8 unk25_4:1;
u8 unk25_5:3; u8 unk25_5:3;
u16 unk26; u16 unk26;
u16 unk28; u16 unk28;
s16 unk2A; s16 unk2A;
s16 unk2C; s16 unk2C;
s16 unk2E; s16 unk2E;
s16 unk30; s16 unk30;
s16 unk32; s16 unk32;
s16 unk34; s16 unk34;
u8 unk36[0xA]; u8 unk36[0xA];
struct BerryCrushGame_40 unk40; struct BerryCrushGame_40 unk40;
struct BerryCrushGame_5C unk5C; struct BerryCrushGame_5C unk5C;
union BerryCrushGame_68 unk68; union BerryCrushGame_68 unk68;
@ -215,7 +204,7 @@ void sub_8022524(struct BerryCrushGame_138 *, u16);
void sub_8022B28(struct Sprite *); void sub_8022B28(struct Sprite *);
void sub_8022554(struct BerryCrushGame_138 *r0); void sub_8022554(struct BerryCrushGame_138 *r0);
void sub_8024578(struct BerryCrushGame *); void sub_8024578(struct BerryCrushGame *);
void sub_8024644(u8 *, u8, u8, u16, u8); void sub_8024644(u8 *, u32, u32, u32, u32);
static void sub_8022A20(struct Sprite *sprite); static void sub_8022A20(struct Sprite *sprite);
static u32 BerryCrushCommand_BeginNormalPaletteFade(struct BerryCrushGame *r6, u8 *r1); static u32 BerryCrushCommand_BeginNormalPaletteFade(struct BerryCrushGame *r6, u8 *r1);
static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5); static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5);
@ -2401,7 +2390,7 @@ void sub_802339C(struct BerryCrushGame *r4)
} }
} }
} }
if (r8 >= 2) if (r8 > 1)
{ {
for (r7 = 0; r7 < r4->unk9; ++r7) for (r7 = 0; r7 < r4->unk9; ++r7)
{ {
@ -2591,7 +2580,6 @@ void sub_802385C(struct BerryCrushGame *r5)
for (r4 = 0; r4 < r5->unk9; ++r4) for (r4 = 0; r4 < r5->unk9; ++r4)
r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0; r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0;
#endif #endif
if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET
|| gRecvCmds[0][1] != 2) || gRecvCmds[0][1] != 2)
{ {
@ -3281,11 +3269,14 @@ static void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter,
params[9] = communicateAfter; params[9] = communicateAfter;
} }
void sub_8024644(u8 *r0, u8 r1, u8 r2, u16 r3, u8 r5) void sub_8024644(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5)
{ {
u8 sp[4];
0[(u16 *)sp] = r3;
r0[0] = r1; r0[0] = r1;
r0[1] = r2; r0[1] = r2;
r0[2] = ((u8 *)&r3)[0]; r0[2] = sp[0];
r0[3] = ((u8 *)&r3)[1]; r0[3] = sp[1];
r0[4] = r5; r0[4] = r5;
} }

View File

@ -30,8 +30,10 @@ static void sub_81520A8(void *dest, u16 value, u8 left, u8 top, u8 width, u8 hei
static void sub_8152134(void *dest, const u16 *src, u8 left, u8 top, u8 width, u8 height) // Unused. static void sub_8152134(void *dest, const u16 *src, u8 left, u8 top, u8 width, u8 height) // Unused.
{ {
u8 i, j; u8 i;
u8 x, y; u8 j;
u8 x;
u8 y;
const u16 *_src; const u16 *_src;
for (i = 0, _src = src, y = top; i < height; i++) for (i = 0, _src = src, y = top; i < height; i++)

View File

@ -950,39 +950,39 @@ const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTA
static const s8 gContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] = static const s8 gContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] =
{ {
[CONTEST_CATEGORY_COOL] = { [CONTEST_CATEGORY_COOL] = {
[CONTEST_CATEGORY_COOL] = +1, [CONTEST_CATEGORY_COOL] = +1,
[CONTEST_CATEGORY_BEAUTY] = 0, [CONTEST_CATEGORY_BEAUTY] = 0,
[CONTEST_CATEGORY_CUTE] = -1, [CONTEST_CATEGORY_CUTE] = -1,
[CONTEST_CATEGORY_SMART] = -1, [CONTEST_CATEGORY_SMART] = -1,
[CONTEST_CATEGORY_TOUGH] = 0 [CONTEST_CATEGORY_TOUGH] = 0
}, },
[CONTEST_CATEGORY_BEAUTY] = { [CONTEST_CATEGORY_BEAUTY] = {
[CONTEST_CATEGORY_COOL] = 0, [CONTEST_CATEGORY_COOL] = 0,
[CONTEST_CATEGORY_BEAUTY] = +1, [CONTEST_CATEGORY_BEAUTY] = +1,
[CONTEST_CATEGORY_CUTE] = 0, [CONTEST_CATEGORY_CUTE] = 0,
[CONTEST_CATEGORY_SMART] = -1, [CONTEST_CATEGORY_SMART] = -1,
[CONTEST_CATEGORY_TOUGH] = -1 [CONTEST_CATEGORY_TOUGH] = -1
}, },
[CONTEST_CATEGORY_CUTE] = { [CONTEST_CATEGORY_CUTE] = {
[CONTEST_CATEGORY_COOL] = -1, [CONTEST_CATEGORY_COOL] = -1,
[CONTEST_CATEGORY_BEAUTY] = 0, [CONTEST_CATEGORY_BEAUTY] = 0,
[CONTEST_CATEGORY_CUTE] = +1, [CONTEST_CATEGORY_CUTE] = +1,
[CONTEST_CATEGORY_SMART] = 0, [CONTEST_CATEGORY_SMART] = 0,
[CONTEST_CATEGORY_TOUGH] = -1 [CONTEST_CATEGORY_TOUGH] = -1
}, },
[CONTEST_CATEGORY_SMART] = { [CONTEST_CATEGORY_SMART] = {
[CONTEST_CATEGORY_COOL] = -1, [CONTEST_CATEGORY_COOL] = -1,
[CONTEST_CATEGORY_BEAUTY] = -1, [CONTEST_CATEGORY_BEAUTY] = -1,
[CONTEST_CATEGORY_CUTE] = 0, [CONTEST_CATEGORY_CUTE] = 0,
[CONTEST_CATEGORY_SMART] = +1, [CONTEST_CATEGORY_SMART] = +1,
[CONTEST_CATEGORY_TOUGH] = 0 [CONTEST_CATEGORY_TOUGH] = 0
}, },
[CONTEST_CATEGORY_TOUGH] = { [CONTEST_CATEGORY_TOUGH] = {
[CONTEST_CATEGORY_COOL] = 0, [CONTEST_CATEGORY_COOL] = 0,
[CONTEST_CATEGORY_BEAUTY] = -1, [CONTEST_CATEGORY_BEAUTY] = -1,
[CONTEST_CATEGORY_CUTE] = -1, [CONTEST_CATEGORY_CUTE] = -1,
[CONTEST_CATEGORY_SMART] = 0, [CONTEST_CATEGORY_SMART] = 0,
[CONTEST_CATEGORY_TOUGH] = +1 [CONTEST_CATEGORY_TOUGH] = +1
} }
}; };
@ -3407,7 +3407,8 @@ static void GetAllChosenMoves(void)
static void RankContestants(void) static void RankContestants(void)
{ {
s32 i, j; s32 i;
s32 j;
s16 arr[CONTESTANT_COUNT]; s16 arr[CONTESTANT_COUNT];
for (i = 0; i < CONTESTANT_COUNT; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
@ -3482,7 +3483,8 @@ static bool8 ContestantCanUseTurn(u8 contestant)
{ {
if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns)
return FALSE; return FALSE;
return TRUE; else
return TRUE;
} }
static void SetContestantStatusesForNextRound(void) static void SetContestantStatusesForNextRound(void)
@ -3536,7 +3538,8 @@ bool8 Contest_IsMonsTurnDisabled(u8 contestant)
{ {
if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns)
return TRUE; return TRUE;
return FALSE; else
return FALSE;
} }
static void CalculateTotalPointsForContestant(u8 contestant) static void CalculateTotalPointsForContestant(u8 contestant)
@ -4479,14 +4482,17 @@ static void CalculateAppealMoveImpact(u8 contestant)
eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo; eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo;
eContestantStatus[contestant].completedComboFlag = TRUE; // Redundant with completedCombo, used by AI eContestantStatus[contestant].completedComboFlag = TRUE; // Redundant with completedCombo, used by AI
} }
else if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0)
{
eContestantStatus[contestant].hasJudgesAttention = TRUE;
eContestantStatus[contestant].usedComboMove = TRUE;
}
else else
{ {
eContestantStatus[contestant].hasJudgesAttention = FALSE; if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0)
{
eContestantStatus[contestant].hasJudgesAttention = TRUE;
eContestantStatus[contestant].usedComboMove = TRUE;
}
else
{
eContestantStatus[contestant].hasJudgesAttention = FALSE;
}
} }
} }
if (eContestantStatus[contestant].repeatedMove) if (eContestantStatus[contestant].repeatedMove)
@ -5009,7 +5015,7 @@ static void ShowHideNextTurnGfx(bool8 show)
{ {
if (eContestantStatus[i].turnOrderMod != 0 && show) if (eContestantStatus[i].turnOrderMod != 0 && show)
{ {
CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[eContestGfxState[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32); CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(OBJ_VRAM0 + (gSprites[eContestGfxState[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32);
gSprites[eContestGfxState[i].nextTurnSpriteId].pos1.y = sNextTurnSpriteYPositions[gContestantTurnOrder[i]]; gSprites[eContestGfxState[i].nextTurnSpriteId].pos1.y = sNextTurnSpriteYPositions[gContestantTurnOrder[i]];
gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = FALSE; gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = FALSE;
} }
@ -5410,7 +5416,7 @@ static void Contest_PrintTextToBg0WindowStd(u32 windowId, const u8 *b)
printerTemplate.currentY = 1; printerTemplate.currentY = 1;
printerTemplate.letterSpacing = 0; printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0; printerTemplate.lineSpacing = 0;
printerTemplate.style = 0; printerTemplate.unk = 0;
printerTemplate.fgColor = 15; printerTemplate.fgColor = 15;
printerTemplate.bgColor = 0; printerTemplate.bgColor = 0;
printerTemplate.shadowColor = 8; printerTemplate.shadowColor = 8;
@ -5433,7 +5439,7 @@ void Contest_PrintTextToBg0WindowAt(u32 windowId, u8 *currChar, s32 x, s32 y, s3
printerTemplate.currentY = y; printerTemplate.currentY = y;
printerTemplate.letterSpacing = 0; printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0; printerTemplate.lineSpacing = 0;
printerTemplate.style = 0; printerTemplate.unk = 0;
printerTemplate.fgColor = 15; printerTemplate.fgColor = 15;
printerTemplate.bgColor = 0; printerTemplate.bgColor = 0;
printerTemplate.shadowColor = 8; printerTemplate.shadowColor = 8;
@ -5457,7 +5463,7 @@ static void Contest_StartTextPrinter(const u8 *currChar, bool32 b)
printerTemplate.currentY = 1; printerTemplate.currentY = 1;
printerTemplate.letterSpacing = 0; printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0; printerTemplate.lineSpacing = 0;
printerTemplate.style = 0; printerTemplate.unk = 0;
printerTemplate.fgColor = 1; printerTemplate.fgColor = 1;
printerTemplate.bgColor = 0; printerTemplate.bgColor = 0;
printerTemplate.shadowColor = 8; printerTemplate.shadowColor = 8;
@ -6092,4 +6098,3 @@ void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 langua
} }
} }

View File

@ -397,16 +397,16 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)
{ {
for (pixelX = 0; pixelX < 8; pixelX++) for (pixelX = 0; pixelX < 8; pixelX++)
{ {
colorIndex = spriteGfx[((tileY * 8) + tileX) * 32 + (pixelY << 2) + (pixelX >> 1)]; colorIndex = spriteGfx[32 * (tileY * 8 + tileX) + (pixelY << 2) + (pixelX >> 1)];
if (pixelX & 1) if (pixelX & 1)
colorIndex >>= 4; colorIndex >>= 4;
else else
colorIndex &= 0xF; // %=16 works here too. Both match colorIndex &= 0xF;
if (colorIndex == 0) // transparent pixel if (colorIndex == 0) // transparent pixel
(*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = 0x8000; (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000;
else else
(*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = palette[colorIndex]; (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex];
} }
} }
} }
@ -501,7 +501,6 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 arg1)
static void InitPaintingMonOamData(u8 contestWinnerId) static void InitPaintingMonOamData(u8 contestWinnerId)
{ {
gMain.oamBuffer[0] = sContestPaintingMonOamData; gMain.oamBuffer[0] = sContestPaintingMonOamData;
gMain.oamBuffer[0].tileNum = 0; gMain.oamBuffer[0].tileNum = 0;
@ -512,7 +511,7 @@ static void InitPaintingMonOamData(u8 contestWinnerId)
} }
else else
{ {
gMain.oamBuffer[0].x = 88; // Duplicated Code gMain.oamBuffer[0].x = 88; // Duplicated code
gMain.oamBuffer[0].y = 24; gMain.oamBuffer[0].y = 24;
} }
} }

View File

@ -1151,12 +1151,12 @@ static void TryCreateWirelessSprites(void)
static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
{ {
u16 windowId; u16 windowId;
s32 origWidth, strWidth; int origWidth;
int strWidth;
u8 *spriteTilePtrs[4]; u8 *spriteTilePtrs[4];
u8 *dst; u8 *dst;
{ {
struct WindowTemplate windowTemplate; //It's important the lifetime of this struct ends after the clear struct WindowTemplate windowTemplate;
memset(&windowTemplate, 0, sizeof(windowTemplate)); memset(&windowTemplate, 0, sizeof(windowTemplate));
windowTemplate.width = 30; windowTemplate.width = 30;
windowTemplate.height = 2; windowTemplate.height = 2;
@ -1165,33 +1165,33 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
} }
origWidth = GetStringWidth(1, text, 0); origWidth = GetStringWidth(1, text, 0);
if ((strWidth = (origWidth + 9) / 8) > 30) strWidth = (origWidth + 9) / 8;
strWidth = 30; if (strWidth > 30)
strWidth = 30;
AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, sContestLinkTextColors, -1, text); AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, sContestLinkTextColors, -1, text);
{ {
s32 i; s32 i;
struct Sprite *sprite; struct Sprite *sprite;
const u8 *src, *windowTilesPtr; const u8 *src, *windowTilesPtr;
windowTilesPtr = (const u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA)); windowTilesPtr = (u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA));
src = sUnknown_0858D6D0; src = (u8 *)(sUnknown_0858D6D0);
sprite = &gSprites[spriteId]; sprite = &gSprites[spriteId];
spriteTilePtrs[0] = (u8 *)((OBJ_VRAM0) + sprite->oam.tileNum * 32); spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + OBJ_VRAM0);
for (i = 1; i < 4; i++) for (i = 1; i < 4; i++)
spriteTilePtrs[i] = (u8 *)((OBJ_VRAM0) + gSprites[sprite->data[i - 1]].oam.tileNum * 32); spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + OBJ_VRAM0);
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
CpuFill32(0, spriteTilePtrs[i], 0x400); CpuFill32(0, spriteTilePtrs[i], 0x400);
dst = spriteTilePtrs[0]; dst = spriteTilePtrs[0];
CpuCopy32(src, dst, 0x20); CpuCopy32(src, dst, 0x20);
CpuCopy32(src + 128, dst + 0x100, 0x20); CpuCopy32(src + 128, dst + 0x100, 0x20);
CpuCopy32(src + 128, dst + 0x200, 0x20); CpuCopy32(src + 128, dst + 0x200, 0x20);
CpuCopy32(src + 64, dst + 0x300, 0x20); CpuCopy32(src + 64, dst + 0x300, 0x20);
for (i = 0; i < strWidth; i++) for (i = 0; i < strWidth; i++)
{ {
dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32];
@ -1203,10 +1203,10 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
} }
dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32];
CpuCopy32(src + 32, dst, 0x20); CpuCopy32(src + 32, dst, 0x20);
CpuCopy32(src + 160, dst + 0x100, 0x20); CpuCopy32(src + 160, dst + 0x100, 0x20);
CpuCopy32(src + 160, dst + 0x200, 0x20); CpuCopy32(src + 160, dst + 0x200, 0x20);
CpuCopy32(src + 96, dst + 0x300, 0x20); CpuCopy32(src + 96, dst + 0x300, 0x20);
} }
RemoveWindow(windowId); RemoveWindow(windowId);
@ -1922,7 +1922,7 @@ static void AddContestTextPrinter(int windowId, u8 *str, int x)
textPrinter.currentY = 2; textPrinter.currentY = 2;
textPrinter.letterSpacing = 0; textPrinter.letterSpacing = 0;
textPrinter.lineSpacing = 0; textPrinter.lineSpacing = 0;
textPrinter.style = 0; textPrinter.unk = 0;
textPrinter.fgColor = 1; textPrinter.fgColor = 1;
textPrinter.bgColor = 0; textPrinter.bgColor = 0;
textPrinter.shadowColor = 8; textPrinter.shadowColor = 8;

View File

@ -91,6 +91,10 @@ Init: @ 8000204
ldr r1, =INTR_VECTOR ldr r1, =INTR_VECTOR
adr r0, IntrMain adr r0, IntrMain
str r0, [r1] str r0, [r1]
.if MODERN
mov r0, #255 @ RESET_ALL
svc #1 << 16
.endif @ MODERN
ldr r1, =AgbMain + 1 ldr r1, =AgbMain + 1
mov lr, pc mov lr, pc
bx r1 bx r1

View File

@ -1208,7 +1208,7 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y)
printer.y = y; printer.y = y;
printer.currentX = x; printer.currentX = x;
printer.currentY = y; printer.currentY = y;
printer.style = 0; printer.unk = 0;
gTextFlags.useAlternateDownArrow = 0; gTextFlags.useAlternateDownArrow = 0;
printer.letterSpacing = 0; printer.letterSpacing = 0;
printer.lineSpacing = 1; printer.lineSpacing = 1;

View File

@ -917,9 +917,9 @@ static void DecorationItemsMenu_PrintDecorationInUse(u8 windowId, s32 itemIndex,
if (itemIndex != -2) if (itemIndex != -2)
{ {
if (IsDecorationIndexInSecretBase(itemIndex + 1) == TRUE) if (IsDecorationIndexInSecretBase(itemIndex + 1) == TRUE)
blit_move_info_icon(windowId, 0x18, 0x5c, y + 2); BlitMenuInfoIcon(windowId, MENU_INFO_ICON_BALL_RED, 92, y + 2);
else if (IsDecorationIndexInPlayersRoom(itemIndex + 1) == TRUE) else if (IsDecorationIndexInPlayersRoom(itemIndex + 1) == TRUE)
blit_move_info_icon(windowId, 0x19, 0x5c, y + 2); BlitMenuInfoIcon(windowId, MENU_INFO_ICON_BALL_BLUE, 92, y + 2);
} }
} }
@ -1827,7 +1827,7 @@ static void Task_SelectLocation(u8 taskId)
sPlacePutAwayYesNoFunctions[tDecorationItemsMenuCommand].yesFunc(taskId); sPlacePutAwayYesNoFunctions[tDecorationItemsMenuCommand].yesFunc(taskId);
return; return;
} }
if (tButton == B_BUTTON) if (tButton == B_BUTTON)
{ {
sPlacePutAwayYesNoFunctions[tDecorationItemsMenuCommand].noFunc(taskId); sPlacePutAwayYesNoFunctions[tDecorationItemsMenuCommand].noFunc(taskId);

View File

@ -219,11 +219,10 @@ void BufferTrendyPhraseString(void)
ConvertEasyChatWordsToString(gStringVar1, s->words, 2, 1); ConvertEasyChatWordsToString(gStringVar1, s->words, 2, 1);
} }
void TrendyPhraseIsOld(void) void TrendyPhraseIsOld(void)
{ {
u8 result = 0; u16 result = 0;
do do
{ {
if (gSaveBlock1Ptr->easyChatPairs[0].unk0_0 - gSaveBlock1Ptr->easyChatPairs[1].unk0_0 > 1) if (gSaveBlock1Ptr->easyChatPairs[0].unk0_0 - gSaveBlock1Ptr->easyChatPairs[1].unk0_0 > 1)
@ -234,7 +233,7 @@ void TrendyPhraseIsOld(void)
break; break;
result = 1; result = 1;
} while (0); } while (0);
gSpecialVar_Result = result; gSpecialVar_Result = result;
} }
@ -249,46 +248,46 @@ static bool8 sub_8122A58(struct EasyChatPair *a, struct EasyChatPair *b, u8 c)
{ {
case 0: case 0:
if (a->unk0_0 > b->unk0_0) if (a->unk0_0 > b->unk0_0)
return TRUE; return 1;
if (a->unk0_0 < b->unk0_0) if (a->unk0_0 < b->unk0_0)
return FALSE; return 0;
if (a->unk0_7 > b->unk0_7) if (a->unk0_7 > b->unk0_7)
return TRUE; return 1;
if (a->unk0_7 < b->unk0_7) if (a->unk0_7 < b->unk0_7)
return FALSE; return 0;
break; break;
case 1: case 1:
if (a->unk0_7 > b->unk0_7) if (a->unk0_7 > b->unk0_7)
return TRUE; return 1;
if (a->unk0_7 < b->unk0_7) if (a->unk0_7 < b->unk0_7)
return FALSE; return 0;
if (a->unk0_0 > b->unk0_0) if (a->unk0_0 > b->unk0_0)
return TRUE; return 1;
if (a->unk0_0 < b->unk0_0) if (a->unk0_0 < b->unk0_0)
return FALSE; return 0;
break; break;
case 2: case 2:
if (a->unk0_0 > b->unk0_0) if (a->unk0_0 > b->unk0_0)
return TRUE; return 1;
if (a->unk0_0 < b->unk0_0) if (a->unk0_0 < b->unk0_0)
return FALSE; return 0;
if (a->unk0_7 > b->unk0_7) if (a->unk0_7 > b->unk0_7)
return TRUE; return 1;
if (a->unk0_7 < b->unk0_7) if (a->unk0_7 < b->unk0_7)
return FALSE; return 0;
if (a->unk2 > b->unk2) if (a->unk2 > b->unk2)
return TRUE; return 1;
if (a->unk2 < b->unk2) if (a->unk2 < b->unk2)
return FALSE; return 0;
if (a->words[0] > b->words[0]) if (a->words[0] > b->words[0])
return TRUE; return 1;
if (a->words[0] < b->words[0]) if (a->words[0] < b->words[0])
return FALSE; return 0;
if (a->words[1] > b->words[1]) if (a->words[1] > b->words[1])
return TRUE; return 1;
if (a->words[1] < b->words[1]) if (a->words[1] < b->words[1])
return FALSE; return 0;
return TRUE; return 1;
} }
return Random() & 1; return Random() & 1;
} }

View File

@ -1613,26 +1613,26 @@ static u16 sub_811ACDC(void)
{ {
return sub_811B150(); return sub_811B150();
} }
if (JOY_NEW(START_BUTTON)) else if (JOY_NEW(START_BUTTON))
{ {
return sub_811B1B4(); return sub_811B1B4();
} }
if (JOY_NEW(DPAD_UP)) else if (JOY_NEW(DPAD_UP))
{ {
sEasyChatScreen->mainCursorRow--; sEasyChatScreen->mainCursorRow--;
break; break;
} }
if (JOY_NEW(DPAD_LEFT)) else if (JOY_NEW(DPAD_LEFT))
{ {
sEasyChatScreen->mainCursorColumn--; sEasyChatScreen->mainCursorColumn--;
break; break;
} }
if (JOY_NEW(DPAD_DOWN)) else if (JOY_NEW(DPAD_DOWN))
{ {
sEasyChatScreen->mainCursorRow = 0; sEasyChatScreen->mainCursorRow = 0;
break; break;
} }
if (JOY_NEW(DPAD_RIGHT)) else if (JOY_NEW(DPAD_RIGHT))
{ {
sEasyChatScreen->mainCursorColumn++; sEasyChatScreen->mainCursorColumn++;
break; break;
@ -2536,7 +2536,7 @@ u8 sub_811BBBC(void)
return sEasyChatScreen->unk_0c; return sEasyChatScreen->unk_0c;
} }
static void sub_811BBC8(s8 *arg0, s8 *arg1) void sub_811BBC8(u8 *arg0, u8 *arg1)
{ {
*arg0 = sEasyChatScreen->unk_10; *arg0 = sEasyChatScreen->unk_10;
*arg1 = sEasyChatScreen->unk_11; *arg1 = sEasyChatScreen->unk_11;
@ -4528,18 +4528,18 @@ static void sub_811E30C(void)
x = var0 * 13; x = var0 * 13;
x = x * 8 + 28; x = x * 8 + 28;
y = var1 * 16 + 96; y = var1 * 16 + 96;
sub_811E34C((u8)x, (u8)y); sub_811E34C(x, y);
} }
static void sub_811E34C(u8 x, u8 y) static void sub_811E34C(u8 x, u8 y)
{ {
if (!sUnknown_0203A11C->unk2E4) if (sUnknown_0203A11C->unk2E4)
return; {
sUnknown_0203A11C->unk2E4->pos1.x = x;
sUnknown_0203A11C->unk2E4->pos1.x = (s16)x; sUnknown_0203A11C->unk2E4->pos1.y = y;
sUnknown_0203A11C->unk2E4->pos1.y = (s16)y; sUnknown_0203A11C->unk2E4->pos2.x = 0;
sUnknown_0203A11C->unk2E4->pos2.x = 0; sUnknown_0203A11C->unk2E4->data[0] = 0;
sUnknown_0203A11C->unk2E4->data[0] = 0; }
} }
static void sub_811E380(void) static void sub_811E380(void)

View File

@ -1235,7 +1235,7 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template,
objectEvent->range.as_nybbles.x = template->movementRangeX; objectEvent->range.as_nybbles.x = template->movementRangeX;
objectEvent->range.as_nybbles.y = template->movementRangeY; objectEvent->range.as_nybbles.y = template->movementRangeY;
objectEvent->trainerType = template->trainerType; objectEvent->trainerType = template->trainerType;
objectEvent->mapNum = mapNum; //redundant, but needed to match objectEvent->mapNum = mapNum;
objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId; objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId;
objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType]; objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType];
SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection); SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection);
@ -8216,13 +8216,15 @@ bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent)
{ {
return TRUE; return TRUE;
} }
else
objectEvent->frozen = 1; {
objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused; objectEvent->frozen = 1;
objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused; objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused;
gSprites[objectEvent->spriteId].animPaused = 1; objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused;
gSprites[objectEvent->spriteId].affineAnimPaused = 1; gSprites[objectEvent->spriteId].animPaused = 1;
return FALSE; gSprites[objectEvent->spriteId].affineAnimPaused = 1;
return FALSE;
}
} }
void FreezeObjectEvents(void) void FreezeObjectEvents(void)
@ -8395,8 +8397,8 @@ bool8 sub_80976EC(struct Sprite *sprite)
if (sprite->data[5] > 15) if (sprite->data[5] > 15)
return TRUE; return TRUE;
else
return FALSE; return FALSE;
} }
static const s8 sFigure8XOffsets[FIGURE_8_LENGTH] = { static const s8 sFigure8XOffsets[FIGURE_8_LENGTH] = {
@ -8476,15 +8478,15 @@ static bool8 AnimateSpriteInFigure8(struct Sprite *sprite)
return finished; return finished;
} }
static const s8 gUnknown_0850E802[16] = { static const s8 gUnknown_0850E802[] = {
-4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0 -4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0
}; };
static const s8 gUnknown_0850E812[16] = { static const s8 gUnknown_0850E812[] = {
0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0 0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0
}; };
static const s8 gUnknown_0850E822[16] = { static const s8 gUnknown_0850E822[] = {
-2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0 -2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0
}; };
@ -8564,9 +8566,12 @@ static void SetMovementDelay(struct Sprite *sprite, s16 timer)
static bool8 WaitForMovementDelay(struct Sprite *sprite) static bool8 WaitForMovementDelay(struct Sprite *sprite)
{ {
if (--sprite->data[3] == 0) sprite->data[3]--;
if (sprite->data[3] == 0)
return TRUE; return TRUE;
return FALSE; else
return FALSE;
} }
void SetAndStartSpriteAnim(struct Sprite *sprite, u8 animNum, u8 animCmdIndex) void SetAndStartSpriteAnim(struct Sprite *sprite, u8 animNum, u8 animCmdIndex)
@ -8580,7 +8585,8 @@ bool8 SpriteAnimEnded(struct Sprite *sprite)
{ {
if (sprite->animEnded) if (sprite->animEnded)
return TRUE; return TRUE;
return FALSE; else
return FALSE;
} }
void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible) void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible)
@ -8759,14 +8765,14 @@ static void UpdateObjectEventSpritePosition(struct Sprite *sprite)
{ {
switch(sprite->tAnimNum) switch(sprite->tAnimNum)
{ {
case 0:
break;
case UNION_ROOM_SPAWN_IN: case UNION_ROOM_SPAWN_IN:
MoveUnionRoomObjectDown(sprite); MoveUnionRoomObjectDown(sprite);
break; break;
case UNION_ROOM_SPAWN_OUT: case UNION_ROOM_SPAWN_OUT:
MoveUnionRoomObjectUp(sprite); MoveUnionRoomObjectUp(sprite);
break; break;
case 0:
break;
default: default:
sprite->tAnimNum = 0; sprite->tAnimNum = 0;
break; break;
@ -8835,7 +8841,7 @@ u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite *
u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{ {
bool8 ableToStore = FALSE; bool32 ableToStore = FALSE;
if (gLockedAnimObjectEvents == NULL) if (gLockedAnimObjectEvents == NULL)
{ {
gLockedAnimObjectEvents = AllocZeroed(sizeof(struct LockedAnimObjectEvents)); gLockedAnimObjectEvents = AllocZeroed(sizeof(struct LockedAnimObjectEvents));
@ -8845,8 +8851,9 @@ u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct
} }
else else
{ {
u8 i, firstFreeSlot; u8 i;
bool8 found; u8 firstFreeSlot;
bool32 found;
for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++) for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++)
{ {
if (firstFreeSlot == 16 && gLockedAnimObjectEvents->objectEventIds[i] == 0) if (firstFreeSlot == 16 && gLockedAnimObjectEvents->objectEventIds[i] == 0)
@ -8879,7 +8886,7 @@ u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct
u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{ {
bool8 ableToStore; bool32 ableToStore;
u8 index; u8 index;
sprite->data[2] = 1; sprite->data[2] = 1;
@ -8923,7 +8930,7 @@ void CreateLevitateMovementTask(struct ObjectEvent *objectEvent)
u8 taskId = CreateTask(ApplyLevitateMovement, 0xFF); u8 taskId = CreateTask(ApplyLevitateMovement, 0xFF);
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
StoreWordInTwoHalfwords((u16 *)&task->data[0], (u32)objectEvent); StoreWordInTwoHalfwords(&task->data[0], (u32)objectEvent);
objectEvent->warpArrowSpriteId = taskId; objectEvent->warpArrowSpriteId = taskId;
task->data[3] = 0xFFFF; task->data[3] = 0xFFFF;
} }
@ -8934,7 +8941,7 @@ static void ApplyLevitateMovement(u8 taskId)
struct Sprite *sprite; struct Sprite *sprite;
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // load the map object pointer. LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // load the map object pointer.
sprite = &gSprites[objectEvent->spriteId]; sprite = &gSprites[objectEvent->spriteId];
if(!(task->data[2] & 0x3)) if(!(task->data[2] & 0x3))
@ -8951,7 +8958,7 @@ void DestroyExtraMovementTask(u8 taskId)
struct ObjectEvent *objectEvent; struct ObjectEvent *objectEvent;
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // unused objectEvent LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // unused objectEvent
DestroyTask(taskId); DestroyTask(taskId);
} }

View File

@ -181,36 +181,40 @@ u32 GetMewMoveDirection(void)
{ {
if (ShouldMewMoveEast(mew, 1)) if (ShouldMewMoveEast(mew, 1))
return GetRandomMewDirectionCandidate(2); return GetRandomMewDirectionCandidate(2);
if (ShouldMewMoveWest(mew, 1)) else if (ShouldMewMoveWest(mew, 1))
return GetRandomMewDirectionCandidate(2); return GetRandomMewDirectionCandidate(2);
return DIR_NORTH; else
return DIR_NORTH;
} }
if (ShouldMewMoveSouth(mew, 0)) if (ShouldMewMoveSouth(mew, 0))
{ {
if (ShouldMewMoveEast(mew, 1)) if (ShouldMewMoveEast(mew, 1))
return GetRandomMewDirectionCandidate(2); return GetRandomMewDirectionCandidate(2);
if (ShouldMewMoveWest(mew, 1)) else if (ShouldMewMoveWest(mew, 1))
return GetRandomMewDirectionCandidate(2); return GetRandomMewDirectionCandidate(2);
return DIR_SOUTH; else
return DIR_SOUTH;
} }
if (ShouldMewMoveEast(mew, 0)) if (ShouldMewMoveEast(mew, 0))
{ {
if (ShouldMewMoveNorth(mew, 1)) if (ShouldMewMoveNorth(mew, 1))
return GetRandomMewDirectionCandidate(2); return GetRandomMewDirectionCandidate(2);
if (ShouldMewMoveSouth(mew, 1)) else if (ShouldMewMoveSouth(mew, 1))
return GetRandomMewDirectionCandidate(2); return GetRandomMewDirectionCandidate(2);
return DIR_EAST; else
return DIR_EAST;
} }
if (ShouldMewMoveWest(mew, 0)) if (ShouldMewMoveWest(mew, 0))
{ {
if (ShouldMewMoveNorth(mew, 1)) if (ShouldMewMoveNorth(mew, 1))
return GetRandomMewDirectionCandidate(2); return GetRandomMewDirectionCandidate(2);
if (ShouldMewMoveSouth(mew, 1)) else if (ShouldMewMoveSouth(mew, 1))
return GetRandomMewDirectionCandidate(2); return GetRandomMewDirectionCandidate(2);
return DIR_WEST; else
return DIR_WEST;
} }
// If this point is reached, Mew cannot move without getting closer to the player // If this point is reached, Mew cannot move without getting closer to the player
@ -311,7 +315,8 @@ static u8 GetValidMewMoveDirection(u8 ignoredDir)
if (count > 1) if (count > 1)
return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % count]; return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % count];
return sMewDirectionCandidates[0]; else
return sMewDirectionCandidates[0];
} }
void UpdateFarawayIslandStepCounter(void) void UpdateFarawayIslandStepCounter(void)

View File

@ -2597,7 +2597,7 @@ static void FieldMoveShowMonOutdoorsEffect_Init(struct Task *task)
{ {
task->data[11] = REG_WININ; task->data[11] = REG_WININ;
task->data[12] = REG_WINOUT; task->data[12] = REG_WINOUT;
StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback);
task->tWinHoriz = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); task->tWinHoriz = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1);
task->tWinVert = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1); task->tWinVert = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1);
task->tWinIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; task->tWinIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;

View File

@ -227,7 +227,9 @@ bool8 SetUpFieldMove_Cut(void)
y = gPlayerFacingPosition.y + sHyperCutStruct[i].y; y = gPlayerFacingPosition.y + sHyperCutStruct[i].y;
tileCuttable = TRUE; tileCuttable = TRUE;
for (j = 0; j < 2; ++j) { j = 0;
do
{
if (sHyperCutStruct[i].unk2[j] == 0) if (sHyperCutStruct[i].unk2[j] == 0)
break; break;
if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE) if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE)
@ -235,7 +237,7 @@ bool8 SetUpFieldMove_Cut(void)
tileCuttable = FALSE; tileCuttable = FALSE;
break; break;
} }
} } while (++j <= 1);
if (tileCuttable == TRUE) if (tileCuttable == TRUE)
{ {
@ -251,8 +253,11 @@ bool8 SetUpFieldMove_Cut(void)
sHyperCutTiles[tileArrayId] = TRUE; sHyperCutTiles[tileArrayId] = TRUE;
ret = TRUE; ret = TRUE;
} }
else if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE) else
sHyperCutTiles[tileArrayId] = TRUE; {
if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
sHyperCutTiles[tileArrayId] = TRUE;
}
} }
} }
} }

View File

@ -1195,7 +1195,7 @@ static void sub_80C6104(u8 cursorArea, u8 previousCursorArea)
return; return;
break; break;
} }
switch (cursorArea) switch (cursorArea)
{ {
case CURSOR_AREA_MAP: case CURSOR_AREA_MAP:
@ -1209,7 +1209,7 @@ static void sub_80C6104(u8 cursorArea, u8 previousCursorArea)
CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28 + 72, 2, 10, 12, 3, 17); CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28 + 72, 2, 10, 12, 3, 17);
else else
return; return;
break; // needed break; //needed to match
case CURSOR_AREA_CANCEL: case CURSOR_AREA_CANCEL:
CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DE3374, 21, 0, 9, 2, 17); CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DE3374, 21, 0, 9, 2, 17);
break; break;

View File

@ -2507,11 +2507,12 @@ void CreateFrontierBrainPokemon(void)
{ {
if (!(selectedMonBits & 1)) if (!(selectedMonBits & 1))
continue; continue;
do do
{ {
do do
{ {
j = Random32(); //Should be one while loop, but that doesn't match j = Random32(); //should just be one while loop, but that doesn't match
} while (IsShinyOtIdPersonality(FRONTIER_BRAIN_OTID, j)); } while (IsShinyOtIdPersonality(FRONTIER_BRAIN_OTID, j));
} while (sFrontierBrainsMons[facility][symbol][i].nature != GetNatureFromPersonality(j)); } while (sFrontierBrainsMons[facility][symbol][i].nature != GetNatureFromPersonality(j));
CreateMon(&gEnemyParty[monPartyId], CreateMon(&gEnemyParty[monPartyId],

View File

@ -183,13 +183,15 @@ bool8 HasAtLeastOneBerry(void)
bool8 CheckBagHasSpace(u16 itemId, u16 count) bool8 CheckBagHasSpace(u16 itemId, u16 count)
{ {
u8 i, pocket; u8 i;
u16 slotCapacity, ownedCount; u8 pocket;
u16 slotCapacity;
u16 ownedCount;
if (ItemId_GetPocket(itemId) == POCKET_NONE) if (ItemId_GetPocket(itemId) == POCKET_NONE)
return FALSE; return FALSE;
if (InBattlePyramid() || (FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE)) if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE)
{ {
return CheckPyramidBagHasSpace(itemId, count); return CheckPyramidBagHasSpace(itemId, count);
} }
@ -212,12 +214,12 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count)
return FALSE; return FALSE;
count -= (slotCapacity - ownedCount); count -= (slotCapacity - ownedCount);
if (count == 0) if (count == 0)
break; //Should just be "return TRUE", since setting count to 0 means all the remaining checks until return will be false anyway, but that doesn't match break; //should be return TRUE, but that doesn't match
} }
} }
// Check space in empty item slots // Check space in empty item slots
if (count > 0) //if (count !=0) also works here; both match if (count > 0)
{ {
for (i = 0; i < gBagPockets[pocket].capacity; i++) for (i = 0; i < gBagPockets[pocket].capacity; i++)
{ {
@ -231,12 +233,12 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count)
} }
else else
{ {
count = 0; //Should just be "return TRUE", since setting count to 0 means all the remaining checks until return will be false anyway, but that doesn't match count = 0; //should be return TRUE, but that doesn't match
break; break;
} }
} }
} }
if (count > 0) //if (count !=0) also works here; both match if (count > 0)
return FALSE; // No more item slots. The bag is full return FALSE; // No more item slots. The bag is full
} }

View File

@ -628,6 +628,7 @@ void CB2_Bag(void)
bool8 SetupBagMenu(void) bool8 SetupBagMenu(void)
{ {
u32 index;
u8 taskId; u8 taskId;
switch (gMain.state) switch (gMain.state)
@ -1228,12 +1229,12 @@ static u8 GetSwitchBagPocketDirection(void)
if (gBagMenu->pocketSwitchDisabled) if (gBagMenu->pocketSwitchDisabled)
return SWITCH_POCKET_NONE; return SWITCH_POCKET_NONE;
LRKeys = GetLRKeysPressed(); LRKeys = GetLRKeysPressed();
if (JOY_NEW(DPAD_LEFT) || LRKeys == MENU_L_PRESSED) if ((JOY_NEW(DPAD_LEFT)) || LRKeys == MENU_L_PRESSED)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return SWITCH_POCKET_LEFT; return SWITCH_POCKET_LEFT;
} }
if (JOY_NEW(DPAD_RIGHT) || LRKeys == MENU_R_PRESSED) if ((JOY_NEW(DPAD_RIGHT)) || LRKeys == MENU_R_PRESSED)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return SWITCH_POCKET_RIGHT; return SWITCH_POCKET_RIGHT;
@ -1668,7 +1669,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE);
} }
} }
else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) else if ((JOY_NEW(DPAD_RIGHT)) || GetLRKeysPressed() == MENU_R_PRESSED)
{ {
if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1)) if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1))
{ {
@ -2456,10 +2457,10 @@ static void RemoveMoneyWindow(void)
void BagMenu_PrepareTMHMMoveWindow(void) void BagMenu_PrepareTMHMMoveWindow(void)
{ {
FillWindowPixelBuffer(3, PIXEL_FILL(0)); FillWindowPixelBuffer(3, PIXEL_FILL(0));
blit_move_info_icon(3, 19, 0, 0); BlitMenuInfoIcon(3, MENU_INFO_ICON_TYPE, 0, 0);
blit_move_info_icon(3, 20, 0, 12); BlitMenuInfoIcon(3, MENU_INFO_ICON_POWER, 0, 12);
blit_move_info_icon(3, 21, 0, 24); BlitMenuInfoIcon(3, MENU_INFO_ICON_ACCURACY, 0, 24);
blit_move_info_icon(3, 22, 0, 36); BlitMenuInfoIcon(3, MENU_INFO_ICON_PP, 0, 36);
CopyWindowToVram(3, 2); CopyWindowToVram(3, 2);
} }
@ -2479,7 +2480,7 @@ void PrintTMHMMoveData(u16 itemId)
else else
{ {
moveId = ItemIdToBattleMoveId(itemId); moveId = ItemIdToBattleMoveId(itemId);
blit_move_info_icon(4, gBattleMoves[moveId].type + 1, 0, 0); BlitMenuInfoIcon(4, gBattleMoves[moveId].type + 1, 0, 0);
if (gBattleMoves[moveId].power <= 1) if (gBattleMoves[moveId].power <= 1)
{ {
text = gText_ThreeDashes; text = gText_ThreeDashes;

View File

@ -721,7 +721,7 @@ static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId)
static bool8 TryToWaterSudowoodo(void) static bool8 TryToWaterSudowoodo(void)
{ {
s16 x, y; u16 x, y;
u8 z; u8 z;
u8 objId; u8 objId;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y); GetXYCoordsOneStepInFrontOfPlayer(&x, &y);

View File

@ -875,7 +875,8 @@ static void sub_800F498(u16 *a0, u8 *a1)
static bool32 RfuProcessEnqueuedRecvBlock(void) static bool32 RfuProcessEnqueuedRecvBlock(void)
{ {
u8 i, j; u8 i;
u8 j;
u8 sp00[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))]; u8 sp00[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))];
u8 sp48[2 * (CMD_LENGTH - 1)]; u8 sp48[2 * (CMD_LENGTH - 1)];
u8 status; u8 status;
@ -932,14 +933,13 @@ static void HandleSendFailure(u8 unused, u32 flags)
for (j = 0; j < 7; j++) for (j = 0; j < 7; j++)
{ {
temp = j << 1; temp = j << 1;
sResendBlock16[j + 1] = (r10[i * 12 + temp + 1] << 8) | r10[i * 12 + temp]; sResendBlock16[j + 1] = (r10[12 * i + temp + 1] << 8) | r10[12 * i + temp + 0];
} }
for (j = 0; j < 7; j++) for (j = 0; j < 7; j++)
{ {
temp = j << 1; temp = j << 1;
sResendBlock8[temp + 1] = sResendBlock16[j] >> 8; sResendBlock8[temp + 1] = sResendBlock16[j] >> 8;
sResendBlock8[temp + 0] = sResendBlock16[j] & 0xff; sResendBlock8[temp + 0] = sResendBlock16[j];
} }
RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8); RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8);
Rfu.sendBlock.failedFlags |= (1 << i); Rfu.sendBlock.failedFlags |= (1 << i);
@ -1023,7 +1023,8 @@ void Rfu_SetBerryBlenderLinkCallback(void)
static void RfuHandleReceiveCommand(u8 unused) static void RfuHandleReceiveCommand(u8 unused)
{ {
u16 i, j; u16 i;
u16 j;
for (i = 0; i < MAX_RFU_PLAYERS; i++) for (i = 0; i < MAX_RFU_PLAYERS; i++)
{ {
@ -1037,7 +1038,7 @@ static void RfuHandleReceiveCommand(u8 unused)
if (gRfuLinkStatus->parentChild == MODE_CHILD) if (gRfuLinkStatus->parentChild == MODE_CHILD)
{ {
Rfu.playerCount = gRecvCmds[i][1]; Rfu.playerCount = gRecvCmds[i][1];
Rfu.multiplayerId = sub_800F74C((u8 *)(&gRecvCmds[i][2])); Rfu.multiplayerId = sub_800F74C((u8 *)(gRecvCmds[i] + 2));
} }
break; break;
case RFUCMD_0x8800: case RFUCMD_0x8800:
@ -1236,9 +1237,10 @@ void Rfu_SendPacket(void *data)
bool32 Rfu_InitBlockSend(const u8 *src, size_t size) bool32 Rfu_InitBlockSend(const u8 *src, size_t size)
{ {
bool8 r4; bool8 r4;
if (Rfu.callback != NULL || gSendCmd[0] != 0) if (Rfu.callback != NULL)
return FALSE;
if (gSendCmd[0] != 0)
return FALSE; return FALSE;
if (Rfu.sendBlock.sending) if (Rfu.sendBlock.sending)
{ {
sRfuDebug.unk_83++; sRfuDebug.unk_83++;
@ -1416,12 +1418,16 @@ void Rfu_SetCloseLinkCallback(void)
static void SendReadyExitStandbyUntilAllReady(void) static void SendReadyExitStandbyUntilAllReady(void)
{ {
u8 i, playerCount; u8 playerCount;
u8 i;
if (GetMultiplayerId() != 0 && Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60) if (GetMultiplayerId() != 0)
{ {
RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); if (Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60)
Rfu.resendExitStandbyTimer = 0; {
RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY);
Rfu.resendExitStandbyTimer = 0;
}
} }
playerCount = GetLinkPlayerCount(); playerCount = GetLinkPlayerCount();
for (i = 0; i < playerCount; i++) for (i = 0; i < playerCount; i++)
@ -1451,7 +1457,8 @@ static void LinkLeaderReadyToExitStandby(void)
// RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll // RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll
static void Rfu_LinkStandby(void) static void Rfu_LinkStandby(void)
{ {
u8 i, playerCount; u8 i;
u8 playerCount;
if (GetMultiplayerId() != 0) if (GetMultiplayerId() != 0)
{ {
@ -1547,27 +1554,27 @@ static bool8 CheckForLeavingGroupMembers(void)
bool8 memberLeft = FALSE; bool8 memberLeft = FALSE;
for (i = 0; i < RFU_CHILD_MAX; i++) for (i = 0; i < RFU_CHILD_MAX; i++)
{ {
if (Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_OK if (Rfu.partnerSendStatuses[i] < RFU_STATUS_JOIN_GROUP_OK
|| Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_NO) || Rfu.partnerSendStatuses[i] > RFU_STATUS_JOIN_GROUP_NO)
{ {
continue; if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS
} || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN)
if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS
|| gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN)
{
if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE)
{ {
Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP; if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE)
Rfu.partnerRecvStatuses[i] = RFU_STATUS_10; {
rfu_clearSlot(TYPE_NI_RECV, i); Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP;
rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1); Rfu.partnerRecvStatuses[i] = RFU_STATUS_10;
memberLeft = TRUE; rfu_clearSlot(TYPE_NI_RECV, i);
rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1);
memberLeft = TRUE;
}
}
else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED)
rfu_clearSlot(TYPE_NI_RECV, i);
{
} }
}
else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED)
{
rfu_clearSlot(TYPE_NI_RECV, i);
} }
} }
return memberLeft; return memberLeft;
@ -2043,7 +2050,8 @@ void sub_80110B8(u32 a0)
if ((r8 >> i) & 1) if ((r8 >> i) & 1)
{ {
child_sprite_genders |= ((0x80 | ((gLinkPlayers[Rfu.linkPlayerIdx[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.linkPlayerIdx[i]].trainerId & 7)) << (numConnectedChildren << 3)); child_sprite_genders |= ((0x80 | ((gLinkPlayers[Rfu.linkPlayerIdx[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.linkPlayerIdx[i]].trainerId & 7)) << (numConnectedChildren << 3));
if (++numConnectedChildren == a0 - 1) numConnectedChildren++;
if (numConnectedChildren == a0 - 1)
break; break;
} }
} }
@ -2088,7 +2096,8 @@ static void sub_80111FC(void)
static void sub_801120C(u8 msg, u8 paramCount) static void sub_801120C(u8 msg, u8 paramCount)
{ {
u8 i, disconnectFlag = 0; u8 i;
u8 disconnectFlag = 0;
switch (msg) switch (msg)
{ {
case LMAN_MSG_INITIALIZE_COMPLETED: case LMAN_MSG_INITIALIZE_COMPLETED:

View File

@ -309,7 +309,8 @@ static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = {
void RfuRecvQueue_Reset(struct RfuRecvQueue *queue) void RfuRecvQueue_Reset(struct RfuRecvQueue *queue)
{ {
s32 i, j; s32 i;
s32 j;
for (i = 0; i < RECV_QUEUE_NUM_SLOTS; i++) for (i = 0; i < RECV_QUEUE_NUM_SLOTS; i++)
{ {
@ -326,7 +327,8 @@ void RfuRecvQueue_Reset(struct RfuRecvQueue *queue)
void RfuSendQueue_Reset(struct RfuSendQueue *queue) void RfuSendQueue_Reset(struct RfuSendQueue *queue)
{ {
s32 i, j; s32 i;
s32 j;
for (i = 0; i < SEND_QUEUE_NUM_SLOTS; i++) for (i = 0; i < SEND_QUEUE_NUM_SLOTS; i++)
{ {
@ -343,7 +345,8 @@ void RfuSendQueue_Reset(struct RfuSendQueue *queue)
static void RfuUnusedQueue_Reset(struct RfuUnusedQueue *queue) static void RfuUnusedQueue_Reset(struct RfuUnusedQueue *queue)
{ {
s32 i, j; s32 i;
s32 j;
for (i = 0; i < UNUSED_QUEUE_NUM_SLOTS; i++) for (i = 0; i < UNUSED_QUEUE_NUM_SLOTS; i++)
{ {
@ -623,32 +626,30 @@ static void ASCIIToPkmnStr(u8 *pkmnStr, const u8 *asciiStr)
static u8 GetConnectedChildStrength(u8 maxFlags) static u8 GetConnectedChildStrength(u8 maxFlags)
{ {
u8 flagCount = 0; u8 flagCount = 0;
u8 flags = gRfuLinkStatus->connSlotFlag; u32 flags = gRfuLinkStatus->connSlotFlag;
u8 i; u8 i;
if (gRfuLinkStatus->parentChild == MODE_PARENT) if (gRfuLinkStatus->parentChild == MODE_PARENT)
{ {
for (i = 0; i < RFU_CHILD_MAX; i++) for (i = 0; i < 4; flags >>= 1, i++)
{ {
if (flags & 1) if (flags & 1)
{ {
if (maxFlags == flagCount + 1) if (maxFlags == flagCount + 1)
{ {
return gRfuLinkStatus->strength[i]; return gRfuLinkStatus->strength[i];
break; // This break is needed to match break;
} }
flagCount++; flagCount++;
} }
flags >>= 1;
} }
} }
else else
{ {
for (i = 0; i < 4; i++) for (i = 0; i < 4; flags >>= 1, i++)
{ {
if (flags & 1) if (flags & 1)
return gRfuLinkStatus->strength[i]; return gRfuLinkStatus->strength[i];
flags >>= 1;
} }
} }
return 0; return 0;
@ -922,7 +923,8 @@ void RecordMixTrainerNames(void)
{ {
if (gWirelessCommType != 0) if (gWirelessCommType != 0)
{ {
s32 i, j; s32 i;
s32 j;
s32 nextSpace; s32 nextSpace;
s32 connectedTrainerRecordIndices[5]; s32 connectedTrainerRecordIndices[5];
struct TrainerNameRecord *newRecords = calloc(ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords), sizeof(struct TrainerNameRecord)); struct TrainerNameRecord *newRecords = calloc(ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords), sizeof(struct TrainerNameRecord));

View File

@ -312,7 +312,7 @@ static void ListMenuDummyTask(u8 taskId)
} }
u32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum) s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum)
{ {
switch (sMysteryGiftLinkMenu.state) switch (sMysteryGiftLinkMenu.state)
{ {
@ -439,12 +439,14 @@ s32 ListMenu_ProcessInput(u8 listTaskId)
rightButton = FALSE; rightButton = FALSE;
break; break;
case LIST_MULTIPLE_SCROLL_DPAD: case LIST_MULTIPLE_SCROLL_DPAD:
leftButton = JOY_REPEAT(DPAD_LEFT); // note: JOY_REPEAT won't match here
rightButton = JOY_REPEAT(DPAD_RIGHT); leftButton = gMain.newAndRepeatedKeys & DPAD_LEFT;
rightButton = gMain.newAndRepeatedKeys & DPAD_RIGHT;
break; break;
case LIST_MULTIPLE_SCROLL_L_R: case LIST_MULTIPLE_SCROLL_L_R:
leftButton = JOY_REPEAT(L_BUTTON); // same as above
rightButton = JOY_REPEAT(R_BUTTON); leftButton = gMain.newAndRepeatedKeys & L_BUTTON;
rightButton = gMain.newAndRepeatedKeys & R_BUTTON;
break; break;
} }
@ -1257,17 +1259,17 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st
s32 i, j, id = 0; s32 i, j, id = 0;
subsprites[id] = sSubsprite_RedOutline1; subsprites[id] = sSubsprite_RedOutline1;
subsprites[id].x = -120; subsprites[id].x = 136;
subsprites[id].y = -120; subsprites[id].y = 136;
id++; id++;
subsprites[id] = sSubsprite_RedOutline2; subsprites[id] = sSubsprite_RedOutline2;
subsprites[id].x = rowWidth + 128; subsprites[id].x = rowWidth + 128;
subsprites[id].y = -120; subsprites[id].y = 136;
id++; id++;
subsprites[id] = sSubsprite_RedOutline7; subsprites[id] = sSubsprite_RedOutline7;
subsprites[id].x = -120; subsprites[id].x = 136;
subsprites[id].y = rowHeight + 128; subsprites[id].y = rowHeight + 128;
id++; id++;
@ -1297,7 +1299,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st
for (j = 8; j < rowHeight - 8; j += 8) for (j = 8; j < rowHeight - 8; j += 8)
{ {
subsprites[id] = sSubsprite_RedOutline4; subsprites[id] = sSubsprite_RedOutline4;
subsprites[id].x = -120; subsprites[id].x = 136;
subsprites[id].y = j - 120; subsprites[id].y = j - 120;
id++; id++;

128
src/m4a.c
View File

@ -22,7 +22,8 @@ u8 gMPlayMemAccArea[0x10];
u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust) u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
{ {
u32 val1, val2; u32 val1;
u32 val2;
u32 fineAdjustShifted = fineAdjust << 24; u32 fineAdjustShifted = fineAdjust << 24;
if (key > 178) if (key > 178)
@ -314,7 +315,7 @@ void MPlayExtender(struct CgbChannel *cgbChans)
void MusicPlayerJumpTableCopy(void) void MusicPlayerJumpTableCopy(void)
{ {
asm("svc 0x2A"); asm("swi 0x2A");
} }
void ClearChain(void *x) void ClearChain(void *x)
@ -351,25 +352,25 @@ void SoundInit(struct SoundInfo *soundInfo)
| SOUND_ALL_MIX_FULL; | SOUND_ALL_MIX_FULL;
REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40; REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40;
REG_DMA1SAD = (u32)soundInfo->pcmBuffer; REG_DMA1SAD = (s32)soundInfo->pcmBuffer;
REG_DMA1DAD = (u32)&REG_FIFO_A; REG_DMA1DAD = (s32)&REG_FIFO_A;
REG_DMA2SAD = (u32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
REG_DMA2DAD = (u32)&REG_FIFO_B; REG_DMA2DAD = (s32)&REG_FIFO_B;
SOUND_INFO_PTR = soundInfo; SOUND_INFO_PTR = soundInfo;
CpuFill32(0, soundInfo, sizeof(struct SoundInfo)); CpuFill32(0, soundInfo, sizeof(struct SoundInfo));
soundInfo->maxChans = 8; soundInfo->maxChans = 8;
soundInfo->masterVolume = 15; soundInfo->masterVolume = 15;
soundInfo->plynote = ply_note; soundInfo->plynote = (u32)ply_note;
soundInfo->CgbSound = DummyFunc; soundInfo->CgbSound = DummyFunc;
soundInfo->CgbOscOff = (void (*)(u8))DummyFunc; soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc; soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
soundInfo->ExtVolPit = (void (*)(struct MusicPlayerInfo *, struct MusicPlayerTrack *))DummyFunc; soundInfo->ExtVolPit = (u32)DummyFunc;
MPlayJumpTableCopy(gMPlayJumpTable); MPlayJumpTableCopy(gMPlayJumpTable);
soundInfo->MPlayJumpTable = (void (**)())gMPlayJumpTable; soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable;
SampleFreqSet(SOUND_MODE_FREQ_13379); SampleFreqSet(SOUND_MODE_FREQ_13379);
@ -380,7 +381,7 @@ void SampleFreqSet(u32 freq)
{ {
struct SoundInfo *soundInfo = SOUND_INFO_PTR; struct SoundInfo *soundInfo = SOUND_INFO_PTR;
freq = (freq & SOUND_MODE_FREQ) >> SOUND_MODE_FREQ_SHIFT; freq = (freq & 0xF0000) >> 16;
soundInfo->freq = freq; soundInfo->freq = freq;
soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1]; soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1];
soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank; soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank;
@ -431,9 +432,14 @@ void m4aSoundMode(u32 mode)
soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT; soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT;
for (temp = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; temp != 0; temp--,chan++) temp = MAX_DIRECTSOUND_CHANNELS;
chan = &soundInfo->chans[0];
while (temp != 0)
{ {
chan->status = 0; chan->status = 0;
temp--;
chan++;
} }
} }
@ -463,28 +469,37 @@ void m4aSoundMode(u32 mode)
void SoundClear(void) void SoundClear(void)
{ {
s32 i;
struct SoundInfo *soundInfo = SOUND_INFO_PTR; struct SoundInfo *soundInfo = SOUND_INFO_PTR;
struct SoundChannel *chan; s32 i;
void *chan;
if (soundInfo->ident != ID_NUMBER) if (soundInfo->ident != ID_NUMBER)
return; return;
soundInfo->ident++; soundInfo->ident++;
for (i = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; i > 0; i--,chan++) i = MAX_DIRECTSOUND_CHANNELS;
chan = &soundInfo->chans[0];
while (i > 0)
{ {
chan->status = 0; ((struct SoundChannel *)chan)->status = 0;
i--;
chan = (void *)((s32)chan + sizeof(struct SoundChannel));
} }
chan = (struct SoundChannel *)soundInfo->cgbChans; chan = soundInfo->cgbChans;
if (chan) if (chan)
{ {
for (i=1; i<=4; i++,chan++) i = 1;
while (i <= 4)
{ {
soundInfo->CgbOscOff(i); soundInfo->CgbOscOff(i);
chan->status = 0; ((struct CgbChannel *)chan)->sf = 0;
i++;
chan = (void *)((s32)chan + sizeof(struct CgbChannel));
} }
} }
@ -495,20 +510,21 @@ void m4aSoundVSyncOff(void)
{ {
struct SoundInfo *soundInfo = SOUND_INFO_PTR; struct SoundInfo *soundInfo = SOUND_INFO_PTR;
if (soundInfo->ident < ID_NUMBER || soundInfo->ident > ID_NUMBER + 1) if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1)
return; {
soundInfo->ident += 10; soundInfo->ident += 10;
if (REG_DMA1CNT & (DMA_REPEAT << 16)) if (REG_DMA1CNT & (DMA_REPEAT << 16))
REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
if (REG_DMA2CNT & (DMA_REPEAT << 16)) if (REG_DMA2CNT & (DMA_REPEAT << 16))
REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
REG_DMA1CNT_H = DMA_32BIT; REG_DMA1CNT_H = DMA_32BIT;
REG_DMA2CNT_H = DMA_32BIT; REG_DMA2CNT_H = DMA_32BIT;
CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer)); CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
}
} }
void m4aSoundVSyncOn(void) void m4aSoundVSyncOn(void)
@ -564,7 +580,7 @@ void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track
} }
soundInfo->intp = (u32)mplayInfo; soundInfo->intp = (u32)mplayInfo;
soundInfo->func = MPlayMain; soundInfo->func = (u32)MPlayMain;
soundInfo->ident = ID_NUMBER; soundInfo->ident = ID_NUMBER;
mplayInfo->ident = ID_NUMBER; mplayInfo->ident = ID_NUMBER;
} }
@ -598,18 +614,25 @@ void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader
mplayInfo->tempoC = 0; mplayInfo->tempoC = 0;
mplayInfo->fadeOI = 0; mplayInfo->fadeOI = 0;
for (i = 0, track = mplayInfo->tracks; i < songHeader->trackCount && i < mplayInfo->trackCount; i++, track++) i = 0;
track = mplayInfo->tracks;
while (i < songHeader->trackCount && i < mplayInfo->trackCount)
{ {
TrackStop(mplayInfo, track); TrackStop(mplayInfo, track);
track->flags = MPT_FLG_EXIST | MPT_FLG_START; track->flags = MPT_FLG_EXIST | MPT_FLG_START;
track->chan = 0; track->chan = 0;
track->cmdPtr = songHeader->part[i]; track->cmdPtr = songHeader->part[i];
i++;
track++;
} }
for (; i < mplayInfo->trackCount; i++, track++) while (i < mplayInfo->trackCount)
{ {
TrackStop(mplayInfo, track); TrackStop(mplayInfo, track);
track->flags = 0; track->flags = 0;
i++;
track++;
} }
if (songHeader->reverb & SOUND_MODE_REVERB_SET) if (songHeader->reverb & SOUND_MODE_REVERB_SET)
@ -630,9 +653,14 @@ void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo)
mplayInfo->ident++; mplayInfo->ident++;
mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE; mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++) i = mplayInfo->trackCount;
track = mplayInfo->tracks;
while (i > 0)
{ {
TrackStop(mplayInfo, track); TrackStop(mplayInfo, track);
i--;
track++;
} }
mplayInfo->ident = ID_NUMBER; mplayInfo->ident = ID_NUMBER;
@ -643,28 +671,17 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
s32 i; s32 i;
struct MusicPlayerTrack *track; struct MusicPlayerTrack *track;
u16 fadeOV; u16 fadeOV;
#ifdef NONMATCHING
u16 mask;
#else
register u16 mask asm("r2");
#endif // NONMATCHING
if (mplayInfo->fadeOI == 0) if (mplayInfo->fadeOI == 0)
return; return;
if (--mplayInfo->fadeOC != 0)
mplayInfo->fadeOC--;
mask = 0xFFFF;
if (mplayInfo->fadeOC != 0)
return; return;
mplayInfo->fadeOC = mplayInfo->fadeOI; mplayInfo->fadeOC = mplayInfo->fadeOI;
if (mplayInfo->fadeOV & FADE_IN) if (mplayInfo->fadeOV & FADE_IN)
{ {
mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT); if ((u16)(mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT)) >= (64 << FADE_VOL_SHIFT))
if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT))
{ {
mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT); mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
mplayInfo->fadeOI = 0; mplayInfo->fadeOI = 0;
@ -672,12 +689,12 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
} }
else else
{ {
mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT); if ((s16)(mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT)) <= 0)
if ((s16)(mplayInfo->fadeOV & mask) <= 0)
{ {
i = mplayInfo->trackCount;
track = mplayInfo->tracks;
for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++) while (i > 0)
{ {
u32 val; u32 val;
@ -689,6 +706,9 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
if (!val) if (!val)
track->flags = 0; track->flags = 0;
i--;
track++;
} }
if (mplayInfo->fadeOV & TEMPORARY_FADE) if (mplayInfo->fadeOV & TEMPORARY_FADE)
@ -701,7 +721,10 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
} }
} }
for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++) i = mplayInfo->trackCount;
track = mplayInfo->tracks;
while (i > 0)
{ {
if (track->flags & MPT_FLG_EXIST) if (track->flags & MPT_FLG_EXIST)
{ {
@ -710,6 +733,9 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
track->volX = (fadeOV >> FADE_VOL_SHIFT); track->volX = (fadeOV >> FADE_VOL_SHIFT);
track->flags |= MPT_FLG_VOLCHG; track->flags |= MPT_FLG_VOLCHG;
} }
i--;
track++;
} }
} }
@ -717,7 +743,7 @@ void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tr
{ {
if (track->flags & MPT_FLG_VOLSET) if (track->flags & MPT_FLG_VOLSET)
{ {
u32 x; s32 x;
s32 y; s32 y;
x = (u32)(track->vol * track->volX) >> 5; x = (u32)(track->vol * track->volX) >> 5;

File diff suppressed because it is too large Load Diff

View File

@ -83,7 +83,7 @@ const u8 gScaleTable[] =
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
}; };
const u32 gFreqTable[12] = const u32 gFreqTable[] =
{ {
2147483648u, 2147483648u,
2275179671u, 2275179671u,
@ -99,7 +99,7 @@ const u32 gFreqTable[12] =
4053909305u, 4053909305u,
}; };
const u16 gPcmSamplesPerVBlankTable[12] = const u16 gPcmSamplesPerVBlankTable[] =
{ {
96, 96,
132, 132,
@ -130,7 +130,7 @@ const u8 gCgbScaleTable[] =
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB,
}; };
const s16 gCgbFreqTable[12] = const s16 gCgbFreqTable[] =
{ {
-2004, -2004,
-1891, -1891,

View File

@ -81,27 +81,13 @@ void InitIntrHandlers(void);
static void WaitForVBlank(void); static void WaitForVBlank(void);
void EnableVCountIntrAtLine150(void); void EnableVCountIntrAtLine150(void);
#define B_START_SELECT (B_BUTTON | START_BUTTON | SELECT_BUTTON)
void AgbMain() void AgbMain()
{ {
#if MODERN
// Modern compilers are liberal with the stack on entry to this function, // Modern compilers are liberal with the stack on entry to this function,
// so RegisterRamReset may crash if it resets IWRAM. // so RegisterRamReset may crash if it resets IWRAM.
RegisterRamReset(RESET_ALL & ~RESET_IWRAM); #if !MODERN
asm("mov\tr1, #0xC0\n"
"\tlsl\tr1, r1, #0x12\n"
"\tmov r2, #0xFC\n"
"\tlsl r2, r2, #0x7\n"
"\tadd\tr2, r1, r2\n"
"\tmov\tr0, #0\n"
"\tmov\tr3, r0\n"
"\tmov\tr4, r0\n"
"\tmov\tr5, r0\n"
".LCU0:\n"
"\tstmia r1!, {r0, r3, r4, r5}\n"
"\tcmp\tr1, r2\n"
"\tbcc\t.LCU0\n"
);
#else
RegisterRamReset(RESET_ALL); RegisterRamReset(RESET_ALL);
#endif //MODERN #endif //MODERN
*(vu16 *)BG_PLTT = 0x7FFF; *(vu16 *)BG_PLTT = 0x7FFF;
@ -134,11 +120,9 @@ void AgbMain()
{ {
ReadKeys(); ReadKeys();
if (!gSoftResetDisabled if (gSoftResetDisabled == FALSE
&& JOY_HELD_RAW(A_BUTTON) && (gMain.heldKeysRaw & A_BUTTON)
&& JOY_HELD_RAW(B_BUTTON) && (gMain.heldKeysRaw & B_START_SELECT) == B_START_SELECT)
&& JOY_HELD_RAW(START_BUTTON)
&& JOY_HELD_RAW(SELECT_BUTTON)) //The reset key combo A + B + START + SELECT
{ {
rfu_REQ_stopMode(); rfu_REQ_stopMode();
rfu_waitREQComplete(); rfu_waitREQComplete();
@ -262,7 +246,9 @@ static void ReadKeys(void)
if (keyInput != 0 && gMain.heldKeys == keyInput) if (keyInput != 0 && gMain.heldKeys == keyInput)
{ {
if (--gMain.keyRepeatCounter == 0) gMain.keyRepeatCounter--;
if (gMain.keyRepeatCounter == 0)
{ {
gMain.newAndRepeatedKeys = keyInput; gMain.newAndRepeatedKeys = keyInput;
gMain.keyRepeatCounter = gKeyRepeatContinueDelay; gMain.keyRepeatCounter = gKeyRepeatContinueDelay;
@ -341,7 +327,7 @@ static void VBlankIntr(void)
{ {
if (gWirelessCommType != 0) if (gWirelessCommType != 0)
RfuVSync(); RfuVSync();
else if (!gLinkVSyncDisabled) else if (gLinkVSyncDisabled == FALSE)
LinkVSync(); LinkVSync();
gMain.vblankCounter1++; gMain.vblankCounter1++;

View File

@ -1334,7 +1334,7 @@ static void InitMatchCallTextPrinter(int windowId, const u8 *str)
printerTemplate.currentY = 1; printerTemplate.currentY = 1;
printerTemplate.letterSpacing = 0; printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0; printerTemplate.lineSpacing = 0;
printerTemplate.style = 0; printerTemplate.unk = 0;
printerTemplate.fgColor = 10; printerTemplate.fgColor = 10;
printerTemplate.bgColor = 8; printerTemplate.bgColor = 8;
printerTemplate.shadowColor = 14; printerTemplate.shadowColor = 14;
@ -1773,7 +1773,7 @@ static int GetNumOwnedBadges(void)
static bool32 sub_8196D74(int matchCallId) static bool32 sub_8196D74(int matchCallId)
{ {
int dayCount; int dayCount;
u32 otId; int otId;
u16 easyChatWord; u16 easyChatWord;
int numRematchTrainersFought; int numRematchTrainersFought;
int var0, var1, var2; int var0, var1, var2;

View File

@ -25,7 +25,7 @@
#define STD_WINDOW_PALETTE_NUM 14 #define STD_WINDOW_PALETTE_NUM 14
#define STD_WINDOW_BASE_TILE_NUM 0x214 #define STD_WINDOW_BASE_TILE_NUM 0x214
struct MoveMenuInfoIcon struct MenuInfoIcon
{ {
u8 width; u8 width;
u8 height; u8 height;
@ -98,34 +98,34 @@ const u16 gUnknown_0860F0B0[] = INCBIN_U16("graphics/interface/860F0B0.gbapal");
const u8 sTextColors[] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY }; const u8 sTextColors[] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY };
// Table of move info icon offsets in graphics/interface_fr/menu.png // Table of move info icon offsets in graphics/interface_fr/menu.png
const struct MoveMenuInfoIcon gMoveMenuInfoIcons[] = static const struct MenuInfoIcon sMenuInfoIcons[] =
{ // { width, height, offset } { // { width, height, offset }
{ 12, 12, 0x00 }, // Unused { 12, 12, 0x00 }, // Unused
{ 32, 12, 0x20 }, // Normal icon [TYPE_NORMAL + 1] = { 32, 12, 0x20 },
{ 32, 12, 0x64 }, // Fight icon [TYPE_FIGHTING + 1] = { 32, 12, 0x64 },
{ 32, 12, 0x60 }, // Flying icon [TYPE_FLYING + 1] = { 32, 12, 0x60 },
{ 32, 12, 0x80 }, // Poison icon [TYPE_POISON + 1] = { 32, 12, 0x80 },
{ 32, 12, 0x48 }, // Ground icon [TYPE_GROUND + 1] = { 32, 12, 0x48 },
{ 32, 12, 0x44 }, // Rock icon [TYPE_ROCK + 1] = { 32, 12, 0x44 },
{ 32, 12, 0x6C }, // Bug icon [TYPE_BUG + 1] = { 32, 12, 0x6C },
{ 32, 12, 0x68 }, // Ghost icon [TYPE_GHOST + 1] = { 32, 12, 0x68 },
{ 32, 12, 0x88 }, // Steel icon [TYPE_STEEL + 1] = { 32, 12, 0x88 },
{ 32, 12, 0xA4 }, // ??? (Mystery) icon [TYPE_MYSTERY + 1] = { 32, 12, 0xA4 },
{ 32, 12, 0x24 }, // Fire icon [TYPE_FIRE + 1] = { 32, 12, 0x24 },
{ 32, 12, 0x28 }, // Water icon [TYPE_WATER + 1] = { 32, 12, 0x28 },
{ 32, 12, 0x2C }, // Grass icon [TYPE_GRASS + 1] = { 32, 12, 0x2C },
{ 32, 12, 0x40 }, // Electric icon [TYPE_ELECTRIC + 1] = { 32, 12, 0x40 },
{ 32, 12, 0x84 }, // Psychic icon [TYPE_PSYCHIC + 1] = { 32, 12, 0x84 },
{ 32, 12, 0x4C }, // Ice icon [TYPE_ICE + 1] = { 32, 12, 0x4C },
{ 32, 12, 0xA0 }, // Dragon icon [TYPE_DRAGON + 1] = { 32, 12, 0xA0 },
{ 32, 12, 0x8C }, // Dark icon [TYPE_DARK + 1] = { 32, 12, 0x8C },
{ 42, 12, 0xA8 }, // -Type- icon [MENU_INFO_ICON_TYPE] = { 42, 12, 0xA8 },
{ 42, 12, 0xC0 }, // -Power- icon [MENU_INFO_ICON_POWER] = { 42, 12, 0xC0 },
{ 42, 12, 0xC8 }, // -Accuracy- icon [MENU_INFO_ICON_ACCURACY] = { 42, 12, 0xC8 },
{ 42, 12, 0xE0 }, // -PP- icon [MENU_INFO_ICON_PP] = { 42, 12, 0xE0 },
{ 42, 12, 0xE8 }, // -Effect- icon [MENU_INFO_ICON_EFFECT] = { 42, 12, 0xE8 }, // Unused
{ 8, 8, 0xAE }, // Unused (Small white pokeball) [MENU_INFO_ICON_BALL_RED] = { 8, 8, 0xAE }, // For placed decorations in Secret Base
{ 8, 8, 0xAF }, // Unused (Small dark pokeball) [MENU_INFO_ICON_BALL_BLUE] = { 8, 8, 0xAF }, // For placed decorations in player's room
}; };
@ -180,7 +180,7 @@ u16 AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 speed
printer.currentY = 1; printer.currentY = 1;
printer.letterSpacing = 0; printer.letterSpacing = 0;
printer.lineSpacing = 0; printer.lineSpacing = 0;
printer.style = 0; printer.unk = 0;
printer.fgColor = fgColor; printer.fgColor = fgColor;
printer.bgColor = bgColor; printer.bgColor = bgColor;
printer.shadowColor = shadowColor; printer.shadowColor = shadowColor;
@ -1049,13 +1049,13 @@ s8 ProcessMenuInput_other(void)
{ {
return MENU_B_PRESSED; return MENU_B_PRESSED;
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
Menu_MoveCursor(-1); Menu_MoveCursor(-1);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
Menu_MoveCursor(1); Menu_MoveCursor(1);
@ -1075,17 +1075,17 @@ s8 Menu_ProcessInputNoWrapAround_other(void)
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return sMenu.cursorPos; return sMenu.cursorPos;
} }
if (JOY_NEW(B_BUTTON)) else if (JOY_NEW(B_BUTTON))
{ {
return MENU_B_PRESSED; return MENU_B_PRESSED;
} }
if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP)
{ {
if (oldPos != Menu_MoveCursorNoWrapAround(-1)) if (oldPos != Menu_MoveCursorNoWrapAround(-1))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN)
{ {
if (oldPos != Menu_MoveCursorNoWrapAround(1)) if (oldPos != Menu_MoveCursorNoWrapAround(1))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
@ -1130,7 +1130,7 @@ void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 l
printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND); printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND); printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW); printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW);
printer.style = GetFontAttribute(fontId, FONTATTR_STYLE); printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN);
printer.letterSpacing = letterSpacing; printer.letterSpacing = letterSpacing;
printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING); printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING);
printer.x = left; printer.x = left;
@ -1194,7 +1194,7 @@ void sub_8198AF8(const struct WindowTemplate *window, u8 fontId, u8 left, u8 top
printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND); printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND); printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW); printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW);
printer.style = GetFontAttribute(fontId, FONTATTR_STYLE); printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN);
printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING); printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING);
printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING); printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING);
@ -1252,7 +1252,7 @@ void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u
printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND); printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND); printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW); printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW);
printer.style = GetFontAttribute(fontId, FONTATTR_STYLE); printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN);
printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING); printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING);
printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING); printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING);
@ -1496,25 +1496,25 @@ s8 sub_81993D8(void)
{ {
return MENU_B_PRESSED; return MENU_B_PRESSED;
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE);
@ -1538,25 +1538,25 @@ s8 sub_8199484(void)
{ {
return MENU_B_PRESSED; return MENU_B_PRESSED;
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP)
{ {
if (oldPos != ChangeGridMenuCursorPosition(0, -1)) if (oldPos != ChangeGridMenuCursorPosition(0, -1))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN)
{ {
if (oldPos != ChangeGridMenuCursorPosition(0, 1)) if (oldPos != ChangeGridMenuCursorPosition(0, 1))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
{ {
if (oldPos != ChangeGridMenuCursorPosition(-1, 0)) if (oldPos != ChangeGridMenuCursorPosition(-1, 0))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
{ {
if (oldPos != ChangeGridMenuCursorPosition(1, 0)) if (oldPos != ChangeGridMenuCursorPosition(1, 0))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
@ -1616,7 +1616,7 @@ void sub_81995E4(u8 windowId, u8 itemCount, const struct MenuAction *strs, const
printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW);
printer.style = GetFontAttribute(1, FONTATTR_STYLE); printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN);
printer.letterSpacing = 0; printer.letterSpacing = 0;
printer.lineSpacing = 0; printer.lineSpacing = 0;
printer.x = 8; printer.x = 8;
@ -1650,7 +1650,7 @@ void CreateYesNoMenu(const struct WindowTemplate *window, u16 baseTileNum, u8 pa
printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW);
printer.style = GetFontAttribute(1, FONTATTR_STYLE); printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN);
printer.letterSpacing = 0; printer.letterSpacing = 0;
printer.lineSpacing = 0; printer.lineSpacing = 0;
@ -1681,7 +1681,7 @@ void sub_819983C(u8 windowId, u8 a4, u8 itemCount, u8 itemCount2, const struct M
printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW);
printer.style = GetFontAttribute(1, FONTATTR_STYLE); printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN);
printer.letterSpacing = 0; printer.letterSpacing = 0;
printer.lineSpacing = 0; printer.lineSpacing = 0;
@ -1949,7 +1949,7 @@ void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const
printer.currentY = printer.y; printer.currentY = printer.y;
printer.letterSpacing = GetFontAttribute(fontId, 2); printer.letterSpacing = GetFontAttribute(fontId, 2);
printer.lineSpacing = GetFontAttribute(fontId, 3); printer.lineSpacing = GetFontAttribute(fontId, 3);
printer.style = 0; printer.unk = 0;
printer.fgColor = color[1]; printer.fgColor = color[1];
printer.bgColor = color[0]; printer.bgColor = color[0];
printer.shadowColor = color[2]; printer.shadowColor = color[2];
@ -1970,7 +1970,7 @@ void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 left, u8 top, u8 le
printer.currentY = printer.y; printer.currentY = printer.y;
printer.letterSpacing = letterSpacing; printer.letterSpacing = letterSpacing;
printer.lineSpacing = lineSpacing; printer.lineSpacing = lineSpacing;
printer.style = 0; printer.unk = 0;
printer.fgColor = color[1]; printer.fgColor = color[1];
printer.bgColor = color[0]; printer.bgColor = color[0];
printer.shadowColor = color[2]; printer.shadowColor = color[2];
@ -1991,7 +1991,7 @@ void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 left
printer.currentY = top; printer.currentY = top;
printer.letterSpacing = letterSpacing; printer.letterSpacing = letterSpacing;
printer.lineSpacing = lineSpacing; printer.lineSpacing = lineSpacing;
printer.style = 0; printer.unk = 0;
printer.fgColor = GetFontAttribute(fontId, 5); printer.fgColor = GetFontAttribute(fontId, 5);
printer.bgColor = GetFontAttribute(fontId, 6); printer.bgColor = GetFontAttribute(fontId, 6);
@ -2119,9 +2119,9 @@ void ListMenuLoadStdPalAt(u8 palOffset, u8 palId)
LoadPalette(palette, palOffset, 0x20); LoadPalette(palette, palOffset, 0x20);
} }
void blit_move_info_icon(u8 windowId, u8 iconId, u16 x, u16 y) void BlitMenuInfoIcon(u8 windowId, u8 iconId, u16 x, u16 y)
{ {
BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + gMoveMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, gMoveMenuInfoIcons[iconId].width, gMoveMenuInfoIcons[iconId].height); BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + sMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, sMenuInfoIcons[iconId].width, sMenuInfoIcons[iconId].height);
} }
void BufferSaveMenuText(u8 textId, u8 *dest, u8 color) void BufferSaveMenuText(u8 textId, u8 *dest, u8 color)

View File

@ -183,7 +183,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1)
{ {
s16 valBefore = (*arg0); s16 valBefore = (*arg0);
if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP)
{ {
(*arg0)++; (*arg0)++;
if ((*arg0) > arg1) if ((*arg0) > arg1)
@ -199,7 +199,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1)
return TRUE; return TRUE;
} }
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN)
{ {
(*arg0)--; (*arg0)--;
if ((*arg0) <= 0) if ((*arg0) <= 0)
@ -215,7 +215,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1)
return TRUE; return TRUE;
} }
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT)
{ {
(*arg0) += 10; (*arg0) += 10;
if ((*arg0) > arg1) if ((*arg0) > arg1)
@ -231,7 +231,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1)
return TRUE; return TRUE;
} }
} }
else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT) else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT)
{ {
(*arg0) -= 10; (*arg0) -= 10;
if ((*arg0) <= 0) if ((*arg0) <= 0)

View File

@ -249,7 +249,7 @@ void sub_81D1D04(u8 a0)
sUnknown_0203CF48[a0] = 0xFF; sUnknown_0203CF48[a0] = 0xFF;
} }
static u8 sub_81D1D34(u8 a0) // unused static u8 sub_81D1D34(u8 a0)
{ {
return sUnknown_0203CF48[a0]; return sUnknown_0203CF48[a0];
} }
@ -893,73 +893,76 @@ static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId)
{ {
return StringCopyPadded(dst, gText_EggNickname, 0, 12); return StringCopyPadded(dst, gText_EggNickname, 0, 12);
} }
GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst);
StringGetEnd10(dst);
species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL);
if (boxId == TOTAL_BOXES_COUNT) // Party mon.
{
level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
gender = GetMonGender(&gPlayerParty[monId]);
}
else else
{ {
// Needed to match, feel free to remove. GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst);
boxId++, boxId--; StringGetEnd10(dst);
monId++, monId--; species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL);
if (boxId == TOTAL_BOXES_COUNT) // Party mon.
{
level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
gender = GetMonGender(&gPlayerParty[monId]);
}
else
{
// Needed to match, feel free to remove.
boxId++;boxId--;
monId++;monId--;
boxMon = GetBoxedMonPtr(boxId, monId); boxMon = GetBoxedMonPtr(boxId, monId);
gender = GetBoxMonGender(boxMon); gender = GetBoxMonGender(boxMon);
level = GetLevelFromBoxMonExp(boxMon); level = GetLevelFromBoxMonExp(boxMon);
} }
if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species])) if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species]))
gender = MON_GENDERLESS; gender = MON_GENDERLESS;
for (str = dst; *str != EOS; str++) for (str = dst; *str != EOS; str++)
; ;
*(str++) = EXT_CTRL_CODE_BEGIN; *(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_SKIP; *(str++) = EXT_CTRL_CODE_SKIP;
*(str++) = 60; *(str++) = 60;
switch (gender) switch (gender)
{ {
default: default:
*(str++) = CHAR_SPACE;
break;
case MON_MALE:
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_COLOR;
*(str++) = TEXT_COLOR_RED;
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_SHADOW;
*(str++) = TEXT_COLOR_LIGHT_RED;
*(str++) = CHAR_MALE;
break;
case MON_FEMALE:
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_COLOR;
*(str++) = TEXT_COLOR_GREEN;
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_SHADOW;
*(str++) = TEXT_COLOR_LIGHT_GREEN;
*(str++) = CHAR_FEMALE;
break;
}
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
*(str++) = TEXT_COLOR_BLUE;
*(str++) = TEXT_COLOR_TRANSPARENT;
*(str++) = TEXT_COLOR_LIGHT_BLUE;
*(str++) = CHAR_SLASH;
*(str++) = CHAR_EXTRA_SYMBOL;
*(str++) = CHAR_LV_2;
str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3);
*(str++) = CHAR_SPACE; *(str++) = CHAR_SPACE;
break; *str = EOS;
case MON_MALE:
*(str++) = EXT_CTRL_CODE_BEGIN; return str;
*(str++) = EXT_CTRL_CODE_COLOR;
*(str++) = TEXT_COLOR_RED;
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_SHADOW;
*(str++) = TEXT_COLOR_LIGHT_RED;
*(str++) = CHAR_MALE;
break;
case MON_FEMALE:
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_COLOR;
*(str++) = TEXT_COLOR_GREEN;
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_SHADOW;
*(str++) = TEXT_COLOR_LIGHT_GREEN;
*(str++) = CHAR_FEMALE;
break;
} }
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
*(str++) = TEXT_COLOR_BLUE;
*(str++) = TEXT_COLOR_TRANSPARENT;
*(str++) = TEXT_COLOR_LIGHT_BLUE;
*(str++) = CHAR_SLASH;
*(str++) = CHAR_EXTRA_SYMBOL;
*(str++) = CHAR_LV_2;
str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3);
*(str++) = CHAR_SPACE;
*str = EOS;
return str;
} }
// Buffers the string in src to dest up to n chars. If src is less than n chars, fill with spaces // Buffers the string in src to dest up to n chars. If src is less than n chars, fill with spaces

View File

@ -168,7 +168,7 @@ const struct PulseBlendSettings gMirageTowerPulseBlendSettings = {
.numColors = 15, .numColors = 15,
.delay = 5, .delay = 5,
.numFadeCycles = -1, .numFadeCycles = -1,
.maxBlendCoeff = -5, .maxBlendCoeff = 11,
.fadeType = 1, .fadeType = 1,
.restorePaletteOnUnload = FALSE, .restorePaletteOnUnload = FALSE,
.unk7_7 = 1, .unk7_7 = 1,
@ -412,9 +412,10 @@ void DoMirageTowerCeilingCrumble(void)
static void WaitCeilingCrumble(u8 taskId) static void WaitCeilingCrumble(u8 taskId)
{ {
u16 *data = (u16 *)gTasks[taskId].data; u16 *data = gTasks[taskId].data;
data[1]++;
// Either wait 1000 frames, or until all 16 crumble sprites and the one screen-shake task are completed. // Either wait 1000 frames, or until all 16 crumble sprites and the one screen-shake task are completed.
if (++data[1] == 1000 || data[0] == 17) if (data[1] == 1000 || data[0] == 17)
gTasks[taskId].func = FinishCeilingCrumbleTask; gTasks[taskId].func = FinishCeilingCrumbleTask;
} }
@ -690,7 +691,7 @@ static void DoFossilFallAndSink(u8 taskId)
if (gSprites[sUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy) if (gSprites[sUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy)
return; return;
DestroySprite(&gSprites[sUnknown_0203CF0C->spriteId]); DestroySprite(&gSprites[sUnknown_0203CF0C->spriteId]);
FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC); FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC);;
FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImage); FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImage);
FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImageTiles); FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImageTiles);
FREE_AND_SET_NULL(sUnknown_0203CF0C); FREE_AND_SET_NULL(sUnknown_0203CF0C);
@ -725,8 +726,8 @@ static void sub_81BF248(struct Sprite *sprite)
static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e) static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e)
{ {
u8 r5, r4, r0, r2;
u16 var, var2; u16 var, var2;
u8 r0, r5, r4, r2;
u8 r2_1, r4_1; u8 r2_1, r4_1;
u8 b2, c2; u8 b2, c2;
@ -738,25 +739,23 @@ static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e)
r4_1 = r4 & 7; r4_1 = r4 & 7;
r2_1 = r2 & 7; r2_1 = r2 & 7;
gUnknown_030012A8[2] = r4 & 7; //should be using r4_1, but that doesn't match
gUnknown_030012A8[2] = r4 & 7; //should be r4_1 but that doesn't match gUnknown_030012A8[3] = r2 & 7; //"
gUnknown_030012A8[3] = r2 & 7; //should be r2_1 but that doesn't match
r0 = r2 / 8; r0 = r2 / 8;
r5 = r4 / 8; r5 = r4 / 8;
gUnknown_030012A8[4] = r2 / 8; //should just be r0, but that doesn't match gUnknown_030012A8[4] = r2 / 8; //should be using r0, but that doesn't match
gUnknown_030012A8[5] = r4 / 8; //should be just r5 but that doesn't match gUnknown_030012A8[5] = r4 / 8; //should be using r5, but that doesn't match
var = (d / 8) * (r5 * 64) + (r0 * 64); var = (d / 8) * (r5 * 64) + (r0 * 64);
gUnknown_030012A8[6] = var; gUnknown_030012A8[6] = var;
var2 = var + ((r4_1 * 8) + r2_1); var2 = var + ((r4_1 * 8) + r2_1);
var2 /= 2; var2 /= 2;
gUnknown_030012A8[7] = var + ((r4_1 * 8) + r2_1); // should be var2 with var2 being divided by 2 AFTER this assignment, but that doesn't match. gUnknown_030012A8[7] = var + ((r4_1 * 8) + r2_1); //should be using var2 with var2 being divided afterwards, but that doesn't match
b2 = ((b % 2) ^ 1); b2 = ((b % 2) ^ 1);
c2 = (c << (b2 << 2)) | (15 << (((b2 ^ 1) << 2))); c2 = (c << (b2 << 2)) | 15 << (((b2 ^ 1) << 2));
a[var2 + (e * 32)] &= c2; a[var2 + (e * 32)] &= c2;
} }

View File

@ -1861,7 +1861,7 @@ u8 GetMonAilment(struct Pokemon *mon)
static void SetPartyMonsAllowedInMinigame(void) static void SetPartyMonsAllowedInMinigame(void)
{ {
s16 *ptr; u16 *ptr;
if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME) if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME)
{ {
@ -4325,9 +4325,13 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task)
u16 hp = 0; u16 hp = 0;
struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
u16 item = gSpecialVar_ItemId; u16 item = gSpecialVar_ItemId;
bool8 canHeal; bool8 canHeal, cannotUse;
if (NotUsingHPEVItemOnShedinja(mon, item)) if (NotUsingHPEVItemOnShedinja(mon, item) == FALSE)
{
cannotUse = TRUE;
}
else
{ {
canHeal = IsHPRecoveryItem(item); canHeal = IsHPRecoveryItem(item);
if (canHeal == TRUE) if (canHeal == TRUE)
@ -4336,51 +4340,50 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task)
if (hp == GetMonData(mon, MON_DATA_MAX_HP)) if (hp == GetMonData(mon, MON_DATA_MAX_HP))
canHeal = FALSE; canHeal = FALSE;
} }
if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0)) cannotUse = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0);
{
iTriedHonestlyIDid:
gPartyMenuUseExitCallback = FALSE;
PlaySE(SE_SELECT);
DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = task;
return;
}
} }
else
if (cannotUse != FALSE)
{ {
goto iTriedHonestlyIDid; //TODO: resolve this goto gPartyMenuUseExitCallback = FALSE;
} PlaySE(SE_SELECT);
gPartyMenuUseExitCallback = TRUE; DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
if (!IsItemFlute(item))
{
PlaySE(SE_USE_ITEM);
if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM)
RemoveBagItem(item, 1);
}
else
{
PlaySE(SE_GLASS_FLUTE);
}
SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible)
DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
if (canHeal == TRUE)
{
if (hp == 0)
AnimatePartySlot(gPartyMenu.slotId, 1);
PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage);
ResetHPTaskData(taskId, 0, hp);
return;
}
else
{
GetMonNickname(mon, gStringVar1);
GetMedicineItemEffectMessage(item);
DisplayPartyMenuMessage(gStringVar4, TRUE);
ScheduleBgCopyTilemapToVram(2); ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = task; gTasks[taskId].func = task;
} }
else
{
gPartyMenuUseExitCallback = TRUE;
if (!IsItemFlute(item))
{
PlaySE(SE_USE_ITEM);
if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM)
RemoveBagItem(item, 1);
}
else
{
PlaySE(SE_GLASS_FLUTE);
}
SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible)
DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
if (canHeal == TRUE)
{
if (hp == 0)
AnimatePartySlot(gPartyMenu.slotId, 1);
PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage);
ResetHPTaskData(taskId, 0, hp);
return;
}
else
{
GetMonNickname(mon, gStringVar1);
GetMedicineItemEffectMessage(item);
DisplayPartyMenuMessage(gStringVar4, TRUE);
ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = task;
}
}
} }
#define tState data[0] #define tState data[0]
@ -5050,9 +5053,9 @@ static void Task_DisplayLevelUpStatsPg2(u8 taskId)
static void DisplayLevelUpStatsPg1(u8 taskId) static void DisplayLevelUpStatsPg1(u8 taskId)
{ {
u16 *arrayPtr = (u16*)sPartyMenuInternal->data; s16 *arrayPtr = sPartyMenuInternal->data;
arrayPtr[12] = (u16)CreateLevelUpStatsWindow(); arrayPtr[12] = CreateLevelUpStatsWindow();
DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
CopyWindowToVram(arrayPtr[12], 2); CopyWindowToVram(arrayPtr[12], 2);
ScheduleBgCopyTilemapToVram(2); ScheduleBgCopyTilemapToVram(2);
@ -5060,7 +5063,7 @@ static void DisplayLevelUpStatsPg1(u8 taskId)
static void DisplayLevelUpStatsPg2(u8 taskId) static void DisplayLevelUpStatsPg2(u8 taskId)
{ {
u16 *arrayPtr = (u16 *)sPartyMenuInternal->data; s16 *arrayPtr = sPartyMenuInternal->data;
DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
CopyWindowToVram(arrayPtr[12], 2); CopyWindowToVram(arrayPtr[12], 2);

View File

@ -327,7 +327,7 @@ void PlayerPC(void)
static void InitPlayerPCMenu(u8 taskId) static void InitPlayerPCMenu(u8 taskId)
{ {
s16 *data; u16 *data;
struct WindowTemplate windowTemplate; struct WindowTemplate windowTemplate;
data = gTasks[taskId].data; data = gTasks[taskId].data;
@ -346,7 +346,7 @@ static void InitPlayerPCMenu(u8 taskId)
static void PlayerPCProcessMenuInput(u8 taskId) static void PlayerPCProcessMenuInput(u8 taskId)
{ {
s16 *data; u16 *data;
s8 inputOptionId; s8 inputOptionId;
data = gTasks[taskId].data; data = gTasks[taskId].data;
@ -435,7 +435,7 @@ static void PlayerPC_TurnOff(u8 taskId)
static void InitItemStorageMenu(u8 taskId, u8 var) static void InitItemStorageMenu(u8 taskId, u8 var)
{ {
s16 *data; u16 *data;
struct WindowTemplate windowTemplate; struct WindowTemplate windowTemplate;
data = gTasks[taskId].data; data = gTasks[taskId].data;
@ -548,7 +548,7 @@ static void ItemStorage_Toss(u8 taskId)
static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss) static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss)
{ {
s16 *data = gTasks[taskId].data; u16 *data = gTasks[taskId].data;
data[3] = toss; data[3] = toss;
sub_816B4DC(taskId); sub_816B4DC(taskId);
@ -581,9 +581,9 @@ static void ItemStorage_SetItemAndMailCount(u8 taskId)
static void sub_816B4DC(u8 taskId) static void sub_816B4DC(u8 taskId)
{ {
u16 *data = (u16 *)gTasks[taskId].data; u16 *data = gTasks[taskId].data;
ClearStdWindowAndFrameToTransparent((u8)data[4], FALSE); ClearStdWindowAndFrameToTransparent(data[4], FALSE);
ClearWindowTilemap(data[4]); ClearWindowTilemap(data[4]);
RemoveWindow(data[4]); RemoveWindow(data[4]);
ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(0);
@ -1380,7 +1380,7 @@ static void ItemStorage_DoItemToss(u8 taskId)
data = gTasks[taskId].data; data = gTasks[taskId].data;
b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove); b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove);
if (ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId) == 0) if (!ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId))
{ {
CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3); ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3);

View File

@ -430,7 +430,7 @@ static const struct ListMenuTemplate sPokeblockListMenuTemplate =
// code // code
void OpenPokeblockCase(u8 caseId, void (*callback)(void)) void OpenPokeblockCase(u8 caseId, void (*callback)(void))
{ {
sPokeblockMenu = Alloc(sizeof(struct PokeblockMenuStruct)); sPokeblockMenu = Alloc(sizeof(*sPokeblockMenu));
sPokeblockMenu->caseId = caseId; sPokeblockMenu->caseId = caseId;
sPokeblockMenu->callbackOnUse = NULL; sPokeblockMenu->callbackOnUse = NULL;
sPokeblockMenu->unkTaskId = 0xFF; sPokeblockMenu->unkTaskId = 0xFF;

View File

@ -171,16 +171,16 @@ struct PokedexView
u16 ownCount; u16 ownCount;
u16 monSpriteIds[MAX_MONS_ON_SCREEN]; u16 monSpriteIds[MAX_MONS_ON_SCREEN];
u16 selectedMonSpriteId; u16 selectedMonSpriteId;
s16 pokeBallRotationStep; u16 pokeBallRotationStep;
s16 pokeBallRotationBackup; u16 pokeBallRotationBackup;
u8 pokeBallRotation; u8 pokeBallRotation;
u8 initialVOffset; u8 initialVOffset;
u8 scrollTimer; u8 scrollTimer;
u8 scrollDirection; u8 scrollDirection;
s16 listVOffset; s16 listVOffset;
s16 listMovingVOffset; s16 listMovingVOffset;
s16 scrollMonIncrement; u16 scrollMonIncrement;
s16 maxScrollTimer; u16 maxScrollTimer;
u16 scrollSpeed; u16 scrollSpeed;
u16 unkArr1[4]; // Cleared, never read u16 unkArr1[4]; // Cleared, never read
u8 filler[8]; u8 filler[8];
@ -2597,7 +2597,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored)
CreateMonListEntry(1, selectedMon, ignored); CreateMonListEntry(1, selectedMon, ignored);
PlaySE(SE_DEX_SCROLL); PlaySE(SE_DEX_SCROLL);
} }
else if (JOY_HELD(DPAD_DOWN) && (selectedMon < sPokedexView->pokemonListCount - 1)) else if ((JOY_HELD(DPAD_DOWN)) && (selectedMon < sPokedexView->pokemonListCount - 1))
{ {
scrollDir = 2; scrollDir = 2;
selectedMon = GetNextPosition(0, selectedMon, 0, sPokedexView->pokemonListCount - 1); selectedMon = GetNextPosition(0, selectedMon, 0, sPokedexView->pokemonListCount - 1);
@ -2605,7 +2605,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored)
CreateMonListEntry(2, selectedMon, ignored); CreateMonListEntry(2, selectedMon, ignored);
PlaySE(SE_DEX_SCROLL); PlaySE(SE_DEX_SCROLL);
} }
else if (JOY_NEW(DPAD_LEFT) && (selectedMon > 0)) else if ((JOY_NEW(DPAD_LEFT)) && (selectedMon > 0))
{ {
startingPos = selectedMon; startingPos = selectedMon;
@ -3399,8 +3399,8 @@ static void Task_HandleInfoScreenInput(u8 taskId)
} }
return; return;
} }
if ((JOY_NEW(DPAD_LEFT) if (((JOY_NEW(DPAD_LEFT))
|| (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
&& sPokedexView->selectedScreen > 0) && sPokedexView->selectedScreen > 0)
{ {
sPokedexView->selectedScreen--; sPokedexView->selectedScreen--;
@ -3408,8 +3408,8 @@ static void Task_HandleInfoScreenInput(u8 taskId)
PlaySE(SE_DEX_PAGE); PlaySE(SE_DEX_PAGE);
return; return;
} }
if ((JOY_NEW(DPAD_RIGHT) if (((JOY_NEW(DPAD_RIGHT))
|| (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) || ((JOY_NEW(R_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
&& sPokedexView->selectedScreen < CANCEL_SCREEN) && sPokedexView->selectedScreen < CANCEL_SCREEN)
{ {
sPokedexView->selectedScreen++; sPokedexView->selectedScreen++;
@ -3656,8 +3656,8 @@ static void Task_HandleCryScreenInput(u8 taskId)
PlaySE(SE_DEX_PAGE); PlaySE(SE_DEX_PAGE);
return; return;
} }
if (JOY_NEW(DPAD_RIGHT) if ((JOY_NEW(DPAD_RIGHT))
|| (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) || ((JOY_NEW(R_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
{ {
if (!sPokedexListItem->owned) if (!sPokedexListItem->owned)
{ {
@ -4167,13 +4167,12 @@ static void PrintMonHeight(u16 height, u8 left, u8 top)
static void PrintMonWeight(u16 weight, u8 left, u8 top) static void PrintMonWeight(u16 weight, u8 left, u8 top)
{ {
u8 buffer[16]; u8 buffer[16];
u8 i;
bool8 output; bool8 output;
u8 i;
u32 lbs = (weight * 100000) / 4536; u32 lbs = (weight * 100000) / 4536;
if (lbs % 10u >= 5) if (lbs % 10u >= 5)
lbs += 10; lbs += 10;
i = 0; i = 0;
output = FALSE; output = FALSE;
@ -4228,19 +4227,13 @@ const u8 *GetPokedexCategoryName(u16 dexNum) // unused
return gPokedexEntries[dexNum].categoryName; return gPokedexEntries[dexNum].categoryName;
} }
enum
{
HEIGHT,
WEIGHT,
};
u16 GetPokedexHeightWeight(u16 dexNum, u8 data) u16 GetPokedexHeightWeight(u16 dexNum, u8 data)
{ {
switch (data) switch (data)
{ {
case HEIGHT: case 0: // height
return gPokedexEntries[dexNum].height; return gPokedexEntries[dexNum].height;
case WEIGHT: case 1: // weight
return gPokedexEntries[dexNum].weight; return gPokedexEntries[dexNum].weight;
default: default:
return 1; return 1;
@ -5029,7 +5022,7 @@ static void Task_HandleSearchMenuInput(u8 taskId)
CopyWindowToVram(0, 2); CopyWindowToVram(0, 2);
CopyBgTilemapBufferToVram(3); CopyBgTilemapBufferToVram(3);
} }
if (JOY_NEW(DPAD_RIGHT) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF) if ((JOY_NEW(DPAD_RIGHT)) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][1]; gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][1];
@ -5115,9 +5108,9 @@ static void Task_SelectSearchMenuItem(u8 taskId)
u16 *scrollOffset; u16 *scrollOffset;
DrawOrEraseSearchParameterBox(FALSE); DrawOrEraseSearchParameterBox(FALSE);
menuItem = (u16)gTasks[taskId].tMenuItem; menuItem = gTasks[taskId].tMenuItem;
cursorPos = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; cursorPos = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos];
scrollOffset = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset];
gTasks[taskId].tCursorPos = *cursorPos; gTasks[taskId].tCursorPos = *cursorPos;
gTasks[taskId].tScrollOffset = *scrollOffset; gTasks[taskId].tScrollOffset = *scrollOffset;
PrintSearchParameterText(taskId); PrintSearchParameterText(taskId);
@ -5236,8 +5229,9 @@ static void Task_ExitSearchWaitForFade(u8 taskId)
void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width) void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width)
{ {
u16 i, temp; //This would have been better as a pointer but here we are u16 i;
u32 ptr = (u32)GetBgTilemapBuffer(3); //This should be a pointer, but this only matches as a u32. u16 temp; //should be a pointer, but does not match as one
u32 ptr = (u32)GetBgTilemapBuffer(3); //same as above
for (i = 0; i < width; i++) for (i = 0; i < width; i++)
{ {
@ -5245,7 +5239,7 @@ void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width)
temp &= 0x0fff; temp &= 0x0fff;
temp |= (flags << 12); temp |= (flags << 12);
*(u16 *)(ptr + (y + 0) * 64 + (x + i) * 2) = temp; *(u16 *)(ptr + (y + 0) * 64 + (x + i) * 2) = temp;
temp = *(u16 *)(ptr + (y + 1) * 64 + (x + i) * 2); temp = *(u16 *)(ptr + (y + 1) * 64 + (x + i) * 2);
temp &= 0x0fff; temp &= 0x0fff;
temp |= (flags << 12); temp |= (flags << 12);
@ -5451,8 +5445,8 @@ static void PrintSearchParameterText(u8 taskId)
const struct SearchOptionText *texts = sSearchOptions[gTasks[taskId].tMenuItem].texts; const struct SearchOptionText *texts = sSearchOptions[gTasks[taskId].tMenuItem].texts;
const u16 *cursorPos = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos]; const u16 *cursorPos = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos];
const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset]; const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset];
u16 i;
u16 i, j; u16 j;
ClearSearchParameterBoxText(); ClearSearchParameterBoxText();
@ -5541,7 +5535,8 @@ static bool8 SearchParamCantScrollUp(u8 taskId)
if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset != 0) if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset != 0)
return FALSE; return FALSE;
return TRUE; else
return TRUE;
} }
static bool8 SearchParamCantScrollDown(u8 taskId) static bool8 SearchParamCantScrollDown(u8 taskId)
@ -5552,7 +5547,8 @@ static bool8 SearchParamCantScrollDown(u8 taskId)
if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset < lastOption - MAX_SEARCH_PARAM_CURSOR_POS) if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset < lastOption - MAX_SEARCH_PARAM_CURSOR_POS)
return FALSE; return FALSE;
return TRUE; else
return TRUE;
} }
#define sTaskId data[0] #define sTaskId data[0]

View File

@ -69,7 +69,7 @@ EWRAM_DATA u8 gEnemyPartyCount = 0;
EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {0}; EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {0};
EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0}; EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0};
EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0}; EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0};
EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL, NULL}; EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL};
// const rom data // const rom data
#include "data/battle_moves.h" #include "data/battle_moves.h"
@ -5773,7 +5773,7 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId)
u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex) u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
{ {
u16 retVal; u16 retVal;
// Dont modify HP, Accuracy, or Evasion by nature // Don't modify HP, Accuracy, or Evasion by nature
if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS) if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS)
{ {
return n; return n;
@ -6834,8 +6834,6 @@ static bool8 ShouldSkipFriendshipChange(void)
return FALSE; return FALSE;
} }
#define MAGIC_NUMBER 0xA3
static void sub_806F160(struct Unknown_806F160_Struct* structPtr) static void sub_806F160(struct Unknown_806F160_Struct* structPtr)
{ {
u16 i, j; u16 i, j;
@ -6884,7 +6882,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1)
structPtr->field_0_0 = 7; structPtr->field_0_0 = 7;
structPtr->field_0_1 = 7; structPtr->field_0_1 = 7;
structPtr->field_1 = 4; structPtr->field_1 = 4;
structPtr->size = 1; structPtr->field_3_0 = 1;
structPtr->field_3_1 = 2; structPtr->field_3_1 = 2;
break; break;
case 0: case 0:
@ -6892,12 +6890,12 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1)
structPtr->field_0_0 = 4; structPtr->field_0_0 = 4;
structPtr->field_0_1 = 4; structPtr->field_0_1 = 4;
structPtr->field_1 = 4; structPtr->field_1 = 4;
structPtr->size = 1; structPtr->field_3_0 = 1;
structPtr->field_3_1 = 0; structPtr->field_3_1 = 0;
break; break;
} }
structPtr->bytes = AllocZeroed(structPtr->size * 0x800 * 4 * structPtr->field_0_0); structPtr->bytes = AllocZeroed(structPtr->field_3_0 * 0x800 * 4 * structPtr->field_0_0);
structPtr->byteArrays = AllocZeroed(structPtr->field_0_0 * 32); structPtr->byteArrays = AllocZeroed(structPtr->field_0_0 * 32);
if (structPtr->bytes == NULL || structPtr->byteArrays == NULL) if (structPtr->bytes == NULL || structPtr->byteArrays == NULL)
{ {
@ -6906,7 +6904,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1)
else else
{ {
for (i = 0; i < structPtr->field_0_0; i++) for (i = 0; i < structPtr->field_0_0; i++)
structPtr->byteArrays[i] = structPtr->bytes + (structPtr->size * (i << 0xD)); structPtr->byteArrays[i] = structPtr->bytes + (structPtr->field_3_0 * (i << 0xD));
} }
structPtr->templates = AllocZeroed(sizeof(struct SpriteTemplate) * structPtr->field_0_0); structPtr->templates = AllocZeroed(sizeof(struct SpriteTemplate) * structPtr->field_0_0);
@ -6925,8 +6923,8 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1)
case 2: case 2:
sub_806F1FC(structPtr); sub_806F1FC(structPtr);
break; break;
case 1:
case 0: case 0:
case 1:
default: default:
sub_806F160(structPtr); sub_806F160(structPtr);
break; break;
@ -6955,7 +6953,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1)
} }
else else
{ {
structPtr->magic = MAGIC_NUMBER; structPtr->magic = 0xA3;
gUnknown_020249B4[id] = structPtr; gUnknown_020249B4[id] = structPtr;
} }
@ -6966,12 +6964,12 @@ void sub_806F47C(u8 id)
{ {
struct Unknown_806F160_Struct *structPtr; struct Unknown_806F160_Struct *structPtr;
id &= 1; id %= 2;
structPtr = gUnknown_020249B4[id]; structPtr = gUnknown_020249B4[id];
if (structPtr == NULL) if (structPtr == NULL)
return; return;
if (structPtr->magic != MAGIC_NUMBER) if (structPtr->magic != 0xA3)
{ {
memset(structPtr, 0, sizeof(struct Unknown_806F160_Struct)); memset(structPtr, 0, sizeof(struct Unknown_806F160_Struct));
} }
@ -6995,13 +6993,15 @@ void sub_806F47C(u8 id)
u8 *sub_806F4F8(u8 id, u8 arg1) u8 *sub_806F4F8(u8 id, u8 arg1)
{ {
struct Unknown_806F160_Struct *structPtr = gUnknown_020249B4[id % 2]; struct Unknown_806F160_Struct *structPtr = gUnknown_020249B4[id % 2];
if (structPtr->magic != MAGIC_NUMBER) if (structPtr->magic != 0xA3)
{ {
return NULL; return NULL;
} }
else
if (arg1 >= structPtr->field_0_0) {
arg1 = 0; if (arg1 >= structPtr->field_0_0)
arg1 = 0;
return structPtr->byteArrays[arg1]; return structPtr->byteArrays[arg1];
}
} }

View File

@ -2883,10 +2883,9 @@ static void sub_8181C2C(struct Sprite *sprite)
} }
else else
{ {
s32 var = sUnknown_03001240[sprite->data[0]].field_8;
const s16 var = sUnknown_03001240[sprite->data[0]].field_8; sprite->pos2.x = var * ((counter % 128) * 8) / 128 + 8 * -var;
sprite->pos2.x = var * ((counter % 128) * 8) / 128 + 8 * -var; //Should be - 8 * var instead of + 8 * -var, but that doesn't match
sprite->pos2.y = -(Sin(counter % 128, 8)); sprite->pos2.y = -(Sin(counter % 128, 8));
} }

View File

@ -405,7 +405,7 @@ void StartPokemonJump(u16 partyIndex, MainCallback callback)
if (gReceivedRemoteLinkPlayers) if (gReceivedRemoteLinkPlayers)
{ {
gUnknown_02022CFC = Alloc(sizeof(struct PokemonJump1)); gUnknown_02022CFC = Alloc(sizeof(*gUnknown_02022CFC));
if (gUnknown_02022CFC) if (gUnknown_02022CFC)
{ {
ResetTasks(); ResetTasks();

View File

@ -2156,7 +2156,7 @@ static void Cb2_EnterPSS(u8 boxOption)
{ {
ResetTasks(); ResetTasks();
sCurrentBoxOption = boxOption; sCurrentBoxOption = boxOption;
sPSSData = Alloc(sizeof(struct PokemonStorageSystemData)); sPSSData = Alloc(sizeof(*sPSSData));
if (sPSSData == NULL) if (sPSSData == NULL)
{ {
SetMainCallback2(Cb2_ExitPSS); SetMainCallback2(Cb2_ExitPSS);
@ -2176,7 +2176,7 @@ static void Cb2_EnterPSS(u8 boxOption)
static void Cb2_ReturnToPSS(void) static void Cb2_ReturnToPSS(void)
{ {
ResetTasks(); ResetTasks();
sPSSData = Alloc(sizeof(struct PokemonStorageSystemData)); sPSSData = Alloc(sizeof(*sPSSData));
if (sPSSData == NULL) if (sPSSData == NULL)
{ {
SetMainCallback2(Cb2_ExitPSS); SetMainCallback2(Cb2_ExitPSS);
@ -7440,7 +7440,7 @@ static u8 HandleInput_OnButtons(void)
sPSSData->field_CD7 = 1; sPSSData->field_CD7 = 1;
break; break;
} }
if (JOY_REPEAT(DPAD_DOWN | START_BUTTON)) if (JOY_REPEAT(DPAD_DOWN | START_BUTTON))
{ {
retVal = 1; retVal = 1;

View File

@ -1504,11 +1504,11 @@ static void Task_HandleInput(u8 taskId)
{ {
ChangeSummaryPokemon(taskId, 1); ChangeSummaryPokemon(taskId, 1);
} }
else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) else if ((JOY_NEW(DPAD_LEFT)) || GetLRKeysPressed() == MENU_L_PRESSED)
{ {
ChangePage(taskId, -1); ChangePage(taskId, -1);
} }
else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) else if ((JOY_NEW(DPAD_RIGHT)) || GetLRKeysPressed() == MENU_R_PRESSED)
{ {
ChangePage(taskId, 1); ChangePage(taskId, 1);
} }

View File

@ -315,7 +315,7 @@ static void Task_RunLoopedTask_LinkMode(u8 taskId)
void CB2_InitPokeNav(void) void CB2_InitPokeNav(void)
{ {
gPokenavResources = Alloc(sizeof(struct PokenavResources)); gPokenavResources = Alloc(sizeof(*gPokenavResources));
if (gPokenavResources == NULL) if (gPokenavResources == NULL)
{ {
SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); SetMainCallback2(CB2_ReturnToFieldWithOpenMenu);
@ -343,7 +343,7 @@ static void CB2_InitPokenavForTutorial(void)
if (gPaletteFade.active) if (gPaletteFade.active)
return; return;
gPokenavResources = Alloc(sizeof(struct PokenavResources)); gPokenavResources = Alloc(sizeof(*gPokenavResources));
if (gPokenavResources == NULL) if (gPokenavResources == NULL)
{ {
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);

View File

@ -184,26 +184,27 @@ static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr)
{ {
if (JOY_REPEAT(DPAD_UP)) if (JOY_REPEAT(DPAD_UP))
return CONDITION_SEARCH_FUNC_MOVE_UP; return CONDITION_SEARCH_FUNC_MOVE_UP;
if (JOY_REPEAT(DPAD_DOWN)) else if (JOY_REPEAT(DPAD_DOWN))
return CONDITION_SEARCH_FUNC_MOVE_DOWN; return CONDITION_SEARCH_FUNC_MOVE_DOWN;
if (JOY_NEW(DPAD_LEFT)) else if (JOY_NEW(DPAD_LEFT))
return CONDITION_SEARCH_FUNC_PAGE_UP; return CONDITION_SEARCH_FUNC_PAGE_UP;
if (JOY_NEW(DPAD_RIGHT)) else if (JOY_NEW(DPAD_RIGHT))
return CONDITION_SEARCH_FUNC_PAGE_DOWN; return CONDITION_SEARCH_FUNC_PAGE_DOWN;
if (JOY_NEW(B_BUTTON)) else if (JOY_NEW(B_BUTTON))
{ {
structPtr->isPartyCondition = 0; structPtr->isPartyCondition = 0;
structPtr->callback = ReturnToConditionSearchList; structPtr->callback = ReturnToConditionSearchList;
return CONDITION_SEARCH_FUNC_EXIT; return CONDITION_SEARCH_FUNC_EXIT;
} }
if (JOY_NEW(A_BUTTON)) else if (JOY_NEW(A_BUTTON))
{ {
structPtr->monList->currIndex = GetSelectedPokenavListIndex(); structPtr->monList->currIndex = GetSelectedPokenavListIndex();
structPtr->isPartyCondition = 1; structPtr->isPartyCondition = 1;
structPtr->callback = OpenConditionGraphFromSearchList; structPtr->callback = OpenConditionGraphFromSearchList;
return CONDITION_SEARCH_FUNC_SELECT_MON; return CONDITION_SEARCH_FUNC_SELECT_MON;
} }
return CONDITION_SEARCH_FUNC_NONE; else
return CONDITION_SEARCH_FUNC_NONE;
} }
static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr) static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr)

View File

@ -438,7 +438,6 @@ static u32 LoopedTask_SlideMenuHeaderDown(s32 a0)
ChangeBgY(0, 0, 0); ChangeBgY(0, 0, 0);
return LT_FINISH; return LT_FINISH;
} }
return LT_PAUSE; return LT_PAUSE;
} }
@ -459,9 +458,11 @@ void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes)
{ {
break; break;
} }
else
index = (index * 16) + 0x100; {
CopyPaletteIntoBufferUnfaded(current->data, index, 0x20); index = (index * 16) + 0x100;
CopyPaletteIntoBufferUnfaded(current->data, index, 0x20);
}
} }
} }

View File

@ -32,53 +32,53 @@ static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*);
static void SetMenuInputHandler(struct Pokenav1Struct *state); static void SetMenuInputHandler(struct Pokenav1Struct *state);
// Number of entries - 1 for that menu type // Number of entries - 1 for that menu type
static const u8 sLastCursorPositions[] = static const u8 sLastCursorPositions[] =
{ {
[POKENAV_MENU_TYPE_DEFAULT] = 2, [POKENAV_MENU_TYPE_DEFAULT] = 2,
[POKENAV_MENU_TYPE_UNLOCK_MC] = 3, [POKENAV_MENU_TYPE_UNLOCK_MC] = 3,
[POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = 4, [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = 4,
[POKENAV_MENU_TYPE_CONDITION] = 2, [POKENAV_MENU_TYPE_CONDITION] = 2,
[POKENAV_MENU_TYPE_CONDITION_SEARCH] = 5 [POKENAV_MENU_TYPE_CONDITION_SEARCH] = 5
}; };
static const u8 sMenuItems[][6] = static const u8 sMenuItems[][6] =
{ {
[POKENAV_MENU_TYPE_DEFAULT] = [POKENAV_MENU_TYPE_DEFAULT] =
{ {
POKENAV_MENUITEM_MAP, POKENAV_MENUITEM_MAP,
POKENAV_MENUITEM_CONDITION, POKENAV_MENUITEM_CONDITION,
[2 ... 5] = POKENAV_MENUITEM_SWITCH_OFF [2 ... 5] = POKENAV_MENUITEM_SWITCH_OFF
}, },
[POKENAV_MENU_TYPE_UNLOCK_MC] = [POKENAV_MENU_TYPE_UNLOCK_MC] =
{ {
POKENAV_MENUITEM_MAP, POKENAV_MENUITEM_MAP,
POKENAV_MENUITEM_CONDITION, POKENAV_MENUITEM_CONDITION,
POKENAV_MENUITEM_MATCH_CALL, POKENAV_MENUITEM_MATCH_CALL,
[3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF
}, },
[POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] =
{ {
POKENAV_MENUITEM_MAP, POKENAV_MENUITEM_MAP,
POKENAV_MENUITEM_CONDITION, POKENAV_MENUITEM_CONDITION,
POKENAV_MENUITEM_MATCH_CALL, POKENAV_MENUITEM_MATCH_CALL,
POKENAV_MENUITEM_RIBBONS, POKENAV_MENUITEM_RIBBONS,
[4 ... 5] = POKENAV_MENUITEM_SWITCH_OFF [4 ... 5] = POKENAV_MENUITEM_SWITCH_OFF
}, },
[POKENAV_MENU_TYPE_CONDITION] = [POKENAV_MENU_TYPE_CONDITION] =
{ {
POKENAV_MENUITEM_CONDITION_PARTY, POKENAV_MENUITEM_CONDITION_PARTY,
POKENAV_MENUITEM_CONDITION_SEARCH, POKENAV_MENUITEM_CONDITION_SEARCH,
POKENAV_MENUITEM_CONDITION_CANCEL, POKENAV_MENUITEM_CONDITION_CANCEL,
[3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF
}, },
[POKENAV_MENU_TYPE_CONDITION_SEARCH] = [POKENAV_MENU_TYPE_CONDITION_SEARCH] =
{ {
POKENAV_MENUITEM_CONDITION_SEARCH_COOL, POKENAV_MENUITEM_CONDITION_SEARCH_COOL,
POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY, POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY,
POKENAV_MENUITEM_CONDITION_SEARCH_CUTE, POKENAV_MENUITEM_CONDITION_SEARCH_CUTE,
POKENAV_MENUITEM_CONDITION_SEARCH_SMART, POKENAV_MENUITEM_CONDITION_SEARCH_SMART,
POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH, POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH,
POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL
}, },
}; };
@ -87,13 +87,13 @@ static u8 GetPokenavMainMenuType(void)
u8 menuType = POKENAV_MENU_TYPE_DEFAULT; u8 menuType = POKENAV_MENU_TYPE_DEFAULT;
if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV)) if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV))
{ {
menuType = POKENAV_MENU_TYPE_UNLOCK_MC; menuType = POKENAV_MENU_TYPE_UNLOCK_MC;
if (FlagGet(FLAG_SYS_RIBBON_GET)) if (FlagGet(FLAG_SYS_RIBBON_GET))
menuType = POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS; menuType = POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS;
} }
return menuType; return menuType;
} }
@ -102,7 +102,7 @@ bool32 PokenavCallback_Init_MainMenuCursorOnMap(void)
struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct));
if (!state) if (!state)
return FALSE; return FALSE;
state->menuType = GetPokenavMainMenuType(); state->menuType = GetPokenavMainMenuType();
state->cursorPos = POKENAV_MENUITEM_MAP; state->cursorPos = POKENAV_MENUITEM_MAP;
state->currMenuItem = POKENAV_MENUITEM_MAP; state->currMenuItem = POKENAV_MENUITEM_MAP;
@ -116,7 +116,7 @@ bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void)
struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct));
if (!state) if (!state)
return FALSE; return FALSE;
state->menuType = GetPokenavMainMenuType(); state->menuType = GetPokenavMainMenuType();
state->cursorPos = POKENAV_MENUITEM_MATCH_CALL; state->cursorPos = POKENAV_MENUITEM_MATCH_CALL;
state->currMenuItem = POKENAV_MENUITEM_MATCH_CALL; state->currMenuItem = POKENAV_MENUITEM_MATCH_CALL;
@ -130,7 +130,7 @@ bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void)
struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct));
if (!state) if (!state)
return FALSE; return FALSE;
state->menuType = GetPokenavMainMenuType(); state->menuType = GetPokenavMainMenuType();
state->cursorPos = POKENAV_MENUITEM_RIBBONS; state->cursorPos = POKENAV_MENUITEM_RIBBONS;
state->currMenuItem = POKENAV_MENUITEM_RIBBONS; state->currMenuItem = POKENAV_MENUITEM_RIBBONS;
@ -143,7 +143,7 @@ bool32 PokenavCallback_Init_ConditionMenu(void)
struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct));
if (!state) if (!state)
return FALSE; return FALSE;
state->menuType = POKENAV_MENU_TYPE_CONDITION; state->menuType = POKENAV_MENU_TYPE_CONDITION;
state->cursorPos = 0; //party state->cursorPos = 0; //party
state->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY; state->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY;
@ -157,7 +157,7 @@ bool32 PokenavCallback_Init_ConditionSearchMenu(void)
struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct));
if (!state) if (!state)
return FALSE; return FALSE;
state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH;
state->cursorPos = GetSelectedConditionSearch(); state->cursorPos = GetSelectedConditionSearch();
state->currMenuItem = state->cursorPos + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; state->currMenuItem = state->cursorPos + POKENAV_MENUITEM_CONDITION_SEARCH_COOL;
@ -250,7 +250,7 @@ static u32 HandleMainMenuInput(struct Pokenav1Struct *state)
return POKENAV_MENU_FUNC_EXIT; return POKENAV_MENU_FUNC_EXIT;
} }
} }
if (JOY_NEW(B_BUTTON)) if (JOY_NEW(B_BUTTON))
return POKENAV_MENU_FUNC_EXIT; return POKENAV_MENU_FUNC_EXIT;
@ -262,7 +262,7 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state)
{ {
if (UpdateMenuCursorPos(state)) if (UpdateMenuCursorPos(state))
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
if (sMenuItems[state->menuType][state->cursorPos] == POKENAV_MENUITEM_MATCH_CALL) if (sMenuItems[state->menuType][state->cursorPos] == POKENAV_MENUITEM_MATCH_CALL)
@ -277,13 +277,13 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state)
return POKENAV_MENU_FUNC_NONE; return POKENAV_MENU_FUNC_NONE;
} }
} }
if (JOY_NEW(B_BUTTON)) if (JOY_NEW(B_BUTTON))
{ {
PlaySE(SE_FAILURE); PlaySE(SE_FAILURE);
return POKENAV_MENU_FUNC_NONE; return POKENAV_MENU_FUNC_NONE;
} }
return POKENAV_MENU_FUNC_NONE; return POKENAV_MENU_FUNC_NONE;
} }
@ -292,7 +292,7 @@ static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state)
{ {
if (UpdateMenuCursorPos(state)) if (UpdateMenuCursorPos(state))
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
u32 menuItem = sMenuItems[state->menuType][state->cursorPos]; u32 menuItem = sMenuItems[state->menuType][state->cursorPos];
@ -342,7 +342,7 @@ static u32 HandleConditionMenuInput(struct Pokenav1Struct *state)
{ {
if (UpdateMenuCursorPos(state)) if (UpdateMenuCursorPos(state))
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
switch (sMenuItems[state->menuType][state->cursorPos]) switch (sMenuItems[state->menuType][state->cursorPos])
@ -386,7 +386,7 @@ static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state)
{ {
if (UpdateMenuCursorPos(state)) if (UpdateMenuCursorPos(state))
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
u8 menuItem = sMenuItems[state->menuType][state->cursorPos]; u8 menuItem = sMenuItems[state->menuType][state->cursorPos];

View File

@ -712,18 +712,17 @@ static u8 sub_80E7A9C(struct DayCareMail *rmMail)
return rmMail->message.itemId; return rmMail->message.itemId;
} }
static void ExchangeMail(struct RecordMixingDayCareMail *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1) static void sub_80E7AA4(struct RecordMixingDayCareMail *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1)
{ {
struct DayCareMail buffer; struct DayCareMail buffer;
struct RecordMixingDayCareMail *mail1; struct RecordMixingDayCareMail *mail1;
struct RecordMixingDayCareMail *mail2; struct RecordMixingDayCareMail *mail2;
mail1 = (void *)src + recordSize * idxs[which0][0]; mail1 = (void *)src + recordSize * idxs[which0][0];
buffer = mail1->mail[idxs[which0][1]]; memcpy(&buffer, &mail1->mail[idxs[which0][1]], sizeof(struct DayCareMail));
mail2 = (void *)src + recordSize * idxs[which1][0]; mail2 = (void *)src + recordSize * idxs[which1][0];
mail1->mail[idxs[which0][1]] = mail2->mail[idxs[which1][1]]; memcpy(&mail1->mail[idxs[which0][1]], &mail2->mail[idxs[which1][1]], sizeof(struct DayCareMail));
mail2->mail[idxs[which1][1]] = buffer; memcpy(&mail2->mail[idxs[which1][1]], &buffer, sizeof(struct DayCareMail));
} }
static void sub_80E7B2C(const u8 *src) static void sub_80E7B2C(const u8 *src)
@ -865,22 +864,22 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r
} }
else if (sp1c[i][0] == TRUE && sp1c[i][1] == TRUE) else if (sp1c[i][0] == TRUE && sp1c[i][1] == TRUE)
{ {
u8 mail1, mail2; u32 var1, var2;
sp24[j][0] = i; sp24[j][0] = i;
mail1 = sub_80E7A9C(&_src->mail[0]); var1 = sub_80E7A9C(&_src->mail[0]);
mail2 = sub_80E7A9C(&_src->mail[1]); var2 = sub_80E7A9C(&_src->mail[1]);
if (!(mail1 || mail2) || (mail1 && mail2)) //Logical (not bitwise) XOR. Should be ((mail1 || mail2) && !(mail1 && mail2)), but that doesn't match. if (!(var1 || var2) || (var1 && var2))
{ {
sp24[j][1] = Random2() % 2; sp24[j][1] = Random2() % 2;
} }
else if (mail1 && !mail2) else if (var1 && !var2)
{ {
sp24[j][1] = 0; sp24[j][1] = 0;
} }
else if (!mail1 && mail2) else if (!var1 && var2)
{ {
sp24[j][1] = 1; sp24[j][1] = 1;
} }
j++; j++;
} }
@ -896,27 +895,27 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r
switch (sp34) switch (sp34)
{ {
case 2: case 2:
ExchangeMail(src, recordSize, sp24, 0, 1); sub_80E7AA4(src, recordSize, sp24, 0, 1);
break; break;
case 3: case 3:
which0 = gUnknown_0858CFB8[tableId][0]; which0 = gUnknown_0858CFB8[tableId][0];
which1 = gUnknown_0858CFB8[tableId][1]; which1 = gUnknown_0858CFB8[tableId][1];
ExchangeMail(src, recordSize, sp24, which0, which1); sub_80E7AA4(src, recordSize, sp24, which0, which1);
break; break;
case 4: case 4:
ptr = sp24; ptr = sp24;
which0 = gUnknown_0858CFBE[tableId][0]; which0 = gUnknown_0858CFBE[tableId][0];
which1 = gUnknown_0858CFBE[tableId][1]; which1 = gUnknown_0858CFBE[tableId][1];
ExchangeMail(src, recordSize, ptr, which0, which1); sub_80E7AA4(src, recordSize, ptr, which0, which1);
which0 = gUnknown_0858CFBE[tableId][2]; which0 = gUnknown_0858CFBE[tableId][2];
which1 = gUnknown_0858CFBE[tableId][3]; which1 = gUnknown_0858CFBE[tableId][3];
ExchangeMail(src, recordSize, ptr, which0, which1); sub_80E7AA4(src, recordSize, ptr, which0, which1);
break; break;
} }
_src = (void *)src + which * recordSize; _src = (void *)src + which * recordSize;
gSaveBlock1Ptr->daycare.mons[0].mail = _src->mail[0]; memcpy(&gSaveBlock1Ptr->daycare.mons[0].mail, &_src->mail[0], sizeof(struct DayCareMail));
gSaveBlock1Ptr->daycare.mons[1].mail = _src->mail[1]; memcpy(&gSaveBlock1Ptr->daycare.mons[1].mail, &_src->mail[1], sizeof(struct DayCareMail));
SeedRng(oldSeed); SeedRng(oldSeed);
} }

View File

@ -13,7 +13,7 @@
#include "link.h" #include "link.h"
#include "constants/game_stat.h" #include "constants/game_stat.h"
static u16 CalculateChecksum(const void *data, u16 size); static u16 CalculateChecksum(void *data, u16 size);
static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section); static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section);
static u8 GetSaveValidStatus(const struct SaveSectionLocation *location); static u8 GetSaveValidStatus(const struct SaveSectionLocation *location);
static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location); static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location);
@ -621,7 +621,7 @@ static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section)
return TRUE; return TRUE;
} }
static u16 CalculateChecksum(const void *data, u16 size) static u16 CalculateChecksum(void *data, u16 size)
{ {
u16 i; u16 i;
u32 checksum = 0; u32 checksum = 0;
@ -648,7 +648,7 @@ static void UpdateSaveAddresses(void)
gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size;
} }
for (; i <= SECTOR_ID_PKMN_STORAGE_END; i++) //i = SECTOR_ID_PKMN_STORAGE_START; in the initialization clause does not match for (; i <= SECTOR_ID_PKMN_STORAGE_END; i++) //setting i to SECTOR_ID_PKMN_STORAGE_START does not match
{ {
gRamSaveSectionLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSectionOffsets[i].toAdd; gRamSaveSectionLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSectionOffsets[i].toAdd;
gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size;

View File

@ -788,8 +788,8 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx)
{ {
u8 mapGroup = ScriptReadByte(ctx); u8 mapGroup = ScriptReadByte(ctx);
u8 mapNum = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx);
s16 x; u16 x;
s16 y; u16 y;
PlayerGetDestCoords(&x, &y); PlayerGetDestCoords(&x, &y);
if (mapGroup == 0xFF && mapNum == 0xFF) if (mapGroup == 0xFF && mapNum == 0xFF)

View File

@ -26,9 +26,9 @@ void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTable
s32 i; s32 i;
ctx->mode = 0; ctx->mode = 0;
ctx->scriptPtr = NULL; ctx->scriptPtr = 0;
ctx->stackDepth = 0; ctx->stackDepth = 0;
ctx->nativePtr = NULL; ctx->nativePtr = 0;
ctx->cmdTable = cmdTable; ctx->cmdTable = cmdTable;
ctx->cmdTableEnd = cmdTableEnd; ctx->cmdTableEnd = cmdTableEnd;
@ -55,7 +55,7 @@ void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void))
void StopScript(struct ScriptContext *ctx) void StopScript(struct ScriptContext *ctx)
{ {
ctx->mode = 0; ctx->mode = 0;
ctx->scriptPtr = NULL; ctx->scriptPtr = 0;
} }
bool8 RunScriptCommand(struct ScriptContext *ctx) bool8 RunScriptCommand(struct ScriptContext *ctx)

View File

@ -963,7 +963,7 @@ static void HandleRegistryMenuInput(u8 taskId)
data = gTasks[taskId].data; data = gTasks[taskId].data;
input = ListMenu_ProcessInput(data[5]); input = ListMenu_ProcessInput(data[5]);
ListMenuGetScrollAndRow(data[5], (u16 *)&data[2], (u16 *)&data[1]); ListMenuGetScrollAndRow(data[5], &data[2], &data[1]);
switch (input) switch (input)
{ {
case LIST_NOTHING_CHOSEN: case LIST_NOTHING_CHOSEN:
@ -1044,10 +1044,10 @@ void DeleteRegistry_Yes_Callback(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
ClearDialogWindowAndFrame(0, 0); ClearDialogWindowAndFrame(0, 0);
DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); DestroyListMenuTask(data[5], &data[2], &data[1]);
gSaveBlock1Ptr->secretBases[data[4]].registryStatus = 0; gSaveBlock1Ptr->secretBases[data[4]].registryStatus = 0;
BuildRegistryMenuItems(taskId); BuildRegistryMenuItems(taskId);
sub_812225C((u16 *)&data[2], (u16 *)&data[1], (u16)data[3], (u16)data[0]); sub_812225C(&data[2], &data[1], data[3], data[0]);
FinalizeRegistryMenu(taskId); FinalizeRegistryMenu(taskId);
gTasks[taskId].func = HandleRegistryMenuInput; gTasks[taskId].func = HandleRegistryMenuInput;
} }
@ -1061,7 +1061,7 @@ static void DeleteRegistry_No(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
ClearDialogWindowAndFrame(0, 0); ClearDialogWindowAndFrame(0, 0);
DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); DestroyListMenuTask(data[5], &data[2], &data[1]);
FinalizeRegistryMenu(taskId); FinalizeRegistryMenu(taskId);
gTasks[taskId].func = HandleRegistryMenuInput; gTasks[taskId].func = HandleRegistryMenuInput;
} }

View File

@ -252,8 +252,8 @@ struct SlotMachine
/*0x0E*/ s16 payout; /*0x0E*/ s16 payout;
/*0x10*/ s16 netCoinLoss; // coins lost to machine (but never goes below 0) /*0x10*/ s16 netCoinLoss; // coins lost to machine (but never goes below 0)
/*0x12*/ s16 bet; /*0x12*/ s16 bet;
/*0x14*/ s16 reelTimePixelOffset; /*0x14*/ s16 reeltimePixelOffset;
/*0x16*/ s16 reelTimePosition; /*0x16*/ s16 reeltimePosition;
/*0x18*/ s16 currReel; /*0x18*/ s16 currReel;
/*0x1A*/ s16 reelIncrement; // speed of reel /*0x1A*/ s16 reelIncrement; // speed of reel
/*0x1C*/ s16 reelPixelOffsets[NUM_REELS]; /*0x1C*/ s16 reelPixelOffsets[NUM_REELS];
@ -584,7 +584,7 @@ static const u16 *const sDigitalDisplay_Pal;
static const s16 sInitialReelPositions[NUM_REELS][2]; static const s16 sInitialReelPositions[NUM_REELS][2];
static const u8 sLuckyFlagProbabilities_Top3[][6]; static const u8 sLuckyFlagProbabilities_Top3[][6];
static const u8 sLuckyFlagProbabilities_NotTop3[][6]; static const u8 sLuckyFlagProbabilities_NotTop3[][6];
static const u8 sReelTimeProbabilities_UnluckyGame[][17]; static const u8 sReeltimeProbabilities_UnluckyGame[][17];
static const u8 sReelTimeProbabilities_LuckyGame[][17]; static const u8 sReelTimeProbabilities_LuckyGame[][17];
static const u8 sSymToMatch[]; static const u8 sSymToMatch[];
static const u8 sReelTimeTags[]; static const u8 sReelTimeTags[];
@ -682,7 +682,7 @@ static const struct WindowTemplate sWindowTemplate_InfoBox =
.baseBlock = 1 .baseBlock = 1
}; };
static const u8 sColors_ReelTimeHelp[] = {TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; static const u8 sColors_ReeltimeHelp[] = {TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY};
static bool8 (*const sSlotActions[])(struct Task *task) = static bool8 (*const sSlotActions[])(struct Task *task) =
{ {
@ -985,7 +985,7 @@ static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback exitCallb
{ {
struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)]; struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)];
task->data[0] = slotMachineIndex; task->data[0] = slotMachineIndex;
StoreWordInTwoHalfwords((u16 *)&task->data[1], (intptr_t)exitCallback); StoreWordInTwoHalfwords(&task->data[1], (intptr_t)exitCallback);
} }
@ -1744,13 +1744,13 @@ static u8 AttemptsAtLuckyFlags_NotTop3(void)
static u8 GetReelTimeProbability(u8 reelTimeDraw) static u8 GetReelTimeProbability(u8 reelTimeDraw)
{ {
if (!sSlotMachine->luckyGame) if (sSlotMachine->luckyGame == FALSE)
return sReelTimeProbabilities_UnluckyGame[reelTimeDraw][sSlotMachine->pikaPower]; return sReeltimeProbabilities_UnluckyGame[reelTimeDraw][sSlotMachine->pikaPower];
else
return sReelTimeProbabilities_LuckyGame[reelTimeDraw][sSlotMachine->pikaPower]; return sReelTimeProbabilities_LuckyGame[reelTimeDraw][sSlotMachine->pikaPower];
} }
static void GetReelTimeDraw(void) static void GetReeltimeDraw(void)
{ {
u8 rval; u8 rval;
s16 reelTimeDraw; s16 reelTimeDraw;
@ -1773,13 +1773,15 @@ static bool8 ShouldReelTimeMachineExplode(u16 i)
u16 rval = Random() & 0xff; u16 rval = Random() & 0xff;
if (rval < sReelTimeExplodeProbability[i]) if (rval < sReelTimeExplodeProbability[i])
return TRUE; return TRUE;
return FALSE; else
return FALSE;
} }
static u16 SlowReelSpeed(void) static u16 SlowReelSpeed(void)
{ {
u8 i = 0; u8 i = 0;
u8 rval, value; u8 rval;
u8 value;
if (sSlotMachine->netCoinLoss >= 300) if (sSlotMachine->netCoinLoss >= 300)
i = 4; i = 4;
else if (sSlotMachine->netCoinLoss >= 250) else if (sSlotMachine->netCoinLoss >= 250)
@ -1909,7 +1911,8 @@ static bool8 IsFinalTask_RunAwardPayoutActions(void)
{ {
if (FindTaskIdByFunc(RunAwardPayoutActions) == TAIL_SENTINEL) if (FindTaskIdByFunc(RunAwardPayoutActions) == TAIL_SENTINEL)
return TRUE; return TRUE;
return FALSE; else
return FALSE;
} }
static void RunAwardPayoutActions(u8 taskId) static void RunAwardPayoutActions(u8 taskId)
@ -1997,7 +2000,7 @@ static u8 GetTag(u8 reel, s16 offset)
static u8 GetNearbyReelTimeTag(s16 n) static u8 GetNearbyReelTimeTag(s16 n)
{ {
s16 newPosition = (sSlotMachine->reelTimePosition + n) % 6; s16 newPosition = (sSlotMachine->reeltimePosition + n) % 6;
if (newPosition < 0) if (newPosition < 0)
newPosition += 6; newPosition += 6;
return sReelTimeTags[newPosition]; return sReelTimeTags[newPosition];
@ -2023,22 +2026,22 @@ s16 AdvanceSlotReelToNextTag(u8 reelIndex, s16 value)
return offset; return offset;
} }
static void AdvanceReelTimeReel(s16 value) static void AdvanceReeltimeReel(s16 value)
{ {
sSlotMachine->reelTimePixelOffset += value; sSlotMachine->reeltimePixelOffset += value;
sSlotMachine->reelTimePixelOffset %= 120; sSlotMachine->reeltimePixelOffset %= 120;
sSlotMachine->reelTimePosition = 6 - sSlotMachine->reelTimePixelOffset / 20; sSlotMachine->reeltimePosition = 6 - sSlotMachine->reeltimePixelOffset / 20;
} }
s16 AdvanceReelTimeReelToNextTag(s16 value) s16 AdvanceReeltimeReelToNextTag(s16 value)
{ {
s16 offset = sSlotMachine->reelTimePixelOffset % 20; s16 offset = sSlotMachine->reeltimePixelOffset % 20;
if (offset != 0) if (offset != 0)
{ {
if (offset < value) if (offset < value)
value = offset; value = offset;
AdvanceReelTimeReel(value); AdvanceReeltimeReel(value);
offset = sSlotMachine->reelTimePixelOffset % 20; offset = sSlotMachine->reeltimePixelOffset % 20;
} }
return offset; return offset;
} }
@ -3077,8 +3080,8 @@ static void Task_ReelTime(u8 taskId)
static void ReelTime_Init(struct Task *task) static void ReelTime_Init(struct Task *task)
{ {
sSlotMachine->reelTimeSpinsLeft = 0; sSlotMachine->reelTimeSpinsLeft = 0;
sSlotMachine->reelTimePixelOffset = 0; sSlotMachine->reeltimePixelOffset = 0;
sSlotMachine->reelTimePosition = 0; sSlotMachine->reeltimePosition = 0;
task->tState++; task->tState++;
task->data[1] = 0; task->data[1] = 0;
task->data[2] = 30; task->data[2] = 30;
@ -3093,7 +3096,7 @@ static void ReelTime_Init(struct Task *task)
CreateReelTimeNumberSprites(); CreateReelTimeNumberSprites();
CreateReelTimeShadowSprites(); CreateReelTimeShadowSprites();
CreateReelTimeNumberGapSprite(); CreateReelTimeNumberGapSprite();
GetReelTimeDraw(); GetReeltimeDraw();
StopMapMusic(); StopMapMusic();
PlayNewMapMusic(MUS_ROULETTE); PlayNewMapMusic(MUS_ROULETTE);
} }
@ -3116,12 +3119,12 @@ static void ReelTime_WindowEnter(struct Task *task)
task->tState++; task->tState++;
task->data[3] = 0; task->data[3] = 0;
} }
AdvanceReelTimeReel(task->data[4] >> 8); AdvanceReeltimeReel(task->data[4] >> 8);
} }
static void ReelTime_WaitStartPikachu(struct Task *task) static void ReelTime_WaitStartPikachu(struct Task *task)
{ {
AdvanceReelTimeReel(task->data[4] >> 8); AdvanceReeltimeReel(task->data[4] >> 8);
if (++task->data[5] >= 60) if (++task->data[5] >= 60)
{ {
task->tState++; task->tState++;
@ -3141,7 +3144,7 @@ static void ReelTime_PikachuSpeedUp1(struct Task *task)
memcpy(reelTimeBoltDelays, sReelTimeBoltDelays, sizeof(sReelTimeBoltDelays)); memcpy(reelTimeBoltDelays, sReelTimeBoltDelays, sizeof(sReelTimeBoltDelays));
memcpy(pikachuAuraFlashDelays, sPikachuAuraFlashDelays, sizeof(sPikachuAuraFlashDelays)); memcpy(pikachuAuraFlashDelays, sPikachuAuraFlashDelays, sizeof(sPikachuAuraFlashDelays));
AdvanceReelTimeReel(task->data[4] >> 8); AdvanceReeltimeReel(task->data[4] >> 8);
// gradually slow down the reel // gradually slow down the reel
task->data[4] -= 4; task->data[4] -= 4;
i = 4 - (task->data[4] >> 8); i = 4 - (task->data[4] >> 8);
@ -3159,7 +3162,7 @@ static void ReelTime_PikachuSpeedUp1(struct Task *task)
static void ReelTime_PikachuSpeedUp2(struct Task *task) static void ReelTime_PikachuSpeedUp2(struct Task *task)
{ {
AdvanceReelTimeReel(task->data[4] >> 8); AdvanceReeltimeReel(task->data[4] >> 8);
if (++task->data[5] >= 80) if (++task->data[5] >= 80)
{ {
task->tState++; task->tState++;
@ -3171,7 +3174,7 @@ static void ReelTime_PikachuSpeedUp2(struct Task *task)
static void ReelTime_WaitReel(struct Task *task) static void ReelTime_WaitReel(struct Task *task)
{ {
AdvanceReelTimeReel(task->data[4] >> 8); AdvanceReeltimeReel(task->data[4] >> 8);
task->data[4] = (u8)task->data[4] + 0x80; task->data[4] = (u8)task->data[4] + 0x80;
if (++task->data[5] >= 80) if (++task->data[5] >= 80)
{ {
@ -3182,7 +3185,7 @@ static void ReelTime_WaitReel(struct Task *task)
static void ReelTime_CheckExplode(struct Task *task) static void ReelTime_CheckExplode(struct Task *task)
{ {
AdvanceReelTimeReel(task->data[4] >> 8); AdvanceReeltimeReel(task->data[4] >> 8);
task->data[4] = (u8)task->data[4] + 0x40; task->data[4] = (u8)task->data[4] + 0x40;
if (++task->data[5] >= 40) if (++task->data[5] >= 40)
{ {
@ -3206,19 +3209,19 @@ static void ReelTime_CheckExplode(struct Task *task)
static void ReelTime_LandOnOutcome(struct Task *task) static void ReelTime_LandOnOutcome(struct Task *task)
{ {
s16 reelTimePixelOffset = sSlotMachine->reelTimePixelOffset % 20; s16 reeltimePixelOffset = sSlotMachine->reeltimePixelOffset % 20;
if (reelTimePixelOffset) if (reeltimePixelOffset)
{ {
reelTimePixelOffset = AdvanceReelTimeReelToNextTag(task->data[4] >> 8); reeltimePixelOffset = AdvanceReeltimeReelToNextTag(task->data[4] >> 8);
task->data[4] = (u8)task->data[4] + 0x40; task->data[4] = (u8)task->data[4] + 0x40;
} }
else if (GetNearbyReelTimeTag(1) != sSlotMachine->reelTimeDraw) else if (GetNearbyReelTimeTag(1) != sSlotMachine->reelTimeDraw)
{ {
AdvanceReelTimeReel(task->data[4] >> 8); AdvanceReeltimeReel(task->data[4] >> 8);
reelTimePixelOffset = sSlotMachine->reelTimePixelOffset % 20; reeltimePixelOffset = sSlotMachine->reeltimePixelOffset % 20;
task->data[4] = (u8)task->data[4] + 0x40; task->data[4] = (u8)task->data[4] + 0x40;
} }
if (reelTimePixelOffset == 0 && GetNearbyReelTimeTag(1) == sSlotMachine->reelTimeDraw) if (reeltimePixelOffset == 0 && GetNearbyReelTimeTag(1) == sSlotMachine->reelTimeDraw)
{ {
task->data[4] = 0; // stop moving task->data[4] = 0; // stop moving
task->tState++; task->tState++;
@ -3441,7 +3444,7 @@ static void InfoBox_DrawWindow(struct Task *task)
static void InfoBox_AddText(struct Task *task) static void InfoBox_AddText(struct Task *task)
{ {
AddTextPrinterParameterized3(1, 1, 2, 5, sColors_ReelTimeHelp, 0, gText_ReelTimeHelp); AddTextPrinterParameterized3(1, 1, 2, 5, sColors_ReeltimeHelp, 0, gText_ReelTimeHelp);
CopyWindowToVram(1, 3); CopyWindowToVram(1, 3);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
task->tState++; task->tState++;
@ -3771,7 +3774,7 @@ static void CreateReelTimeNumberSprites(void)
static void SpriteCB_ReelTimeNumbers(struct Sprite *sprite) static void SpriteCB_ReelTimeNumbers(struct Sprite *sprite)
{ {
s16 r0 = (u16)(sSlotMachine->reelTimePixelOffset + sprite->data[7]); s16 r0 = (u16)(sSlotMachine->reeltimePixelOffset + sprite->data[7]);
r0 %= 40; r0 %= 40;
sprite->pos1.y = r0 + 59; sprite->pos1.y = r0 + 59;
StartSpriteAnimIfDifferent(sprite, GetNearbyReelTimeTag(r0 / 20)); StartSpriteAnimIfDifferent(sprite, GetNearbyReelTimeTag(r0 / 20));
@ -4827,7 +4830,7 @@ static const u8 sLuckyFlagProbabilities_NotTop3[][6] = {
{40, 40, 35, 35, 40, 40} {40, 40, 35, 35, 40, 40}
}; };
static const u8 sReelTimeProbabilities_UnluckyGame[][17] = { static const u8 sReeltimeProbabilities_UnluckyGame[][17] = {
{243, 243, 243, 80, 80, 80, 80, 40, 40, 40, 40, 40, 40, 5, 5, 5, 5}, {243, 243, 243, 80, 80, 80, 80, 40, 40, 40, 40, 40, 40, 5, 5, 5, 5},
{ 5, 5, 5, 150, 150, 150, 150, 130, 130, 130, 130, 130, 130, 100, 100, 100, 5}, { 5, 5, 5, 150, 150, 150, 150, 130, 130, 130, 130, 130, 130, 100, 100, 100, 5},
{ 4, 4, 4, 20, 20, 20, 20, 80, 80, 80, 80, 80, 80, 100, 100, 100, 40}, { 4, 4, 4, 20, 20, 20, 20, 80, 80, 80, 80, 80, 80, 100, 100, 100, 40},

View File

@ -462,7 +462,7 @@ static bool32 InitStartMenuStep(void)
sInitStartMenuData[0]++; sInitStartMenuData[0]++;
break; break;
case 4: case 4:
if (PrintStartMenuActions((s8 *)&sInitStartMenuData[1], 2)) if (PrintStartMenuActions(&sInitStartMenuData[1], 2))
sInitStartMenuData[0]++; sInitStartMenuData[0]++;
break; break;
case 5: case 5:

View File

@ -355,7 +355,7 @@ static void SetUpDataStruct(void)
{ {
if (sHillData == NULL) if (sHillData == NULL)
{ {
sHillData = AllocZeroed(sizeof(struct TrHillStruct2)); sHillData = AllocZeroed(sizeof(*sHillData));
sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F; sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F;
CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor)); CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor));
nullsub_2(); nullsub_2();

View File

@ -603,7 +603,7 @@ static void sub_80B44C8(u8 taskId)
struct ObjectEvent *objEvent; struct ObjectEvent *objEvent;
// another objEvent loaded into by loadword? // another objEvent loaded into by loadword?
LoadWordFromTwoHalfwords((u16*)&task->data[1], (u32 *)&objEvent); LoadWordFromTwoHalfwords(&task->data[1], (u32 *)&objEvent);
if (!task->data[7]) if (!task->data[7])
{ {
ObjectEventClearHeldMovement(objEvent); ObjectEventClearHeldMovement(objEvent);
@ -624,7 +624,7 @@ static void sub_80B44C8(u8 taskId)
void sub_80B4578(struct ObjectEvent *var) void sub_80B4578(struct ObjectEvent *var)
{ {
StoreWordInTwoHalfwords((u16 *)&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var); StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var);
} }
void EndTrainerApproach(void) void EndTrainerApproach(void)

View File

@ -32,6 +32,7 @@
#include "decoration.h" #include "decoration.h"
#include "secret_base.h" #include "secret_base.h"
#include "tv.h" #include "tv.h"
#include "pokeball.h"
#include "data.h" #include "data.h"
#include "constants/battle_frontier.h" #include "constants/battle_frontier.h"
#include "constants/contest.h" #include "constants/contest.h"
@ -963,7 +964,7 @@ void GabbyAndTyBeforeInterview(void)
} }
if (!gBattleResults.usedMasterBall) if (!gBattleResults.usedMasterBall)
{ {
for (i = 0; i < 11; i ++) for (i = 0; i < POKEBALL_COUNT - 1; i ++)
{ {
if (gBattleResults.catchAttempts[i]) if (gBattleResults.catchAttempts[i])
{ {
@ -1135,7 +1136,7 @@ void PutPokemonTodayCaughtOnAir(void)
sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows); sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_POKEMON_TODAY_CAUGHT, FALSE) != TRUE) if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_POKEMON_TODAY_CAUGHT, FALSE) != TRUE)
{ {
for (i = 0; i < 11; i ++) for (i = 0; i < POKEBALL_COUNT - 1; i ++)
{ {
ct += gBattleResults.catchAttempts[i]; ct += gBattleResults.catchAttempts[i];
} }
@ -1152,7 +1153,7 @@ void PutPokemonTodayCaughtOnAir(void)
} }
else else
{ {
for (i = 0; i < 11; i ++) for (i = 0; i < POKEBALL_COUNT - 1; i ++)
{ {
ct += gBattleResults.catchAttempts[i]; ct += gBattleResults.catchAttempts[i];
} }
@ -1203,7 +1204,7 @@ void PutPokemonTodayFailedOnTheAir(void)
if (!rbernoulli(1, 1)) if (!rbernoulli(1, 1))
{ {
for (i = 0, ct = 0; i < 11; i ++) for (i = 0, ct = 0; i < POKEBALL_COUNT - 1; i ++)
{ {
ct += gBattleResults.catchAttempts[i]; ct += gBattleResults.catchAttempts[i];
} }
@ -2228,7 +2229,7 @@ void sub_80EE184(void)
show->breakingNews.kind = TVSHOW_BREAKING_NEWS; show->breakingNews.kind = TVSHOW_BREAKING_NEWS;
show->breakingNews.active = FALSE; show->breakingNews.active = FALSE;
balls = 0; balls = 0;
for (i = 0; i < 11; i ++) for (i = 0; i < POKEBALL_COUNT - 1; i ++)
{ {
balls += gBattleResults.catchAttempts[i]; balls += gBattleResults.catchAttempts[i];
} }

View File

@ -3753,7 +3753,7 @@ static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str
printerTemplate.y = y; printerTemplate.y = y;
printerTemplate.currentX = x; printerTemplate.currentX = x;
printerTemplate.currentY = y; printerTemplate.currentY = y;
printerTemplate.style = 0; printerTemplate.unk = 0;
gTextFlags.useAlternateDownArrow = FALSE; gTextFlags.useAlternateDownArrow = FALSE;
switch (colorIdx) switch (colorIdx)
@ -4076,14 +4076,14 @@ static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname
UR_AddTextPrinterParameterized(windowId, 1, uname, 8, y, colorIdx); UR_AddTextPrinterParameterized(windowId, 1, uname, 8, y, colorIdx);
if (species == SPECIES_EGG) if (species == SPECIES_EGG)
{ {
UR_AddTextPrinterParameterized(windowId, 1, sText_EggTrade, 0x44, y, colorIdx); UR_AddTextPrinterParameterized(windowId, 1, sText_EggTrade, 68, y, colorIdx);
} }
else else
{ {
blit_move_info_icon(windowId, type + 1, 0x44, y); BlitMenuInfoIcon(windowId, type + 1, 68, y);
UR_AddTextPrinterParameterized(windowId, 1, gSpeciesNames[species], 0x76, y, colorIdx); UR_AddTextPrinterParameterized(windowId, 1, gSpeciesNames[species], 118, y, colorIdx);
ConvertIntToDecimalStringN(levelStr, level, STR_CONV_MODE_RIGHT_ALIGN, 3); ConvertIntToDecimalStringN(levelStr, level, STR_CONV_MODE_RIGHT_ALIGN, 3);
UR_AddTextPrinterParameterized(windowId, 1, levelStr, 0xC6, y, colorIdx); UR_AddTextPrinterParameterized(windowId, 1, levelStr, 198, y, colorIdx);
} }
} }

View File

@ -2121,7 +2121,7 @@ static void Task_ReceiveChatMessage(u8 taskId)
static bool8 TryAllocDisplay(void) static bool8 TryAllocDisplay(void)
{ {
sDisplay = Alloc(sizeof(struct UnionRoomChatDisplay)); sDisplay = Alloc(sizeof(*sDisplay));
if (sDisplay && TryAllocSprites()) if (sDisplay && TryAllocSprites())
{ {
ResetBgsAndClearDma3BusyFlags(0); ResetBgsAndClearDma3BusyFlags(0);

View File

@ -118,8 +118,8 @@ static u8 GetLetterTableId(u8 letter)
static bool32 TryCalculateWallpaper(u16* backgroundClr, u16 *foregroundClr, u8 *iconId, u8 *patternId, u16 trainerId, u8 *phrase) static bool32 TryCalculateWallpaper(u16* backgroundClr, u16 *foregroundClr, u8 *iconId, u8 *patternId, u16 trainerId, u8 *phrase)
{ {
s32 i; s32 i;
u8 array[9]; ALIGNED(2) u8 array[12];
u8 charsByTableId[15]; u8 charsByTableId[16];
u16 *ptr; u16 *ptr;
if (StringLength(phrase) != 15) if (StringLength(phrase) != 15)

View File

@ -237,7 +237,7 @@ static void PrintHeaderTexts(void)
FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(1, PIXEL_FILL(0));
FillWindowPixelBuffer(2, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0));
WCSS_AddTextPrinterParameterized(0, 1, sHeaderTexts[0], GetStringCenterAlignXOffset(1, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN); WCSS_AddTextPrinterParameterized(0, 1, sHeaderTexts[0], GetStringCenterAlignXOffset(1, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN);
for (i = 0; i < (int)ARRAY_COUNT(sHeaderTexts[0]) - 1; i++) for (i = 0; i < (int)ARRAY_COUNT(*sHeaderTexts) - 1; i++)
{ {
WCSS_AddTextPrinterParameterized(1, 1, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY); WCSS_AddTextPrinterParameterized(1, 1, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY);
} }
@ -362,12 +362,12 @@ static u32 CountPlayersInGroupAndGetActivity(struct UnkStruct_x20 * unk20, u32 *
{ {
if (group_players(i) == 0) if (group_players(i) == 0)
{ {
k = 0; //Should just be 1 without the increment after the loop ends but that doesn't match. k = 0;
for (j = 0; j < RFU_CHILD_MAX; j++) for (j = 0; j < RFU_CHILD_MAX; j++)
{ {
if (unk20->gname_uname.gname.child_sprite_gender[j] != 0) k++; if (unk20->gname_uname.gname.child_sprite_gender[j] != 0) k++;
} }
k++; //See above comment. k++;
groupCounts[group_type(i)] += k; groupCounts[group_type(i)] += k;
} }
else else