summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <YamaArashi@users.noreply.github.com>2017-01-03 15:46:38 -0800
committerGitHub <noreply@github.com>2017-01-03 15:46:38 -0800
commitd69b48c89d7af3fc0ecee67d52c83dfdae924060 (patch)
treeb6ca34297fd126ab2715fa56238488280a048700
parent2b445e128c1e61afc7079ee8188637365baacdd5 (diff)
parentc03e7be9af2a908833a868436f0f9f12519a81ee (diff)
Merge pull request #153 from marijnvdwerf/decompile/pokemon-summary-screen
Attempt to decompile trainer memo printing
-rw-r--r--asm/pokemon_summary_screen.s206
-rw-r--r--asm/region_map.s6
-rw-r--r--include/asm.inc.h1
-rw-r--r--include/pokemon.h28
-rw-r--r--ld_script.txt2
-rw-r--r--src/pokemon_summary_screen.c318
6 files changed, 357 insertions, 204 deletions
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index 1ce717645..f5e8039ae 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -4750,7 +4750,7 @@ _0809FDF8:
adds r0, r6, 0
movs r1, 0xB
movs r2, 0xE
- bl sub_80A0798
+ bl PokemonSummaryScreen_PrintTrainerMemo
_0809FE4C:
add sp, 0xC
pop {r4-r6}
@@ -5890,203 +5890,7 @@ _080A0786:
_080A0794: .4byte gOtherText_EggDayCare
thumb_func_end sub_80A0708
- thumb_func_start sub_80A0798
-sub_80A0798: @ 80A0798
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldr r5, _080A0838 @ =gStringVar4
- bl GetNature
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _080A083C @ =gNatureNames
- lsls r0, r4, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r5, 0
- movs r2, 0xE
- bl sub_80A1E9C
- adds r5, r0, 0
- cmp r4, 0x5
- beq _080A07DA
- cmp r4, 0x15
- beq _080A07DA
- ldr r1, _080A0840 @ =gOtherText_Terminator4
- bl StringCopy
- adds r5, r0, 0
-_080A07DA:
- ldr r1, _080A0844 @ =gOtherText_Nature
- adds r0, r5, 0
- bl StringCopy
- adds r5, r0, 0
- adds r0, r7, 0
- bl sub_80A0664
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080A0898
- adds r0, r7, 0
- movs r1, 0x23
- bl GetMonData
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r7, 0
- movs r1, 0x24
- bl GetMonData
- cmp r0, 0
- bne _080A0850
- adds r0, r5, 0
- movs r1, 0x5
- bl sub_80A203C
- adds r5, r0, 0
- movs r0, 0xFE
- strb r0, [r5]
- adds r5, 0x1
- ldr r4, _080A0848 @ =gStringVar1
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_80FC02C
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0xE
- bl sub_80A1E9C
- adds r5, r0, 0
- ldr r1, _080A084C @ =gOtherText_Egg2
- bl StringCopy
- b _080A0934
- .align 2, 0
-_080A0838: .4byte gStringVar4
-_080A083C: .4byte gNatureNames
-_080A0840: .4byte gOtherText_Terminator4
-_080A0844: .4byte gOtherText_Nature
-_080A0848: .4byte gStringVar1
-_080A084C: .4byte gOtherText_Egg2
-_080A0850:
- cmp r6, 0x57
- bhi _080A08E8
- adds r0, r7, 0
- movs r1, 0x24
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_80A203C
- adds r5, r0, 0
- movs r0, 0xFE
- strb r0, [r5]
- adds r5, 0x1
- ldr r4, _080A0890 @ =gStringVar1
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_80FC02C
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0xE
- bl sub_80A1E9C
- adds r5, r0, 0
- ldr r1, _080A0894 @ =gOtherText_Met
- bl StringCopy
- b _080A0934
- .align 2, 0
-_080A0890: .4byte gStringVar1
-_080A0894: .4byte gOtherText_Met
-_080A0898:
- adds r0, r7, 0
- movs r1, 0x25
- bl GetMonData
- lsls r0, 24
- movs r1, 0xFF
- lsls r1, 24
- adds r0, r1
- lsrs r0, 24
- cmp r0, 0x2
- bhi _080A08E8
- adds r0, r7, 0
- movs r1, 0x23
- bl GetMonData
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0xFF
- bne _080A08E4
- adds r0, r7, 0
- movs r1, 0x24
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_80A203C
- adds r5, r0, 0
- movs r0, 0xFE
- strb r0, [r5]
- adds r5, 0x1
- ldr r1, _080A08E0 @ =gOtherText_FatefulEncounter
- b _080A08F0
- .align 2, 0
-_080A08E0: .4byte gOtherText_FatefulEncounter
-_080A08E4:
- cmp r6, 0x57
- bls _080A08FC
-_080A08E8:
- movs r0, 0xFE
- strb r0, [r5]
- adds r5, 0x1
- ldr r1, _080A08F8 @ =gOtherText_ObtainedInTrade
-_080A08F0:
- adds r0, r5, 0
- bl StringCopy
- b _080A0934
- .align 2, 0
-_080A08F8: .4byte gOtherText_ObtainedInTrade
-_080A08FC:
- adds r0, r7, 0
- movs r1, 0x24
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_80A203C
- adds r5, r0, 0
- movs r0, 0xFE
- strb r0, [r5]
- adds r5, 0x1
- ldr r4, _080A094C @ =gStringVar1
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_80FC02C
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0xE
- bl sub_80A1E9C
- adds r5, r0, 0
- ldr r1, _080A0950 @ =gOtherText_Met2
- bl StringCopy
-_080A0934:
- ldr r0, _080A0954 @ =gStringVar4
- mov r1, r9
- mov r2, r8
- bl MenuPrint
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080A094C: .4byte gStringVar1
-_080A0950: .4byte gOtherText_Met2
-_080A0954: .4byte gStringVar4
- thumb_func_end sub_80A0798
+ .section .text_80A0958
thumb_func_start sub_80A0958
sub_80A0958: @ 80A0958
@@ -9039,8 +8843,8 @@ sub_80A1FF8: @ 80A1FF8
_080A2038: .4byte gStringVar4
thumb_func_end sub_80A1FF8
- thumb_func_start sub_80A203C
-sub_80A203C: @ 80A203C
+ thumb_func_start PokemonSummaryScreen_CopyPokemonLevel
+PokemonSummaryScreen_CopyPokemonLevel: @ 80A203C
push {r4,lr}
sub sp, 0xC
adds r4, r0, 0
@@ -9069,7 +8873,7 @@ _080A2052:
bx r1
.align 2, 0
_080A2074: .4byte gOtherText_Comma
- thumb_func_end sub_80A203C
+ thumb_func_end PokemonSummaryScreen_CopyPokemonLevel
thumb_func_start sub_80A2078
sub_80A2078: @ 80A2078
diff --git a/asm/region_map.s b/asm/region_map.s
index 61449ba53..c6953705c 100644
--- a/asm/region_map.s
+++ b/asm/region_map.s
@@ -3034,8 +3034,8 @@ _080FC026:
bx r1
thumb_func_end CopyMapName
- thumb_func_start sub_80FC02C
-sub_80FC02C: @ 80FC02C
+ thumb_func_start CopyLocationName
+CopyLocationName: @ 80FC02C
push {lr}
lsls r1, 16
lsrs r1, 16
@@ -3051,7 +3051,7 @@ _080FC042:
bx r1
.align 2, 0
_080FC048: .4byte gOtherText_Hideout
- thumb_func_end sub_80FC02C
+ thumb_func_end CopyLocationName
thumb_func_start sub_80FC04C
sub_80FC04C: @ 80FC04C
diff --git a/include/asm.inc.h b/include/asm.inc.h
index 9cf316079..5e2b49a84 100644
--- a/include/asm.inc.h
+++ b/include/asm.inc.h
@@ -376,6 +376,7 @@ bool8 IsEasyChatPairEqual(u16 *, u16 *);
// asm/region_map.o
void sub_80FBFB4(u8 *str, u8 region, u8);
+u8 *CopyLocationName(u8 *dest, u8 location);
void CopyMapName();
// asm/slot_machine.o
diff --git a/include/pokemon.h b/include/pokemon.h
index ee141dcc5..b705ab6a1 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -114,6 +114,34 @@
#define TYPE_DRAGON 0x10
#define TYPE_DARK 0x11
+enum {
+ NATURE_HARDY,
+ NATURE_LONELY,
+ NATURE_BRAVE,
+ NATURE_ADAMANT,
+ NATURE_NAUGHTY,
+ NATURE_BOLD,
+ NATURE_DOCILE,
+ NATURE_RELAXED,
+ NATURE_IMPISH,
+ NATURE_LAX,
+ NATURE_TIMID,
+ NATURE_HASTY,
+ NATURE_SERIOUS,
+ NATURE_JOLLY,
+ NATURE_NAIVE,
+ NATURE_MODEST,
+ NATURE_MILD,
+ NATURE_QUIET,
+ NATURE_BASHFUL,
+ NATURE_RASH,
+ NATURE_CALM,
+ NATURE_GENTLE,
+ NATURE_SASSY,
+ NATURE_CAREFUL,
+ NATURE_QUIRKY,
+};
+
struct PokemonSubstruct0
{
u16 species;
diff --git a/ld_script.txt b/ld_script.txt
index 533529417..7ab8ac9ce 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -125,6 +125,8 @@ SECTIONS {
asm/pokemon_storage_system.o(.text);
asm/pokemon_icon.o(.text);
asm/pokemon_summary_screen.o(.text);
+ src/pokemon_summary_screen.o(.text);
+ asm/pokemon_summary_screen.o(.text_80A0958);
asm/script_movement.o(.text);
asm/fldeff_cut.o(.text);
asm/mail_data.o(.text);
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
new file mode 100644
index 000000000..323f2be80
--- /dev/null
+++ b/src/pokemon_summary_screen.c
@@ -0,0 +1,318 @@
+#include "global.h"
+#include "asm.h"
+#include "menu.h"
+#include "pokemon.h"
+#include "string_util.h"
+
+extern u8 gStringVar1[];
+extern u8 gStringVar4[];
+
+extern u8 *(gNatureNames[]);
+extern const u8 gOtherText_Terminator4[];
+extern const u8 gOtherText_Nature[];
+
+extern const u8 gOtherText_Met[];
+extern const u8 gOtherText_Egg2[];
+extern const u8 gOtherText_ObtainedInTrade[];
+extern const u8 gOtherText_FatefulEncounter[];
+extern const u8 gOtherText_Met2[];
+
+u8 *sub_80A1E9C(u8 *dest, u8 *src, u8);
+u8 sub_80A0664(struct Pokemon *pokemon);
+u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level);
+
+#define CHAR_NEWLINE (0xFE)
+
+#ifdef NONMATCHING
+void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 top) {
+ u8 nature;
+ u8 *ptr = gStringVar4;
+
+ nature = GetNature(pokemon);
+ ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14);
+
+ if (nature != NATURE_BOLD && nature != NATURE_GENTLE) {
+ ptr = StringCopy(ptr, gOtherText_Terminator4);
+ }
+
+ ptr = StringCopy(ptr, gOtherText_Nature);
+
+ if (sub_80A0664(pokemon) == TRUE) {
+ u8 locationMet;
+
+ locationMet = GetMonData(pokemon, MON_DATA_MET_LOCATION);
+
+ if (GetMonData(pokemon, MON_DATA_MET_LEVEL) == 0) {
+ ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, 5);
+ ptr[0] = CHAR_NEWLINE;
+ ptr++;
+
+ CopyLocationName(gStringVar1, locationMet);
+ ptr = sub_80A1E9C(ptr, gStringVar1, 14);
+ StringCopy(ptr, gOtherText_Egg2);
+ } else if (locationMet < 88) {
+ u8 levelMet;
+
+ levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL);
+
+ ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet);
+ ptr[0] = CHAR_NEWLINE;
+ ptr++;
+
+ CopyLocationName(gStringVar1, locationMet);
+ ptr = sub_80A1E9C(ptr, gStringVar1, 14);
+ StringCopy(ptr, gOtherText_Met);
+ } else {
+ ptr[0] = CHAR_NEWLINE;
+ ptr++;
+
+ StringCopy(ptr, gOtherText_ObtainedInTrade);
+ }
+ } else {
+ u8 gameMet;
+
+ gameMet = GetMonData(pokemon, MON_DATA_MET_GAME);
+ if (gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == 3) {
+ u8 locationMet;
+
+ locationMet = GetMonData(pokemon, MON_DATA_MET_LOCATION);
+ if (locationMet == 0xFF) {
+ u8 levelMet;
+
+ levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL);
+
+ ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet);
+ ptr[0] = CHAR_NEWLINE;
+ ptr++;
+
+ StringCopy(ptr, gOtherText_FatefulEncounter);
+ } else if (locationMet <= 88) {
+ u8 levelMet;
+
+ levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL);
+
+ ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet);
+ ptr[0] = CHAR_NEWLINE;
+ ptr++;
+
+ CopyLocationName(gStringVar1, locationMet);
+ ptr = sub_80A1E9C(ptr, gStringVar1, 14);
+ StringCopy(ptr, gOtherText_Met2);
+ } else {
+ ptr[0] = CHAR_NEWLINE;
+ ptr++;
+
+ StringCopy(ptr, gOtherText_ObtainedInTrade);
+ }
+ } else {
+ ptr[0] = CHAR_NEWLINE;
+ ptr++;
+
+ StringCopy(ptr, gOtherText_ObtainedInTrade);
+ }
+
+ }
+
+ MenuPrint(gStringVar4, left, top);
+}
+#else
+__attribute__((naked))
+void PokemonSummaryScreen_PrintTrainerMemo(void) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ adds r7, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ mov r9, r1\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ mov r8, r2\n\
+ ldr r5, _080A0838 @ =gStringVar4\n\
+ bl GetNature\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ ldr r1, _080A083C @ =gNatureNames\n\
+ lsls r0, r4, 2\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
+ adds r0, r5, 0\n\
+ movs r2, 0xE\n\
+ bl sub_80A1E9C\n\
+ adds r5, r0, 0\n\
+ cmp r4, 0x5\n\
+ beq _080A07DA\n\
+ cmp r4, 0x15\n\
+ beq _080A07DA\n\
+ ldr r1, _080A0840 @ =gOtherText_Terminator4\n\
+ bl StringCopy\n\
+ adds r5, r0, 0\n\
+_080A07DA:\n\
+ ldr r1, _080A0844 @ =gOtherText_Nature\n\
+ adds r0, r5, 0\n\
+ bl StringCopy\n\
+ adds r5, r0, 0\n\
+ adds r0, r7, 0\n\
+ bl sub_80A0664\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _080A0898\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x23\n\
+ bl GetMonData\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x24\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _080A0850\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x5\n\
+ bl PokemonSummaryScreen_CopyPokemonLevel\n\
+ adds r5, r0, 0\n\
+ movs r0, 0xFE\n\
+ strb r0, [r5]\n\
+ adds r5, 0x1\n\
+ ldr r4, _080A0848 @ =gStringVar1\n\
+ adds r0, r4, 0\n\
+ adds r1, r6, 0\n\
+ bl CopyLocationName\n\
+ adds r0, r5, 0\n\
+ adds r1, r4, 0\n\
+ movs r2, 0xE\n\
+ bl sub_80A1E9C\n\
+ adds r5, r0, 0\n\
+ ldr r1, _080A084C @ =gOtherText_Egg2\n\
+ bl StringCopy\n\
+ b _080A0934\n\
+ .align 2, 0\n\
+_080A0838: .4byte gStringVar4\n\
+_080A083C: .4byte gNatureNames\n\
+_080A0840: .4byte gOtherText_Terminator4\n\
+_080A0844: .4byte gOtherText_Nature\n\
+_080A0848: .4byte gStringVar1\n\
+_080A084C: .4byte gOtherText_Egg2\n\
+_080A0850:\n\
+ cmp r6, 0x57\n\
+ bhi _080A08E8\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x24\n\
+ bl GetMonData\n\
+ adds r1, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ adds r0, r5, 0\n\
+ bl PokemonSummaryScreen_CopyPokemonLevel\n\
+ adds r5, r0, 0\n\
+ movs r0, 0xFE\n\
+ strb r0, [r5]\n\
+ adds r5, 0x1\n\
+ ldr r4, _080A0890 @ =gStringVar1\n\
+ adds r0, r4, 0\n\
+ adds r1, r6, 0\n\
+ bl CopyLocationName\n\
+ adds r0, r5, 0\n\
+ adds r1, r4, 0\n\
+ movs r2, 0xE\n\
+ bl sub_80A1E9C\n\
+ adds r5, r0, 0\n\
+ ldr r1, _080A0894 @ =gOtherText_Met\n\
+ bl StringCopy\n\
+ b _080A0934\n\
+ .align 2, 0\n\
+_080A0890: .4byte gStringVar1\n\
+_080A0894: .4byte gOtherText_Met\n\
+_080A0898:\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x25\n\
+ bl GetMonData\n\
+ lsls r0, 24\n\
+ movs r1, 0xFF\n\
+ lsls r1, 24\n\
+ adds r0, r1\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x2\n\
+ bhi _080A08E8\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x23\n\
+ bl GetMonData\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0xFF\n\
+ bne _080A08E4\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x24\n\
+ bl GetMonData\n\
+ adds r1, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ adds r0, r5, 0\n\
+ bl PokemonSummaryScreen_CopyPokemonLevel\n\
+ adds r5, r0, 0\n\
+ movs r0, 0xFE\n\
+ strb r0, [r5]\n\
+ adds r5, 0x1\n\
+ ldr r1, _080A08E0 @ =gOtherText_FatefulEncounter\n\
+ b _080A08F0\n\
+ .align 2, 0\n\
+_080A08E0: .4byte gOtherText_FatefulEncounter\n\
+_080A08E4:\n\
+ cmp r6, 0x57\n\
+ bls _080A08FC\n\
+_080A08E8:\n\
+ movs r0, 0xFE\n\
+ strb r0, [r5]\n\
+ adds r5, 0x1\n\
+ ldr r1, _080A08F8 @ =gOtherText_ObtainedInTrade\n\
+_080A08F0:\n\
+ adds r0, r5, 0\n\
+ bl StringCopy\n\
+ b _080A0934\n\
+ .align 2, 0\n\
+_080A08F8: .4byte gOtherText_ObtainedInTrade\n\
+_080A08FC:\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x24\n\
+ bl GetMonData\n\
+ adds r1, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ adds r0, r5, 0\n\
+ bl PokemonSummaryScreen_CopyPokemonLevel\n\
+ adds r5, r0, 0\n\
+ movs r0, 0xFE\n\
+ strb r0, [r5]\n\
+ adds r5, 0x1\n\
+ ldr r4, _080A094C @ =gStringVar1\n\
+ adds r0, r4, 0\n\
+ adds r1, r6, 0\n\
+ bl CopyLocationName\n\
+ adds r0, r5, 0\n\
+ adds r1, r4, 0\n\
+ movs r2, 0xE\n\
+ bl sub_80A1E9C\n\
+ adds r5, r0, 0\n\
+ ldr r1, _080A0950 @ =gOtherText_Met2\n\
+ bl StringCopy\n\
+_080A0934:\n\
+ ldr r0, _080A0954 @ =gStringVar4\n\
+ mov r1, r9\n\
+ mov r2, r8\n\
+ bl MenuPrint\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080A094C: .4byte gStringVar1\n\
+_080A0950: .4byte gOtherText_Met2\n\
+_080A0954: .4byte gStringVar4\n\
+ .syntax divided\n");
+}
+#endif