From 96fdd3aae0ba1d923b358128012979a9a1a0eb38 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 1 Oct 2020 13:32:53 -0500 Subject: successful decomp of one pokemon data func and struct.. making headway --- src/pokemon_1.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/pokemon_1.c (limited to 'src/pokemon_1.c') diff --git a/src/pokemon_1.c b/src/pokemon_1.c new file mode 100644 index 0000000..6d4cf75 --- /dev/null +++ b/src/pokemon_1.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "pokemon.h" +#include "file_system.h" + +extern int sprintf(char *, const char *, ...); + +extern struct gPokemon *gMonsterParameters; +extern struct FileArchive gUnknown_8510000; +extern const char gUnknown_8107684; + +//u8 sub_808DDD0(s16 r0) +//{ +// // Looks like this loads the dialogue sprite for the pokemon +// +// // TODO stack is being added instead of being substracted +// // Else this matches +// char buffer[0xC]; +// if(gMonsterParameters[r0].dialogue_sprites != 0) +// { +// sprintf(buffer, &gUnknown_8107684); +// OpenFileAndGetFileDataPtr(buffer, &gUnknown_8510000); +// return; +// } +// return 0; +//} + +bool8 sub_808DE10(s16 r0, s32 r1) +{ + // checking to see if dialogue sprite is available?? + return (gMonsterParameters[r0].dialogue_sprites >> r1) & 1; +} -- cgit v1.2.3 From 14b4ad7735e039f388c0ff14850086b402f2c447 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 10 Oct 2020 14:33:06 -0500 Subject: some doc'ing and decomping --- src/pokemon_1.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 141 insertions(+), 15 deletions(-) (limited to 'src/pokemon_1.c') diff --git a/src/pokemon_1.c b/src/pokemon_1.c index 6d4cf75..83a74b2 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -8,21 +8,147 @@ extern struct gPokemon *gMonsterParameters; extern struct FileArchive gUnknown_8510000; extern const char gUnknown_8107684; -//u8 sub_808DDD0(s16 r0) -//{ -// // Looks like this loads the dialogue sprite for the pokemon -// -// // TODO stack is being added instead of being substracted -// // Else this matches -// char buffer[0xC]; -// if(gMonsterParameters[r0].dialogue_sprites != 0) -// { -// sprintf(buffer, &gUnknown_8107684); -// OpenFileAndGetFileDataPtr(buffer, &gUnknown_8510000); -// return; -// } -// return 0; -//} +#ifndef NONMATCHING +NAKED +#endif +// Pretty confided args are correct yet compiler disagrees +u8 sub_808DD68(s16 r0, u32 r1) +{ +#ifdef NONMATCHING + if (r1 != 0) + { + return 0xA; + } + else + { + return gMonsterParameters[r0].overworld_sprite; + } +#else + asm_unified("\tpush {lr}\n" + "\tlsls r0, 16\n" + "\tasrs r2, r0, 16\n" + "\tcmp r1, 0\n" + "\tbne _0808DD88\n" + "\tldr r0, _0808DD84\n" + "\tldr r1, [r0]\n" + "\tlsls r0, r2, 3\n" + "\tadds r0, r2\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldrb r0, [r0, 0x8]\n" + "\tb _0808DD8A\n" + "\t.align 2, 0\n" +"_0808DD84: .4byte gMonsterParameters\n" +"_0808DD88:\n" + "\tmovs r0, 0xA\n" +"_0808DD8A:\n" + "\tpop {r1}\n" + "\tbx r1"); + +#endif +} + +#ifndef NONMATCHING +NAKED +#endif +struct OpenedFile *sub_808DD90(s16 r0) +{ +#ifdef NONMATCHING + // Looks like this loads the dialogue sprite for the pokemon + + // Two words: register memes... else it matches + // Fix this and then one after matches too + char buffer[0xC]; + if(gMonsterParameters[r0].dialogue_sprites == 0) + { + return NULL; + } + sprintf(buffer, &gUnknown_8107684); + return OpenFile(buffer, &gUnknown_8510000); +#else + asm_unified("\tpush {lr}\n" + "\tsub sp, 0xC\n" + "\tlsls r0, 16\n" + "\tasrs r2, r0, 16\n" + "\tldr r0, _0808DDBC\n" + "\tldr r1, [r0]\n" + "\tlsls r0, r2, 3\n" + "\tadds r0, r2\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0, 0x10]\n" + "\tcmp r0, 0\n" + "\tbeq _0808DDC8\n" + "\tldr r1, _0808DDC0\n" + "\tmov r0, sp\n" + "\tbl sprintf\n" + "\tldr r1, _0808DDC4\n" + "\tmov r0, sp\n" + "\tbl OpenFile\n" + "\tb _0808DDCA\n" + "\t.align 2, 0\n" +"_0808DDBC: .4byte gMonsterParameters\n" +"_0808DDC0: .4byte gUnknown_8107684\n" +"_0808DDC4: .4byte gUnknown_8510000\n" +"_0808DDC8:\n" + "\tmovs r0, 0\n" +"_0808DDCA:\n" + "\tadd sp, 0xC\n" + "\tpop {r1}\n" + "\tbx r1"); +#endif +} + +#ifndef NONMATCHING +NAKED +#endif +struct OpenedFile *sub_808DDD0(s16 r0) +{ +#ifdef NONMATCHING + // Looks like this loads the dialogue sprite for the pokemon + + // Two words: register memes... else it matches + char buffer[0xC]; + if(gMonsterParameters[r0].dialogue_sprites == 0) + { + return NULL; + } + sprintf(buffer, &gUnknown_8107684); + return OpenFileAndGetFileDataPtr(buffer, &gUnknown_8510000); +#else + asm_unified("\tpush {lr}\n" + "\tsub sp, 0xC\n" + "\tlsls r0, 16\n" + "\tasrs r2, r0, 16\n" + "\tldr r0, _0808DDFC\n" + "\tldr r1, [r0]\n" + "\tlsls r0, r2, 3\n" + "\tadds r0, r2\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0, 0x10]\n" + "\tcmp r0, 0\n" + "\tbeq _0808DE08\n" + "\tldr r1, _0808DE00\n" + "\tmov r0, sp\n" + "\tbl sprintf\n" + "\tldr r1, _0808DE04\n" + "\tmov r0, sp\n" + "\tbl OpenFileAndGetFileDataPtr\n" + "\tb _0808DE0A\n" + "\t.align 2, 0\n" + "_0808DDFC: .4byte gMonsterParameters\n" + "_0808DE00: .4byte gUnknown_8107684\n" + "_0808DE04: .4byte gUnknown_8510000\n" + "_0808DE08:\n" + "\tmovs r0, 0\n" + "_0808DE0A:\n" + "\tadd sp, 0xC\n" + "\tpop {r1}\n" + "\tbx r1"); + +#endif +} bool8 sub_808DE10(s16 r0, s32 r1) { -- cgit v1.2.3 From 1b0fc9f3745f119e2ec363bef89e48d6edeeac41 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 18 Oct 2020 18:16:28 -0500 Subject: decomp an evolve func for pokemon --- src/pokemon_1.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/pokemon_1.c') diff --git a/src/pokemon_1.c b/src/pokemon_1.c index 83a74b2..c2434e1 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -8,6 +8,43 @@ extern struct gPokemon *gMonsterParameters; extern struct FileArchive gUnknown_8510000; extern const char gUnknown_8107684; +struct unkEvolve +{ + /* 0x0 */ struct EvolveStruct1 conditions; + /* 0x4 */ struct EvolveNeeds needs; +}; + +#ifndef NONMATCHING +NAKED +#endif +void sub_808DD48(s16 r0, struct unkEvolve *r1) +{ +#ifdef NONMATCHING + struct EvolveStruct1 temp2; + struct EvolveNeeds temp1; + temp1 = gMonsterParameters[r0].need; + temp2 = gMonsterParameters[r0].pre; // TODO should be using r2 but it uses r0 + r1->conditions = temp2; + r1->needs = temp1; +#else + asm_unified("\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tldr r2, _0808DD64\n" + "\tldr r3, [r2]\n" + "\tlsls r2, r0, 3\n" + "\tadds r2, r0\n" + "\tlsls r2, 3\n" + "\tadds r2, r3\n" + "\tldr r3, [r2, 0x38]\n" + "\tldr r2, [r2, 0x34]\n" + "\tstr r2, [r1]\n" + "\tstr r3, [r1, 0x4]\n" + "\tbx lr\n" + "\t.align 2, 0\n" +"_0808DD64: .4byte gMonsterParameters"); +#endif +} + #ifndef NONMATCHING NAKED #endif -- cgit v1.2.3 From fc7f14ab66ff8e23cd758a9435f8ac48e99ae75f Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 22 Nov 2020 17:37:48 -0600 Subject: random assortment of decomp work and fix of nonmatchings --- src/pokemon_1.c | 33 ++++----------------------------- 1 file changed, 4 insertions(+), 29 deletions(-) (limited to 'src/pokemon_1.c') diff --git a/src/pokemon_1.c b/src/pokemon_1.c index c2434e1..5a1eb88 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -45,44 +45,19 @@ void sub_808DD48(s16 r0, struct unkEvolve *r1) #endif } -#ifndef NONMATCHING -NAKED -#endif -// Pretty confided args are correct yet compiler disagrees u8 sub_808DD68(s16 r0, u32 r1) { -#ifdef NONMATCHING + // Had to have this cast to match + u32 temp; + temp = r0; if (r1 != 0) { return 0xA; } else { - return gMonsterParameters[r0].overworld_sprite; + return gMonsterParameters[temp].overworld_sprite; } -#else - asm_unified("\tpush {lr}\n" - "\tlsls r0, 16\n" - "\tasrs r2, r0, 16\n" - "\tcmp r1, 0\n" - "\tbne _0808DD88\n" - "\tldr r0, _0808DD84\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r2, 3\n" - "\tadds r0, r2\n" - "\tlsls r0, 3\n" - "\tadds r0, r1\n" - "\tldrb r0, [r0, 0x8]\n" - "\tb _0808DD8A\n" - "\t.align 2, 0\n" -"_0808DD84: .4byte gMonsterParameters\n" -"_0808DD88:\n" - "\tmovs r0, 0xA\n" -"_0808DD8A:\n" - "\tpop {r1}\n" - "\tbx r1"); - -#endif } #ifndef NONMATCHING -- cgit v1.2.3 From 2c64b5692f3df0c46cfa1610a51cd7de7a0017fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Na=C5=9Bciszewski?= Date: Sun, 13 Dec 2020 19:50:37 +0100 Subject: Fix a lot of nonmatchings, some were plain wrong code --- src/pokemon_1.c | 109 ++++---------------------------------------------------- 1 file changed, 7 insertions(+), 102 deletions(-) (limited to 'src/pokemon_1.c') diff --git a/src/pokemon_1.c b/src/pokemon_1.c index 5a1eb88..ebb24d7 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -6,7 +6,7 @@ extern int sprintf(char *, const char *, ...); extern struct gPokemon *gMonsterParameters; extern struct FileArchive gUnknown_8510000; -extern const char gUnknown_8107684; +extern const char gUnknown_8107684[]; struct unkEvolve { @@ -14,35 +14,16 @@ struct unkEvolve /* 0x4 */ struct EvolveNeeds needs; }; -#ifndef NONMATCHING -NAKED -#endif -void sub_808DD48(s16 r0, struct unkEvolve *r1) +s16 sub_808DD48(s16 r0, struct unkEvolve *r1) { -#ifdef NONMATCHING struct EvolveStruct1 temp2; struct EvolveNeeds temp1; temp1 = gMonsterParameters[r0].need; - temp2 = gMonsterParameters[r0].pre; // TODO should be using r2 but it uses r0 + temp2 = gMonsterParameters[r0].pre; r1->conditions = temp2; r1->needs = temp1; -#else - asm_unified("\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tldr r2, _0808DD64\n" - "\tldr r3, [r2]\n" - "\tlsls r2, r0, 3\n" - "\tadds r2, r0\n" - "\tlsls r2, 3\n" - "\tadds r2, r3\n" - "\tldr r3, [r2, 0x38]\n" - "\tldr r2, [r2, 0x34]\n" - "\tstr r2, [r1]\n" - "\tstr r3, [r1, 0x4]\n" - "\tbx lr\n" - "\t.align 2, 0\n" -"_0808DD64: .4byte gMonsterParameters"); -#endif + // The return value is not used anywhere, but necessary for the function to match. + return r0; } u8 sub_808DD68(s16 r0, u32 r1) @@ -60,106 +41,30 @@ u8 sub_808DD68(s16 r0, u32 r1) } } -#ifndef NONMATCHING -NAKED -#endif struct OpenedFile *sub_808DD90(s16 r0) { -#ifdef NONMATCHING // Looks like this loads the dialogue sprite for the pokemon - // Two words: register memes... else it matches - // Fix this and then one after matches too char buffer[0xC]; if(gMonsterParameters[r0].dialogue_sprites == 0) { return NULL; } - sprintf(buffer, &gUnknown_8107684); + sprintf(buffer, gUnknown_8107684, r0); // "kao%03d" return OpenFile(buffer, &gUnknown_8510000); -#else - asm_unified("\tpush {lr}\n" - "\tsub sp, 0xC\n" - "\tlsls r0, 16\n" - "\tasrs r2, r0, 16\n" - "\tldr r0, _0808DDBC\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r2, 3\n" - "\tadds r0, r2\n" - "\tlsls r0, 3\n" - "\tadds r0, r1\n" - "\tldrh r0, [r0, 0x10]\n" - "\tcmp r0, 0\n" - "\tbeq _0808DDC8\n" - "\tldr r1, _0808DDC0\n" - "\tmov r0, sp\n" - "\tbl sprintf\n" - "\tldr r1, _0808DDC4\n" - "\tmov r0, sp\n" - "\tbl OpenFile\n" - "\tb _0808DDCA\n" - "\t.align 2, 0\n" -"_0808DDBC: .4byte gMonsterParameters\n" -"_0808DDC0: .4byte gUnknown_8107684\n" -"_0808DDC4: .4byte gUnknown_8510000\n" -"_0808DDC8:\n" - "\tmovs r0, 0\n" -"_0808DDCA:\n" - "\tadd sp, 0xC\n" - "\tpop {r1}\n" - "\tbx r1"); -#endif } -#ifndef NONMATCHING -NAKED -#endif struct OpenedFile *sub_808DDD0(s16 r0) { -#ifdef NONMATCHING // Looks like this loads the dialogue sprite for the pokemon - // Two words: register memes... else it matches char buffer[0xC]; if(gMonsterParameters[r0].dialogue_sprites == 0) { return NULL; } - sprintf(buffer, &gUnknown_8107684); + sprintf(buffer, gUnknown_8107684, r0); // "kao%03d" return OpenFileAndGetFileDataPtr(buffer, &gUnknown_8510000); -#else - asm_unified("\tpush {lr}\n" - "\tsub sp, 0xC\n" - "\tlsls r0, 16\n" - "\tasrs r2, r0, 16\n" - "\tldr r0, _0808DDFC\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r2, 3\n" - "\tadds r0, r2\n" - "\tlsls r0, 3\n" - "\tadds r0, r1\n" - "\tldrh r0, [r0, 0x10]\n" - "\tcmp r0, 0\n" - "\tbeq _0808DE08\n" - "\tldr r1, _0808DE00\n" - "\tmov r0, sp\n" - "\tbl sprintf\n" - "\tldr r1, _0808DE04\n" - "\tmov r0, sp\n" - "\tbl OpenFileAndGetFileDataPtr\n" - "\tb _0808DE0A\n" - "\t.align 2, 0\n" - "_0808DDFC: .4byte gMonsterParameters\n" - "_0808DE00: .4byte gUnknown_8107684\n" - "_0808DE04: .4byte gUnknown_8510000\n" - "_0808DE08:\n" - "\tmovs r0, 0\n" - "_0808DE0A:\n" - "\tadd sp, 0xC\n" - "\tpop {r1}\n" - "\tbx r1"); - -#endif } bool8 sub_808DE10(s16 r0, s32 r1) -- cgit v1.2.3