Decompile lever_wall.c

This commit is contained in:
Egor Ananyin 2021-02-07 12:29:55 +03:00
parent ee4002046a
commit 30aab69df9
6 changed files with 67 additions and 257 deletions

View File

@ -5,88 +5,6 @@
.text
thumb_func_start CreateLeverWall
CreateLeverWall: @ 0x080255B4
push {r4, r5, r6, lr}
sub sp, #4
adds r6, r0, #0
lsls r1, r1, #0x18
lsrs r5, r1, #0x18
ldr r0, _080255E8 @ =ObjectMain
movs r2, #0x80
lsls r2, r2, #5
ldr r1, _080255EC @ =ObjectDestroy
str r1, [sp]
movs r1, #0xb4
movs r3, #0
bl TaskCreate
adds r2, r0, #0
ldrh r1, [r2, #0x12]
movs r0, #0x10
ands r0, r1
cmp r0, #0
beq _080255F0
ldrh r0, [r2, #6]
lsls r0, r0, #2
movs r1, #0x80
lsls r1, r1, #0x12
adds r4, r0, r1
b _080255F8
.align 2, 0
_080255E8: .4byte ObjectMain
_080255EC: .4byte ObjectDestroy
_080255F0:
ldrh r1, [r2, #6]
movs r0, #0xc0
lsls r0, r0, #0x12
adds r4, r1, r0
_080255F8:
adds r0, r4, #0
adds r1, r6, #0
adds r2, r5, #0
bl InitObject
ldr r0, [r4, #8]
ldr r1, _08025638 @ =gUnk_02018F40
orrs r0, r1
str r0, [r4, #8]
ldr r0, [r4, #0xc]
movs r1, #1
orrs r0, r1
str r0, [r4, #0xc]
ldr r2, _0802563C @ =gUnk_08351648
adds r0, r4, #0
adds r0, #0x82
ldrb r1, [r0]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #3
adds r2, #0x10
adds r0, r0, r2
ldr r1, [r0]
adds r0, r4, #0
bl _call_via_r1
adds r0, r4, #0
add sp, #4
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
_08025638: .4byte gUnk_02018F40
_0802563C: .4byte gUnk_08351648
thumb_func_start sub_08025640
sub_08025640: @ 0x08025640
ldr r1, _08025648 @ =sub_0802544C
str r1, [r0, #0x78]
bx lr
.align 2, 0
_08025648: .4byte sub_0802544C
thumb_func_start nullsub_115
nullsub_115: @ 0x0802564C
bx lr
.align 2, 0
thumb_func_start sub_08025650
sub_08025650: @ 0x08025650
push {r4, r5, r6, r7, lr}

View File

@ -104,177 +104,3 @@ sub_08025440: @ 0x08025440
str r1, [r0, #8]
bx lr
.align 2, 0
thumb_func_start sub_0802544C
sub_0802544C: @ 0x0802544C
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
adds r5, r0, #0
movs r6, #0
adds r4, r5, #0
adds r4, #0xb0
ldr r0, [r4]
ldrb r0, [r0, #0xe]
cmp r0, #0
beq _0802546A
cmp r0, #1
beq _0802549C
b _080254C4
_0802546A:
ldr r2, _08025494 @ =gCurLevelInfo
adds r0, r5, #0
adds r0, #0x56
ldrb r1, [r0]
movs r0, #0xcd
lsls r0, r0, #3
muls r0, r1, r0
adds r0, r0, r2
ldr r1, _08025498 @ =0x0000065E
adds r0, r0, r1
ldrb r0, [r0]
bl sub_080029BC
ldr r1, [r4]
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldrb r1, [r1, #0xf]
cmp r0, r1
bne _080254C4
b _080254C8
.align 2, 0
_08025494: .4byte gCurLevelInfo
_08025498: .4byte 0x0000065E
_0802549C:
ldr r2, _08025590 @ =gCurLevelInfo
adds r0, r5, #0
adds r0, #0x56
ldrb r1, [r0]
movs r0, #0xcd
lsls r0, r0, #3
muls r0, r1, r0
adds r0, r0, r2
ldr r2, _08025594 @ =0x0000065E
adds r0, r0, r2
ldrb r0, [r0]
bl sub_080029E4
ldr r1, [r4]
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldrb r1, [r1, #0xf]
cmp r0, r1
bne _080254C4
movs r6, #1
_080254C4:
cmp r6, #0
beq _08025582
_080254C8:
mov sb, r5
ldr r0, [r5, #0x40]
lsls r0, r0, #4
lsrs r7, r0, #0x10
ldr r0, [r5, #0x44]
lsls r0, r0, #4
lsrs r6, r0, #0x10
movs r0, #0x56
adds r0, r0, r5
mov r8, r0
ldrb r4, [r0]
lsls r1, r7, #0x18
lsrs r1, r1, #0x18
lsls r2, r6, #0x18
lsrs r2, r2, #0x18
adds r0, r4, #0
bl sub_080025AC
adds r1, r0, #0
adds r0, r4, #0
movs r2, #0
movs r3, #0
bl sub_08001408
lsls r1, r7, #0x10
asrs r1, r1, #0x10
lsls r2, r6, #0x10
asrs r2, r2, #0x10
adds r0, r5, #0
bl sub_0800E0E4
ldr r1, _08025598 @ =gKirbys
ldr r0, _0802559C @ =gUnk_0203AD3C
ldrb r2, [r0]
movs r0, #0xd4
lsls r0, r0, #1
muls r0, r2, r0
adds r0, r0, r1
adds r0, #0x60
adds r1, r5, #0
adds r1, #0x60
ldrh r0, [r0]
ldrh r1, [r1]
cmp r0, r1
bne _08025570
ldrb r0, [r5]
cmp r0, #0
bne _08025530
mov r1, r8
ldrb r0, [r1]
cmp r0, r2
bne _08025570
_08025530:
ldr r1, _080255A0 @ =gUnk_08D60FA4
ldr r4, _080255A4 @ =gSongTable
ldr r2, _080255A8 @ =0x00000FF4
adds r0, r4, r2
ldrh r3, [r0]
lsls r0, r3, #2
adds r0, r0, r1
ldr r2, [r0]
ldr r0, [r2, #4]
cmp r0, #0
blt _08025556
movs r1, #0xff
lsls r1, r1, #4
adds r0, r4, r1
ldr r1, [r0]
ldrb r0, [r2, #9]
ldrb r1, [r1, #2]
cmp r0, r1
bhi _08025570
_08025556:
cmp r3, #0
beq _08025568
ldr r0, _080255AC @ =gUnk_0203AD10
ldr r0, [r0]
movs r1, #0x80
lsls r1, r1, #1
ands r0, r1
cmp r0, #0
bne _08025570
_08025568:
movs r0, #0xff
lsls r0, r0, #1
bl m4aSongNumStart
_08025570:
lsls r1, r7, #0x10
asrs r1, r1, #0x10
lsls r2, r6, #0x10
asrs r2, r2, #0x10
mov r0, sb
bl sub_0800E0E4
ldr r0, _080255B0 @ =nullsub_115
str r0, [r5, #0x78]
_08025582:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08025590: .4byte gCurLevelInfo
_08025594: .4byte 0x0000065E
_08025598: .4byte gKirbys
_0802559C: .4byte gUnk_0203AD3C
_080255A0: .4byte gUnk_08D60FA4
_080255A4: .4byte gSongTable
_080255A8: .4byte 0x00000FF4
_080255AC: .4byte gUnk_0203AD10
_080255B0: .4byte nullsub_115

View File

@ -16,6 +16,8 @@ void sub_08001408(u8, void *, void *, void *);
void sub_08001678(u8, u8, u8, u8);
u8 sub_080023E4(u8, u16, u16);
void *sub_080025AC(u8, u8, u8);
u16 sub_080029BC(u8);
u16 sub_080029E4(u8);
void sub_080029F4(u8, u16);
u8 sub_08009DE8(struct Object2 *);
@ -29,6 +31,8 @@ s16 sub_0800ACD4(u32, u16);
s16 sub_0800A9F4(s32, u16);
s16 sub_0800AAE0(s32, u16);
void sub_0800E0E4(struct Object2*, s16, s16);
#include "demo.h"
void sub_08020428(CreateFunc);

10
include/lever_wall.h Normal file
View File

@ -0,0 +1,10 @@
#ifndef GUARD_LEVER_WALL_H
#define GUARD_LEVER_WALL_H
#include "data.h"
#include "global.h"
#include "object.h"
struct Object2* CreateLeverWall(struct Object*, u8);
#endif

View File

@ -298,7 +298,8 @@ SECTIONS {
asm/shadow_kirby.o(.text);
asm/hammer_peg.o(.text);
asm/master_sword.o(.text);
asm/lever_wall.o(.text);
src/lever_wall.o(.text);
asm/code_08025650.o(.text);
src/demo.o(.text);
asm/code_08026044.o(.text);
asm/special_doors.o(.text);

51
src/lever_wall.c Normal file
View File

@ -0,0 +1,51 @@
#include "functions.h"
#include "lever_wall.h"
static void LeverWallAction(struct Object2*);
static void LeverWallSetFunc(struct Object2*);
static void nullsub_115(struct Object2*);
void LeverWallAction(struct Object2* arg0) {
u16 r6 = 0, x, y;
u32 ret;
struct Object2 *sb;
switch (arg0->object->subtype1) {
case 0:
if (sub_080029BC(gCurLevelInfo[arg0->base.unk56].unk65E) == arg0->object->unkF) {
r6 = 1;
}
break;
case 1:
if (sub_080029E4(gCurLevelInfo[arg0->base.unk56].unk65E) == arg0->object->unkF) {
r6 = 1;
}
break;
}
if (r6 != 0) {
sb = arg0;
x = arg0->base.x >> 12;
y = arg0->base.y >> 12;
sub_08001408(arg0->base.unk56, sub_080025AC(arg0->base.unk56, x, y), 0, 0);
sub_0800E0E4(arg0, x, y);
PlaySfx(&arg0->base, 0xff << 1);
sub_0800E0E4(sb, x, y);
arg0->unk78 = nullsub_115;
}
}
struct Object2* CreateLeverWall(struct Object* arg0, u8 arg1) {
struct Object2 *obj, *obj2;
struct Task *task = TaskCreate(ObjectMain, sizeof(struct Object2), 0x1000, 0, ObjectDestroy);
obj = TaskGetStructPtr(task, obj2);
InitObject(obj, arg0, arg1);
obj->base.flags |= 0x02018F40;
obj->base.unkC |= 1;
gUnk_08351648[obj->type].unk10(obj);
return obj;
}
static void LeverWallSetFunc(struct Object2* arg0) {
arg0->unk78 = LeverWallAction;
}
static void nullsub_115(struct Object2* arg0) {}