mirror of
https://github.com/pret/pmd-red.git
synced 2026-10-02 05:48:45 -05:00
sub_8042B34
This commit is contained in:
@@ -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}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
83
src/code_8042B34.c
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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') {
|
||||
|
||||
Reference in New Issue
Block a user