mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-25 07:28:17 -05:00
decomp sub_8042390 and sub_804245C
This commit is contained in:
parent
d79f2ab2f1
commit
e1b94d1642
|
|
@ -159,201 +159,4 @@ _08042384:
|
|||
bx r0
|
||||
thumb_func_end sub_804225C
|
||||
|
||||
thumb_func_start sub_8042390
|
||||
sub_8042390:
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x18
|
||||
adds r5, r0, 0
|
||||
adds r4, r1, 0
|
||||
bl sub_8042768
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08042454
|
||||
ldrb r1, [r4]
|
||||
movs r0, 0x8
|
||||
ands r0, r1
|
||||
movs r6, 0
|
||||
cmp r0, 0
|
||||
bne _080423B0
|
||||
ldrb r6, [r4, 0x2]
|
||||
_080423B0:
|
||||
adds r0, r6, 0
|
||||
movs r1, 0
|
||||
bl sub_800EF40
|
||||
bl sub_800EF64
|
||||
movs r0, 0x4
|
||||
movs r1, 0x42
|
||||
bl sub_803E708
|
||||
ldr r0, [r5, 0xC]
|
||||
cmp r0, 0
|
||||
bge _080423CC
|
||||
adds r0, 0xFF
|
||||
_080423CC:
|
||||
lsls r0, 8
|
||||
lsrs r0, 16
|
||||
ldr r1, _08042428
|
||||
ldr r2, [sp, 0x14]
|
||||
ands r2, r1
|
||||
orrs r2, r0
|
||||
str r2, [sp, 0x14]
|
||||
ldr r0, [r5, 0x10]
|
||||
cmp r0, 0
|
||||
bge _080423E2
|
||||
adds r0, 0xFF
|
||||
_080423E2:
|
||||
lsls r0, 8
|
||||
lsrs r0, 16
|
||||
lsls r0, 16
|
||||
ldr r4, _0804242C
|
||||
ands r4, r2
|
||||
orrs r4, r0
|
||||
str r4, [sp, 0x14]
|
||||
asrs r4, 16
|
||||
ldr r0, _08042430
|
||||
ldr r0, [r0]
|
||||
ldr r1, _08042434
|
||||
adds r0, r1
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
subs r4, r0
|
||||
lsrs r0, r4, 31
|
||||
adds r4, r0
|
||||
asrs r4, 1
|
||||
adds r4, 0x1
|
||||
adds r1, r5, 0
|
||||
adds r1, 0x28
|
||||
add r0, sp, 0x4
|
||||
bl sub_8005700
|
||||
add r1, sp, 0x14
|
||||
str r4, [sp]
|
||||
adds r0, r6, 0
|
||||
add r2, sp, 0x4
|
||||
movs r3, 0
|
||||
bl sub_800E49C
|
||||
adds r5, r0, 0
|
||||
movs r4, 0
|
||||
ldr r6, _08042438
|
||||
b _0804243E
|
||||
.align 2, 0
|
||||
_08042428: .4byte 0xffff0000
|
||||
_0804242C: .4byte 0x0000ffff
|
||||
_08042430: .4byte gDungeon
|
||||
_08042434: .4byte 0x000181f2
|
||||
_08042438: .4byte 0x000003e7
|
||||
_0804243C:
|
||||
adds r4, 0x1
|
||||
_0804243E:
|
||||
cmp r4, r6
|
||||
bgt _08042454
|
||||
movs r0, 0x42
|
||||
bl sub_803E46C
|
||||
adds r0, r5, 0
|
||||
bl sub_800E9A8
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0804243C
|
||||
_08042454:
|
||||
add sp, 0x18
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8042390
|
||||
|
||||
thumb_func_start sub_804245C
|
||||
sub_804245C:
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x18
|
||||
adds r5, r0, 0
|
||||
adds r4, r1, 0
|
||||
bl sub_8042768
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08042518
|
||||
ldrb r1, [r4]
|
||||
movs r0, 0x8
|
||||
ands r0, r1
|
||||
movs r6, 0
|
||||
cmp r0, 0
|
||||
bne _0804247C
|
||||
ldrb r6, [r4, 0x2]
|
||||
_0804247C:
|
||||
bl sub_800EF64
|
||||
movs r0, 0x4
|
||||
movs r1, 0x42
|
||||
bl sub_803E708
|
||||
ldr r0, [r5, 0xC]
|
||||
cmp r0, 0
|
||||
bge _08042490
|
||||
adds r0, 0xFF
|
||||
_08042490:
|
||||
lsls r0, 8
|
||||
lsrs r0, 16
|
||||
ldr r1, _080424EC
|
||||
ldr r2, [sp, 0x14]
|
||||
ands r2, r1
|
||||
orrs r2, r0
|
||||
str r2, [sp, 0x14]
|
||||
ldr r0, [r5, 0x10]
|
||||
cmp r0, 0
|
||||
bge _080424A6
|
||||
adds r0, 0xFF
|
||||
_080424A6:
|
||||
lsls r0, 8
|
||||
lsrs r0, 16
|
||||
lsls r0, 16
|
||||
ldr r4, _080424F0
|
||||
ands r4, r2
|
||||
orrs r4, r0
|
||||
str r4, [sp, 0x14]
|
||||
asrs r4, 16
|
||||
ldr r0, _080424F4
|
||||
ldr r0, [r0]
|
||||
ldr r1, _080424F8
|
||||
adds r0, r1
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
subs r4, r0
|
||||
lsrs r0, r4, 31
|
||||
adds r4, r0
|
||||
asrs r4, 1
|
||||
adds r4, 0x1
|
||||
adds r1, r5, 0
|
||||
adds r1, 0x28
|
||||
add r0, sp, 0x4
|
||||
bl sub_8005700
|
||||
add r1, sp, 0x14
|
||||
str r4, [sp]
|
||||
adds r0, r6, 0
|
||||
add r2, sp, 0x4
|
||||
movs r3, 0x1
|
||||
bl sub_800E49C
|
||||
adds r5, r0, 0
|
||||
movs r4, 0
|
||||
ldr r6, _080424FC
|
||||
b _08042502
|
||||
.align 2, 0
|
||||
_080424EC: .4byte 0xffff0000
|
||||
_080424F0: .4byte 0x0000ffff
|
||||
_080424F4: .4byte gDungeon
|
||||
_080424F8: .4byte 0x000181f2
|
||||
_080424FC: .4byte 0x000003e7
|
||||
_08042500:
|
||||
adds r4, 0x1
|
||||
_08042502:
|
||||
cmp r4, r6
|
||||
bgt _08042518
|
||||
movs r0, 0x42
|
||||
bl sub_803E46C
|
||||
adds r0, r5, 0
|
||||
bl sub_800E9A8
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08042500
|
||||
_08042518:
|
||||
add sp, 0x18
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_804245C
|
||||
|
||||
.align 2,0
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
#include "dungeon_message.h"
|
||||
#include "dungeon_music.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "items.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
|
||||
extern const u16 gUnknown_80F67DC[4];
|
||||
|
|
@ -32,7 +33,69 @@ extern void sub_8042D7C(void);
|
|||
extern u8 GetFloorType(void);
|
||||
extern bool8 sub_8045888(Entity *);
|
||||
extern s32 sub_80416E0(PixelPos*, u32, bool8);
|
||||
u32 sub_8041764(unkStruct_80416E0 *, bool8);
|
||||
extern u32 sub_8041764(unkStruct_80416E0 *, bool8);
|
||||
extern void sub_8005700(DungeonPos *a0, struct axObject *a1);
|
||||
extern u32 sub_800E49C();
|
||||
extern void sub_800EF40(u8 r0, u8 r1);
|
||||
extern void sub_800EF64(void);
|
||||
|
||||
void sub_8042390(Entity *entity, Item *item)
|
||||
{
|
||||
s32 sVar1;
|
||||
s32 counter;
|
||||
u8 id;
|
||||
u32 uVar6;
|
||||
DungeonPos asStack_24[4];
|
||||
DungeonPos local_14;
|
||||
|
||||
if (sub_8042768(entity)) {
|
||||
id = !ItemSticky(item) ? item->id : ITEM_NOTHING;
|
||||
sub_800EF40(id, 0);
|
||||
sub_800EF64();
|
||||
sub_803E708(4,0x42);
|
||||
local_14.x = (entity->pixelPos).x / 256;
|
||||
local_14.y = (entity->pixelPos).y / 256;
|
||||
|
||||
sVar1 = (local_14.y - gDungeon->unk181e8.cameraPixelPos.y) / 2 + 1;
|
||||
sub_8005700(asStack_24,&entity->axObj);
|
||||
uVar6 = sub_800E49C(id,&local_14,asStack_24,0,sVar1);
|
||||
for (counter = 0; counter < 1000; counter++) {
|
||||
sub_803E46C(0x42);
|
||||
if (!sub_800E9A8(uVar6)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_804245C(Entity *entity, Item *item)
|
||||
{
|
||||
s32 sVar1;
|
||||
s32 counter;
|
||||
u8 id;
|
||||
u32 uVar6;
|
||||
DungeonPos asStack_24[4];
|
||||
DungeonPos local_14;
|
||||
|
||||
if (sub_8042768(entity)) {
|
||||
id = !ItemSticky(item) ? item->id : ITEM_NOTHING;
|
||||
sub_800EF64();
|
||||
sub_803E708(4,0x42);
|
||||
local_14.x = (entity->pixelPos).x / 256;
|
||||
local_14.y = (entity->pixelPos).y / 256;
|
||||
|
||||
sVar1 = (local_14.y - gDungeon->unk181e8.cameraPixelPos.y) / 2 + 1;
|
||||
sub_8005700(asStack_24,&entity->axObj);
|
||||
uVar6 = sub_800E49C(id,&local_14,asStack_24,1,sVar1);
|
||||
for (counter = 0; counter < 1000; counter++) {
|
||||
sub_803E46C(0x42);
|
||||
if (!sub_800E9A8(uVar6)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
s32 sub_8042520(Entity *a0)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user