mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 09:43:38 +00:00
Match sub_802C934
This commit is contained in:
1 parent
6fea7f2ba3
commit
227fd724c4
4 files changed
+170
-169
No files matched your search
+2
-165
@@ -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
|
||||
@@ -12,7 +12,7 @@ typedef struct {
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
} MultiPlayerBgCtrlRegs; /* size: 8 */
|
||||
extern MultiPlayerBgCtrlRegs *gUnknown_03005840;
|
||||
extern MultiPlayerBgCtrlRegs *gMPAttackEffect2Regs;
|
||||
|
||||
void sub_801A384(void);
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in new issue
Block a user