mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-25 07:28:17 -05:00
Merge branch 'master' into code_8069E0C
This commit is contained in:
commit
4c379c3c7e
|
|
@ -36,11 +36,8 @@ void LoadMonsterParameters(void);
|
|||
unkStruct_203B45C *GetRecruitedPokemon(void);
|
||||
void InitializeRecruitedPokemon(void);
|
||||
|
||||
// This needs to be overridden in status_actions.c
|
||||
// Uncomment when fixed
|
||||
//u8 GetBodySize(s16 index);
|
||||
|
||||
|
||||
u8 GetBodySize(s32 index);
|
||||
void CopyMonsterNameToBuffer(u8 * buffer, s32 index);
|
||||
void CopyYellowMonsterNametoBuffer(u8 *buffer, s16 index);
|
||||
void PrintColoredPokeNameToBuffer(u8 *buffer, PokemonStruct1 *pokemon, s32 colorNum);
|
||||
|
|
|
|||
|
|
@ -15,10 +15,12 @@ struct unkShiftData
|
|||
// size: 0xC
|
||||
struct unkChar
|
||||
{
|
||||
u32 *unk0;
|
||||
u16 *unk0;
|
||||
u16 unk4;
|
||||
s16 unk6;
|
||||
u32 fill8;
|
||||
u8 fill8;
|
||||
u8 fill9;
|
||||
u8 unkA;
|
||||
};
|
||||
|
||||
struct unkStruct_80B8824
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ extern s32 sub_80902C8(u8 dungeon);
|
|||
extern s16 ExtractSpeciesIndex(UnkDungeonGlobal_unk1CD98 *r0);
|
||||
extern u32 ExtractLevel(UnkDungeonGlobal_unk1CD98 *r0);
|
||||
extern void sub_808E9C4(UnkDungeonGlobal_unk1CD98 *r0, s16 r1);
|
||||
extern u8 GetBodySize(s16 index);
|
||||
extern bool8 sub_80848EC(void);
|
||||
extern u8 GetFloorType(void);
|
||||
extern const u8 *GetDungeonName2(u8 dungeon);
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@ u8 sub_806B8CC();
|
|||
bool8 sub_805FBE8(u8 *a0);
|
||||
void sub_8083D88();
|
||||
u8 sub_808529C(s32);
|
||||
extern u8 GetBodySize(s16 index);
|
||||
void nullsub_96(Entity *pokemon,Entity *target);
|
||||
u8 sub_8097900(s16);
|
||||
void sub_806F910(void);
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include "dungeon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "status_checks_1.h"
|
||||
#include "code_805D8C8.h"
|
||||
#include "structs/str_806B7F8.h"
|
||||
|
||||
EWRAM_DATA s32 gUnknown_202F31C[2] = {0, 0};
|
||||
|
|
@ -55,6 +56,9 @@ extern s16 sub_803D970(u32);
|
|||
extern s32 sub_803DA20(s32 param_1);
|
||||
extern bool8 sub_806AA0C(s32, u32);
|
||||
extern bool8 sub_8083660(DungeonPos *param_1);
|
||||
extern bool8 sub_803D930(u32);
|
||||
extern void sub_8072B78(Entity *pokemon, Entity *target, s16 id);
|
||||
extern s32 sub_808E400(s32 _species, s16* _a2, bool32 bodySizeCheck, bool32 shedinjaCheck);
|
||||
void GetPokemonLevelData(LevelData* a1, s32 _id, s32 level); // TODO: change to s32
|
||||
|
||||
void sub_8071B48(void)
|
||||
|
|
@ -176,312 +180,109 @@ void sub_8071D4C(Entity *pokemon, Entity *target, s32 exp)
|
|||
}
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/Wcmvb - (98.45% matching - Seth)
|
||||
NAKED
|
||||
void sub_8071DA4(Entity *entity)
|
||||
{
|
||||
asm_unified(
|
||||
" push {r4-r7,lr}\n"
|
||||
" mov r7, r10\n"
|
||||
" mov r6, r9\n"
|
||||
" mov r5, r8\n"
|
||||
" push {r5-r7}\n"
|
||||
" sub sp, 0xD4\n"
|
||||
" str r0, [sp, 0xB4]\n"
|
||||
" ldr r2, _08071E44\n"
|
||||
" ldr r1, [r2]\n"
|
||||
" ldrb r0, [r1, 0xD]\n"
|
||||
" cmp r0, 0\n"
|
||||
" bne _08071DBE\n"
|
||||
" b _08071FE2\n"
|
||||
"_08071DBE:\n"
|
||||
" movs r0, 0\n"
|
||||
" strb r0, [r1, 0xD]\n"
|
||||
" ldr r0, [r2]\n"
|
||||
" ldrb r0, [r0, 0x10]\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _08071DCC\n"
|
||||
" b _08071FE2\n"
|
||||
"_08071DCC:\n"
|
||||
" ldr r0, [sp, 0xB4]\n"
|
||||
" bl EntityExists\n"
|
||||
" lsls r0, 24\n"
|
||||
" cmp r0, 0\n"
|
||||
" bne _08071DE2\n"
|
||||
" mov r0, sp\n"
|
||||
" bl sub_80457DC\n"
|
||||
" mov r0, sp\n"
|
||||
" str r0, [sp, 0xB4]\n"
|
||||
"_08071DE2:\n"
|
||||
" movs r4, 0\n"
|
||||
"_08071DE4:\n"
|
||||
" movs r5, 0\n"
|
||||
" ldr r0, _08071E44\n"
|
||||
" ldr r0, [r0]\n"
|
||||
" lsls r1, r4, 2\n"
|
||||
" ldr r2, _08071E48\n"
|
||||
" adds r0, r2\n"
|
||||
" adds r0, r1\n"
|
||||
" ldr r0, [r0]\n"
|
||||
" mov r8, r0\n"
|
||||
" movs r0, 0\n"
|
||||
" str r0, [sp, 0xB8]\n"
|
||||
" movs r1, 0\n"
|
||||
" movs r2, 0\n"
|
||||
" str r1, [sp, 0xBC]\n"
|
||||
" str r2, [sp, 0xC0]\n"
|
||||
" movs r0, 0\n"
|
||||
" movs r1, 0\n"
|
||||
" str r0, [sp, 0xC4]\n"
|
||||
" str r1, [sp, 0xC8]\n"
|
||||
" adds r1, r4, 0x1\n"
|
||||
" str r1, [sp, 0xCC]\n"
|
||||
" mov r2, r8\n"
|
||||
" cmp r2, 0\n"
|
||||
" bne _08071E16\n"
|
||||
" b _08071FDA\n"
|
||||
"_08071E16:\n"
|
||||
" mov r0, r8\n"
|
||||
" bl EntityExists\n"
|
||||
" lsls r0, 24\n"
|
||||
" cmp r0, 0\n"
|
||||
" bne _08071E24\n"
|
||||
" b _08071FDA\n"
|
||||
"_08071E24:\n"
|
||||
" mov r0, r8\n"
|
||||
" ldr r6, [r0, 0x70]\n"
|
||||
" movs r1, 0xE\n"
|
||||
" ldrsh r0, [r6, r1]\n"
|
||||
" cmp r0, 0\n"
|
||||
" bne _08071E32\n"
|
||||
" b _08071FDA\n"
|
||||
"_08071E32:\n"
|
||||
" adds r1, r6, 0\n"
|
||||
" adds r1, 0xF9\n"
|
||||
" ldrb r0, [r1]\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _08071E4C\n"
|
||||
" add r2, sp, 0xB8\n"
|
||||
" ldrb r2, [r2]\n"
|
||||
" strb r2, [r1]\n"
|
||||
" b _08071FCA\n"
|
||||
" .align 2, 0\n"
|
||||
"_08071E44: .4byte gDungeon\n"
|
||||
"_08071E48: .4byte 0x000135cc\n"
|
||||
"_08071E4C:\n"
|
||||
" movs r1, 254\n"
|
||||
" lsls r1, 1\n"
|
||||
" adds r0, r6, r1\n"
|
||||
" ldr r0, [r0]\n"
|
||||
" mov r10, r0\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _08071EB6\n"
|
||||
" ldrb r0, [r6, 0x7]\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _08071E68\n"
|
||||
" ldrb r1, [r6, 0x9]\n"
|
||||
" add r0, sp, 0x74\n"
|
||||
" bl GetAvailTacticsforLvl_Bool\n"
|
||||
"_08071E68:\n"
|
||||
" movs r0, 0x10\n"
|
||||
" ldrsh r2, [r6, r0]\n"
|
||||
" str r2, [sp, 0xB8]\n"
|
||||
" ldrb r1, [r6, 0x14]\n"
|
||||
" str r1, [sp, 0xBC]\n"
|
||||
" ldrb r2, [r6, 0x15]\n"
|
||||
" str r2, [sp, 0xC0]\n"
|
||||
" ldrb r0, [r6, 0x16]\n"
|
||||
" str r0, [sp, 0xC4]\n"
|
||||
" ldrb r1, [r6, 0x17]\n"
|
||||
" str r1, [sp, 0xC8]\n"
|
||||
" ldrb r0, [r6, 0x9]\n"
|
||||
" cmp r0, 0x64\n"
|
||||
" beq _08071EB6\n"
|
||||
" ldr r0, [r6, 0x18]\n"
|
||||
" add r0, r10\n"
|
||||
" str r0, [r6, 0x18]\n"
|
||||
" mov r2, r10\n"
|
||||
" ldr r0, _08071EE8\n"
|
||||
" str r2, [r0]\n"
|
||||
" ldr r0, _08071EEC\n"
|
||||
" adds r1, r6, 0\n"
|
||||
" movs r2, 0\n"
|
||||
" bl SetMessageArgument_2\n"
|
||||
" ldr r0, _08071EF0\n"
|
||||
" ldr r2, [r0]\n"
|
||||
" ldr r0, [sp, 0xB4]\n"
|
||||
" mov r1, r8\n"
|
||||
" bl TryDisplayDungeonLoggableMessage3\n"
|
||||
" ldr r0, [sp, 0xB4]\n"
|
||||
" mov r1, r8\n"
|
||||
" movs r2, 0x1\n"
|
||||
" movs r3, 0x1\n"
|
||||
" bl sub_80723D0\n"
|
||||
" lsls r0, 24\n"
|
||||
" lsrs r5, r0, 24\n"
|
||||
"_08071EB6:\n"
|
||||
" ldr r1, _08071EF4\n"
|
||||
" adds r0, r6, r1\n"
|
||||
" ldrb r0, [r0]\n"
|
||||
" adds r4, 0x1\n"
|
||||
" str r4, [sp, 0xCC]\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _08071F3A\n"
|
||||
" movs r2, 0x2\n"
|
||||
" ldrsh r0, [r6, r2]\n"
|
||||
" add r1, sp, 0x8C\n"
|
||||
" movs r2, 0\n"
|
||||
" movs r3, 0\n"
|
||||
" bl sub_808E400\n"
|
||||
" adds r7, r0, 0\n"
|
||||
" add r0, sp, 0x8C\n"
|
||||
" mov r9, r0\n"
|
||||
" cmp r7, 0\n"
|
||||
" beq _08071F38\n"
|
||||
" adds r0, r7, 0\n"
|
||||
" bl DungeonRandInt\n"
|
||||
" adds r4, r0, 0\n"
|
||||
" movs r1, 0\n"
|
||||
" b _08071F02\n"
|
||||
" .align 2, 0\n"
|
||||
"_08071EE8: .4byte gFormatArgs\n"
|
||||
"_08071EEC: .4byte gFormatBuffer_Monsters\n"
|
||||
"_08071EF0: .4byte gUnknown_80F9E64\n"
|
||||
"_08071EF4: .4byte 0x00000149\n"
|
||||
"_08071EF8:\n"
|
||||
" adds r4, 0x1\n"
|
||||
" cmp r4, r7\n"
|
||||
" blt _08071F00\n"
|
||||
" movs r4, 0\n"
|
||||
"_08071F00:\n"
|
||||
" adds r1, 0x1\n"
|
||||
"_08071F02:\n"
|
||||
" cmp r1, r7\n"
|
||||
" bge _08071F38\n"
|
||||
" lsls r0, r4, 1\n"
|
||||
" mov r2, r9\n"
|
||||
" adds r5, r2, r0\n"
|
||||
" movs r2, 0\n"
|
||||
" ldrsh r0, [r5, r2]\n"
|
||||
" str r1, [sp, 0xD0]\n"
|
||||
" bl sub_803D930\n"
|
||||
" lsls r0, 24\n"
|
||||
" ldr r1, [sp, 0xD0]\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _08071EF8\n"
|
||||
" movs r2, 0\n"
|
||||
" ldrsh r0, [r5, r2]\n"
|
||||
" bl GetSpriteData\n"
|
||||
" ldr r1, [sp, 0xD0]\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _08071EF8\n"
|
||||
" movs r0, 0\n"
|
||||
" ldrsh r2, [r5, r0]\n"
|
||||
" ldr r0, [sp, 0xB4]\n"
|
||||
" mov r1, r8\n"
|
||||
" bl sub_8072B78\n"
|
||||
"_08071F38:\n"
|
||||
" movs r5, 0\n"
|
||||
"_08071F3A:\n"
|
||||
" cmp r5, 0\n"
|
||||
" beq _08071F7A\n"
|
||||
" ldrb r0, [r6, 0x6]\n"
|
||||
" cmp r0, 0\n"
|
||||
" bne _08071F7A\n"
|
||||
" movs r1, 0x10\n"
|
||||
" ldrsh r0, [r6, r1]\n"
|
||||
" ldr r2, [sp, 0xB8]\n"
|
||||
" subs r0, r2\n"
|
||||
" ldr r1, _08071FF4\n"
|
||||
" str r0, [r1]\n"
|
||||
" ldrb r0, [r6, 0x14]\n"
|
||||
" ldr r2, [sp, 0xBC]\n"
|
||||
" subs r0, r2\n"
|
||||
" str r0, [r1, 0x4]\n"
|
||||
" ldrb r0, [r6, 0x16]\n"
|
||||
" ldr r1, [sp, 0xC4]\n"
|
||||
" subs r0, r1\n"
|
||||
" ldr r2, _08071FF4\n"
|
||||
" str r0, [r2, 0x8]\n"
|
||||
" ldrb r0, [r6, 0x15]\n"
|
||||
" ldr r1, [sp, 0xC0]\n"
|
||||
" subs r0, r1\n"
|
||||
" str r0, [r2, 0xC]\n"
|
||||
" ldrb r0, [r6, 0x17]\n"
|
||||
" ldr r2, [sp, 0xC8]\n"
|
||||
" subs r0, r2\n"
|
||||
" ldr r1, _08071FF4\n"
|
||||
" str r0, [r1, 0x10]\n"
|
||||
" mov r0, r8\n"
|
||||
" bl sub_807218C\n"
|
||||
"_08071F7A:\n"
|
||||
" mov r2, r10\n"
|
||||
" cmp r2, 0\n"
|
||||
" beq _08071FCA\n"
|
||||
" ldrb r0, [r6, 0x7]\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _08071FCA\n"
|
||||
" ldrb r1, [r6, 0x9]\n"
|
||||
" add r0, sp, 0x80\n"
|
||||
" bl GetAvailTacticsforLvl_Bool\n"
|
||||
" movs r4, 0\n"
|
||||
" add r7, sp, 0x74\n"
|
||||
" add r5, sp, 0x80\n"
|
||||
"_08071F94:\n"
|
||||
" adds r0, r7, r4\n"
|
||||
" ldrb r0, [r0]\n"
|
||||
" cmp r0, 0\n"
|
||||
" bne _08071FC4\n"
|
||||
" adds r0, r5, r4\n"
|
||||
" ldrb r0, [r0]\n"
|
||||
" cmp r0, 0x1\n"
|
||||
" bne _08071FC4\n"
|
||||
" ldr r0, _08071FF8\n"
|
||||
" mov r1, r8\n"
|
||||
" movs r2, 0\n"
|
||||
" bl SubstitutePlaceholderStringTags\n"
|
||||
" lsls r1, r4, 24\n"
|
||||
" lsrs r1, 24\n"
|
||||
" ldr r0, _08071FFC\n"
|
||||
" bl CopyTacticsNameToBuffer\n"
|
||||
" ldr r0, _08072000\n"
|
||||
" ldr r2, [r0]\n"
|
||||
" ldr r0, [sp, 0xB4]\n"
|
||||
" mov r1, r8\n"
|
||||
" bl TryDisplayDungeonLoggableMessage3\n"
|
||||
"_08071FC4:\n"
|
||||
" adds r4, 0x1\n"
|
||||
" cmp r4, 0xB\n"
|
||||
" ble _08071F94\n"
|
||||
"_08071FCA:\n"
|
||||
" movs r1, 254\n"
|
||||
" lsls r1, 1\n"
|
||||
" adds r0, r6, r1\n"
|
||||
" movs r1, 0\n"
|
||||
" str r1, [r0]\n"
|
||||
" ldr r2, _08072004\n"
|
||||
" adds r0, r6, r2\n"
|
||||
" strb r1, [r0]\n"
|
||||
"_08071FDA:\n"
|
||||
" ldr r4, [sp, 0xCC]\n"
|
||||
" cmp r4, 0x13\n"
|
||||
" bgt _08071FE2\n"
|
||||
" b _08071DE4\n"
|
||||
"_08071FE2:\n"
|
||||
" add sp, 0xD4\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"
|
||||
" .align 2, 0\n"
|
||||
"_08071FF4: .4byte gFormatArgs\n"
|
||||
"_08071FF8: .4byte gFormatBuffer_Monsters\n"
|
||||
"_08071FFC: .4byte gFormatBuffer_Items\n"
|
||||
"_08072000: .4byte gUnknown_80FF730\n"
|
||||
"_08072004: .4byte 0x00000149");
|
||||
int counter;
|
||||
s16 *id;
|
||||
Entity EStack_f4;
|
||||
u8 tacticsBuffer1[NUM_TACTICS];
|
||||
u8 tacticsBuffer2[NUM_TACTICS];
|
||||
s16 idStack [20];
|
||||
Entity *entityPtr; // 0xB4
|
||||
s32 index;
|
||||
|
||||
entityPtr = entity;
|
||||
if ((gDungeon->unkD != 0) && (gDungeon->unkD = 0, gDungeon->unk10 == 0)) {
|
||||
if (!EntityExists(entityPtr)) {
|
||||
sub_80457DC(&EStack_f4);
|
||||
entityPtr = &EStack_f4;
|
||||
}
|
||||
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
|
||||
{
|
||||
EntityInfo *info;
|
||||
bool8 flag = FALSE;
|
||||
Entity *target = gDungeon->activePokemon[index];
|
||||
s32 maxHP = 0;
|
||||
u32 atk[2] = {0, 0};
|
||||
u32 def[2] = {0, 0};
|
||||
|
||||
if (target == NULL)
|
||||
continue;
|
||||
if (!EntityExists(target))
|
||||
continue;
|
||||
|
||||
info = GetEntInfo(target);
|
||||
if (info->HP != 0) {
|
||||
if (info->unkF9 != 0) {
|
||||
info->unkF9 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
s32 expGained = info->expGainedInTurn;
|
||||
if (expGained != 0) {
|
||||
if (info->isTeamLeader) {
|
||||
GetAvailTacticsforLvl_Bool(tacticsBuffer1, info->level);
|
||||
}
|
||||
maxHP = info->maxHPStat;
|
||||
atk[0] = info->atk[0];
|
||||
atk[1] = info->atk[1];
|
||||
def[0] = info->def[0];
|
||||
def[1] = info->def[1];
|
||||
if (info->level != 100) {
|
||||
info->exp += expGained;
|
||||
gFormatArgs[0] = expGained;
|
||||
SetMessageArgument_2(gFormatBuffer_Monsters[0],info,0);
|
||||
TryDisplayDungeonLoggableMessage3(entityPtr,target,*gUnknown_80F9E64); // $m0 gained $d0 Exp Points
|
||||
flag = sub_80723D0(entityPtr,target,1,1);
|
||||
}
|
||||
}
|
||||
if (info->unk149 != 0) {
|
||||
s32 numMons = sub_808E400(info->id, idStack, FALSE, FALSE);
|
||||
if (numMons != 0) {
|
||||
s32 randIndex = DungeonRandInt(numMons);
|
||||
for(counter = 0; counter < numMons; counter++)
|
||||
{
|
||||
id = &idStack[randIndex];
|
||||
if ((sub_803D930(*id) != 0) && (GetSpriteData(*id) != NULL)) {
|
||||
sub_8072B78(entityPtr,target,*id);
|
||||
break;
|
||||
}
|
||||
randIndex++;
|
||||
if (randIndex >= numMons) {
|
||||
randIndex = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
flag = FALSE;
|
||||
}
|
||||
if (flag && (!info->isNotTeamMember)) {
|
||||
gFormatArgs[0] = info->maxHPStat - maxHP;
|
||||
gFormatArgs[1] = info->atk[0] - atk[0];
|
||||
gFormatArgs[2] = info->def[0] - def[0];
|
||||
gFormatArgs[3] = info->atk[1] - atk[1];
|
||||
gFormatArgs[4] = info->def[1] - def[1];
|
||||
sub_807218C(target);
|
||||
}
|
||||
if ((expGained != 0) && (info->isTeamLeader)) {
|
||||
s32 tacticIndex;
|
||||
|
||||
GetAvailTacticsforLvl_Bool(tacticsBuffer2,info->level);
|
||||
for(tacticIndex = 0; tacticIndex < NUM_TACTICS; tacticIndex++)
|
||||
{
|
||||
if ((tacticsBuffer1[tacticIndex] == 0) && (tacticsBuffer2[tacticIndex] == 1)) {
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
CopyTacticsNameToBuffer(gFormatBuffer_Items[0],tacticIndex);
|
||||
TryDisplayDungeonLoggableMessage3(entityPtr,target,*gUnknown_80FF730); // $i0 was added to $m0's list of usable tactics
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
info->expGainedInTurn = 0;
|
||||
info->unk149 = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void sub_8072008(Entity *pokemon, Entity *target, s32 level, u8 param_4, u8 param_5)
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@ extern bool8 sub_8040BB0(Entity *entity, Move *move, bool8);
|
|||
extern void sub_8040DA0(Entity *entity, Move *move);
|
||||
extern u16 sub_80412E0(u16 moveId, u8 weather, u8 a2);
|
||||
extern void sub_800569C(DungeonPos *, axdata *, u8);
|
||||
extern u8 GetBodySize(s16 index);
|
||||
extern void sub_800EF10(u16 r0);
|
||||
extern s32 sub_800E710(s16 a0, u16 a1);
|
||||
extern void sub_800E3AC(s32 a0, DungeonPos *pos, s32 a2);
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
#include "dungeon_pokemon_attributes.h"
|
||||
#include "dungeon_serializer.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "pokemon.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
|
||||
extern u8 gUnknown_202EE70[MAX_TEAM_BODY_SIZE];
|
||||
|
|
@ -133,7 +134,6 @@ static Entity* sub_80828E0(s16 id, s16 apparentID, s32 index);
|
|||
static Entity* sub_8082A08(s16 id, s16 apparentID, s32 index);
|
||||
|
||||
// These externs are from other files
|
||||
extern u8 GetBodySize(s16 index);
|
||||
extern void sub_80460F8(DungeonPos *, Item *, u32);
|
||||
|
||||
void SaveDungeonState(u8 *buffer, u32 bufLen)
|
||||
|
|
|
|||
|
|
@ -36,8 +36,6 @@ extern int sprintf(char *, const char *, ...);
|
|||
extern u32 ReturnIntFromChar(u8 r0);
|
||||
extern void xxx_pokemon2_to_pokemonstruct_808DF44(PokemonStruct1*, PokemonStruct2*);
|
||||
|
||||
extern u8 GetBodySize(s16 index);
|
||||
|
||||
struct unkStruct_8107654 {
|
||||
s16 unk0;
|
||||
s16 fill2;
|
||||
|
|
@ -373,9 +371,10 @@ u8 *GetCategoryString(s16 index)
|
|||
return gMonsterParameters[index].category;
|
||||
}
|
||||
|
||||
u8 GetBodySize(s16 index)
|
||||
u8 GetBodySize(s32 index)
|
||||
{
|
||||
return gMonsterParameters[index].bodySize;
|
||||
s16 index_s16 = index;
|
||||
return gMonsterParameters[index_s16].bodySize;
|
||||
}
|
||||
|
||||
u8 GetShadowSize(s16 index)
|
||||
|
|
@ -898,32 +897,37 @@ s32 GetEvolutionSequence(PokemonStruct1* pokemon, struct EvolveStage* a2)
|
|||
#endif
|
||||
}
|
||||
|
||||
s32 sub_808E400(s32 _species, s16* _a2, bool32 bodySizeCheck, bool32 shedinjaCheck)
|
||||
s32 sub_808E400(s32 _species, s16* _a2, bool32 _bodySizeCheck, bool32 _shedinjaCheck)
|
||||
{
|
||||
// this is horrible
|
||||
s32 i;
|
||||
register s32 species asm("r9") = (s16)_species;
|
||||
bool32 bodySizeCheck_bool32 = (bool8)bodySizeCheck;
|
||||
bool32 shedinjaCheck_bool32 = (bool8)shedinjaCheck;
|
||||
s32 count = 0;
|
||||
register s16* a2 asm("r6");
|
||||
i = 1;
|
||||
a2 = _a2;
|
||||
for (i = 1; i < MONSTER_MAX; i++) {
|
||||
register s32 current asm("r8") = (s16)i;
|
||||
if (species != GetPokemonEvolveFrom(i)) {
|
||||
continue;
|
||||
// This is horrible
|
||||
s32 species = SpeciesId(_species);
|
||||
bool8 bodySizeCheck = _bodySizeCheck;
|
||||
bool8 shedinjaCheck = _shedinjaCheck;
|
||||
s32 count = 0;
|
||||
s32 i = 1;
|
||||
s16 *a2 = _a2;
|
||||
|
||||
for (i = 1; i < MONSTER_MAX; i++) {
|
||||
s32 loopSpeciesId = SpeciesId(i);
|
||||
#ifdef NONMATCHING
|
||||
s32 loopSpeciesId2 = SpeciesId(i);
|
||||
#else
|
||||
register s32 loopSpeciesId2 asm("r8") = SpeciesId(i);
|
||||
#endif // NONMATCHING
|
||||
|
||||
if (species != GetPokemonEvolveFrom(loopSpeciesId)) {
|
||||
continue;
|
||||
}
|
||||
if (!bodySizeCheck && GetBodySize(species) != GetBodySize(loopSpeciesId)) {
|
||||
continue;
|
||||
}
|
||||
if (!shedinjaCheck && loopSpeciesId == MONSTER_SHEDINJA) {
|
||||
continue;
|
||||
}
|
||||
*a2++ = loopSpeciesId2;
|
||||
count++;
|
||||
}
|
||||
if (!bodySizeCheck_bool32 && (GetBodySize(species) != GetBodySize(i))) {
|
||||
continue;
|
||||
}
|
||||
if (!shedinjaCheck_bool32 && ((s16)i == MONSTER_SHEDINJA)) {
|
||||
continue;
|
||||
}
|
||||
*a2++ = current;
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
return count;
|
||||
}
|
||||
|
||||
void sub_808E490(Move* a1, s16 species)
|
||||
|
|
|
|||
782
src/text2.c
782
src/text2.c
|
|
@ -1254,578 +1254,208 @@ bool8 sub_8007464(void)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/F06Ty
|
||||
NAKED
|
||||
u32 xxx_draw_char(UnkTextStruct1 *a0, s32 x, s32 y, u32 a3, u32 color, u32 a5)
|
||||
extern const u32 gUnknown_80B853C[16];
|
||||
|
||||
struct CharMapStruct
|
||||
{
|
||||
asm_unified(
|
||||
"push {r4-r7,lr}\n"
|
||||
"\tmov r7, r10\n"
|
||||
"\tmov r6, r9\n"
|
||||
"\tmov r5, r8\n"
|
||||
"\tpush {r5-r7}\n"
|
||||
"\tsub sp, 0x28\n"
|
||||
"\tadds r6, r1, 0\n"
|
||||
"\tmov r10, r2\n"
|
||||
"\tadds r4, r3, 0\n"
|
||||
"\tldr r2, [sp, 0x48]\n"
|
||||
"\tldr r3, [sp, 0x4C]\n"
|
||||
"\tlsls r1, r3, 3\n"
|
||||
"\tadds r1, r3\n"
|
||||
"\tlsls r1, 3\n"
|
||||
"\tadds r5, r0, r1\n"
|
||||
"\tldr r1, _080074B8\n"
|
||||
"\tmovs r0, 0xF\n"
|
||||
"\tands r2, r0\n"
|
||||
"\tlsls r2, 2\n"
|
||||
"\tadds r2, r1\n"
|
||||
"\tldr r2, [r2]\n"
|
||||
"\tstr r2, [sp, 0x18]\n"
|
||||
"\tldr r0, _080074BC\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tcmp r0, 0x1\n"
|
||||
"\tbne _080074CC\n"
|
||||
"\tcmp r4, 0x70\n"
|
||||
"\tbeq _080074B0\n"
|
||||
"\tcmp r4, 0x6A\n"
|
||||
"\tbeq _080074B0\n"
|
||||
"\tcmp r4, 0x71\n"
|
||||
"\tbeq _080074B0\n"
|
||||
"\tcmp r4, 0x79\n"
|
||||
"\tbeq _080074B0\n"
|
||||
"\tcmp r4, 0x67\n"
|
||||
"\tbne _080074C0\n"
|
||||
"_080074B0:\n"
|
||||
"\tmovs r0, 0x2\n"
|
||||
"\tadd r10, r0\n"
|
||||
"\tb _080074CC\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080074B8: .4byte gUnknown_80B853C\n"
|
||||
"_080074BC: .4byte gCurrentCharmap\n"
|
||||
"_080074C0:\n"
|
||||
"\tldr r0, _080074F8\n"
|
||||
"\tcmp r4, r0\n"
|
||||
"\tbne _080074CC\n"
|
||||
"\tmovs r1, 0x2\n"
|
||||
"\tnegs r1, r1\n"
|
||||
"\tadd r10, r1\n"
|
||||
"_080074CC:\n"
|
||||
"\tadds r0, r4, 0\n"
|
||||
"\tbl GetCharacter\n"
|
||||
"\tstr r0, [sp]\n"
|
||||
"\tldr r2, [r0]\n"
|
||||
"\tstr r2, [sp, 0x4]\n"
|
||||
"\tstr r2, [sp, 0xC]\n"
|
||||
"\tadds r3, r2, 0\n"
|
||||
"\tsubs r3, 0x6\n"
|
||||
"\tstr r3, [sp, 0x8]\n"
|
||||
"\tldr r0, _080074FC\n"
|
||||
"\tldrb r0, [r0]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _08007500\n"
|
||||
"\tldr r4, [sp]\n"
|
||||
"\tldrb r1, [r4, 0xA]\n"
|
||||
"\tlsrs r7, r1, 1\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tadds r2, r7, 0\n"
|
||||
"\tands r2, r0\n"
|
||||
"\tstr r2, [sp, 0x1C]\n"
|
||||
"\tb _08007508\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080074F8: .4byte 0x00008199\n"
|
||||
"_080074FC: .4byte gDrawTextShadow\n"
|
||||
"_08007500:\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tstr r3, [sp, 0x1C]\n"
|
||||
"\tldr r4, [sp]\n"
|
||||
"\tldrb r1, [r4, 0xA]\n"
|
||||
"_08007508:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _08007512\n"
|
||||
"\tb _08007670\n"
|
||||
"_08007512:\n"
|
||||
"\tmov r0, r10\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbge _0800751A\n"
|
||||
"\tadds r0, 0x7\n"
|
||||
"_0800751A:\n"
|
||||
"\tasrs r4, r0, 3\n"
|
||||
"\tmovs r7, 0x4\n"
|
||||
"\tldrsh r0, [r5, r7]\n"
|
||||
"\tmuls r0, r4\n"
|
||||
"\tadds r2, r6, 0\n"
|
||||
"\tcmp r6, 0\n"
|
||||
"\tbge _0800752A\n"
|
||||
"\tadds r2, r6, 0x7\n"
|
||||
"_0800752A:\n"
|
||||
"\tasrs r2, 3\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tlsls r0, 5\n"
|
||||
"\tldr r1, [r5, 0x18]\n"
|
||||
"\tadds r3, r1, r0\n"
|
||||
"\tlsls r0, r4, 3\n"
|
||||
"\tmov r1, r10\n"
|
||||
"\tsubs r0, r1, r0\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r3, r0\n"
|
||||
"\tlsls r0, r2, 3\n"
|
||||
"\tsubs r0, r6, r0\n"
|
||||
"\tlsls r0, 4\n"
|
||||
"\tldr r1, _08007664\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tmov r12, r0\n"
|
||||
"\tmov r9, r2\n"
|
||||
"\tstr r4, [sp, 0x14]\n"
|
||||
"\tmovs r2, 0x8\n"
|
||||
"\tldrsh r0, [r5, r2]\n"
|
||||
"\tcmp r4, r0\n"
|
||||
"\tblt _08007558\n"
|
||||
"\tb _0800786C\n"
|
||||
"_08007558:\n"
|
||||
"\tmovs r4, 0\n"
|
||||
"\tstr r4, [sp, 0x10]\n"
|
||||
"\tldr r2, _08007668\n"
|
||||
"\tldr r1, _0800766C\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tcmp r4, r0\n"
|
||||
"\tblt _0800756E\n"
|
||||
"\tb _0800786C\n"
|
||||
"_0800756E:\n"
|
||||
"\tadds r4, r2, 0\n"
|
||||
"_08007570:\n"
|
||||
"\tldr r6, [sp, 0x4]\n"
|
||||
"\tldrh r0, [r6, 0x2]\n"
|
||||
"\tlsls r2, r0, 16\n"
|
||||
"\tldrh r0, [r6]\n"
|
||||
"\torrs r2, r0\n"
|
||||
"\tcmp r2, 0\n"
|
||||
"\tbeq _080075CC\n"
|
||||
"\tmovs r7, 0x4\n"
|
||||
"\tldrsh r0, [r5, r7]\n"
|
||||
"\tcmp r9, r0\n"
|
||||
"\tbge _080075A6\n"
|
||||
"\tmov r0, r12\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tands r1, r2\n"
|
||||
"\tldr r0, [r0, 0x8]\n"
|
||||
"\tlsls r1, r0\n"
|
||||
"\tldr r0, [r3]\n"
|
||||
"\torrs r0, r1\n"
|
||||
"\tstr r0, [r3]\n"
|
||||
"\tldr r0, [r5, 0x3C]\n"
|
||||
"\tcmp r0, r3\n"
|
||||
"\tbls _0800759E\n"
|
||||
"\tstr r3, [r5, 0x3C]\n"
|
||||
"_0800759E:\n"
|
||||
"\tldr r0, [r5, 0x40]\n"
|
||||
"\tcmp r0, r3\n"
|
||||
"\tbcs _080075A6\n"
|
||||
"\tstr r3, [r5, 0x40]\n"
|
||||
"_080075A6:\n"
|
||||
"\tmovs r1, 0x4\n"
|
||||
"\tldrsh r0, [r5, r1]\n"
|
||||
"\tsubs r0, 0x1\n"
|
||||
"\tcmp r9, r0\n"
|
||||
"\tbge _080075CC\n"
|
||||
"\tadds r3, 0x20\n"
|
||||
"\tmov r6, r12\n"
|
||||
"\tldr r0, [r6, 0x4]\n"
|
||||
"\tands r2, r0\n"
|
||||
"\tldr r0, [r6, 0xC]\n"
|
||||
"\tlsrs r2, r0\n"
|
||||
"\tldr r0, [r3]\n"
|
||||
"\torrs r0, r2\n"
|
||||
"\tstr r0, [r3]\n"
|
||||
"\tldr r0, [r5, 0x40]\n"
|
||||
"\tcmp r0, r3\n"
|
||||
"\tbcs _080075CA\n"
|
||||
"\tstr r3, [r5, 0x40]\n"
|
||||
"_080075CA:\n"
|
||||
"\tsubs r3, 0x20\n"
|
||||
"_080075CC:\n"
|
||||
"\tldr r7, [sp, 0x4]\n"
|
||||
"\tldrh r2, [r7, 0x4]\n"
|
||||
"\tcmp r2, 0\n"
|
||||
"\tbeq _08007620\n"
|
||||
"\tmovs r1, 0x4\n"
|
||||
"\tldrsh r0, [r5, r1]\n"
|
||||
"\tsubs r0, 0x1\n"
|
||||
"\tcmp r9, r0\n"
|
||||
"\tbge _080075FA\n"
|
||||
"\tadds r3, 0x20\n"
|
||||
"\tmov r6, r12\n"
|
||||
"\tldr r1, [r6]\n"
|
||||
"\tands r1, r2\n"
|
||||
"\tldr r0, [r6, 0x8]\n"
|
||||
"\tlsls r1, r0\n"
|
||||
"\tldr r0, [r3]\n"
|
||||
"\torrs r0, r1\n"
|
||||
"\tstr r0, [r3]\n"
|
||||
"\tldr r0, [r5, 0x40]\n"
|
||||
"\tcmp r0, r3\n"
|
||||
"\tbcs _080075F8\n"
|
||||
"\tstr r3, [r5, 0x40]\n"
|
||||
"_080075F8:\n"
|
||||
"\tsubs r3, 0x20\n"
|
||||
"_080075FA:\n"
|
||||
"\tmovs r7, 0x4\n"
|
||||
"\tldrsh r0, [r5, r7]\n"
|
||||
"\tsubs r0, 0x2\n"
|
||||
"\tcmp r9, r0\n"
|
||||
"\tbge _08007620\n"
|
||||
"\tadds r3, 0x40\n"
|
||||
"\tmov r1, r12\n"
|
||||
"\tldr r0, [r1, 0x4]\n"
|
||||
"\tands r2, r0\n"
|
||||
"\tldr r0, [r1, 0xC]\n"
|
||||
"\tlsrs r2, r0\n"
|
||||
"\tldr r0, [r3]\n"
|
||||
"\torrs r0, r2\n"
|
||||
"\tstr r0, [r3]\n"
|
||||
"\tldr r0, [r5, 0x40]\n"
|
||||
"\tcmp r0, r3\n"
|
||||
"\tbcs _0800761E\n"
|
||||
"\tstr r3, [r5, 0x40]\n"
|
||||
"_0800761E:\n"
|
||||
"\tsubs r3, 0x40\n"
|
||||
"_08007620:\n"
|
||||
"\tldr r2, [sp, 0x4]\n"
|
||||
"\tadds r2, 0x6\n"
|
||||
"\tstr r2, [sp, 0x4]\n"
|
||||
"\tadds r3, 0x4\n"
|
||||
"\tmovs r6, 0x1\n"
|
||||
"\tadd r10, r6\n"
|
||||
"\tmovs r0, 0x7\n"
|
||||
"\tmov r7, r10\n"
|
||||
"\tands r0, r7\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0800764E\n"
|
||||
"\tldr r0, [r5, 0x20]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r3, r0\n"
|
||||
"\tldr r0, [sp, 0x14]\n"
|
||||
"\tadds r0, 0x1\n"
|
||||
"\tstr r0, [sp, 0x14]\n"
|
||||
"\tmovs r1, 0x8\n"
|
||||
"\tldrsh r0, [r5, r1]\n"
|
||||
"\tldr r2, [sp, 0x14]\n"
|
||||
"\tcmp r2, r0\n"
|
||||
"\tblt _0800764E\n"
|
||||
"\tb _0800786C\n"
|
||||
"_0800764E:\n"
|
||||
"\tldr r6, [sp, 0x10]\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"\tstr r6, [sp, 0x10]\n"
|
||||
"\tldr r7, _0800766C\n"
|
||||
"\tldr r0, [r7]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r4\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tcmp r6, r0\n"
|
||||
"\tblt _08007570\n"
|
||||
"\tb _0800786C\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_08007664: .4byte gCharMasksOffsets\n"
|
||||
"_08007668: .4byte gCharHeight\n"
|
||||
"_0800766C: .4byte gCurrentCharmap\n"
|
||||
"_08007670:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tstr r0, [sp, 0x20]\n"
|
||||
"\tmov r0, r10\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbge _0800767C\n"
|
||||
"\tadds r0, 0x7\n"
|
||||
"_0800767C:\n"
|
||||
"\tasrs r4, r0, 3\n"
|
||||
"\tmovs r1, 0x4\n"
|
||||
"\tldrsh r0, [r5, r1]\n"
|
||||
"\tadds r1, r4, 0\n"
|
||||
"\tmuls r1, r0\n"
|
||||
"\tadds r0, r6, 0\n"
|
||||
"\tcmp r6, 0\n"
|
||||
"\tbge _0800768E\n"
|
||||
"\tadds r0, r6, 0x7\n"
|
||||
"_0800768E:\n"
|
||||
"\tasrs r2, r0, 3\n"
|
||||
"\tadds r0, r1, r2\n"
|
||||
"\tlsls r0, 5\n"
|
||||
"\tldr r1, [r5, 0x18]\n"
|
||||
"\tadds r3, r1, r0\n"
|
||||
"\tlsls r0, r4, 3\n"
|
||||
"\tmov r7, r10\n"
|
||||
"\tsubs r0, r7, r0\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r3, r0\n"
|
||||
"\tlsls r0, r2, 3\n"
|
||||
"\tsubs r0, r6, r0\n"
|
||||
"\tlsls r0, 4\n"
|
||||
"\tldr r1, _0800788C\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tmov r12, r0\n"
|
||||
"\tmov r9, r2\n"
|
||||
"\tstr r4, [sp, 0x14]\n"
|
||||
"\tmovs r1, 0x8\n"
|
||||
"\tldrsh r0, [r5, r1]\n"
|
||||
"\tcmp r4, r0\n"
|
||||
"\tblt _080076BC\n"
|
||||
"\tb _0800786C\n"
|
||||
"_080076BC:\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tstr r2, [sp, 0x10]\n"
|
||||
"\tldr r2, _08007890\n"
|
||||
"\tldr r1, _08007894\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tldr r4, [sp, 0x10]\n"
|
||||
"\tcmp r4, r0\n"
|
||||
"\tblt _080076D4\n"
|
||||
"\tb _0800786C\n"
|
||||
"_080076D4:\n"
|
||||
"\tldr r6, [sp, 0x4]\n"
|
||||
"\tldrh r0, [r6, 0x2]\n"
|
||||
"\tlsls r4, r0, 16\n"
|
||||
"\tldrh r0, [r6]\n"
|
||||
"\torrs r4, r0\n"
|
||||
"\tldr r1, _08007898\n"
|
||||
"\tands r1, r4\n"
|
||||
"\tldr r0, [sp, 0x18]\n"
|
||||
"\tands r0, r4\n"
|
||||
"\tadds r2, r1, r0\n"
|
||||
"\tldr r7, [sp, 0x1C]\n"
|
||||
"\tcmp r7, 0\n"
|
||||
"\tbeq _08007724\n"
|
||||
"\tldr r1, [sp, 0xC]\n"
|
||||
"\tldrh r0, [r1, 0x2]\n"
|
||||
"\tlsls r0, 16\n"
|
||||
"\tldrh r1, [r1]\n"
|
||||
"\torrs r0, r1\n"
|
||||
"\tlsls r1, r0, 4\n"
|
||||
"\tmvns r6, r4\n"
|
||||
"\tmov r8, r6\n"
|
||||
"\tbics r1, r4\n"
|
||||
"\tldr r7, _0800789C\n"
|
||||
"\tldr r6, [r7]\n"
|
||||
"\tands r1, r6\n"
|
||||
"\torrs r2, r1\n"
|
||||
"\tldr r0, [sp, 0x20]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _08007724\n"
|
||||
"\tldr r1, [sp, 0x8]\n"
|
||||
"\tldrh r0, [r1, 0x2]\n"
|
||||
"\tlsls r0, 16\n"
|
||||
"\tldrh r1, [r1]\n"
|
||||
"\torrs r0, r1\n"
|
||||
"\tlsls r1, r0, 4\n"
|
||||
"\teors r1, r4\n"
|
||||
"\tmov r4, r8\n"
|
||||
"\tands r1, r4\n"
|
||||
"\tands r1, r6\n"
|
||||
"\torrs r2, r1\n"
|
||||
"_08007724:\n"
|
||||
"\tcmp r2, 0\n"
|
||||
"\tbeq _08007776\n"
|
||||
"\tmovs r6, 0x4\n"
|
||||
"\tldrsh r0, [r5, r6]\n"
|
||||
"\tcmp r9, r0\n"
|
||||
"\tbge _08007750\n"
|
||||
"\tmov r7, r12\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tands r1, r2\n"
|
||||
"\tldr r0, [r7, 0x8]\n"
|
||||
"\tlsls r1, r0\n"
|
||||
"\tldr r0, [r3]\n"
|
||||
"\torrs r0, r1\n"
|
||||
"\tstr r0, [r3]\n"
|
||||
"\tldr r0, [r5, 0x3C]\n"
|
||||
"\tcmp r0, r3\n"
|
||||
"\tbls _08007748\n"
|
||||
"\tstr r3, [r5, 0x3C]\n"
|
||||
"_08007748:\n"
|
||||
"\tldr r0, [r5, 0x40]\n"
|
||||
"\tcmp r0, r3\n"
|
||||
"\tbcs _08007750\n"
|
||||
"\tstr r3, [r5, 0x40]\n"
|
||||
"_08007750:\n"
|
||||
"\tmovs r1, 0x4\n"
|
||||
"\tldrsh r0, [r5, r1]\n"
|
||||
"\tsubs r0, 0x1\n"
|
||||
"\tcmp r9, r0\n"
|
||||
"\tbge _08007776\n"
|
||||
"\tadds r3, 0x20\n"
|
||||
"\tmov r4, r12\n"
|
||||
"\tldr r0, [r4, 0x4]\n"
|
||||
"\tands r2, r0\n"
|
||||
"\tldr r0, [r4, 0xC]\n"
|
||||
"\tlsrs r2, r0\n"
|
||||
"\tldr r0, [r3]\n"
|
||||
"\torrs r0, r2\n"
|
||||
"\tstr r0, [r3]\n"
|
||||
"\tldr r0, [r5, 0x40]\n"
|
||||
"\tcmp r0, r3\n"
|
||||
"\tbcs _08007774\n"
|
||||
"\tstr r3, [r5, 0x40]\n"
|
||||
"_08007774:\n"
|
||||
"\tsubs r3, 0x20\n"
|
||||
"_08007776:\n"
|
||||
"\tldr r6, [sp, 0x4]\n"
|
||||
"\tldrh r4, [r6, 0x4]\n"
|
||||
"\tldr r1, _08007898\n"
|
||||
"\tands r1, r4\n"
|
||||
"\tldr r0, [sp, 0x18]\n"
|
||||
"\tands r0, r4\n"
|
||||
"\tadds r2, r1, r0\n"
|
||||
"\tldr r7, [sp, 0x1C]\n"
|
||||
"\tcmp r7, 0\n"
|
||||
"\tbeq _080077CC\n"
|
||||
"\tldr r1, [sp, 0xC]\n"
|
||||
"\tldrh r0, [r1, 0x4]\n"
|
||||
"\tlsls r1, r0, 4\n"
|
||||
"\tldr r6, [sp, 0xC]\n"
|
||||
"\tldrh r0, [r6, 0x2]\n"
|
||||
"\tmovs r7, 0xF\n"
|
||||
"\tmov r8, r7\n"
|
||||
"\tlsrs r0, 12\n"
|
||||
"\torrs r1, r0\n"
|
||||
"\tmvns r0, r4\n"
|
||||
"\tstr r0, [sp, 0x24]\n"
|
||||
"\tbics r1, r4\n"
|
||||
"\tldr r7, _0800789C\n"
|
||||
"\tldr r6, [r7]\n"
|
||||
"\tands r1, r6\n"
|
||||
"\torrs r2, r1\n"
|
||||
"\tldr r0, [sp, 0x20]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080077CC\n"
|
||||
"\tldr r1, [sp, 0x8]\n"
|
||||
"\tldrh r0, [r1, 0x4]\n"
|
||||
"\tlsls r1, r0, 4\n"
|
||||
"\tldr r7, [sp, 0x8]\n"
|
||||
"\tldrh r0, [r7, 0x2]\n"
|
||||
"\tlsrs r0, 12\n"
|
||||
"\tmov r7, r8\n"
|
||||
"\tands r0, r7\n"
|
||||
"\torrs r1, r0\n"
|
||||
"\teors r1, r4\n"
|
||||
"\tldr r0, [sp, 0x24]\n"
|
||||
"\tands r1, r0\n"
|
||||
"\tands r1, r6\n"
|
||||
"\torrs r2, r1\n"
|
||||
"_080077CC:\n"
|
||||
"\tcmp r2, 0\n"
|
||||
"\tbeq _0800781C\n"
|
||||
"\tmovs r1, 0x4\n"
|
||||
"\tldrsh r0, [r5, r1]\n"
|
||||
"\tsubs r0, 0x1\n"
|
||||
"\tcmp r9, r0\n"
|
||||
"\tbge _080077F6\n"
|
||||
"\tadds r3, 0x20\n"
|
||||
"\tmov r4, r12\n"
|
||||
"\tldr r1, [r4]\n"
|
||||
"\tands r1, r2\n"
|
||||
"\tldr r0, [r4, 0x8]\n"
|
||||
"\tlsls r1, r0\n"
|
||||
"\tldr r0, [r3]\n"
|
||||
"\torrs r0, r1\n"
|
||||
"\tstr r0, [r3]\n"
|
||||
"\tldr r0, [r5, 0x40]\n"
|
||||
"\tcmp r0, r3\n"
|
||||
"\tbcs _080077F4\n"
|
||||
"\tstr r3, [r5, 0x40]\n"
|
||||
"_080077F4:\n"
|
||||
"\tsubs r3, 0x20\n"
|
||||
"_080077F6:\n"
|
||||
"\tmovs r6, 0x4\n"
|
||||
"\tldrsh r0, [r5, r6]\n"
|
||||
"\tsubs r0, 0x2\n"
|
||||
"\tcmp r9, r0\n"
|
||||
"\tbge _0800781C\n"
|
||||
"\tadds r3, 0x40\n"
|
||||
"\tmov r7, r12\n"
|
||||
"\tldr r0, [r7, 0x4]\n"
|
||||
"\tands r2, r0\n"
|
||||
"\tldr r0, [r7, 0xC]\n"
|
||||
"\tlsrs r2, r0\n"
|
||||
"\tldr r0, [r3]\n"
|
||||
"\torrs r0, r2\n"
|
||||
"\tstr r0, [r3]\n"
|
||||
"\tldr r0, [r5, 0x40]\n"
|
||||
"\tcmp r0, r3\n"
|
||||
"\tbcs _0800781A\n"
|
||||
"\tstr r3, [r5, 0x40]\n"
|
||||
"_0800781A:\n"
|
||||
"\tsubs r3, 0x40\n"
|
||||
"_0800781C:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tstr r0, [sp, 0x20]\n"
|
||||
"\tldr r1, [sp, 0x4]\n"
|
||||
"\tadds r1, 0x6\n"
|
||||
"\tstr r1, [sp, 0x4]\n"
|
||||
"\tldr r2, [sp, 0x8]\n"
|
||||
"\tadds r2, 0x6\n"
|
||||
"\tstr r2, [sp, 0x8]\n"
|
||||
"\tldr r4, [sp, 0xC]\n"
|
||||
"\tadds r4, 0x6\n"
|
||||
"\tstr r4, [sp, 0xC]\n"
|
||||
"\tadds r3, 0x4\n"
|
||||
"\tadd r10, r0\n"
|
||||
"\tmovs r0, 0x7\n"
|
||||
"\tmov r6, r10\n"
|
||||
"\tands r0, r6\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _08007854\n"
|
||||
"\tldr r0, [r5, 0x20]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r3, r0\n"
|
||||
"\tldr r7, [sp, 0x14]\n"
|
||||
"\tadds r7, 0x1\n"
|
||||
"\tstr r7, [sp, 0x14]\n"
|
||||
"\tmovs r1, 0x8\n"
|
||||
"\tldrsh r0, [r5, r1]\n"
|
||||
"\tcmp r7, r0\n"
|
||||
"\tbge _0800786C\n"
|
||||
"_08007854:\n"
|
||||
"\tldr r2, [sp, 0x10]\n"
|
||||
"\tadds r2, 0x1\n"
|
||||
"\tstr r2, [sp, 0x10]\n"
|
||||
"\tldr r4, _08007894\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tldr r6, _08007890\n"
|
||||
"\tadds r0, r6\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tcmp r2, r0\n"
|
||||
"\tbge _0800786C\n"
|
||||
"\tb _080076D4\n"
|
||||
"_0800786C:\n"
|
||||
"\tldr r7, [sp]\n"
|
||||
"\tmovs r1, 0x6\n"
|
||||
"\tldrsh r0, [r7, r1]\n"
|
||||
"\tldr r2, _080078A0\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tldrsh r1, [r2, r3]\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tadd sp, 0x28\n"
|
||||
"\tpop {r3-r5}\n"
|
||||
"\tmov r8, r3\n"
|
||||
"\tmov r9, r4\n"
|
||||
"\tmov r10, r5\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r1}\n"
|
||||
"\tbx r1\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_0800788C: .4byte gCharMasksOffsets\n"
|
||||
"_08007890: .4byte gCharHeight\n"
|
||||
"_08007894: .4byte gCurrentCharmap\n"
|
||||
"_08007898: .4byte 0x11111111\n"
|
||||
"_0800789C: .4byte gTextShadowMask\n"
|
||||
"_080078A0: .4byte gCharacterSpacing");
|
||||
s32 unk0;
|
||||
struct unkChar *unk4;
|
||||
};
|
||||
extern struct CharMapStruct *gCharmaps[];
|
||||
extern s32 gCurrentCharmap;
|
||||
extern s16 gCharacterSpacing;
|
||||
extern s32 gCharHeight[];
|
||||
extern u8 gDrawTextShadow;
|
||||
|
||||
u32 xxx_draw_char(struct UnkTextStruct1 *a0, s32 x, s32 y, u32 a3, u32 color, u32 a5)
|
||||
{
|
||||
u32 *r3;
|
||||
const struct unkShiftData *shiftData;
|
||||
const struct unkChar *sp0;
|
||||
u16 *local_44;
|
||||
u16 *sp8;
|
||||
u16 *local_3c;
|
||||
s32 i;
|
||||
s32 xDiv8, yDiv8;
|
||||
struct UnkTextStruct1 *r5 = &a0[a5];
|
||||
s32 sp18 = gUnknown_80B853C[color & 0xF];
|
||||
u8 var_2C;
|
||||
u32 r4;
|
||||
u32 r2;
|
||||
|
||||
if (gCurrentCharmap == 1) {
|
||||
if (a3 == 0x70 || a3 == 0x6A || a3 == 0x71 || a3 == 0x79 || a3 == 0x67)
|
||||
y += 2;
|
||||
else if (a3 == 0x8199)
|
||||
y -= 2;
|
||||
}
|
||||
|
||||
sp0 = GetCharacter(a3);
|
||||
local_44 = sp0->unk0;
|
||||
ASM_MATCH_TRICK(local_3c); // stack doesn't match without it
|
||||
local_3c = sp0->unk0;
|
||||
sp8 = sp0->unk0 - 3;
|
||||
|
||||
if (gDrawTextShadow != 0) {
|
||||
var_2C = (sp0->unkA >> 1) & 1;
|
||||
}
|
||||
else {
|
||||
var_2C = 0;
|
||||
}
|
||||
|
||||
if (sp0->unkA & 1) {
|
||||
r3 = r5->unk18 + ((((y / 8) * r5->unk4) + (x / 8)) * 8);
|
||||
r3 += y - (y / 8 * 8);
|
||||
shiftData = &gCharMasksOffsets[x - ((x / 8) * 8)];
|
||||
xDiv8 = x / 8;
|
||||
yDiv8 = y / 8;
|
||||
|
||||
if (yDiv8 < r5->unk8) {
|
||||
for (i = 0; i < gCharHeight[gCurrentCharmap]; i++) {
|
||||
r2 = (local_44[1] << 0x10) | (local_44[0]);
|
||||
if (r2 != 0) {
|
||||
if (xDiv8 < r5->unk4) {
|
||||
*r3 |= (shiftData->bytesA & r2) << shiftData->shift_left;
|
||||
if (r5->unk3C > r3)
|
||||
r5->unk3C = r3;
|
||||
if (r5->unk40 < r3)
|
||||
r5->unk40 = r3;
|
||||
}
|
||||
if (xDiv8 < r5->unk4 - 1) {
|
||||
r3 += 8;
|
||||
r2 &= shiftData->bytesB;
|
||||
*r3 |= (r2) >> shiftData->shift_right;
|
||||
if (r5->unk40 < r3)
|
||||
r5->unk40 = r3;
|
||||
r3 -= 8;
|
||||
}
|
||||
}
|
||||
|
||||
r2 = local_44[2];
|
||||
if (r2 != 0) {
|
||||
if (xDiv8 < r5->unk4 - 1) {
|
||||
r3 += 8;
|
||||
*r3 |= (r2 & shiftData->bytesA) << shiftData->shift_left;
|
||||
if (r5->unk40 < r3)
|
||||
r5->unk40 = r3;
|
||||
r3 -= 8;
|
||||
}
|
||||
if (xDiv8 < r5->unk4 - 2) {
|
||||
r3 += 16;
|
||||
*r3 |= (r2 & shiftData->bytesB) >> shiftData->shift_right;
|
||||
if (r5->unk40 < r3)
|
||||
r5->unk40 = r3;
|
||||
r3 -= 16;
|
||||
}
|
||||
}
|
||||
|
||||
local_44 += 3;
|
||||
r3++;
|
||||
y++;
|
||||
if (y % 8 == 0) {
|
||||
r3 += r5->unk20;
|
||||
yDiv8++;
|
||||
if (yDiv8 >= r5->unk8)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
bool8 notFirstIteration = FALSE;
|
||||
u32 r1;
|
||||
|
||||
r3 = r5->unk18 + ((((y / 8) * r5->unk4) + (x / 8)) * 8);
|
||||
r3 += y - (y / 8 * 8);
|
||||
shiftData = &gCharMasksOffsets[x - ((x / 8) * 8)];
|
||||
xDiv8 = x / 8;
|
||||
yDiv8 = y / 8;
|
||||
|
||||
if (yDiv8 < r5->unk8) {
|
||||
for (i = 0; i < gCharHeight[gCurrentCharmap]; i++) {
|
||||
r4 = (local_44[1] << 0x10) | (local_44[0]);
|
||||
r2 = (0x11111111 & r4) + (sp18 & r4);
|
||||
|
||||
if (var_2C != 0) {
|
||||
r1 = ((local_3c[1] << 0x10) | local_3c[0]) << 4;
|
||||
r1 |= r4; // This doesn't really do anything since r4 bits are cleared, but it's needed to match.
|
||||
r1 &= ~(r4);
|
||||
r1 &= gTextShadowMask;
|
||||
r2 |= (r1);
|
||||
if (notFirstIteration) {
|
||||
r1 = (((sp8[1] << 0x10) | sp8[0]) << 4) ^ r4;
|
||||
r1 &= ~(r4);
|
||||
r2 |= (r1 & gTextShadowMask);
|
||||
}
|
||||
}
|
||||
|
||||
if (r2 != 0) {
|
||||
if (xDiv8 < r5->unk4) {
|
||||
*r3 |= (r2 & shiftData->bytesA) << shiftData->shift_left;
|
||||
if (r5->unk3C > r3)
|
||||
r5->unk3C = r3;
|
||||
if (r5->unk40 < r3)
|
||||
r5->unk40 = r3;
|
||||
}
|
||||
if (xDiv8 < r5->unk4 - 1) {
|
||||
r3 += 8;
|
||||
*r3 |= (r2 & shiftData->bytesB) >> shiftData->shift_right;
|
||||
if (r5->unk40 < r3)
|
||||
r5->unk40 = r3;
|
||||
r3 -= 8;
|
||||
}
|
||||
}
|
||||
|
||||
r4 = local_44[2];
|
||||
r2 = (0x11111111 & r4) + (sp18 & r4);
|
||||
if (var_2C != 0) {
|
||||
r1 = (local_3c[2] << 4) | ((local_3c[1] >> 0xC) & 0xF);
|
||||
r1 |= r4; // This doesn't really do anything since r4 bits are cleared, but it's needed to match.
|
||||
r1 &= ~(r4);
|
||||
r1 &= gTextShadowMask;
|
||||
r2 |= r1;
|
||||
if (notFirstIteration) {
|
||||
r1 = ((sp8[2] << 4) | ((sp8[1] >> 0xC) & 0xF)) ^ r4;
|
||||
r1 &= ~(r4);
|
||||
r1 &= gTextShadowMask;
|
||||
r2 |= (r1);
|
||||
}
|
||||
}
|
||||
|
||||
if (r2 != 0) {
|
||||
if (xDiv8 < r5->unk4 - 1) {
|
||||
r3 += 8;
|
||||
*r3 |= (r2 & shiftData->bytesA) << shiftData->shift_left;
|
||||
if (r5->unk40 < r3)
|
||||
r5->unk40 = r3;
|
||||
r3 -= 8;
|
||||
}
|
||||
if (xDiv8 < r5->unk4 - 2) {
|
||||
r3 += 16;
|
||||
*r3 |= (r2 & shiftData->bytesB) >> shiftData->shift_right;
|
||||
if (r5->unk40 < r3)
|
||||
r5->unk40 = r3;
|
||||
r3 -= 16;
|
||||
}
|
||||
}
|
||||
|
||||
notFirstIteration = TRUE;
|
||||
local_44 += 3;
|
||||
sp8 += 3;
|
||||
local_3c += 3;
|
||||
r3++;
|
||||
y++;
|
||||
if (y % 8 == 0) {
|
||||
r3 += r5->unk20;
|
||||
yDiv8++;
|
||||
if (yDiv8 >= r5->unk8)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sp0->unk6 + gCharacterSpacing;
|
||||
}
|
||||
|
||||
void sub_80078A4(u32 a0, s32 x, s32 y, s32 a3, u32 color)
|
||||
|
|
@ -2691,14 +2321,6 @@ void sub_80084A4(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32
|
|||
|
||||
extern const struct unkChar gUnknown_80B86A4;
|
||||
|
||||
struct CharMapStruct
|
||||
{
|
||||
s32 unk0;
|
||||
struct unkChar *unk4;
|
||||
};
|
||||
extern struct CharMapStruct *gCharmaps[];
|
||||
extern s32 gCurrentCharmap;
|
||||
|
||||
// Oddly similar to sub_803DEC8
|
||||
const struct unkChar *GetCharacter(s32 chr)
|
||||
{
|
||||
|
|
@ -3240,8 +2862,6 @@ UNUSED void sub_8008E58(s32 a0, s32 a1, u8 *a2, s32 a3)
|
|||
gUnknown_20274A5 = 1;
|
||||
}
|
||||
|
||||
extern s16 gCharacterSpacing;
|
||||
|
||||
s32 sub_8008ED0(const u8 *str)
|
||||
{
|
||||
s32 ret = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user