mirror of
https://github.com/jiangzhengwenjz/katam.git
synced 2025-02-21 20:50:36 +00:00
decompile noddy
This commit is contained in:
parent
67279ecd35
commit
d2e736f704
1114
asm/noddy.s
1114
asm/noddy.s
File diff suppressed because it is too large
Load Diff
9
include/noddy.h
Normal file
9
include/noddy.h
Normal file
@ -0,0 +1,9 @@
|
||||
#ifndef GUARD_NODDY_H
|
||||
#define GUARD_NODDY_H
|
||||
|
||||
#include "global.h"
|
||||
#include "data.h"
|
||||
|
||||
void *CreateNoddy(struct Object *, u8);
|
||||
|
||||
#endif
|
@ -243,6 +243,23 @@
|
||||
Macro_08107BA8_3(objBase, sprite); \
|
||||
})
|
||||
|
||||
#define Macro_081050E8(obj4 /* objBase */, sprite, param, cond) \
|
||||
({ \
|
||||
if (gKirbys[gUnk_0203AD3C].base.base.unk60__42 == (obj4)->unk60__42) \
|
||||
{ \
|
||||
if (cond) \
|
||||
{ \
|
||||
(sprite)->unk1F = sub_0803DF24(param); \
|
||||
if ((sprite)->unk1F == 0xFF) \
|
||||
(sprite)->unk1F = sub_0803DFAC((param), 0); \
|
||||
} \
|
||||
} \
|
||||
else \
|
||||
(sprite)->unk1F = 0; \
|
||||
})
|
||||
|
||||
|
||||
|
||||
void ObjectMain(void);
|
||||
void ObjectDestroy(struct Task *);
|
||||
void InitObject(struct Object2 *, struct Object *, u8);
|
||||
|
7
include/parasol.h
Normal file
7
include/parasol.h
Normal file
@ -0,0 +1,7 @@
|
||||
#ifndef GUARD_PARASOL_H
|
||||
#define GUARD_PARASOL_H
|
||||
|
||||
#include "global.h"
|
||||
#include "data.h"
|
||||
|
||||
#endif
|
@ -346,7 +346,8 @@ SECTIONS {
|
||||
src/giant_rocky.o(.text);
|
||||
src/foley.o(.text);
|
||||
asm/shooty.o(.text);
|
||||
asm/noddy.o(.text);
|
||||
src/noddy.o(.text);
|
||||
src/parasol.o(.text);
|
||||
asm/parasol.o(.text);
|
||||
asm/hot_head.o(.text);
|
||||
src/sparky.o(.text);
|
||||
|
@ -3104,21 +3104,6 @@ void sub_08104E04(struct DarkMindForm1 *r4)
|
||||
}
|
||||
}
|
||||
|
||||
#define Macro_081050E8(obj4 /* objBase */, sprite, param, cond) \
|
||||
({ \
|
||||
if (gKirbys[gUnk_0203AD3C].base.base.unk60__42 == (obj4)->unk60__42) \
|
||||
{ \
|
||||
if (cond) \
|
||||
{ \
|
||||
(sprite)->unk1F = sub_0803DF24(param); \
|
||||
if ((sprite)->unk1F == 0xFF) \
|
||||
(sprite)->unk1F = sub_0803DFAC((param), 0); \
|
||||
} \
|
||||
} \
|
||||
else \
|
||||
(sprite)->unk1F = 0; \
|
||||
})
|
||||
|
||||
void sub_081050E8(struct Object2 *r5, u8 r7)
|
||||
{
|
||||
struct Task *t = TaskCreate(sub_08105278, sizeof(struct Object4), 0x3500, 0x10, sub_0803DCCC);
|
||||
|
190
src/noddy.c
Normal file
190
src/noddy.c
Normal file
@ -0,0 +1,190 @@
|
||||
#include "object.h"
|
||||
#include "noddy.h"
|
||||
#include "functions.h"
|
||||
|
||||
static void sub_080C233C(struct Object2 *);
|
||||
static void sub_080C2438(struct Object2 *);
|
||||
static void sub_080C25CC(void);
|
||||
static void sub_080C2900(struct Object2 *);
|
||||
static void sub_080C2914(struct Object2 *);
|
||||
static void sub_080C293C(struct Object2 *);
|
||||
static void sub_080C2950(struct Object2 *);
|
||||
static void sub_080C2978(struct Object2 *);
|
||||
static void sub_080C2994(struct Object2 *);
|
||||
static void sub_080C29A4(struct Object2 *);
|
||||
|
||||
void *CreateNoddy(struct Object *r6, u8 r4) {
|
||||
struct Task *t = TaskCreate(ObjectMain, sizeof(struct Object2), 0x1000, 0x10, ObjectDestroy);
|
||||
struct Object2 *r0, *r5 = TaskGetStructPtr(t, r0);
|
||||
|
||||
InitObject(r5, r6, r4);
|
||||
if (r5->base.x > r5->kirby3->base.base.x)
|
||||
r5->base.flags |= 1;
|
||||
else
|
||||
r5->base.flags &= ~1;
|
||||
sub_0803E2B0(&r5->base, -5, -6, 5, 5);
|
||||
sub_0803E308(&r5->base, -6, -7, 6, 7);
|
||||
ObjectInitSprite(r5);
|
||||
switch (r6->subtype1) {
|
||||
case 0:
|
||||
gUnk_08351648[r5->type].unk10(r5);
|
||||
break;
|
||||
case 1:
|
||||
sub_080C2978(r5);
|
||||
break;
|
||||
}
|
||||
r5->unk9E = 0;
|
||||
r5->unk7C = 0;
|
||||
return r5;
|
||||
}
|
||||
|
||||
static void sub_080C22E4(struct Object2 *r4) {
|
||||
if (r4->object->subtype1 == 1) {
|
||||
sub_080C2978(r4);
|
||||
} else {
|
||||
ObjectSetFunc(r4, 0, sub_080C233C);
|
||||
r4->base.xspeed = 0x80;
|
||||
r4->base.xspeed <<= r4->subtype;
|
||||
if (r4->subtype) r4->unk83 = 1;
|
||||
if (r4->base.flags & 1)
|
||||
r4->base.xspeed = -r4->base.xspeed;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_080C233C(struct Object2 *r4) {
|
||||
r4->base.flags |= 4;
|
||||
if (r4->base.unk62 & 1) {
|
||||
r4->base.flags ^= 1;
|
||||
r4->base.xspeed = -r4->base.xspeed;
|
||||
}
|
||||
if (r4->base.unk62 & 4 && sub_0809D998(r4)) {
|
||||
r4->base.flags ^= 1;
|
||||
r4->base.xspeed = -r4->base.xspeed;
|
||||
}
|
||||
if (r4->base.counter > 120 << r4->subtype)
|
||||
sub_080C2900(r4);
|
||||
++r4->base.counter;
|
||||
}
|
||||
|
||||
static void sub_080C23B0(struct Object2 *r4) {
|
||||
r4->base.flags |= 4;
|
||||
if (r4->base.flags & 2)
|
||||
r4->kirby3 = sub_0803D368(r4);
|
||||
if (r4->base.counter > 226)
|
||||
sub_080C293C(r4);
|
||||
if (r4->subtype && r4->base.counter > 120
|
||||
&& abs(r4->kirby3->base.base.x - r4->base.x) < 0x6000)
|
||||
sub_080C293C(r4);
|
||||
if (r4->base.unk1 == 0x30)
|
||||
sub_080C2438(r4);
|
||||
++r4->base.counter;
|
||||
}
|
||||
|
||||
static void sub_080C2438(struct Object2 *r6) {
|
||||
struct Task *t = TaskCreate(sub_080C25CC, sizeof(struct Object4), 0x3500, 0x10, sub_0803DCCC);
|
||||
struct Object4 *r0, *r4 = TaskGetStructPtr(t, r0);
|
||||
|
||||
sub_0803E3B0(r4);
|
||||
r4->unk0 = 3;
|
||||
r4->unk34 = r6->base.x;
|
||||
r4->unk38 = r6->base.y;
|
||||
r4->unk44 = r6;
|
||||
r4->unk60__42 = r6->base.unk60__42;
|
||||
r4->unk3C = 0x20;
|
||||
r4->unk3E = 0x40;
|
||||
if (r6->base.flags & 1) {
|
||||
r4->unk34 += 0xC00;
|
||||
r4->unk3C = -r4->unk3C;
|
||||
} else {
|
||||
r4->flags |= 1;
|
||||
r4->unk34 -= 0xC00;
|
||||
}
|
||||
if (Macro_0810B1F4(&r6->base))
|
||||
r4->flags |= 0x2000;
|
||||
sub_080709F8(r4, &r4->unkC, 1, 0x322, 6, 12);
|
||||
r4->unkC.unk1F = 0;
|
||||
if (r6->base.unkC & 0x10)
|
||||
Macro_081050E8(r4, &r4->unkC, gUnk_08351648[0x32].unk8, 1);
|
||||
else
|
||||
Macro_081050E8(r4, &r4->unkC, 0x322, 1);
|
||||
}
|
||||
|
||||
static void sub_080C25CC(void) {
|
||||
struct Object4 *r0, *r5 = TaskGetStructPtr(gCurTask, r0);
|
||||
struct Object2 *r6 = r5->unk44, *r3;
|
||||
struct Sprite sprite;
|
||||
|
||||
if (r5->flags & 0x1000) {
|
||||
TaskDestroy(gCurTask);
|
||||
return;
|
||||
}
|
||||
Macro_08107BA8_4(r5, &r5->unkC, &sprite, 1, &r5->unkC);
|
||||
if (r6->base.unkC & 0x10)
|
||||
Macro_081050E8(r5, &r5->unkC, gUnk_08351648[0x32].unk8, !r5->unkC.unk1F);
|
||||
else
|
||||
Macro_081050E8(r5, &r5->unkC, 0x322, !r5->unkC.unk1F);
|
||||
r3 = r5->unk44;
|
||||
if (r3) {
|
||||
if (r3->base.unk0 && r3->base.flags & 0x1000) {
|
||||
r5->unk44 = NULL;
|
||||
r3 = NULL;
|
||||
}
|
||||
if (!r3)
|
||||
goto _080C27E4;
|
||||
if (Macro_0810B1F4(&r3->base) && !(r5->flags & 0x2000)) {
|
||||
sub_0803DBC8(r5);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
_080C27E4:
|
||||
KirbySomething(r5);
|
||||
}
|
||||
Macro_0809E55C(r5);
|
||||
if (++r5->unk4 > 0x30) {
|
||||
r5->flags |= 0x1000;
|
||||
} else {
|
||||
if (!(r5->flags & 0x800)) {
|
||||
r5->unk34 += r5->unk3C;
|
||||
r5->unk38 -= r5->unk3E;
|
||||
}
|
||||
sub_0806FAC8(r5);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_080C2900(struct Object2 *r0) {
|
||||
ObjectSetFunc(r0, 2, sub_080C2914);
|
||||
}
|
||||
|
||||
static void sub_080C2914(struct Object2 *r4) {
|
||||
r4->base.xspeed = 0;
|
||||
if (r4->base.flags & 2)
|
||||
sub_080C29A4(r4);
|
||||
++r4->base.counter;
|
||||
}
|
||||
|
||||
static void sub_080C293C(struct Object2 *r0) {
|
||||
ObjectSetFunc(r0, 2, sub_080C2950);
|
||||
}
|
||||
|
||||
static void sub_080C2950(struct Object2 *r4) {
|
||||
r4->base.xspeed = 0;
|
||||
if (r4->base.flags & 2)
|
||||
sub_080C22E4(r4);
|
||||
++r4->base.counter;
|
||||
}
|
||||
|
||||
static void sub_080C2978(struct Object2 *r4) {
|
||||
ObjectSetFunc(r4, 3, sub_080C2994);
|
||||
r4->base.yspeed = 0;
|
||||
}
|
||||
|
||||
static void sub_080C2994(struct Object2 *r0) {
|
||||
r0->base.flags |= 4;
|
||||
r0->base.xspeed = 0;
|
||||
}
|
||||
|
||||
static void sub_080C29A4(struct Object2 *r4) {
|
||||
ObjectSetFunc(r4, 3, sub_080C23B0);
|
||||
r4->base.xspeed = 0;
|
||||
}
|
13
src/parasol.c
Normal file
13
src/parasol.c
Normal file
@ -0,0 +1,13 @@
|
||||
#include "object.h"
|
||||
#include "parasol.h"
|
||||
#include "functions.h"
|
||||
|
||||
void sub_080C29C0(struct Object2 *r5, u8 r8) {
|
||||
s16 x = r5->base.x >> 8;
|
||||
s16 y = r5->base.y >> 8;
|
||||
|
||||
CreateObjTemplateAndObjWithSettingParent(r5, 1, 36, x, y,
|
||||
0, 31, 0, 0, OBJ_PARASOL, r8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
// TODO: decompile parasol.s
|
Loading…
x
Reference in New Issue
Block a user