Match sub_802C934

This commit is contained in:
JaceCear committed 2025-11-13 22:53:27 +01:00
1 parent 6fea7f2ba3
commit 227fd724c4
4 files changed
+170 -169

No files matched your search

+2 -165
View File
@@ -8,169 +8,6 @@
.if 0
.endif
@ Used for scaling and displaying objects in Special Stages
thumb_func_start sub_802C934
sub_802C934: @ 0x0802C934
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
ldr r2, _0802CA4C @ =gUnknown_087BF8DC
ldr r1, _0802CA50 @ =gUnknown_08487134
ldr r0, _0802CA54 @ =gCurrentLevel
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
adds r0, r0, r1
ldrb r0, [r0]
lsls r0, r0, #2
adds r0, r0, r2
ldr r0, [r0]
mov ip, r0
movs r4, #0
movs r2, #0
ldr r0, _0802CA58 @ =0x0000FFFF
mov sb, r0
ldr r1, _0802CA5C @ =gUnknown_03005840
mov r8, r1
_0802C964:
lsls r3, r2, #0xc
lsls r0, r4, #1
adds r0, r0, r4
lsls r0, r0, #2
mov r5, ip
adds r1, r0, r5
ldr r0, [r1, #4]
movs r5, #0xc0
lsls r5, r5, #2
adds r0, r0, r5
lsls r6, r2, #1
adds r2, #1
mov sl, r2
cmp r3, r0
bls _0802C9AA
ldrh r0, [r1, #8]
cmp r0, sb
beq _0802C9AA
adds r2, r3, #0
ldr r3, _0802CA58 @ =0x0000FFFF
_0802C98C:
adds r0, r4, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
lsls r0, r4, #1
adds r0, r0, r4
lsls r0, r0, #2
mov r7, ip
adds r1, r0, r7
ldr r0, [r1, #4]
adds r0, r0, r5
cmp r2, r0
bls _0802C9AA
ldrh r0, [r1, #8]
cmp r0, r3
bne _0802C98C
_0802C9AA:
mov r1, r8
adds r0, r6, r1
strh r4, [r0]
mov r3, sl
lsls r0, r3, #0x18
lsrs r2, r0, #0x18
cmp r2, #0xf
bls _0802C964
lsrs r4, r4, #3
adds r4, #4
ldr r0, _0802CA60 @ =0x0000FFFC
ands r4, r0
adds r0, r4, #0
bl EwramMalloc
adds r6, r0, #0
movs r5, #0
str r5, [sp, #4]
ldr r1, _0802CA64 @ =0x040000D4
add r7, sp, #4
str r7, [r1]
str r6, [r1, #4]
lsrs r4, r4, #2
movs r0, #0x85
lsls r0, r0, #0x18
orrs r4, r0
str r4, [r1, #8]
ldr r0, [r1, #8]
ldr r0, _0802CA68 @ =Task_802CA90
movs r2, #0x98
lsls r2, r2, #5
ldr r1, _0802CA6C @ =sub_802D578
str r1, [sp]
movs r1, #0x40
movs r3, #0
bl TaskCreate
ldrh r2, [r0, #6]
movs r0, #0xc0
lsls r0, r0, #0x12
adds r0, r2, r0
str r6, [r0, #0x3c]
ldr r0, _0802CA70 @ =0x0300000C
adds r1, r2, r0
movs r4, #0
strh r5, [r1, #0x16]
strh r5, [r1, #0x18]
ldr r0, _0802CA74 @ =0x06010800
str r0, [r1, #4]
movs r0, #0xa0
lsls r0, r0, #3
strh r0, [r1, #0x1a]
strh r5, [r1, #8]
ldr r0, _0802CA78 @ =0x0000031B @ SA1_ANIM_RING
strh r0, [r1, #0xa]
ldr r3, _0802CA7C @ =0x0300002C
adds r0, r2, r3
strb r4, [r0]
strh r5, [r1, #0x14]
strh r5, [r1, #0x1c]
ldr r5, _0802CA80 @ =0x0300002D
adds r3, r2, r5
movs r0, #0xff
strb r0, [r3]
ldr r7, _0802CA84 @ =0x0300002E
adds r3, r2, r7
movs r0, #0x10
strb r0, [r3]
ldr r0, _0802CA88 @ =0x03000031
adds r2, r2, r0
strb r4, [r2]
ldr r0, _0802CA8C @ =0x00002030
str r0, [r1, #0x10]
add sp, #8
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
_0802CA4C: .4byte gUnknown_087BF8DC
_0802CA50: .4byte gUnknown_08487134
_0802CA54: .4byte gCurrentLevel
_0802CA58: .4byte 0x0000FFFF
_0802CA5C: .4byte gUnknown_03005840
_0802CA60: .4byte 0x0000FFFC
_0802CA64: .4byte 0x040000D4
_0802CA68: .4byte Task_802CA90
_0802CA6C: .4byte sub_802D578
_0802CA70: .4byte 0x0300000C
_0802CA74: .4byte 0x06010800
_0802CA78: .4byte 0x0000031B
_0802CA7C: .4byte 0x0300002C
_0802CA80: .4byte 0x0300002D
_0802CA84: .4byte 0x0300002E
_0802CA88: .4byte 0x03000031
_0802CA8C: .4byte 0x00002030
thumb_func_start Task_802CA90
Task_802CA90: @ 0x0802CA90
push {r4, r5, r6, r7, lr}
@@ -1553,8 +1390,8 @@ _0802D566:
.align 2, 0
_0802D574: .4byte gUnknown_030056F0
thumb_func_start sub_802D578
sub_802D578: @ 0x0802D578
thumb_func_start TaskDestructor_802D578
TaskDestructor_802D578: @ 0x0802D578
push {lr}
ldrh r0, [r0, #6]
movs r1, #0xc0
@@ -0,0 +1,109 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
sub sp, #0x10
mov sb, r0
adds r6, r1, #0
ldr r0, [r0, #0xc]
mov r8, r0
movs r0, #1
rsbs r0, r0, #0
cmp r8, r0
beq _0802BEC6
mov r1, sp
ldrh r0, [r6, #2]
strh r0, [r1]
adds r1, #2
ldrh r0, [r6, #4]
strh r0, [r1]
add r4, sp, #0xc
mov r1, sb
ldr r0, [r1, #0x10]
movs r1, #0x1f
ands r0, r1
strh r0, [r4]
ldr r1, _0802BED4 @ =gUnknown_030057E0
ldrh r0, [r4]
adds r0, r0, r1
movs r7, #0
ldrsb r7, [r0, r7]
cmp r7, #0
bne _0802BE7C
ldrh r0, [r4]
adds r0, r0, r1
movs r1, #0xff
strb r1, [r0]
ldrh r4, [r4]
lsls r4, r4, #5
ldr r0, _0802BED8 @ =gOamBuffer+0x6
adds r4, r4, r0
movs r5, #0x80
lsls r5, r5, #9
movs r0, #2
ldrsh r1, [r6, r0]
adds r0, r5, #0
bl Div
strh r0, [r4]
strh r7, [r4, #8]
strh r7, [r4, #0x10]
movs r0, #4
ldrsh r1, [r6, r0]
adds r0, r5, #0
bl Div
strh r0, [r4, #0x18]
_0802BE7C:
movs r1, #6
ldrsh r2, [r6, r1]
movs r4, #2
ldrsh r3, [r6, r4]
mov r1, r8
movs r4, #8
ldrsh r0, [r1, r4]
ldrh r1, [r1, #4]
lsrs r1, r1, #1
subs r0, r0, r1
muls r0, r3, r0
lsls r1, r1, #8
adds r0, r0, r1
asrs r0, r0, #8
subs r2, r2, r0
str r2, [sp, #4]
movs r0, #8
ldrsh r2, [r6, r0]
movs r1, #4
ldrsh r3, [r6, r1]
mov r4, r8
movs r1, #0xa
ldrsh r0, [r4, r1]
ldrh r1, [r4, #6]
lsrs r1, r1, #1
subs r0, r0, r1
muls r0, r3, r0
lsls r1, r1, #8
adds r0, r0, r1
asrs r0, r0, #8
subs r2, r2, r0
str r2, [sp, #8]
ldr r0, [sp, #4]
mov r4, sb
strh r0, [r4, #0x16]
ldr r0, [sp, #8]
strh r0, [r4, #0x18]
_0802BEC6:
add sp, #0x10
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0802BED4: .4byte gUnknown_030057E0
_0802BED8: .4byte gOamBuffer+0x6
.syntax divided
+1 -1
View File
@@ -12,7 +12,7 @@ typedef struct {
u16 unk4;
u16 unk6;
} MultiPlayerBgCtrlRegs; /* size: 8 */
extern MultiPlayerBgCtrlRegs *gUnknown_03005840;
extern MultiPlayerBgCtrlRegs *gMPAttackEffect2Regs;
void sub_801A384(void);
+58 -3
View File
@@ -1,6 +1,7 @@
#include "global.h"
#include "core.h"
#include "trig.h"
#include "malloc_ewram.h"
#include "lib/m4a/m4a.h"
#include "game/sa1_sa2_shared/globals.h"
#include "game/sa1_sa2_shared/palette_loader.h"
@@ -132,6 +133,12 @@ typedef struct SpStageC {
u16 unk8;
} SpStageC; /* 0x0C */
typedef struct SpStage40 {
SpriteTransform tf;
Sprite s;
void *mem;
} SpStage40;
// Number of rings needed this round, to continue to the next / (in the last one) collect the emerald.
u16 gSpecialStageTargetRings = 0;
@@ -181,6 +188,7 @@ static void CreateCheckpointMessage(u8 msg);
void sub_802C6C4(void);
void sub_802C89C(void);
void sub_802C934(void);
void Task_802CA90(void);
void sub_802D158(void);
void sub_802D190(void);
void sub_802D1D8(void);
@@ -193,6 +201,7 @@ void sub_802D3E4(void);
void sub_802D450(void);
void sub_802D4C4(void);
void Task_802D508(void);
void TaskDestructor_802D578(struct Task *t);
void sub_802D560(void);
u8 sub_802D58C(s16 param0);
void SpStage_PlayRingSoundeffect(void); // 0x0802D5EC
@@ -223,6 +232,7 @@ extern Strc_3005780 gUnknown_03005780;
extern Background gUnknown_030057A0;
extern s8 gUnknown_030057E0[];
extern Background gUnknown_03005800;
extern s16 gUnknown_03005840[16];
extern u16 gUnknown_08487140[][2];
extern u8 gUnknown_08487134[NUM_TIME_ATTACK_ZONES * ACTS_PER_ZONE];
@@ -1505,7 +1515,7 @@ void sub_802B3E4()
strc74 = TASK_DATA(TaskCreate(sub_802D33C, sizeof(SpStage74), 0x1F00U, 0U, NULL));
strc74->unk60 = 1;
strc74->unk44 = temp_r5[strc8->unk2].unk4 << 8;
strc8->unk4 = (u16)temp_r5[strc8->unk2].unk4;
strc8->unk4 = temp_r5[strc8->unk2].unk4;
strc8->unk2 += 1;
strc8->unk6 = 1;
break;
@@ -1513,7 +1523,7 @@ void sub_802B3E4()
strc74 = TASK_DATA(TaskCreate(sub_802D33C, sizeof(SpStage74), 0x1F00U, 0U, NULL));
strc74->unk60 = 2;
strc74->unk44 = temp_r5[strc8->unk2].unk4 << 8;
strc8->unk4 = (u16)temp_r5[strc8->unk2].unk4;
strc8->unk4 = temp_r5[strc8->unk2].unk4;
strc8->unk2++;
} else if (temp_r5[strc8->unk2].unk8 == 0) {
strc8->unk2++;
@@ -1526,7 +1536,7 @@ void sub_802B3E4()
strc74->unk68 = (s16)strc8->unk2;
strc74->unk6D = 0xB;
strc74->unk70 = 0;
strc8->unk4 = (u16)temp_r5[strc8->unk2].unk4;
strc8->unk4 = temp_r5[strc8->unk2].unk4;
strc8->unk2++;
}
}
@@ -2166,6 +2176,51 @@ void sub_802C89C()
}
}
void sub_802C934(void)
{
s32 sp4;
SpStageC *element;
Sprite *s;
u16 var_r4;
u32 allocSize;
u8 var_r2;
u8 *temp_r6;
SpStage40 *strc40;
element = gUnknown_087BF8DC[gUnknown_08487134[gCurrentLevel]];
var_r4 = 0;
for (var_r2 = 0; var_r2 < 16; var_r2++) {
while (((u32)(var_r2 << 12) > (element[var_r4].unk4 + 0x300))) {
if (element[var_r4].unk8 == 0xFFFF) {
break;
}
var_r4 += 1;
}
gUnknown_03005840[var_r2] = var_r4;
}
allocSize = ((var_r4 >> 3) + 4) & 0xFFFC;
temp_r6 = EwramMalloc(allocSize);
DmaFill32(3, 0, temp_r6, allocSize);
strc40 = TASK_DATA(TaskCreate(Task_802CA90, sizeof(SpStage40), 0x1300U, 0U, TaskDestructor_802D578));
strc40->mem = temp_r6;
s = &strc40->s;
s->x = 0;
s->y = 0;
s->graphics.dest = (void *)OBJ_VRAM0 + 0x800;
s->oamFlags = 0x500;
s->graphics.size = 0;
s->graphics.anim = 0x31B;
s->variant = 0;
s->animCursor = 0;
s->qAnimDelay = 0;
s->prevVariant = 0xFF;
s->animSpeed = 0x10;
s->palId = 0;
s->frameFlags = 0x2030;
}
#if 0
// Matches!
void sub_802D6FC(SpStage74 *strc74, Sprite *s) {