summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDiegoisawesome <Diegoisawesome@users.noreply.github.com>2019-04-04 12:49:17 -0500
committerGitHub <noreply@github.com>2019-04-04 12:49:17 -0500
commit8361ada4babbd77a2a5dc5065903252985a4c27a (patch)
tree545b7b8a864817733fd8760a3c9cb38849fb1061 /src
parente476a6d02d88cb467b7e1d7f8c5b06af7438d738 (diff)
parent64da3d051ecf8617c081f64a49f62c7e79354585 (diff)
Merge pull request #656 from ultima-soul/menu_specialized
Decompile some of menu_specialized
Diffstat (limited to 'src')
-rw-r--r--src/battle_script_commands.c8
-rw-r--r--src/menu_specialized.c441
2 files changed, 444 insertions, 5 deletions
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 0a0c34ad2..d1d8d87ac 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -6295,16 +6295,16 @@ static void sub_804F100(void)
{
struct StatsArray currentStats;
- GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], &currentStats);
- DrawLevelUpWindowPg1(0xD, gBattleResources->statsBeforeLvlUp, &currentStats, 0xE, 0xD, 0xF);
+ GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], (u16*) &currentStats);
+ DrawLevelUpWindowPg1(0xD, (u16*) gBattleResources->statsBeforeLvlUp,(u16*) &currentStats, 0xE, 0xD, 0xF);
}
static void sub_804F144(void)
{
struct StatsArray currentStats;
- GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], &currentStats);
- DrawLevelUpWindowPg2(0xD, &currentStats, 0xE, 0xD, 0xF);
+ GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], (u16*) &currentStats);
+ DrawLevelUpWindowPg2(0xD, (u16*) &currentStats, 0xE, 0xD, 0xF);
}
static void sub_804F17C(void)
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index f21f4e51a..cbdef3d39 100644
--- a/src/menu_specialized.c
+++ b/src/menu_specialized.c
@@ -28,6 +28,7 @@
#include "gba/io_reg.h"
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+extern const u8 *gUnknown_08625B54[];
EWRAM_DATA static u8 sUnknown_0203CF48[3] = {0};
EWRAM_DATA static struct ListMenuItem *sUnknown_0203CF4C = NULL;
@@ -259,7 +260,7 @@ static void sub_81D1D44(u8 windowId, s32 itemId, u8 y)
u8 buffer[30];
u16 length;
- if (itemId == LIST_CANCEL)
+ if (itemId == LIST_CANCEL)
return;
StringCopy(buffer, gSaveBlock1Ptr->mail[6 + itemId].playerName);
@@ -1639,3 +1640,441 @@ static void sub_81D35E8(struct Sprite *sprite)
id = gSprites[id].data[5];
}
}
+
+
+#ifdef NONMATCHING
+void DrawLevelUpWindowPg1(u16 arg0, u16 *statStoreLocation1, u16 *statStoreLocation2, u8 arg3, u8 arg4, u8 arg5)
+{
+ u16 i;
+ s16 array[6];
+ u8 *text;
+ u8 text2;
+ s16 *statVal;
+ s32 var;
+ u8 padding;
+ s32 var3;
+ u8 color[11];
+
+ FillWindowPixelBuffer(arg0, PIXEL_FILL(arg3));
+
+ array[0] = statStoreLocation2[STAT_HP] - statStoreLocation1[STAT_HP];
+ array[1] = statStoreLocation2[STAT_ATK] - statStoreLocation1[STAT_ATK];
+ array[2] = statStoreLocation2[STAT_DEF] - statStoreLocation1[STAT_DEF];
+ array[3] = statStoreLocation2[STAT_SPATK] - statStoreLocation1[STAT_SPATK];
+ array[4] = statStoreLocation2[STAT_SPDEF] - statStoreLocation1[STAT_SPDEF];
+ array[5] = statStoreLocation2[STAT_SPEED] - statStoreLocation1[STAT_SPEED];
+
+ color[0] = arg3;
+ color[1] = arg4;
+ color[2] = arg5;
+
+ for(i = 0; i <= 5; i++)
+ {
+ AddTextPrinterParameterized3(arg0,
+ 1,
+ 0,
+ 15 * i,
+ color,
+ TEXT_SPEED_FF,
+ gUnknown_08625B54[i]);
+ statVal = &array[i];
+ text = array[i] >= 0 ? (u8 *) gText_UnkCtrlF904 : (u8 *) gText_Dash;//Plus sign for stat gain, dash for none maybe
+ StringCopy(&text2, text);
+ AddTextPrinterParameterized3(arg0,
+ 1,
+ 56,
+ 15 * i,
+ color,
+ TEXT_SPEED_FF,
+ &text2);
+ var3 = *statVal;
+ var = var3;
+
+ if(var3 < 0)
+ {
+ var = -var3;
+ }
+
+ padding = 12; //amount of padding
+
+ if(var <= 9)
+ {
+ padding = 18; //more padding for single digit numbers
+ }
+
+ if(var3 < 0)
+ {
+ var3 = -var3;
+ }
+
+ ConvertIntToDecimalStringN(&text2, var3, STR_CONV_MODE_LEFT_ALIGN, 2);
+ AddTextPrinterParameterized3(arg0,
+ 1,
+ padding + 56,
+ 15 * i,
+ color,
+ TEXT_SPEED_FF,
+ &text2);
+ }
+}
+#else
+NAKED
+void DrawLevelUpWindowPg1(u16 arg0, u16 *statStoreLocation1, u16 *statStoreLocation2, u8 arg3, u8 arg4, u8 arg5)
+{
+ asm(".syntax unified\n\
+push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x2C\n\
+ mov r8, r0\n\
+ adds r6, r1, 0\n\
+ adds r5, r2, 0\n\
+ adds r4, r3, 0\n\
+ ldr r3, [sp, 0x4C]\n\
+ ldr r0, [sp, 0x50]\n\
+ mov r9, r0\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ mov r1, r9\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ mov r9, r1\n\
+ mov r0, r8\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ lsls r1, r4, 4\n\
+ orrs r1, r4\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ str r3, [sp, 0x28]\n\
+ bl FillWindowPixelBuffer\n\
+ add r2, sp, 0xC\n\
+ ldrh r0, [r5]\n\
+ ldrh r1, [r6]\n\
+ subs r0, r1\n\
+ strh r0, [r2]\n\
+ ldrh r0, [r5, 0x2]\n\
+ ldrh r1, [r6, 0x2]\n\
+ subs r0, r1\n\
+ strh r0, [r2, 0x2]\n\
+ ldrh r0, [r5, 0x4]\n\
+ ldrh r1, [r6, 0x4]\n\
+ subs r0, r1\n\
+ strh r0, [r2, 0x4]\n\
+ ldrh r0, [r5, 0x8]\n\
+ ldrh r1, [r6, 0x8]\n\
+ subs r0, r1\n\
+ strh r0, [r2, 0x6]\n\
+ ldrh r0, [r5, 0xA]\n\
+ ldrh r1, [r6, 0xA]\n\
+ subs r0, r1\n\
+ strh r0, [r2, 0x8]\n\
+ ldrh r0, [r5, 0x6]\n\
+ ldrh r1, [r6, 0x6]\n\
+ subs r0, r1\n\
+ strh r0, [r2, 0xA]\n\
+ add r0, sp, 0x24\n\
+ strb r4, [r0]\n\
+ ldr r3, [sp, 0x28]\n\
+ strb r3, [r0, 0x1]\n\
+ mov r1, r9\n\
+ strb r1, [r0, 0x2]\n\
+ movs r7, 0\n\
+ mov r10, r0\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ mov r9, r0\n\
+ add r6, sp, 0x18\n\
+_081D36CA:\n\
+ lsls r0, r7, 4\n\
+ subs r0, r7\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ mov r1, r10\n\
+ str r1, [sp]\n\
+ mov r0, r9\n\
+ str r0, [sp, 0x4]\n\
+ ldr r1, =gUnknown_08625B54\n\
+ lsls r0, r7, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ str r0, [sp, 0x8]\n\
+ mov r0, r8\n\
+ movs r1, 0x1\n\
+ movs r2, 0\n\
+ adds r3, r5, 0\n\
+ bl AddTextPrinterParameterized3\n\
+ lsls r0, r7, 1\n\
+ mov r4, sp\n\
+ adds r4, r0\n\
+ adds r4, 0xC\n\
+ movs r1, 0\n\
+ ldrsh r0, [r4, r1]\n\
+ ldr r1, =gText_Dash\n\
+ cmp r0, 0\n\
+ blt _081D3704\n\
+ ldr r1, =gText_UnkCtrlF904\n\
+_081D3704:\n\
+ adds r0, r6, 0\n\
+ bl StringCopy\n\
+ mov r0, r10\n\
+ str r0, [sp]\n\
+ mov r1, r9\n\
+ str r1, [sp, 0x4]\n\
+ str r6, [sp, 0x8]\n\
+ mov r0, r8\n\
+ movs r1, 0x1\n\
+ movs r2, 0x38\n\
+ adds r3, r5, 0\n\
+ bl AddTextPrinterParameterized3\n\
+ movs r0, 0\n\
+ ldrsh r1, [r4, r0]\n\
+ adds r0, r1, 0\n\
+ cmp r1, 0\n\
+ bge _081D372C\n\
+ negs r0, r1\n\
+_081D372C:\n\
+ movs r4, 0xC\n\
+ cmp r0, 0x9\n\
+ bgt _081D3734\n\
+ movs r4, 0x12\n\
+_081D3734:\n\
+ cmp r1, 0\n\
+ bge _081D373A\n\
+ negs r1, r1\n\
+_081D373A:\n\
+ adds r0, r6, 0\n\
+ movs r2, 0\n\
+ movs r3, 0x2\n\
+ bl ConvertIntToDecimalStringN\n\
+ adds r2, r4, 0\n\
+ adds r2, 0x38\n\
+ mov r1, r10\n\
+ str r1, [sp]\n\
+ mov r0, r9\n\
+ str r0, [sp, 0x4]\n\
+ str r6, [sp, 0x8]\n\
+ mov r0, r8\n\
+ movs r1, 0x1\n\
+ adds r3, r5, 0\n\
+ bl AddTextPrinterParameterized3\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ cmp r7, 0x5\n\
+ bls _081D36CA\n\
+ add sp, 0x2C\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+#ifdef NONMATCHING
+void DrawLevelUpWindowPg2(u16 arg0, u16 *statStoreLocation1, u8 arg2, u8 arg3, u8 arg4)
+{
+ s32 i;
+ s16 *var;
+ s32 numDigits;
+ u8 text;
+ s16 array[6];
+ u8 color[11];
+
+ FillWindowPixelBuffer(arg0, PIXEL_FILL(arg2));
+
+ array[0] = statStoreLocation1[STAT_HP];
+ array[1] = statStoreLocation1[STAT_ATK];
+ array[2] = statStoreLocation1[STAT_DEF];
+ array[3] = statStoreLocation1[STAT_SPATK];
+ array[4] = statStoreLocation1[STAT_SPDEF];
+ array[5] = statStoreLocation1[STAT_SPEED];
+
+ color[0] = arg2;
+ color[1] = arg3;
+ color[2] = arg4;
+
+ for(i = 0; i <= 5; i++)
+ {
+ numDigits = 3; //3 digit stat
+ if(array[i] <= 99)
+ {
+ numDigits = 1; //1 digit stat
+ if(array[i] > 9)
+ {
+ numDigits = 2; //2 digit stat
+ }
+ }
+ ConvertIntToDecimalStringN(&text, array[i], STR_CONV_MODE_LEFT_ALIGN, numDigits);
+ AddTextPrinterParameterized3(arg0,
+ 1,
+ 0,
+ 15 * i,
+ color,
+ TEXT_SPEED_FF,
+ gUnknown_08625B54[i]);
+ AddTextPrinterParameterized3(arg0,
+ 1,
+ 6 * (4 - numDigits) + 56,
+ 15 * i,
+ color,
+ TEXT_SPEED_FF,
+ &text);
+ }
+}
+#else
+NAKED
+void DrawLevelUpWindowPg2(u16 arg0, u16 *statStoreLocation1, u8 arg2, u8 arg3, u8 arg4)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x2C\n\
+ mov r8, r0\n\
+ adds r5, r1, 0\n\
+ adds r4, r2, 0\n\
+ adds r6, r3, 0\n\
+ ldr r2, [sp, 0x4C]\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ lsls r6, 24\n\
+ lsrs r6, 24\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ lsls r1, r4, 4\n\
+ orrs r1, r4\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ str r2, [sp, 0x28]\n\
+ bl FillWindowPixelBuffer\n\
+ add r1, sp, 0xC\n\
+ ldrh r0, [r5]\n\
+ strh r0, [r1]\n\
+ ldrh r0, [r5, 0x2]\n\
+ strh r0, [r1, 0x2]\n\
+ ldrh r0, [r5, 0x4]\n\
+ strh r0, [r1, 0x4]\n\
+ ldrh r0, [r5, 0x8]\n\
+ strh r0, [r1, 0x6]\n\
+ ldrh r0, [r5, 0xA]\n\
+ strh r0, [r1, 0x8]\n\
+ ldrh r0, [r5, 0x6]\n\
+ strh r0, [r1, 0xA]\n\
+ add r0, sp, 0x24\n\
+ strb r4, [r0]\n\
+ strb r6, [r0, 0x1]\n\
+ ldr r2, [sp, 0x28]\n\
+ strb r2, [r0, 0x2]\n\
+ movs r6, 0\n\
+ add r1, sp, 0x18\n\
+ mov r9, r1\n\
+ mov r7, r8\n\
+ mov r10, r0\n\
+ movs r2, 0x1\n\
+ negs r2, r2\n\
+ mov r8, r2\n\
+_081D37EE:\n\
+ lsls r1, r6, 1\n\
+ mov r0, sp\n\
+ adds r0, r1\n\
+ adds r0, 0xC\n\
+ movs r2, 0\n\
+ ldrsh r0, [r0, r2]\n\
+ movs r4, 0x3\n\
+ cmp r0, 0x63\n\
+ bgt _081D3808\n\
+ movs r4, 0x1\n\
+ cmp r0, 0x9\n\
+ ble _081D3808\n\
+ movs r4, 0x2\n\
+_081D3808:\n\
+ mov r0, sp\n\
+ adds r0, r1\n\
+ adds r0, 0xC\n\
+ movs r2, 0\n\
+ ldrsh r1, [r0, r2]\n\
+ mov r0, r9\n\
+ movs r2, 0\n\
+ adds r3, r4, 0\n\
+ bl ConvertIntToDecimalStringN\n\
+ movs r0, 0x4\n\
+ subs r0, r4\n\
+ lsls r4, r0, 1\n\
+ adds r4, r0\n\
+ lsls r4, 17\n\
+ lsrs r4, 16\n\
+ lsls r5, r6, 4\n\
+ subs r5, r6\n\
+ lsls r5, 24\n\
+ lsrs r5, 24\n\
+ mov r0, r10\n\
+ str r0, [sp]\n\
+ mov r1, r8\n\
+ str r1, [sp, 0x4]\n\
+ ldr r1, =gUnknown_08625B54\n\
+ lsls r0, r6, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ str r0, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x1\n\
+ movs r2, 0\n\
+ adds r3, r5, 0\n\
+ bl AddTextPrinterParameterized3\n\
+ adds r4, 0x38\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ mov r2, r10\n\
+ str r2, [sp]\n\
+ mov r0, r8\n\
+ str r0, [sp, 0x4]\n\
+ mov r1, r9\n\
+ str r1, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x1\n\
+ adds r2, r4, 0\n\
+ adds r3, r5, 0\n\
+ bl AddTextPrinterParameterized3\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+ cmp r6, 0x5\n\
+ bls _081D37EE\n\
+ add sp, 0x2C\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *statStoreLocation)
+{
+ statStoreLocation[STAT_HP] = GetMonData(mon, MON_DATA_MAX_HP);
+ statStoreLocation[STAT_ATK] = GetMonData(mon, MON_DATA_ATK);
+ statStoreLocation[STAT_DEF] = GetMonData(mon, MON_DATA_DEF);
+ statStoreLocation[STAT_SPEED] = GetMonData(mon, MON_DATA_SPEED);
+ statStoreLocation[STAT_SPATK] = GetMonData(mon, MON_DATA_SPATK);
+ statStoreLocation[STAT_SPDEF] = GetMonData(mon, MON_DATA_SPDEF);
+}