decomp a few more funcs

This commit is contained in:
Seth Barberee 2022-12-19 21:32:54 -08:00
parent 0ca46d7254
commit f6decdd027
3 changed files with 182 additions and 443 deletions

View File

@ -2873,446 +2873,4 @@ _08041758:
bx r1
thumb_func_end sub_80416E0
thumb_func_start sub_8041764
sub_8041764:
push {r4,r5,lr}
adds r5, r0, 0
lsls r4, r1, 24
lsrs r4, 24
ldr r0, [r5]
bl sub_800EE5C
bl sub_800EF64
cmp r4, 0
beq _08041780
movs r0, 0x42
bl sub_803E46C
_08041780:
adds r0, r5, 0
bl sub_800E890
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8041764
thumb_func_start sub_804178C
sub_804178C:
push {r4-r7,lr}
lsls r0, 24
lsrs r5, r0, 24
movs r4, 0
ldr r0, _080417B0
ldr r0, [r0]
ldr r1, _080417B4
adds r0, r1
str r4, [r0]
adds r0, r5, 0
bl sub_800E9FC
lsls r0, 24
cmp r0, 0
beq _080417E0
ldr r6, _080417B8
b _080417C4
.align 2, 0
_080417B0: .4byte gDungeonGlobalData
_080417B4: .4byte 0x00018204
_080417B8: .4byte 0x000003e7
_080417BC:
movs r0, 0x4A
bl sub_803E46C
adds r4, 0x1
_080417C4:
cmp r4, r6
bgt _080417D4
adds r0, r5, 0
bl sub_800E9FC
lsls r0, 24
cmp r0, 0
bne _080417BC
_080417D4:
movs r0, 0x4A
bl sub_803E46C
movs r0, 0x4A
bl sub_803E46C
_080417E0:
movs r0, 0xFA
lsls r0, 2
cmp r4, r0
beq _080417EC
cmp r5, 0
beq _080417F0
_080417EC:
bl sub_800DBBC
_080417F0:
ldr r2, _08041824
ldr r0, [r2]
cmp r0, 0x1E
bgt _08041860
ldr r1, _08041828
ldrb r7, [r1]
movs r0, 0x1
strb r0, [r1]
movs r4, 0
adds r5, r2, 0
ldr r6, _0804182C
_08041806:
ldr r0, [r5]
cmp r0, 0x1E
bgt _08041838
adds r0, 0x4
str r0, [r5]
ldr r1, _08041830
ldrh r2, [r1]
movs r3, 0
ldrsh r0, [r1, r3]
cmp r0, r6
beq _0804183C
ldr r3, _08041834
adds r0, r2, r3
strh r0, [r1]
b _0804183C
.align 2, 0
_08041824: .4byte gUnknown_202EDC8
_08041828: .4byte gUnknown_203B40D
_0804182C: .4byte 0x00000808
_08041830: .4byte gUnknown_2026E4E
_08041834: .4byte 0xfffffeff
_08041838:
movs r0, 0x1F
str r0, [r5]
_0804183C:
bl sub_803EA10
movs r0, 0x4A
bl sub_803E46C
ldr r0, [r5]
cmp r0, 0x1F
beq _08041854
adds r4, 0x1
ldr r0, _0804186C
cmp r4, r0
ble _08041806
_08041854:
ldr r0, _08041870
ldr r2, _08041874
adds r1, r2, 0
strh r1, [r0]
ldr r0, _08041878
strb r7, [r0]
_08041860:
bl sub_8042E98
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0804186C: .4byte 0x000003e7
_08041870: .4byte gUnknown_2026E4E
_08041874: .4byte 0x00000808
_08041878: .4byte gUnknown_203B40D
thumb_func_end sub_804178C
thumb_func_start EntityGetStatusSprites
@ int EntityGetStatusSprites(struct DungeonEntity *entity)
EntityGetStatusSprites:
ldr r0, [r0, 0x70]
movs r1, 0x80
lsls r1, 2
adds r0, r1
ldr r0, [r0]
bx lr
thumb_func_end EntityGetStatusSprites
thumb_func_start sub_8041888
sub_8041888:
push {r4-r6,lr}
lsls r0, 24
lsrs r6, r0, 24
movs r5, 0
_08041890:
ldr r0, _080418CC
ldr r0, [r0]
lsls r1, r5, 2
ldr r2, _080418D0
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _080418C0
ldr r1, [r4, 0x70]
cmp r6, 0
beq _080418BA
movs r0, 0xA6
lsls r0, 1
adds r1, r0
movs r0, 0x1
strb r0, [r1]
_080418BA:
adds r0, r4, 0
bl DungeonEntityUpdateStatusSprites
_080418C0:
adds r5, 0x1
cmp r5, 0x13
ble _08041890
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080418CC: .4byte gDungeonGlobalData
_080418D0: .4byte 0x000135cc
thumb_func_end sub_8041888
thumb_func_start DungeonEntityUpdateStatusSprites
DungeonEntityUpdateStatusSprites:
push {r4,lr}
adds r4, r0, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
bne _080418E4
b _08041A8C
_080418E4:
ldr r2, [r4, 0x70]
movs r3, 0
movs r1, 0x1
movs r4, 0x2
ldrsh r0, [r2, r4]
cmp r0, 0xB9
bne _08041902
adds r0, r2, 0
adds r0, 0xA9
ldrb r0, [r0]
movs r1, 0x7F
eors r0, r1
negs r1, r0
orrs r1, r0
lsrs r1, 31
_08041902:
cmp r1, 0
beq _08041914
ldr r1, _08041A94
adds r0, r2, 0
adds r0, 0xA8
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r3, [r0]
_08041914:
ldr r1, _08041A98
adds r0, r2, 0
adds r0, 0xAC
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
ldr r1, _08041A9C
adds r0, r2, 0
adds r0, 0xB0
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
ldr r1, _08041AA0
adds r0, r2, 0
adds r0, 0xBC
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
ldr r1, _08041AA4
adds r0, r2, 0
adds r0, 0xC0
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
ldr r1, _08041AA8
adds r0, r2, 0
adds r0, 0xC4
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
ldr r1, _08041AAC
adds r0, r2, 0
adds r0, 0xC8
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
ldr r1, _08041AB0
adds r0, r2, 0
adds r0, 0xD0
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
ldr r1, _08041AB4
adds r0, r2, 0
adds r0, 0xDC
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
ldr r1, _08041AB8
adds r0, r2, 0
adds r0, 0xE0
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
ldr r1, _08041ABC
adds r0, r2, 0
adds r0, 0xE4
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
ldr r1, _08041AC0
adds r0, r2, 0
adds r0, 0xE8
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
ldr r1, _08041AC4
adds r0, r2, 0
adds r0, 0xEC
ldrb r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
orrs r3, r0
adds r0, r2, 0
adds r0, 0xF4
ldrb r0, [r0]
cmp r0, 0
beq _080419E4
movs r0, 0x80
lsls r0, 17
orrs r3, r0
_080419E4:
adds r0, r2, 0
adds r0, 0xF5
ldrb r0, [r0]
cmp r0, 0
beq _080419F4
movs r0, 0x80
lsls r0, 18
orrs r3, r0
_080419F4:
ldrb r0, [r2, 0x6]
cmp r0, 0
bne _08041A14
movs r0, 0x10
ldrsh r1, [r2, r0]
cmp r1, 0
bge _08041A04
adds r1, 0x3
_08041A04:
asrs r1, 2
movs r4, 0xE
ldrsh r0, [r2, r4]
cmp r1, r0
ble _08041A14
movs r0, 0x80
lsls r0, 6
orrs r3, r0
_08041A14:
ldr r0, _08041AC8
ldr r0, [r0]
ldr r1, _08041ACC
adds r0, r1
ldrb r0, [r0]
cmp r0, 0
beq _08041A36
adds r0, r2, 0
adds r0, 0x60
ldrb r1, [r0]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _08041A36
movs r0, 0x80
lsls r0, 6
orrs r3, r0
_08041A36:
ldr r0, [r2, 0x2C]
cmp r0, 0xFF
ble _08041A7E
ldr r0, [r2, 0x30]
cmp r0, 0xFF
ble _08041A7E
ldr r0, [r2, 0x34]
cmp r0, 0xFF
ble _08041A7E
ldr r0, [r2, 0x38]
cmp r0, 0xFF
ble _08041A7E
movs r4, 0x1C
ldrsh r0, [r2, r4]
cmp r0, 0x9
ble _08041A7E
movs r1, 0x1E
ldrsh r0, [r2, r1]
cmp r0, 0x9
ble _08041A7E
movs r4, 0x20
ldrsh r0, [r2, r4]
cmp r0, 0x9
ble _08041A7E
movs r1, 0x22
ldrsh r0, [r2, r1]
cmp r0, 0x9
ble _08041A7E
movs r4, 0x24
ldrsh r0, [r2, r4]
cmp r0, 0x9
ble _08041A7E
movs r1, 0x26
ldrsh r0, [r2, r1]
cmp r0, 0x9
bgt _08041A84
_08041A7E:
movs r0, 0x80
lsls r0, 20
orrs r3, r0
_08041A84:
movs r4, 0x80
lsls r4, 2
adds r0, r2, r4
str r3, [r0]
_08041A8C:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08041A94: .4byte gStatusSpriteMasks_SleepStatus
_08041A98: .4byte gStatusSpriteMasks_NonVolatileStatus
_08041A9C: .4byte gStatusSpriteMasks_ImmobilizeStatus
_08041AA0: .4byte gStatusSpriteMasks_VolatileStatus
_08041AA4: .4byte gStatusSpriteMasks_ChargingStatus
_08041AA8: .4byte gStatusSpriteMasks_ProtectionStatus
_08041AAC: .4byte gStatusSpriteMasks_WaitingStatus
_08041AB0: .4byte gStatusSpriteMasks_LinkedStatus
_08041AB4: .4byte gStatusSpriteMasks_MoveStatus
_08041AB8: .4byte gStatusSpriteMasks_ItemStatus
_08041ABC: .4byte gStatusSpriteMasks_TransformStatus
_08041AC0: .4byte gStatusSpriteMasks_EyesightStatus
_08041AC4: .4byte gStatusSpriteMasks_MuzzledStatus
_08041AC8: .4byte gDungeonGlobalData
_08041ACC: .4byte 0x00000676
thumb_func_end DungeonEntityUpdateStatusSprites
.align 2,0

View File

@ -199,7 +199,9 @@ struct DungeonEntityData
/* 0x148 */ bool8 attacking;
/* 0x149 */ u8 unk149;
/* 0x14A */ u8 unk14A;
u8 fill14B[0x14E - 0x14B];
/* 0x14B */ u8 unk14B;
/* 0x14C */ u8 unk14C;
/* 0x14D */ u8 unk14D;
/* 0x14E */ u16 visualFlags;
/* 0x150 */ u16 previousVisualFlags;
/* 0x152 */ u8 unk152;

View File

@ -1,9 +1,12 @@
#include "global.h"
#include "constants/direction.h"
#include "constants/status.h"
#include "constants/type.h"
#include "dungeon_entity.h"
#include "dungeon_global_data.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_util.h"
#include "item.h"
struct unkStruct_80420E8
{
@ -12,6 +15,20 @@ struct unkStruct_80420E8
u32 unk8;
};
extern u32 gStatusSpriteMasks_SleepStatus[];
extern u32 gStatusSpriteMasks_NonVolatileStatus[];
extern u32 gStatusSpriteMasks_ImmobilizeStatus[];
extern u32 gStatusSpriteMasks_VolatileStatus[];
extern u32 gStatusSpriteMasks_ChargingStatus[];
extern u32 gStatusSpriteMasks_ProtectionStatus[];
extern u32 gStatusSpriteMasks_WaitingStatus[];
extern u32 gStatusSpriteMasks_LinkedStatus[];
extern u32 gStatusSpriteMasks_MoveStatus[];
extern u32 gStatusSpriteMasks_ItemStatus[];
extern u32 gStatusSpriteMasks_TransformStatus[];
extern u32 gStatusSpriteMasks_EyesightStatus[];
extern u32 gStatusSpriteMasks_MuzzledStatus[];
extern void sub_803ED30(u8, struct DungeonEntity *pokemon, u8, u8);
extern void sub_804151C(struct DungeonEntity *pokemon, u32 r1, u8 r2);
@ -25,8 +42,170 @@ extern void sub_8041550(struct DungeonEntity *pokemon, u32, u32, u32, u32, u32);
void sub_80421C0(struct DungeonEntity *pokemon, u16 r1);
void DungeonEntityUpdateStatusSprites(struct DungeonEntity *entity);
extern s32 gUnknown_202EDC8;
extern u8 gUnknown_203B40D;
extern s16 gUnknown_2026E4E;
extern u8 sub_800E9FC(u8);
extern void sub_800DBBC(void);
extern void sub_803EA10(void);
extern void sub_8042E98(void);
extern void sub_803E46C(u32);
extern void sub_800EE5C(u32);
extern u32 sub_800E890(u32 *);
extern void sub_800EF64(void);
u32 sub_8041764(u32 *param_1, u8 param_2)
{
sub_800EE5C(*param_1);
sub_800EF64();
if(param_2)
sub_803E46C(0x42);
return sub_800E890(param_1);
}
void sub_804178C(u8 param_1)
{
u32 temp;
s32 counter;
counter = 0;
gDungeonGlobalData->unk18204 = 0;
if (sub_800E9FC(param_1) != 0) {
while ((counter < 1000 && (sub_800E9FC(param_1) != 0))) {
sub_803E46C(0x4a);
counter++;
}
sub_803E46C(0x4a);
sub_803E46C(0x4a);
}
if ((counter == 1000) || (param_1 != 0)) {
sub_800DBBC();
}
if (gUnknown_202EDC8 < 0x1f) {
temp = gUnknown_203B40D;
gUnknown_203B40D = 1;
for(counter = 0; counter < 1000; counter++)
{
if (gUnknown_202EDC8 < 0x1f) {
gUnknown_202EDC8 += 4;
if (gUnknown_2026E4E != 0x808) {
gUnknown_2026E4E -= 0x101;
}
}
else {
gUnknown_202EDC8 = 0x1f;
}
sub_803EA10();
sub_803E46C(0x4a);
if(gUnknown_202EDC8 == 0x1f) break;
};
gUnknown_2026E4E = 0x808;
gUnknown_203B40D = temp;
}
sub_8042E98();
}
u32 EntityGetStatusSprites(struct DungeonEntity *entity)
{
return entity->entityData->statusSprites;
}
void sub_8041888(u8 param_1)
{
s32 index;
struct DungeonEntity *entity;
struct DungeonEntityData *entityData;
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
{
entity = gDungeonGlobalData->allPokemon[index];
if(EntityExists(entity))
{
entityData = entity->entityData;
if(param_1)
{
entityData->unk14C = 1;
}
DungeonEntityUpdateStatusSprites(entity);
}
}
}
void DungeonEntityUpdateStatusSprites(struct DungeonEntity *entity)
{
bool32 flag;
s32 HP;
struct DungeonEntityData *entityData;
u32 spriteStatus;
u8 temp;
if (EntityExists(entity)) {
entityData = entity->entityData;
spriteStatus = 0;
flag = TRUE;
if (entityData->entityID == 0xb9) {
// NOTE: clean this up sometime
temp = entityData->sleepStatusTurnsLeft;
flag = 0x7f;
temp ^= flag;
flag = (temp) != 0;
}
if (flag) {
spriteStatus = gStatusSpriteMasks_SleepStatus[entityData->sleepStatus];
}
spriteStatus = spriteStatus |
gStatusSpriteMasks_NonVolatileStatus[entityData->nonVolatileStatus] |
gStatusSpriteMasks_ImmobilizeStatus[entityData->immobilizeStatus] |
gStatusSpriteMasks_VolatileStatus[entityData->volatileStatus] |
gStatusSpriteMasks_ChargingStatus[entityData->chargingStatus] |
gStatusSpriteMasks_ProtectionStatus[entityData->protectionStatus] |
gStatusSpriteMasks_WaitingStatus[entityData->waitingStatus] |
gStatusSpriteMasks_LinkedStatus[entityData->linkedStatus] |
gStatusSpriteMasks_MoveStatus[entityData->moveStatus] |
gStatusSpriteMasks_ItemStatus[entityData->itemStatus] |
gStatusSpriteMasks_TransformStatus[entityData->transformStatus] |
gStatusSpriteMasks_EyesightStatus[entityData->eyesightStatus] |
gStatusSpriteMasks_MuzzledStatus[entityData->muzzledStatus];
if (entityData->grudgeStatus) {
spriteStatus = spriteStatus | STATUS_SPRITE_GRUDGE;
}
if (entityData->exposedStatus) {
spriteStatus = spriteStatus | STATUS_SPRITE_EXPOSED;
}
if (!entityData->isEnemy) {
HP = entityData->maxHP;
if (HP < 0) {
HP += 3;
}
HP >>= 2;
if (HP > entityData->HP) {
spriteStatus = spriteStatus | STATUS_SPRITE_LOWHP;
}
}
if ((gDungeonGlobalData->itemHoldersIdentified) && (entityData->heldItem.itemFlags & ITEM_FLAG_EXISTS)) {
spriteStatus = spriteStatus | STATUS_SPRITE_LOWHP;
}
if ( (entityData->attackMultipliers[0] < DEFAULT_STAT_MULTIPLIER) ||
(entityData->attackMultipliers[1] < DEFAULT_STAT_MULTIPLIER) ||
(entityData->defenseMultipliers[0] < DEFAULT_STAT_MULTIPLIER) ||
(entityData->defenseMultipliers[1] < DEFAULT_STAT_MULTIPLIER) ||
(entityData->attackStages[0] < DEFAULT_STAT_STAGE) ||
(entityData->attackStages[1] < DEFAULT_STAT_STAGE) ||
(entityData->defenseStages[0] < DEFAULT_STAT_STAGE) ||
(entityData->defenseStages[1] < DEFAULT_STAT_STAGE) ||
(entityData->accuracyStages[0]) < DEFAULT_STAT_STAGE ||
(entityData->accuracyStages[1] < DEFAULT_STAT_STAGE)) {
spriteStatus = spriteStatus | STATUS_SPRITE_STAT_DOWN;
}
entityData->statusSprites = spriteStatus;
}
}
void sub_8041AD0(struct DungeonEntity *pokemon)
{
sub_804151C(pokemon, 0xA2 << 1, 1);