mirror of
https://github.com/jiangzhengwenjz/katam.git
synced 2025-02-21 20:50:36 +00:00
Decompile lever_wall.c
This commit is contained in:
parent
ee4002046a
commit
30aab69df9
@ -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}
|
@ -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
|
||||
|
@ -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
10
include/lever_wall.h
Normal 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
|
@ -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
51
src/lever_wall.c
Normal 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) {}
|
Loading…
x
Reference in New Issue
Block a user