sub_8042B34

This commit is contained in:
DizzyEggg
2024-10-09 14:04:10 +02:00
parent 969a2fb55f
commit 7141bae241
7 changed files with 114 additions and 262 deletions

View File

@@ -5,201 +5,6 @@
.text
thumb_func_start sub_8042B34
sub_8042B34:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x28
adds r5, r0, 0
adds r4, r1, 0
adds r6, r2, 0
movs r0, 0
mov r8, r0
bl xxx_call_GetLeader
mov r10, r0
ldr r7, _08042CB0
movs r0, 0xCC
movs r1, 0x7
bl MemoryAlloc
str r0, [r7]
str r5, [r0]
adds r4, 0x1
lsls r4, 2
str r4, [r0, 0x8]
ldr r4, _08042CB4
lsls r0, r5, 1
adds r0, r5
lsls r0, 3
adds r0, r4
movs r1, 0
ldrsh r0, [r0, r1]
bl sub_800EE5C
bl sub_800EF64
movs r0, 0x46
bl sub_803E46C
ldr r0, [r7]
str r6, [r0, 0x4]
movs r5, 0
ldr r0, [r0, 0x8]
cmp r5, r0
blt _08042B8E
b _08042C9E
_08042B8E:
mov r9, sp
_08042B90:
mov r2, r8
lsls r6, r2, 3
ldr r0, [r7]
ldr r1, [r0]
lsls r0, r1, 1
adds r0, r1
lsls r0, 3
adds r0, r6, r0
ldr r3, _08042CB4
adds r0, r3
movs r1, 0
ldrsh r0, [r0, r1]
str r0, [sp]
str r5, [sp, 0x4]
movs r0, 0
str r0, [sp, 0x8]
mov r2, r10
ldr r0, [r2, 0xC]
cmp r0, 0
bge _08042BBA
adds r0, 0xFF
_08042BBA:
asrs r0, 8
mov r3, r9
strh r0, [r3, 0xC]
mov r1, sp
mov r2, r10
ldr r0, [r2, 0x10]
cmp r0, 0
bge _08042BCC
adds r0, 0xFF
_08042BCC:
asrs r0, 8
strh r0, [r1, 0xE]
movs r0, 0x2
bl RandInt
ldr r1, [r7]
lsls r4, r5, 2
adds r3, r1, 0
adds r3, 0x4C
adds r3, r4
ldr r2, [r1]
lsls r1, r2, 1
adds r1, r2
lsls r1, 3
adds r1, r6, r1
ldr r2, _08042CB4
adds r2, 0x4
adds r1, r2
ldr r1, [r1]
lsls r1, 1
adds r1, r0
str r1, [r3]
movs r0, 0xF0
bl RandInt
ldr r1, [r7]
adds r1, r4
adds r0, 0x98
adds r1, 0x8C
strh r0, [r1]
lsls r0, r5, 1
adds r0, 0x8
bl RandInt
ldr r1, [r7]
adds r2, r1, r4
adds r3, r0, 0
adds r3, 0x18
adds r1, r5, 0
cmp r5, 0
bge _08042C20
adds r1, r5, 0x3
_08042C20:
asrs r1, 2
lsls r1, 2
subs r1, r5, r1
lsls r0, r1, 2
adds r0, r1
lsls r0, 3
subs r0, r3, r0
adds r1, r2, 0
adds r1, 0x8E
strh r0, [r1]
adds r0, r2, 0
adds r0, 0x8C
ldrh r0, [r0]
mov r3, r9
strh r0, [r3, 0x10]
ldrh r0, [r1]
strh r0, [r3, 0x12]
movs r0, 0x4
str r0, [sp, 0x14]
ldr r0, _08042CB8
str r0, [sp, 0x18]
add r1, sp, 0x1C
ldr r0, _08042CBC
ldm r0!, {r2,r3,r6}
stm r1!, {r2,r3,r6}
mov r0, sp
bl sub_800E890
ldr r2, [r7]
adds r1, r2, 0
adds r1, 0xC
adds r1, r4
str r0, [r1]
movs r6, 0x1
add r8, r6
mov r0, r8
cmp r0, 0x2
bgt _08042C82
ldr r0, [r2]
lsls r1, r0, 1
adds r1, r0
add r1, r8
lsls r1, 3
ldr r2, _08042CB4
adds r1, r2
movs r3, 0
ldrsh r0, [r1, r3]
cmp r0, 0
bne _08042C86
_08042C82:
movs r6, 0
mov r8, r6
_08042C86:
ldr r0, [sp]
bl sub_800ECA4
ldr r0, [r0, 0x4]
bl sub_800F15C
adds r5, 0x1
ldr r0, [r7]
ldr r0, [r0, 0x8]
cmp r5, r0
bge _08042C9E
b _08042B90
_08042C9E:
add sp, 0x28
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08042CB0: .4byte gUnknown_203B414
_08042CB4: .4byte gUnknown_80F6624
_08042CB8: .4byte 0x0000ffff
_08042CBC: .4byte gUnknown_80F683C
thumb_func_end sub_8042B34
thumb_func_start sub_8042CC0
sub_8042CC0:
push {r4-r7,lr}

View File

@@ -1,7 +1,25 @@
#ifndef GUARD_CODE_800DAC0_H
#define GUARD_CODE_800DAC0_H
#include "ground_sprite.h"
typedef struct unkStruct_80416E0
{
s32 unk0;
s32 unk4;
s32 unk8;
u16 x;
u16 y;
u16 unk10;
u16 unk12;
s32 unk14;
u32 unk18;
unkStruct_2039DB0 unk1C;
} unkStruct_80416E0;
u32 sub_800E890(unkStruct_80416E0 *);
void sub_800DAC0(u32);
void sub_800DB7C(void);
#endif // GUARD_CODE_800DAC0_H
#endif // GUARD_CODE_800DAC0_H

View File

@@ -214,6 +214,7 @@ SECTIONS {
src/code_8041AD0.o(.text);
asm/code_8041AD0.o(.text);
src/code_804267C.o(.text);
src/code_8042B34.o(.text);
asm/code_8042B34.o(.text);
src/dungeon_engine.o(.text);
asm/code_8044210.o(.text);

View File

@@ -4,6 +4,7 @@
#include "code_804267C.h"
#include "code_806CD90.h"
#include "code_8041AD0.h"
#include "code_800DAC0.h"
#include "type_chart.h"
#include "constants/direction.h"
#include "constants/status.h"
@@ -14,21 +15,6 @@
#include "structs/dungeon_entity.h"
#include "structs/str_dungeon.h"
// size: 0x1C
typedef struct unkStruct_80416E0
{
s32 unk0;
s32 unk4;
s32 unk8;
u16 x;
u16 y;
u16 unk10;
u16 unk12;
s32 unk14;
u32 unk18;
} unkStruct_80416E0;
extern u32 gStatusSpriteMasks_SleepStatus[];
extern u32 gStatusSpriteMasks_NonVolatileStatus[];
extern u32 gStatusSpriteMasks_ImmobilizeStatus[];
@@ -63,7 +49,6 @@ extern void sub_803EA10(void);
extern void sub_8042E98(void);
extern void sub_800EE5C(u32);
extern void sub_800EF64(void);
extern u32 sub_800E890(unkStruct_80416E0 *);
u32 sub_8041764(unkStruct_80416E0 *param_1, bool8 param_2);
s32 sub_80416E0(Position32 *pos, u32 param_2, bool8 param_3);
@@ -82,7 +67,6 @@ s32 sub_80416E0(Position32 *pos, u32 param_2, bool8 param_3)
int counter;
s32 ret;
unkStruct_80416E0 auStack_10;
unkStruct_2039DB0 auStack_18; // Size: 0xC
auStack_10.unk0 = param_2;
auStack_10.unk4 = 0;
@@ -95,7 +79,7 @@ s32 sub_80416E0(Position32 *pos, u32 param_2, bool8 param_3)
auStack_10.unk10 = 0;
auStack_10.unk12 = 0;
auStack_10.unk18 = 0xffff;
sub_8004E8C(&auStack_18);
sub_8004E8C(&auStack_10.unk1C);
ret = sub_8041764(&auStack_10, FALSE);
if (param_3) {
counter = 0;

83
src/code_8042B34.c Normal file
View File

@@ -0,0 +1,83 @@
#include "global.h"
#include "dungeon_util_1.h"
#include "memory.h"
#include "code_803E46C.h"
#include "code_800E9E4.h"
#include "code_800DAC0.h"
#include "random.h"
extern void sub_800EE5C(s32);
extern void sub_800EF64(void);
extern void sub_800F15C(s32);
struct Sub_UnkStruct_203B414
{
s16 a0;
s16 a2;
};
struct UnkStruct_203B414
{
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC[16];
s32 unk4C[16];
struct Sub_UnkStruct_203B414 unk8C[16];
};
extern struct UnkStruct_203B414 *gUnknown_203B414;
struct UnkStruct_80F6624
{
s16 unk0;
s32 unk4;
};
extern const struct UnkStruct_80F6624 gUnknown_80F6624[][3];
extern const unkStruct_2039DB0 gUnknown_80F683C;
void sub_8042B34(s32 a0, s32 a1, s32 a2)
{
unkStruct_80416E0 spStruct;
s32 i;
s32 r8 = 0;
Entity *leader = xxx_call_GetLeader();
gUnknown_203B414 = MemoryAlloc(sizeof(*gUnknown_203B414), 7);
gUnknown_203B414->unk0 = a0;
gUnknown_203B414->unk8 = (a1 + 1) * 4;
sub_800EE5C(gUnknown_80F6624[a0][0].unk0);
sub_800EF64();
sub_803E46C(0x46);
gUnknown_203B414->unk4 = a2;
for (i = 0; i < gUnknown_203B414->unk8; i++) {
s32 rnd;
spStruct.unk0 = gUnknown_80F6624[gUnknown_203B414->unk0][r8].unk0;
spStruct.unk4 = i;
spStruct.unk8 = 0;
spStruct.x = leader->pixelPos.x / 256;
spStruct.y = leader->pixelPos.y / 256;
rnd = RandInt(2);
gUnknown_203B414->unk4C[i] = (gUnknown_80F6624[gUnknown_203B414->unk0][r8].unk4 * 2) + rnd;
gUnknown_203B414->unk8C[i].a0 = RandInt(240) + 152;
gUnknown_203B414->unk8C[i].a2 = RandInt(8 + (i * 2)) - (((i - (i / 4 * 4)) * 40) - 24);
spStruct.unk10 = gUnknown_203B414->unk8C[i].a0;
spStruct.unk12 = gUnknown_203B414->unk8C[i].a2;
spStruct.unk14 = 4;
spStruct.unk18 = 0xFFFF;
spStruct.unk1C = gUnknown_80F683C;
gUnknown_203B414->unkC[i] = sub_800E890(&spStruct);
r8++;
if (r8 >= 3 || gUnknown_80F6624[gUnknown_203B414->unk0][r8].unk0 == 0) {
r8 = 0;
}
sub_800F15C(sub_800ECA4(spStruct.unk0)->unk4);
}
}

View File

@@ -4,31 +4,13 @@
#include "code_803E46C.h"
#include "dungeon_util.h"
#include "items.h"
#include "code_800DAC0.h"
#include "structs/str_dungeon.h"
struct unkStruct_80420E8
{
u32 unk0;
u32 unk4;
u32 unk8;
};
extern const struct unkStruct_80420E8 gUnknown_8107374;
extern const unkStruct_2039DB0 gUnknown_8107374;
typedef struct unkStruct_80416E0
{
s32 unk0;
s32 unk4;
s32 unk8;
u16 x;
u16 y;
u16 unk10;
u16 unk12;
s32 unk14;
u32 unk18;
} unkStruct_80416E0;
extern u32 sub_800E890(unkStruct_80416E0 *);
void sub_800EF64(void);
void sub_800EE5C(s32);
void sub_8085F44(s32);
@@ -52,7 +34,6 @@ u32 sub_8085EC8(s16 param_1,u32 param_2,u32 param_3,Position *param_4,bool32 par
{
u32 uVar1;
unkStruct_80416E0 local_40;
struct unkStruct_80420E8 local;
bool8 param_5_bool8;
s32 param_1_s32 = param_1;
@@ -71,8 +52,7 @@ u32 sub_8085EC8(s16 param_1,u32 param_2,u32 param_3,Position *param_4,bool32 par
local_40.unk10 = 0;
local_40.unk12 = 0;
local_40.unk18 = 0xffff;
local = gUnknown_8107374;
local_40.unk1C = gUnknown_8107374;
uVar1 = sub_800E890(&local_40);
if (param_5_bool8) {

View File

@@ -1,30 +1,12 @@
#include "global.h"
#include "constants/direction.h"
#include "code_80861A8.h"
#include "code_800DAC0.h"
#include "code_803E668.h"
#include "code_806CD90.h"
#include "dungeon_music.h"
typedef struct unkStruct_80416E0
{
s32 unk0;
s32 unk4;
s32 unk8;
u16 x;
u16 y;
u16 unk10;
u16 unk12;
s32 unk14;
u32 unk18;
} unkStruct_80416E0;
extern s32 sub_800E890(unkStruct_80416E0 *);
struct unkStruct_8107380
{
u8 unk0[12];
};
extern struct unkStruct_8107380 gUnknown_8107380;
extern const unkStruct_2039DB0 gUnknown_8107380;
extern const u8 *gUnknown_810665C[];
extern const u8 *gUnknown_810668C[];
@@ -41,7 +23,7 @@ s32 sub_800E700(s32);
void sub_800569C(Position *, EntitySpriteInfo *, u8);
void sub_8085F44(void);
void sub_8052FB8(const u8 *);
void sub_8052FB8(const u8 *);
void sub_8086124(Entity *entity, u8 param_2)
{
@@ -97,7 +79,6 @@ s32 sub_80861F8(s16 param_1,Entity *param_2,bool32 param_3)
s32 uStack_38;
Position pos;
unkStruct_80416E0 stack;
struct unkStruct_8107380 stack4;
#ifdef NONMATCHING
s32 param_1_s32 = param_1;
@@ -106,7 +87,7 @@ s32 sub_80861F8(s16 param_1,Entity *param_2,bool32 param_3)
#endif
u8 param_3_bool32 = param_3;
sub_800EE5C(param_1);
sub_800EF64();
sub_803E46C(0x46);
@@ -122,12 +103,12 @@ s32 sub_80861F8(s16 param_1,Entity *param_2,bool32 param_3)
stack.unk8 = (u32)(info->action).direction;
stack.x = (param_2->pixelPos).x / 256;
stack.y = (param_2->pixelPos).y / 256;
stack.unk10 = pos.x;
stack.unk12 = pos.y;
stack.unk14 = uStack_38;
stack.unk18 = 0xffff;
stack4 = gUnknown_8107380;
stack.unk1C = gUnknown_8107380;
uVar2 = sub_800E890(&stack);
if (param_3_bool32 != '\0') {