more boss run

This commit is contained in:
Oliver Bell committed 2024-06-16 13:20:47 +01:00
1 parent bb14071fc0
commit a0b1a35812
4 files changed
+125 -465

No files matched your search

+2 -1
View File
@@ -338,7 +338,8 @@
"packed.h": "c",
"endings.h": "c",
"team_play.h": "c",
"stdlib.h": "c"
"stdlib.h": "c",
"boss_8.h": "c"
},
"asm-code-lens.donated": true,
"editor.formatOnSave": true,
-418
View File
@@ -37,424 +37,6 @@ gUnknown_080D8874:
.syntax unified
.arm
thumb_func_start sub_8049D20
sub_8049D20: @ 0x08049D20
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0xc
adds r4, r0, #0
adds r5, r1, #0
ldr r0, _08049E74 @ =sub_8049E90
movs r1, #0xb2
lsls r1, r1, #1
movs r2, #0x81
lsls r2, r2, #7
ldr r3, _08049E78 @ =sub_804A6B4
str r3, [sp]
movs r3, #0
bl TaskCreate
ldrh r0, [r0, #6]
movs r1, #0xc0
lsls r1, r1, #0x12
adds r7, r0, r1
ldr r2, _08049E7C @ =IWRAM_START + 0x15D
adds r1, r0, r2
movs r2, #0
strb r2, [r1]
ldr r3, _08049E80 @ =IWRAM_START + 0x120
adds r1, r0, r3
str r4, [r1]
adds r3, #0x40
adds r1, r0, r3
str r5, [r1]
subs r3, #2
adds r1, r0, r3
strb r2, [r1]
ldr r1, _08049E84 @ =IWRAM_START + 0x15F
adds r0, r0, r1
strb r2, [r0]
movs r0, #0x2f
bl VramMalloc
str r0, [sp, #4]
movs r2, #0xf0
lsls r2, r2, #1
adds r0, r0, r2
str r0, [sp, #8]
movs r5, #0
ldr r3, _08049E88 @ =gUnknown_080D8840
mov sb, r3
movs r0, #4
add r0, sb
mov sl, r0
movs r6, #0
_08049D8A:
lsls r2, r5, #3
movs r3, #0x92
lsls r3, r3, #1
adds r1, r7, r3
adds r1, r1, r2
mov r3, sb
adds r0, r2, r3
ldr r0, [r0]
lsls r0, r0, #8
str r0, [r1]
movs r0, #0x94
lsls r0, r0, #1
adds r1, r7, r0
adds r1, r1, r2
mov r3, sl
adds r0, r2, r3
ldr r0, [r0]
lsls r0, r0, #8
str r0, [r1]
movs r1, #0x9e
lsls r1, r1, #1
adds r0, r7, r1
adds r0, r0, r2
str r6, [r0]
movs r3, #0xa0
lsls r3, r3, #1
adds r0, r7, r3
adds r0, r0, r2
str r6, [r0]
lsls r3, r5, #1
movs r0, #0xaa
lsls r0, r0, #1
adds r2, r7, r0
adds r2, r2, r3
adds r0, r5, #2
lsls r1, r0, #2
adds r1, r1, r0
lsls r0, r1, #4
subs r0, r0, r1
lsls r0, r0, #2
strh r0, [r2]
movs r1, #0xad
lsls r1, r1, #1
adds r0, r7, r1
adds r0, r0, r5
strb r6, [r0]
movs r4, #0
adds r2, r5, #1
mov r8, r2
adds r3, r3, r5
lsls r3, r3, #5
adds r5, r7, r3
_08049DF2:
lsls r0, r4, #1
adds r0, r0, r4
lsls r0, r0, #4
adds r2, r5, r0
movs r0, #0x50
strh r0, [r2, #0x16]
strh r0, [r2, #0x18]
lsls r0, r4, #2
add r0, sp
adds r0, #4
ldr r0, [r0]
str r0, [r2, #4]
ldr r0, _08049E8C @ =gUnknown_080D8864
lsls r1, r4, #3
adds r1, r1, r0
ldrh r0, [r1, #4]
strh r0, [r2, #0xa]
ldrb r1, [r1, #6]
adds r0, r2, #0
adds r0, #0x20
strb r1, [r0]
movs r0, #0xe0
lsls r0, r0, #3
strh r0, [r2, #0x1a]
strh r6, [r2, #8]
strh r6, [r2, #0x14]
strh r6, [r2, #0x1c]
adds r1, r2, #0
adds r1, #0x21
movs r0, #0xff
strb r0, [r1]
adds r1, #1
movs r0, #0x10
strb r0, [r1]
adds r0, r2, #0
adds r0, #0x25
strb r6, [r0]
movs r0, #1
rsbs r0, r0, #0
str r0, [r2, #0x28]
movs r0, #0x80
lsls r0, r0, #5
str r0, [r2, #0x10]
adds r0, r2, #0
bl UpdateSpriteAnimation
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #1
bls _08049DF2
mov r3, r8
lsls r0, r3, #0x18
lsrs r5, r0, #0x18
cmp r5, #2
bls _08049D8A
add sp, #0xc
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08049E74: .4byte sub_8049E90
_08049E78: .4byte sub_804A6B4
_08049E7C: .4byte IWRAM_START + 0x15D
_08049E80: .4byte IWRAM_START + 0x120
_08049E84: .4byte IWRAM_START + 0x15F
_08049E88: .4byte gUnknown_080D8840
_08049E8C: .4byte gUnknown_080D8864
thumb_func_start sub_8049E90
sub_8049E90: @ 0x08049E90
push {r4, r5, r6, lr}
ldr r0, _08049EB0 @ =gCurTask
ldr r2, [r0]
ldrh r1, [r2, #6]
movs r0, #0xc0
lsls r0, r0, #0x12
adds r5, r1, r0
ldr r0, _08049EB4 @ =gActiveBossTask
ldr r0, [r0]
cmp r0, #0
bne _08049EB8
adds r0, r2, #0
bl TaskDestroy
b _08049F08
.align 2, 0
_08049EB0: .4byte gCurTask
_08049EB4: .4byte gActiveBossTask
_08049EB8:
movs r4, #0
ldr r6, _08049F10 @ =gUnknown_080D8874
_08049EBC:
movs r1, #0xad
lsls r1, r1, #1
adds r0, r5, r1
adds r0, r0, r4
ldrb r0, [r0]
lsls r0, r0, #2
adds r0, r0, r6
ldr r2, [r0]
adds r0, r5, #0
adds r1, r4, #0
bl _call_via_r2
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #2
bls _08049EBC
ldr r1, _08049F14 @ =gPlayer
ldr r0, [r1, #0xc]
asrs r0, r0, #8
cmp r0, #0x84
bgt _08049EEE
adds r0, r1, #0
bl sub_800CBA4
_08049EEE:
ldr r2, _08049F18 @ =0x0000015F
adds r1, r5, r2
ldrb r0, [r1]
cmp r0, #0
bne _08049F08
adds r2, #1
adds r0, r5, r2
ldr r0, [r0]
ldrb r0, [r0, #8]
cmp r0, #0
bne _08049F08
movs r0, #1
strb r0, [r1]
_08049F08:
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_08049F10: .4byte gUnknown_080D8874
_08049F14: .4byte gPlayer
_08049F18: .4byte 0x0000015F
thumb_func_start sub_8049F1C
sub_8049F1C: @ 0x08049F1C
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #4
mov ip, r0
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
mov r8, r1
mov r0, r8
lsls r0, r0, #1
str r0, [sp]
add r0, r8
lsls r0, r0, #5
mov r1, ip
adds r7, r1, r0
movs r0, #0x30
adds r0, r0, r7
mov sl, r0
mov r1, r8
lsls r3, r1, #3
movs r0, #0xa0
lsls r0, r0, #1
add r0, ip
adds r2, r0, r3
ldr r0, [r2]
rsbs r0, r0, #0
mov sb, r0
ldr r6, _0804A060 @ =0x0000015F
add r6, ip
ldrb r0, [r6]
cmp r0, #0
bne _08049F62
str r0, [r2]
_08049F62:
ldr r2, [r2]
add sb, r2
movs r1, #0x92
lsls r1, r1, #1
add r1, ip
adds r1, r1, r3
movs r0, #0x9e
lsls r0, r0, #1
add r0, ip
adds r0, r0, r3
ldr r1, [r1]
ldr r0, [r0]
adds r1, r1, r0
asrs r4, r1, #8
movs r0, #0x94
lsls r0, r0, #1
add r0, ip
adds r0, r0, r3
ldr r0, [r0]
adds r0, r0, r2
asrs r5, r0, #8
ldr r1, _0804A064 @ =gCamera
ldr r0, [r1]
subs r0, r4, r0
strh r0, [r7, #0x16]
ldr r0, [r1, #4]
subs r0, r5, r0
strh r0, [r7, #0x18]
ldrb r0, [r6]
cmp r0, #0
bne _08049FD6
movs r0, #0xaa
lsls r0, r0, #1
add r0, ip
ldr r1, [sp]
adds r6, r0, r1
ldrh r0, [r6]
subs r0, #1
strh r0, [r6]
lsls r0, r0, #0x10
cmp r0, #0
bne _08049FD6
ldr r3, _0804A068 @ =gUnknown_080D8858
movs r2, #0xad
lsls r2, r2, #1
add r2, ip
add r2, r8
ldrb r0, [r2]
lsls r0, r0, #1
adds r1, r3, #1
adds r0, r0, r1
ldrb r0, [r0]
strh r0, [r6]
ldrb r0, [r2]
lsls r0, r0, #1
adds r0, r0, r3
ldrb r0, [r0]
strb r0, [r2]
_08049FD6:
ldr r0, _0804A06C @ =gPlayer
ldr r1, [r0, #0x20]
movs r2, #8
ands r1, r2
adds r6, r0, #0
cmp r1, #0
beq _0804A008
ldr r0, [r6, #0x3c]
cmp r0, r7
bne _0804A008
ldr r0, [r6, #0xc]
movs r1, #0x80
lsls r1, r1, #1
adds r0, r0, r1
add r0, sb
str r0, [r6, #0xc]
movs r0, #0xaf
lsls r0, r0, #1
add r0, ip
ldrb r0, [r0]
cmp r0, #1
bne _0804A008
ldr r0, [r6, #8]
adds r0, r0, r1
str r0, [r6, #8]
_0804A008:
ldr r0, [r6, #0x20]
movs r1, #0x80
lsls r1, r1, #0xf
ands r0, r1
cmp r0, #0
bne _0804A036
adds r0, r7, #0
adds r1, r4, #0
adds r2, r5, #0
adds r3, r6, #0
bl sub_800CCB8
adds r1, r0, #0
movs r0, #0x80
lsls r0, r0, #9
ands r0, r1
cmp r0, #0
beq _0804A036
lsls r1, r1, #0x18
asrs r1, r1, #0x10
ldr r0, [r6, #0xc]
adds r0, r0, r1
str r0, [r6, #0xc]
_0804A036:
adds r0, r7, #0
bl DisplaySprite
ldrh r0, [r7, #0x16]
mov r1, sl
strh r0, [r1, #0x16]
ldrh r0, [r7, #0x18]
adds r0, #0x40
strh r0, [r1, #0x18]
mov r0, sl
bl DisplaySprite
add sp, #4
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0804A060: .4byte 0x0000015F
_0804A064: .4byte gCamera
_0804A068: .4byte gUnknown_080D8858
_0804A06C: .4byte gPlayer
thumb_func_start sub_804A070
sub_804A070: @ 0x0804A070
push {r4, r5, r6, r7, lr}
+118 -45
View File
@@ -2,6 +2,7 @@
#include "game/stage/player.h"
#include "game/stage/camera.h"
#include "sakit/collision.h"
#include "game/bosses/common.h"
@@ -203,6 +204,10 @@ void sub_80499D8(void)
void sub_8049D1C(struct Task *t) { }
typedef struct {
/* 0x00 */ Vec2_32 qPos;
/* 0x08 */ u8 livesCockpit;
} SuperEggRoboZ;
typedef struct {
Sprite unk0[3][2];
s32 unk120;
@@ -213,60 +218,128 @@ typedef struct {
u8 unk15D;
u8 unk15E;
u8 unk15F;
s32 unk160;
SuperEggRoboZ *unk160;
} UNK_8049D20; /* 0x164 */
void sub_8049E90(void);
void sub_804A6B4(struct Task *);
typedef void (*UNK_8049D20Callback)(UNK_8049D20 *, u8);
extern const UNK_8049D20Callback gUnknown_080D8874[];
extern const s32 gUnknown_080D8840[][2];
extern const TileInfo gUnknown_080D8864[];
// void sub_8049D20(s32 p1, s32 p2)
// {
// u8 i, j;
// void *vrams[2];
// struct Task *t = TaskCreate(sub_8049E90, 0x164, 0x4080, 0, sub_804A6B4);
// UNK_8049D20 *unkD20 = TASK_DATA(t);
// Sprite *s;
void sub_8049D20(s32 p1, SuperEggRoboZ *boss)
{
u8 i, j;
void *vrams[2];
struct Task *t = TaskCreate(sub_8049E90, 0x164, 0x4080, 0, sub_804A6B4);
UNK_8049D20 *unkD20 = TASK_DATA(t);
Sprite *s;
// unkD20->unk15D = 0;
// unkD20->unk120 = p1;
// unkD20->unk160 = p2;
// unkD20->unk15E = 0;
// unkD20->unk15F = 0;
// vrams[0] = VramMalloc(47);
// vrams[1] = vrams[0] + 0x1E0;
unkD20->unk15D = 0;
unkD20->unk120 = p1;
unkD20->unk160 = boss;
unkD20->unk15E = 0;
unkD20->unk15F = 0;
vrams[0] = VramMalloc(47);
vrams[1] = vrams[0] + 0x1E0;
// for (i = 0; i < 3; i++) {
// unkD20->unk124[i][0] = Q(gUnknown_080D8840[i][0]);
// unkD20->unk124[i][1] = Q(gUnknown_080D8840[i][1]);
// unkD20->unk13C[i][0] = 0;
// unkD20->unk13C[i][1] = 0;
// unkD20->unk154[i] = (i + 2) * 300;
// unkD20->unk15A[i] = 0;
// for (j = 0; j < 2; j++) {
// s = &unkD20->unk0[i][j];
// s->x = 80;
// s->y = 80;
// s->graphics.dest = vrams[j];
// SPRITE_INIT_WITHOUT_VRAM(s, gUnknown_080D8864[j].anim,
// gUnknown_080D8864[j].variant, 15, 1, 0);
// UpdateSpriteAnimation(s);
// }
// }
// }
for (i = 0; i < 3; i++) {
unkD20->unk124[i][0] = Q(gUnknown_080D8840[i][0]);
unkD20->unk124[i][1] = Q(gUnknown_080D8840[i][1]);
unkD20->unk13C[i][0] = 0;
unkD20->unk13C[i][1] = 0;
unkD20->unk154[i] = (i + 2) * 300;
unkD20->unk15A[i] = 0;
for (j = 0; j < 2; j++) {
s = &unkD20->unk0[i][j];
s->x = 80;
s->y = 80;
s->graphics.dest = vrams[j];
SPRITE_INIT_WITHOUT_VRAM(s, gUnknown_080D8864[j].anim,
gUnknown_080D8864[j].variant, 28, 1, 0);
UpdateSpriteAnimation(s);
}
}
}
// void sub_8049E90(void)
// {
// u8 i;
// UNK_8049D20 *unkD20 = TASK_DATA(gCurTask);
// if (gActiveBossTask == NULL) {
// TaskDestroy(gCurTask);
// return;
// }
void sub_8049E90(void)
{
u8 i;
UNK_8049D20 *unkD20 = TASK_DATA(gCurTask);
if (gActiveBossTask == NULL) {
TaskDestroy(gCurTask);
return;
}
// for (i = 0; i < 3; i++) {
// gUnknown_080D8874[]
// }
// }
for (i = 0; i < 3; i++) {
gUnknown_080D8874[unkD20->unk15A[i]](unkD20, i);
}
if (I(gPlayer.y) < 133) {
sub_800CBA4(&gPlayer);
}
if (unkD20->unk15F == 0 && unkD20->unk160->livesCockpit == 0) {
unkD20->unk15F = 1;
}
}
extern const u8 gUnknown_080D8858[][2];
void sub_8049F1C(UNK_8049D20 *unkD20, u8 i)
{
Sprite *s = &unkD20->unk0[i][0];
Sprite *s2 = &unkD20->unk0[i][1];
s32 preY = -unkD20->unk13C[i][1];
Vec2_32 pos;
#ifndef NON_MATCHING
register u8 *unk15F asm("r6") = &unkD20->unk15F;
#else
u8 *unk15F = &unkD20->unk15F;
#endif
if (*unk15F == 0) {
unkD20->unk13C[i][1] = 0;
}
preY += unkD20->unk13C[i][1];
pos.x = I(unkD20->unk124[i][0] + unkD20->unk13C[i][0]);
pos.y = I(unkD20->unk124[i][1] + unkD20->unk13C[i][1]);
s->x = pos.x - gCamera.x;
s->y = pos.y - gCamera.y;
if (*unk15F == 0) {
if (--unkD20->unk154[i] == 0) {
unkD20->unk154[i] = gUnknown_080D8858[unkD20->unk15A[i]][1];
unkD20->unk15A[i] = gUnknown_080D8858[unkD20->unk15A[i]][0];
}
}
if (gPlayer.moveState & MOVESTATE_8 && gPlayer.unk3C == s) {
gPlayer.y += Q(1);
gPlayer.y += preY;
if (unkD20->unk15E == 1) {
gPlayer.x += Q(1);
}
}
if (!(gPlayer.moveState & MOVESTATE_400000)) {
u32 result = sub_800CCB8(s, pos.x, pos.y, &gPlayer);
if (result & 0x10000) {
gPlayer.y += Q(result << 0x10) >> 0x10;
}
}
DisplaySprite(s);
s2->x = s->x;
s2->y = s->y + 0x40;
DisplaySprite(s2);
}
+5 -1
View File
@@ -30,8 +30,12 @@ extern void sub_8048C7C(void *boss);
const u16 gUnknown_080D87E6[][2] = { { 0, 0 } };
const u16 gUnknown_080D87D8[] = { 0 };
const u32 gUnknown_080D8808[][2] = { { 0, 0 } };
const u8 gUnknown_080D8858[][2] = { { 0, 0 } };
const u32 gUnknown_080D8874[] = { 0 };
const TileInfo gUnknown_080D8864[] = { { 0, 0, 0 } };
const s32 gUnknown_080D8840[][2] = { { 0, 0 } };
void sub_8049D20(void *vramTiles, void *boss) { }
void sub_804A6B4(struct Task *) {};
// boss_9
const s16 gUnknown_080D8A94[4] = { 0 };