mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 09:43:38 +00:00
collect_rings: match entities manager, match collision
This commit is contained in:
1 parent
c8aacf0b38
commit
b426d69c13
17 files changed
+1275
-3406
No files matched your search
@@ -0,0 +1,945 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
.text
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
sub sp, #0x40
|
||||
str r0, [sp, #0x18]
|
||||
ldr r0, [sp, #0x60]
|
||||
ldr r4, [sp, #0x64]
|
||||
lsls r1, r1, #0x10
|
||||
lsrs r1, r1, #0x10
|
||||
str r1, [sp, #0x1c]
|
||||
lsls r2, r2, #0x10
|
||||
lsrs r2, r2, #0x10
|
||||
str r2, [sp, #0x20]
|
||||
lsls r3, r3, #0x10
|
||||
lsrs r3, r3, #0x10
|
||||
str r3, [sp, #0x24]
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
str r0, [sp, #0x28]
|
||||
lsls r4, r4, #0x18
|
||||
lsrs r4, r4, #0x18
|
||||
str r4, [sp, #0x2c]
|
||||
ldr r7, _02006958 @ =gPlayer
|
||||
ldrb r3, [r7, #0x16]
|
||||
adds r3, #5
|
||||
rsbs r0, r3, #0
|
||||
add r1, sp, #8
|
||||
mov sb, r1
|
||||
strb r0, [r1]
|
||||
ldrb r1, [r7, #0x17]
|
||||
movs r6, #1
|
||||
subs r2, r6, r1
|
||||
mov r0, sp
|
||||
adds r0, #9
|
||||
strb r2, [r0]
|
||||
adds r0, #1
|
||||
strb r3, [r0]
|
||||
subs r1, #1
|
||||
adds r0, #1
|
||||
strb r1, [r0]
|
||||
add r0, sp, #4
|
||||
mov r1, sb
|
||||
movs r2, #4
|
||||
bl memcpy
|
||||
ldrb r3, [r7, #0x16]
|
||||
rsbs r0, r3, #0
|
||||
add r2, sp, #0xc
|
||||
mov r8, r2
|
||||
strb r0, [r2]
|
||||
ldrb r2, [r7, #0x17]
|
||||
rsbs r1, r2, #0
|
||||
mov r0, sp
|
||||
adds r0, #0xd
|
||||
strb r1, [r0]
|
||||
adds r0, #1
|
||||
strb r3, [r0]
|
||||
adds r0, #1
|
||||
strb r2, [r0]
|
||||
mov r0, sb
|
||||
mov r1, r8
|
||||
movs r2, #4
|
||||
bl memcpy
|
||||
movs r3, #0
|
||||
mov sl, r3
|
||||
movs r4, #0
|
||||
str r4, [sp, #0x30]
|
||||
ldr r0, _0200695C @ =gCurTask
|
||||
ldr r0, [r0]
|
||||
ldrh r4, [r0, #6]
|
||||
ldrb r1, [r7, #0x16]
|
||||
adds r1, #5
|
||||
rsbs r0, r1, #0
|
||||
add r5, sp, #0x10
|
||||
strb r0, [r5]
|
||||
ldr r0, _02006960 @ =gUnknown_03000058
|
||||
adds r4, r4, r0
|
||||
ldrb r0, [r4]
|
||||
subs r6, r6, r0
|
||||
mov r0, sp
|
||||
adds r0, #0x11
|
||||
strb r6, [r0]
|
||||
adds r0, #1
|
||||
strb r1, [r0]
|
||||
ldrb r0, [r4]
|
||||
subs r0, #1
|
||||
mov r1, sp
|
||||
adds r1, #0x13
|
||||
strb r0, [r1]
|
||||
mov r0, r8
|
||||
adds r1, r5, #0
|
||||
movs r2, #4
|
||||
bl memcpy
|
||||
ldrb r3, [r7, #0x16]
|
||||
rsbs r0, r3, #0
|
||||
add r1, sp, #0x14
|
||||
strb r0, [r1]
|
||||
ldrb r0, [r4]
|
||||
rsbs r0, r0, #0
|
||||
mov r2, sp
|
||||
adds r2, #0x15
|
||||
strb r0, [r2]
|
||||
mov r0, sp
|
||||
adds r0, #0x16
|
||||
strb r3, [r0]
|
||||
ldrb r2, [r4]
|
||||
adds r0, #1
|
||||
strb r2, [r0]
|
||||
adds r0, r5, #0
|
||||
movs r2, #4
|
||||
bl memcpy
|
||||
ldr r2, [sp, #0x18]
|
||||
ldr r1, [r2, #0x28]
|
||||
movs r0, #1
|
||||
rsbs r0, r0, #0
|
||||
mov ip, sb
|
||||
cmp r1, r0
|
||||
beq _02006952
|
||||
ldr r0, [r7, #0x20]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _02006952
|
||||
ldr r3, [sp, #0x1c]
|
||||
lsls r0, r3, #0x10
|
||||
asrs r2, r0, #0x10
|
||||
ldr r1, [r7, #8]
|
||||
asrs r1, r1, #8
|
||||
str r0, [sp, #0x38]
|
||||
cmp r2, r1
|
||||
bne _02006964
|
||||
ldr r4, [sp, #0x20]
|
||||
lsls r1, r4, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
ldr r0, [r7, #0xc]
|
||||
asrs r0, r0, #8
|
||||
cmp r1, r0
|
||||
bne _02006964
|
||||
_02006952:
|
||||
movs r0, #0
|
||||
b _02006F3C
|
||||
.align 2, 0
|
||||
_02006958: .4byte gPlayer
|
||||
_0200695C: .4byte gCurTask
|
||||
_02006960: .4byte gUnknown_03000058
|
||||
_02006964:
|
||||
ldr r0, _02006AA8 @ =gPlayer
|
||||
ldr r7, [r0, #8]
|
||||
ldr r1, [r0, #0xc]
|
||||
str r1, [sp, #0x34]
|
||||
adds r1, r0, #0
|
||||
adds r1, #0x38
|
||||
adds r6, r0, #0
|
||||
ldr r2, [sp, #0x2c]
|
||||
ldrb r1, [r1]
|
||||
cmp r2, r1
|
||||
beq _0200697C
|
||||
b _02006F3A
|
||||
_0200697C:
|
||||
ldr r1, [r6, #0x20]
|
||||
movs r0, #8
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0200699A
|
||||
ldr r0, [r6, #0x3c]
|
||||
ldr r3, [sp, #0x18]
|
||||
cmp r0, r3
|
||||
bne _0200699A
|
||||
movs r0, #9
|
||||
rsbs r0, r0, #0
|
||||
ands r1, r0
|
||||
str r1, [r6, #0x20]
|
||||
movs r4, #1
|
||||
str r4, [sp, #0x30]
|
||||
_0200699A:
|
||||
ldr r1, [sp, #0x20]
|
||||
lsls r0, r1, #0x10
|
||||
asrs r1, r0, #0x10
|
||||
str r0, [sp, #0x3c]
|
||||
ldr r2, [sp, #0x34]
|
||||
asrs r2, r2, #8
|
||||
mov r8, r2
|
||||
cmp r1, r8
|
||||
bne _020069AE
|
||||
b _02006B70
|
||||
_020069AE:
|
||||
ldr r3, [sp, #0x38]
|
||||
asrs r0, r3, #0x10
|
||||
movs r3, #0
|
||||
ldrsb r3, [r5, r3]
|
||||
adds r2, r0, r3
|
||||
asrs r0, r7, #8
|
||||
mov r1, ip
|
||||
movs r4, #0
|
||||
ldrsb r4, [r1, r4]
|
||||
adds r1, r0, r4
|
||||
mov sb, r0
|
||||
cmp r2, r1
|
||||
bgt _020069DA
|
||||
movs r0, #2
|
||||
ldrsb r0, [r5, r0]
|
||||
subs r0, r0, r3
|
||||
adds r0, r2, r0
|
||||
cmp r0, r1
|
||||
bge _020069EA
|
||||
cmp r2, r1
|
||||
bge _020069DA
|
||||
b _02006B70
|
||||
_020069DA:
|
||||
mov r3, ip
|
||||
movs r0, #2
|
||||
ldrsb r0, [r3, r0]
|
||||
subs r0, r0, r4
|
||||
adds r0, r1, r0
|
||||
cmp r0, r2
|
||||
bge _020069EA
|
||||
b _02006B70
|
||||
_020069EA:
|
||||
ldr r4, [sp, #0x3c]
|
||||
asrs r0, r4, #0x10
|
||||
movs r3, #1
|
||||
ldrsb r3, [r5, r3]
|
||||
adds r2, r0, r3
|
||||
mov r0, ip
|
||||
movs r4, #1
|
||||
ldrsb r4, [r0, r4]
|
||||
mov r0, r8
|
||||
adds r1, r0, r4
|
||||
cmp r2, r1
|
||||
bgt _02006A14
|
||||
movs r0, #3
|
||||
ldrsb r0, [r5, r0]
|
||||
subs r0, r0, r3
|
||||
adds r0, r2, r0
|
||||
cmp r0, r1
|
||||
bge _02006A24
|
||||
cmp r2, r1
|
||||
bge _02006A14
|
||||
b _02006B70
|
||||
_02006A14:
|
||||
mov r3, ip
|
||||
movs r0, #3
|
||||
ldrsb r0, [r3, r0]
|
||||
subs r0, r0, r4
|
||||
adds r0, r1, r0
|
||||
cmp r0, r2
|
||||
bge _02006A24
|
||||
b _02006B70
|
||||
_02006A24:
|
||||
ldr r4, [sp, #0x3c]
|
||||
asrs r2, r4, #0x10
|
||||
cmp r8, r2
|
||||
bgt _02006AEE
|
||||
movs r0, #0x12
|
||||
ldrsh r1, [r6, r0]
|
||||
ldr r3, [sp, #0x28]
|
||||
lsls r0, r3, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
subs r1, r1, r0
|
||||
cmp r1, #0
|
||||
bge _02006A3E
|
||||
b _02006B70
|
||||
_02006A3E:
|
||||
movs r0, #1
|
||||
ldrsb r0, [r5, r0]
|
||||
adds r0, r2, r0
|
||||
mov r4, ip
|
||||
movs r1, #3
|
||||
ldrsb r1, [r4, r1]
|
||||
subs r0, r0, r1
|
||||
lsls r0, r0, #8
|
||||
ldr r1, [r6, #0xc]
|
||||
ldr r2, _02006AAC @ =0xFFFFFF00
|
||||
ands r1, r2
|
||||
subs r0, r0, r1
|
||||
ldr r5, [sp, #0x34]
|
||||
adds r5, r5, r0
|
||||
str r5, [sp, #0x34]
|
||||
asrs r0, r5, #8
|
||||
movs r1, #0x17
|
||||
ldrsb r1, [r6, r1]
|
||||
subs r0, r0, r1
|
||||
movs r3, #8
|
||||
rsbs r3, r3, #0
|
||||
ldr r1, _02006AB0 @ =sub_0200CDB8
|
||||
str r1, [sp]
|
||||
mov r1, sb
|
||||
ldr r2, [sp, #0x2c]
|
||||
bl sub_0200D27C
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
bge _02006AB4
|
||||
ldr r0, [r6, #0x20]
|
||||
movs r1, #5
|
||||
rsbs r1, r1, #0
|
||||
ands r0, r1
|
||||
adds r1, #2
|
||||
ands r0, r1
|
||||
str r0, [r6, #0x20]
|
||||
adds r0, r6, #0
|
||||
movs r1, #0xe
|
||||
bl Player_HandleSpriteYOffsetChange
|
||||
movs r1, #0
|
||||
movs r0, #6
|
||||
strb r0, [r6, #0x16]
|
||||
movs r0, #0xe
|
||||
strb r0, [r6, #0x17]
|
||||
strh r1, [r6, #0x12]
|
||||
lsls r1, r5, #8
|
||||
ldr r0, [r6, #0xc]
|
||||
subs r0, r0, r1
|
||||
str r0, [r6, #0xc]
|
||||
b _02006F1C
|
||||
.align 2, 0
|
||||
_02006AA8: .4byte gPlayer
|
||||
_02006AAC: .4byte 0xFFFFFF00
|
||||
_02006AB0: .4byte sub_0200CDB8
|
||||
_02006AB4:
|
||||
movs r1, #8
|
||||
mov r0, sl
|
||||
orrs r0, r1
|
||||
mov sl, r0
|
||||
ldr r0, [r6, #0x20]
|
||||
orrs r0, r1
|
||||
subs r1, #0xb
|
||||
ands r0, r1
|
||||
str r0, [r6, #0x20]
|
||||
ldr r1, [sp, #0x18]
|
||||
str r1, [r6, #0x3c]
|
||||
movs r0, #0
|
||||
strh r0, [r6, #0x12]
|
||||
ldr r2, [sp, #0x34]
|
||||
str r2, [r6, #0xc]
|
||||
ldr r3, [sp, #0x30]
|
||||
cmp r3, #0
|
||||
beq _02006ADA
|
||||
b _02006F22
|
||||
_02006ADA:
|
||||
adds r0, r6, #0
|
||||
bl sub_0200D770
|
||||
ldrh r0, [r6, #0x10]
|
||||
strh r0, [r6, #0x14]
|
||||
adds r1, r6, #0
|
||||
adds r1, #0x24
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
b _02006F1C
|
||||
_02006AEE:
|
||||
movs r4, #0x12
|
||||
ldrsh r0, [r6, r4]
|
||||
ldr r5, [sp, #0x28]
|
||||
lsls r2, r5, #0x10
|
||||
asrs r1, r2, #0x10
|
||||
subs r0, r0, r1
|
||||
adds r4, r2, #0
|
||||
cmp r0, #0
|
||||
bge _02006B70
|
||||
movs r0, #0x17
|
||||
ldrsb r0, [r6, r0]
|
||||
add r0, r8
|
||||
ldr r1, _02006B44 @ =sub_0200CDB8
|
||||
str r1, [sp]
|
||||
mov r1, sb
|
||||
ldr r2, [sp, #0x2c]
|
||||
movs r3, #8
|
||||
bl sub_0200D27C
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
bge _02006B48
|
||||
ldr r0, [r6, #0x20]
|
||||
movs r1, #5
|
||||
rsbs r1, r1, #0
|
||||
ands r0, r1
|
||||
adds r1, #2
|
||||
ands r0, r1
|
||||
str r0, [r6, #0x20]
|
||||
adds r0, r6, #0
|
||||
movs r1, #0xe
|
||||
bl Player_HandleSpriteYOffsetChange
|
||||
movs r1, #0
|
||||
movs r0, #6
|
||||
strb r0, [r6, #0x16]
|
||||
movs r0, #0xe
|
||||
strb r0, [r6, #0x17]
|
||||
strh r1, [r6, #0x12]
|
||||
lsls r1, r5, #8
|
||||
ldr r0, [r6, #0xc]
|
||||
adds r0, r0, r1
|
||||
b _02006B4C
|
||||
.align 2, 0
|
||||
_02006B44: .4byte sub_0200CDB8
|
||||
_02006B48:
|
||||
str r7, [r6, #8]
|
||||
ldr r0, [sp, #0x34]
|
||||
_02006B4C:
|
||||
str r0, [r6, #0xc]
|
||||
ldr r0, _02006B6C @ =gPlayer
|
||||
movs r2, #0x12
|
||||
ldrsh r1, [r0, r2]
|
||||
asrs r2, r4, #0x10
|
||||
subs r1, r1, r2
|
||||
adds r6, r0, #0
|
||||
cmp r1, #0
|
||||
bgt _02006B70
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #9
|
||||
mov r3, sl
|
||||
orrs r3, r0
|
||||
mov sl, r3
|
||||
b _02006F1C
|
||||
.align 2, 0
|
||||
_02006B6C: .4byte gPlayer
|
||||
_02006B70:
|
||||
adds r0, r6, #0
|
||||
adds r0, #0x24
|
||||
ldrb r0, [r0]
|
||||
adds r0, #0x20
|
||||
movs r1, #0xc0
|
||||
ands r0, r1
|
||||
asrs r0, r0, #6
|
||||
movs r1, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _02006B88
|
||||
b _02006F1C
|
||||
_02006B88:
|
||||
ldr r4, [sp, #0x38]
|
||||
asrs r0, r4, #0x10
|
||||
mov r5, sp
|
||||
movs r4, #0xc
|
||||
ldrsb r4, [r5, r4]
|
||||
adds r3, r0, r4
|
||||
asrs r1, r7, #8
|
||||
add r0, sp, #4
|
||||
movs r5, #0
|
||||
ldrsb r5, [r0, r5]
|
||||
adds r2, r1, r5
|
||||
mov sb, r1
|
||||
cmp r3, r2
|
||||
bgt _02006BB8
|
||||
mov r1, sp
|
||||
movs r0, #0xe
|
||||
ldrsb r0, [r1, r0]
|
||||
subs r0, r0, r4
|
||||
adds r0, r3, r0
|
||||
cmp r0, r2
|
||||
bge _02006BCA
|
||||
cmp r3, r2
|
||||
bge _02006BB8
|
||||
b _02006F1C
|
||||
_02006BB8:
|
||||
add r0, sp, #4
|
||||
ldrb r0, [r0, #2]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
subs r0, r0, r5
|
||||
adds r0, r2, r0
|
||||
cmp r0, r3
|
||||
bge _02006BCA
|
||||
b _02006F1C
|
||||
_02006BCA:
|
||||
ldr r2, [sp, #0x3c]
|
||||
asrs r0, r2, #0x10
|
||||
mov r3, sp
|
||||
movs r2, #0xd
|
||||
ldrsb r2, [r3, r2]
|
||||
adds r1, r0, r2
|
||||
add r0, sp, #4
|
||||
movs r4, #1
|
||||
ldrsb r4, [r0, r4]
|
||||
mov r5, r8
|
||||
adds r3, r5, r4
|
||||
cmp r1, r3
|
||||
bgt _02006BF8
|
||||
mov r5, sp
|
||||
movs r0, #0xf
|
||||
ldrsb r0, [r5, r0]
|
||||
subs r0, r0, r2
|
||||
adds r0, r1, r0
|
||||
cmp r0, r3
|
||||
bge _02006C0A
|
||||
cmp r1, r3
|
||||
bge _02006BF8
|
||||
b _02006F1C
|
||||
_02006BF8:
|
||||
add r0, sp, #4
|
||||
ldrb r0, [r0, #3]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
subs r0, r0, r4
|
||||
adds r0, r3, r0
|
||||
cmp r0, r1
|
||||
bge _02006C0A
|
||||
b _02006F1C
|
||||
_02006C0A:
|
||||
ldr r0, [sp, #0x38]
|
||||
asrs r1, r0, #0x10
|
||||
cmp sb, r1
|
||||
ble _02006C14
|
||||
b _02006D9C
|
||||
_02006C14:
|
||||
ldr r3, [r6, #0x20]
|
||||
movs r2, #1
|
||||
ands r2, r3
|
||||
cmp r2, #0
|
||||
beq _02006C20
|
||||
b _02006D4C
|
||||
_02006C20:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0xb
|
||||
mov r4, sl
|
||||
orrs r4, r0
|
||||
mov sl, r4
|
||||
adds r0, r6, #0
|
||||
adds r0, #0x62
|
||||
movs r4, #0
|
||||
ldrsb r4, [r0, r4]
|
||||
cmp r4, #0
|
||||
beq _02006C3A
|
||||
strh r2, [r6, #0x10]
|
||||
b _02006F1C
|
||||
_02006C3A:
|
||||
mov r5, sp
|
||||
movs r0, #0xc
|
||||
ldrsb r0, [r5, r0]
|
||||
adds r0, r1, r0
|
||||
add r1, sp, #4
|
||||
ldrb r1, [r1, #2]
|
||||
lsls r1, r1, #0x18
|
||||
asrs r1, r1, #0x18
|
||||
subs r0, r0, r1
|
||||
lsls r7, r0, #8
|
||||
movs r0, #0x10
|
||||
ldrsh r1, [r6, r0]
|
||||
cmp r1, #0
|
||||
bge _02006C58
|
||||
rsbs r1, r1, #0
|
||||
_02006C58:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #3
|
||||
cmp r1, r0
|
||||
ble _02006C9C
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0xe
|
||||
mov r1, sl
|
||||
orrs r1, r0
|
||||
mov sl, r1
|
||||
ldr r2, [sp, #0x24]
|
||||
lsls r0, r2, #0x10
|
||||
cmp r0, #0
|
||||
ble _02006C86
|
||||
strh r2, [r6, #0x14]
|
||||
mov r4, sp
|
||||
ldrh r4, [r4, #0x24]
|
||||
strh r4, [r6, #0x10]
|
||||
ldr r0, [r6, #8]
|
||||
movs r5, #0x80
|
||||
lsls r5, r5, #1
|
||||
adds r0, r0, r5
|
||||
str r0, [r6, #8]
|
||||
b _02006F1C
|
||||
_02006C86:
|
||||
movs r0, #2
|
||||
orrs r3, r0
|
||||
str r3, [r6, #0x20]
|
||||
ldr r0, _02006C98 @ =0x0000FE80
|
||||
strh r0, [r6, #0x10]
|
||||
movs r0, #0xfd
|
||||
lsls r0, r0, #8
|
||||
strh r0, [r6, #0x12]
|
||||
b _02006F1C
|
||||
.align 2, 0
|
||||
_02006C98: .4byte 0x0000FE80
|
||||
_02006C9C:
|
||||
movs r1, #0x10
|
||||
ldrsh r0, [r6, r1]
|
||||
cmp r0, #0
|
||||
bne _02006CA6
|
||||
b _02006F1C
|
||||
_02006CA6:
|
||||
asrs r0, r7, #8
|
||||
movs r1, #0x16
|
||||
ldrsb r1, [r6, r1]
|
||||
mov r2, r8
|
||||
subs r1, r2, r1
|
||||
movs r3, #8
|
||||
rsbs r3, r3, #0
|
||||
ldr r2, _02006CF0 @ =sub_0200CCC0
|
||||
str r2, [sp]
|
||||
ldr r2, [sp, #0x2c]
|
||||
bl sub_0200D27C
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
bge _02006CF4
|
||||
ldr r0, [r6, #0x20]
|
||||
movs r1, #5
|
||||
rsbs r1, r1, #0
|
||||
ands r0, r1
|
||||
adds r1, #2
|
||||
ands r0, r1
|
||||
str r0, [r6, #0x20]
|
||||
adds r0, r6, #0
|
||||
movs r1, #0xe
|
||||
bl Player_HandleSpriteYOffsetChange
|
||||
movs r0, #6
|
||||
strb r0, [r6, #0x16]
|
||||
movs r0, #0xe
|
||||
strb r0, [r6, #0x17]
|
||||
strh r4, [r6, #0x10]
|
||||
lsls r1, r5, #8
|
||||
ldr r0, [r6, #8]
|
||||
subs r0, r0, r1
|
||||
str r0, [r6, #8]
|
||||
b _02006F1C
|
||||
.align 2, 0
|
||||
_02006CF0: .4byte sub_0200CCC0
|
||||
_02006CF4:
|
||||
ldr r1, [r6, #0x20]
|
||||
movs r0, #2
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _02006D2C
|
||||
movs r0, #0x20
|
||||
orrs r1, r0
|
||||
mov r3, sl
|
||||
orrs r3, r0
|
||||
subs r0, #0x25
|
||||
ands r1, r0
|
||||
str r1, [r6, #0x20]
|
||||
ands r3, r0
|
||||
mov sl, r3
|
||||
adds r0, r6, #0
|
||||
movs r1, #0xe
|
||||
bl Player_HandleSpriteYOffsetChange
|
||||
movs r0, #6
|
||||
strb r0, [r6, #0x16]
|
||||
movs r0, #0xe
|
||||
strb r0, [r6, #0x17]
|
||||
adds r1, r6, #0
|
||||
adds r1, #0x64
|
||||
movs r0, #9
|
||||
strh r0, [r1]
|
||||
ldr r0, _02006D48 @ =sub_0200F2BC
|
||||
str r0, [r6]
|
||||
_02006D2C:
|
||||
ldr r0, [r6, #0x20]
|
||||
movs r1, #2
|
||||
rsbs r1, r1, #0
|
||||
ands r0, r1
|
||||
str r0, [r6, #0x20]
|
||||
mov r5, sl
|
||||
ands r5, r1
|
||||
mov sl, r5
|
||||
strh r4, [r6, #0x14]
|
||||
strh r4, [r6, #0x10]
|
||||
str r7, [r6, #8]
|
||||
ldr r0, [sp, #0x34]
|
||||
str r0, [r6, #0xc]
|
||||
b _02006F1C
|
||||
.align 2, 0
|
||||
_02006D48: .4byte sub_0200F2BC
|
||||
_02006D4C:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0xb
|
||||
mov r1, sl
|
||||
orrs r1, r0
|
||||
mov sl, r1
|
||||
adds r0, r6, #0
|
||||
adds r0, #0x62
|
||||
movs r2, #0
|
||||
ldrsb r2, [r0, r2]
|
||||
cmp r2, #0
|
||||
beq _02006D68
|
||||
movs r0, #0
|
||||
strh r0, [r6, #0x10]
|
||||
b _02006F1C
|
||||
_02006D68:
|
||||
ldr r3, [sp, #0x24]
|
||||
lsls r0, r3, #0x10
|
||||
asrs r3, r0, #0x10
|
||||
adds r1, r3, #0
|
||||
cmp r3, #0
|
||||
bge _02006D76
|
||||
rsbs r1, r3, #0
|
||||
_02006D76:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #3
|
||||
cmp r1, r0
|
||||
bgt _02006D80
|
||||
b _02006F1C
|
||||
_02006D80:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0xe
|
||||
mov r4, sl
|
||||
orrs r4, r0
|
||||
mov sl, r4
|
||||
cmp r3, #0
|
||||
bge _02006D96
|
||||
adds r0, r6, #0
|
||||
bl sub_800DD54
|
||||
b _02006F1C
|
||||
_02006D96:
|
||||
strh r2, [r6, #0x14]
|
||||
strh r2, [r6, #0x10]
|
||||
b _02006F1C
|
||||
_02006D9C:
|
||||
adds r4, r6, #0
|
||||
ldr r3, [r4, #0x20]
|
||||
movs r5, #1
|
||||
mov sb, r5
|
||||
adds r2, r3, #0
|
||||
ands r2, r5
|
||||
cmp r2, #0
|
||||
bne _02006DAE
|
||||
b _02006ED4
|
||||
_02006DAE:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0xa
|
||||
mov r2, sl
|
||||
orrs r2, r0
|
||||
mov sl, r2
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x62
|
||||
movs r6, #0
|
||||
ldrsb r6, [r0, r6]
|
||||
cmp r6, #0
|
||||
beq _02006DCA
|
||||
movs r0, #0
|
||||
strh r0, [r4, #0x10]
|
||||
b _02006F1C
|
||||
_02006DCA:
|
||||
mov r5, sp
|
||||
movs r0, #0xe
|
||||
ldrsb r0, [r5, r0]
|
||||
adds r0, r1, r0
|
||||
add r1, sp, #4
|
||||
ldrb r1, [r1]
|
||||
lsls r1, r1, #0x18
|
||||
asrs r1, r1, #0x18
|
||||
subs r0, r0, r1
|
||||
lsls r7, r0, #8
|
||||
movs r0, #0x10
|
||||
ldrsh r1, [r4, r0]
|
||||
cmp r1, #0
|
||||
bge _02006DE8
|
||||
rsbs r1, r1, #0
|
||||
_02006DE8:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #3
|
||||
cmp r1, r0
|
||||
ble _02006E28
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0xe
|
||||
mov r1, sl
|
||||
orrs r1, r0
|
||||
mov sl, r1
|
||||
ldr r2, [sp, #0x24]
|
||||
lsls r0, r2, #0x10
|
||||
cmp r0, #0
|
||||
bge _02006E14
|
||||
strh r2, [r4, #0x14]
|
||||
mov r5, sp
|
||||
ldrh r5, [r5, #0x24]
|
||||
strh r5, [r4, #0x10]
|
||||
ldr r0, [r4, #8]
|
||||
ldr r1, _02006E10 @ =0xFFFFFF00
|
||||
b _02006E6E
|
||||
.align 2, 0
|
||||
_02006E10: .4byte 0xFFFFFF00
|
||||
_02006E14:
|
||||
movs r0, #2
|
||||
orrs r3, r0
|
||||
str r3, [r4, #0x20]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #1
|
||||
strh r0, [r4, #0x10]
|
||||
movs r0, #0xfd
|
||||
lsls r0, r0, #8
|
||||
strh r0, [r4, #0x12]
|
||||
b _02006F1C
|
||||
_02006E28:
|
||||
movs r2, #0x10
|
||||
ldrsh r0, [r4, r2]
|
||||
cmp r0, #0
|
||||
beq _02006F1C
|
||||
asrs r0, r7, #8
|
||||
movs r1, #0x16
|
||||
ldrsb r1, [r4, r1]
|
||||
add r1, r8
|
||||
ldr r2, _02006E74 @ =sub_0200CCC0
|
||||
str r2, [sp]
|
||||
ldr r2, [sp, #0x2c]
|
||||
movs r3, #8
|
||||
bl sub_0200D27C
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
bge _02006E78
|
||||
ldr r0, [r4, #0x20]
|
||||
movs r1, #5
|
||||
rsbs r1, r1, #0
|
||||
ands r0, r1
|
||||
adds r1, #2
|
||||
ands r0, r1
|
||||
str r0, [r4, #0x20]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0xe
|
||||
bl Player_HandleSpriteYOffsetChange
|
||||
movs r0, #6
|
||||
strb r0, [r4, #0x16]
|
||||
movs r0, #0xe
|
||||
strb r0, [r4, #0x17]
|
||||
strh r6, [r4, #0x10]
|
||||
lsls r1, r5, #8
|
||||
ldr r0, [r4, #8]
|
||||
_02006E6E:
|
||||
adds r0, r0, r1
|
||||
str r0, [r4, #8]
|
||||
b _02006F1C
|
||||
.align 2, 0
|
||||
_02006E74: .4byte sub_0200CCC0
|
||||
_02006E78:
|
||||
ldr r1, [r4, #0x20]
|
||||
movs r0, #2
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _02006EB0
|
||||
movs r0, #0x20
|
||||
orrs r1, r0
|
||||
mov r3, sl
|
||||
orrs r3, r0
|
||||
subs r0, #0x25
|
||||
ands r1, r0
|
||||
str r1, [r4, #0x20]
|
||||
ands r3, r0
|
||||
mov sl, r3
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x64
|
||||
movs r0, #9
|
||||
strh r0, [r1]
|
||||
ldr r0, _02006ED0 @ =sub_0200F2BC
|
||||
str r0, [r4]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0xe
|
||||
bl Player_HandleSpriteYOffsetChange
|
||||
movs r0, #6
|
||||
strb r0, [r4, #0x16]
|
||||
movs r0, #0xe
|
||||
strb r0, [r4, #0x17]
|
||||
_02006EB0:
|
||||
ldr r0, [r4, #0x20]
|
||||
mov r5, sb
|
||||
orrs r0, r5
|
||||
str r0, [r4, #0x20]
|
||||
mov r0, sl
|
||||
orrs r0, r5
|
||||
mov sl, r0
|
||||
strh r6, [r4, #0x14]
|
||||
strh r6, [r4, #0x10]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #1
|
||||
adds r0, r7, r1
|
||||
str r0, [r4, #8]
|
||||
ldr r2, [sp, #0x34]
|
||||
str r2, [r4, #0xc]
|
||||
b _02006F1C
|
||||
.align 2, 0
|
||||
_02006ED0: .4byte sub_0200F2BC
|
||||
_02006ED4:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0xa
|
||||
orrs r3, r0
|
||||
str r3, [r4, #0x20]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x62
|
||||
movs r5, #0
|
||||
ldrsb r5, [r0, r5]
|
||||
cmp r5, #0
|
||||
beq _02006EEC
|
||||
strh r2, [r4, #0x10]
|
||||
b _02006F1C
|
||||
_02006EEC:
|
||||
ldr r3, [sp, #0x24]
|
||||
lsls r0, r3, #0x10
|
||||
asrs r3, r0, #0x10
|
||||
adds r1, r3, #0
|
||||
cmp r3, #0
|
||||
bge _02006EFA
|
||||
rsbs r1, r3, #0
|
||||
_02006EFA:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #3
|
||||
cmp r1, r0
|
||||
ble _02006F1C
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0xe
|
||||
mov r1, sl
|
||||
orrs r1, r0
|
||||
mov sl, r1
|
||||
cmp r3, #0
|
||||
ble _02006F18
|
||||
adds r0, r4, #0
|
||||
bl sub_800DD54
|
||||
b _02006F1C
|
||||
_02006F18:
|
||||
strh r5, [r6, #0x14]
|
||||
strh r5, [r6, #0x10]
|
||||
_02006F1C:
|
||||
ldr r2, [sp, #0x30]
|
||||
cmp r2, #0
|
||||
beq _02006F3A
|
||||
_02006F22:
|
||||
ldr r2, _02006F4C @ =gPlayer
|
||||
ldr r1, [r2, #0x20]
|
||||
movs r0, #8
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _02006F3A
|
||||
movs r0, #0x21
|
||||
rsbs r0, r0, #0
|
||||
ands r1, r0
|
||||
movs r0, #2
|
||||
orrs r1, r0
|
||||
str r1, [r2, #0x20]
|
||||
_02006F3A:
|
||||
mov r0, sl
|
||||
_02006F3C:
|
||||
add sp, #0x40
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_02006F4C: .4byte gPlayer
|
||||
|
||||
|
||||
.syntax divided
|
||||
@@ -13,12 +13,6 @@
|
||||
#define ENGINE_3 3
|
||||
#define ENGINE_4 4
|
||||
|
||||
// The collect rings rom is
|
||||
// a subset of the main game
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
#define COLLECT_RINGS_ROM 0
|
||||
#endif
|
||||
|
||||
// TODO: Define this in Makefile through a compiler macro?
|
||||
#define GAME GAME_SA2
|
||||
|
||||
|
||||
@@ -65,13 +65,13 @@
|
||||
#define MUS_CONNECTION_PENDING 61
|
||||
// 62
|
||||
// 63
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
#define MUS_VS_LOBBY 64
|
||||
#else
|
||||
#define MUS_VS_LOBBY 3
|
||||
#endif
|
||||
// 65
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
#define MUS_VS_SELECT_PAK_MODE 66
|
||||
#else
|
||||
#define MUS_VS_SELECT_PAK_MODE 1
|
||||
@@ -97,9 +97,15 @@
|
||||
#define SE_JUMP 116
|
||||
#define SE_RING_COPY 117
|
||||
#define SE_RINGS_LOST 118
|
||||
#define SE_LIFE_LOST 119
|
||||
#define SE_TAILS_PROPELLER_FLYING 120
|
||||
#define SE_TAILS_TAIL_SWIPE 121
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
#define SE_LIFE_LOST 119
|
||||
#else
|
||||
#define SE_LIFE_LOST 17
|
||||
#endif
|
||||
|
||||
#define SE_TAILS_PROPELLER_FLYING 120
|
||||
#define SE_TAILS_TAIL_SWIPE 121
|
||||
// 122
|
||||
// 123
|
||||
// 124
|
||||
@@ -168,7 +174,7 @@
|
||||
#define SE_MAP_214 214
|
||||
#define SE_MAP_MOVE_END 215
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
#define SE_216 216
|
||||
#else
|
||||
#define SE_216 23
|
||||
|
||||
@@ -100,7 +100,9 @@ SA2_C_FILES := \
|
||||
sa2/bg_triangles.c \
|
||||
sa2/game/multiplayer/multiplayer_event_mgr.c \
|
||||
sa2/game/multiplayer/multiplayer_event_recv_mgr.c \
|
||||
sa2/game/multiboot/collect_rings/results.c
|
||||
sa2/game/multiboot/collect_rings/results.c \
|
||||
sa2/game/sa1_sa2_shared/entities_manager.c \
|
||||
sa2/game/sa1_sa2_shared/collision.c
|
||||
|
||||
SA2_C_ASM_FILES := \
|
||||
sa2/lib/m4a/m4a0.s \
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,9 +1,5 @@
|
||||
.section .rodata
|
||||
|
||||
.global gUnknown_02015A24
|
||||
gUnknown_02015A24:
|
||||
.incbin "data/rom_data.bin", 0x00015964, 0x74
|
||||
|
||||
.global gUnknown_02015A98
|
||||
gUnknown_02015A98:
|
||||
.incbin "data/rom_data.bin", 0x000159D8, 0x6
|
||||
|
||||
@@ -27,6 +27,8 @@ SECTIONS {
|
||||
build/collect_rings/src/sa2/game/multiplayer/multiplayer_event_mgr.o(.text);
|
||||
build/collect_rings/src/sa2/game/multiplayer/multiplayer_event_recv_mgr.o(.text);
|
||||
build/collect_rings/src/sa2/game/multiboot/collect_rings/results.o(.text);
|
||||
build/collect_rings/src/sa2/game/sa1_sa2_shared/entities_manager.o(.text);
|
||||
build/collect_rings/src/sa2/game/sa1_sa2_shared/collision.o(.text);
|
||||
build/collect_rings/asm/code.o(.text);
|
||||
build/collect_rings/src/sa2/lib/m4a/m4a0.o(.text);
|
||||
build/collect_rings/src/sa2/lib/m4a/m4a.o(.text);
|
||||
@@ -51,6 +53,7 @@ SECTIONS {
|
||||
build/collect_rings/src/sa2/trig.o(.rodata);
|
||||
build/collect_rings/src/sa2/sprite.o(.rodata);
|
||||
build/collect_rings/src/sa2/game/multiplayer/multiplayer_event_mgr.o(.rodata);
|
||||
build/collect_rings/src/sa2/game/sa1_sa2_shared/entities_manager.o(.rodata);
|
||||
build/collect_rings/data/data.o(.rodata);
|
||||
build/collect_rings/src/sa2/lib/m4a/m4a_tables.o(.rodata);
|
||||
build/collect_rings/data/sound_data.o(.rodata);
|
||||
|
||||
@@ -54,7 +54,7 @@ build/collect_rings/src/sa2/core.o(.data);
|
||||
. = 0x000053A4; gUnknown_030053A4 = .;
|
||||
. = 0x000053A8; gMultiplayerCharRings = .;
|
||||
. = 0x000053AC; gMultiplayerLanguage = .;
|
||||
. = 0x000053B0; gUnknown_030053B0 = .;
|
||||
. = 0x000053B0; gRingCount = .;
|
||||
. = 0x000053CC; gUnknown_030053CC = .;
|
||||
. = 0x000053D0; gRoomEventQueueSendPos = .;
|
||||
. = 0x000053D4; gStageFlags = .;
|
||||
@@ -98,7 +98,7 @@ build/collect_rings/src/sa2/core.o(.data);
|
||||
. = 0x00005548; gUnknown_03005548 = .;
|
||||
. = 0x00005550; gUnknown_03005550 = .;
|
||||
. = 0x00005590; gUnknown_03005590 = .;
|
||||
. = 0x00005650; gUnknown_03005650 = .;
|
||||
. = 0x00005650; gCamera = .;
|
||||
. = 0x000056B8; gUnknown_030056B8 = .;
|
||||
. = 0x000056C0; gPlayer = .;
|
||||
. = 0x00005780; gUnknown_03005780 = .;
|
||||
|
||||
+3
-3
@@ -744,7 +744,7 @@ s32 sub_80036E0(Sprite *s)
|
||||
return 1;
|
||||
}
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
// (-1)
|
||||
// No differences to animCmd_GetTiles
|
||||
static AnimCmdResult animCmd_GetTiles_BG(void *cursor, Sprite *s)
|
||||
@@ -1310,13 +1310,13 @@ static AnimCmdResult animCmd_PlaySoundEffect_BG(void *cursor, Sprite *s)
|
||||
ACmd_PlaySoundEffect *cmd = cursor;
|
||||
s->animCursor += AnimCommandSizeInWords(*cmd);
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
m4aSongNumStart(cmd->songId);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
// (-7)
|
||||
static AnimCmdResult animCmd_TranslateSprite_BG(void *cursor, Sprite *s)
|
||||
{
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@
|
||||
/* TODO: Rename this module to something background-related */
|
||||
#include "bg_triangles.h"
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
const u16 gUnknown_080984F4[] = {
|
||||
// Zone 1
|
||||
0x0001,
|
||||
@@ -734,7 +734,7 @@ void sub_80078D4(u8 bg, int_vcount minY, int_vcount maxY, u16 offsetEven, u16 of
|
||||
}
|
||||
}
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
void sub_8007958(u8 bg, int_vcount minY, int_vcount maxY, s16 param3, s8 param4, u16 param5, u16 param6)
|
||||
{
|
||||
u16 *cursor;
|
||||
|
||||
+9
-9
@@ -184,7 +184,7 @@ IntrFunc const gIntrTableTemplate[] = {
|
||||
static VBlankFunc const sVblankFuncs[] = {
|
||||
ProcessVramGraphicsCopyQueue,
|
||||
sub_8004010,
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
sub_80039E4,
|
||||
#endif
|
||||
sub_8002B20,
|
||||
@@ -198,7 +198,7 @@ void EngineInit(void)
|
||||
REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3;
|
||||
gFlags = 0;
|
||||
gFlagsPreVBlank = 0;
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if ((REG_RCNT & 0xC000) != 0x8000) {
|
||||
gFlags = FLAGS_200;
|
||||
DmaCopy16(3, (void *)OBJ_VRAM0, EWRAM_START + 0x3B000, 0x5000);
|
||||
@@ -302,7 +302,7 @@ void EngineInit(void)
|
||||
gKeysContinuedRepeatIntervals[i] = 8;
|
||||
}
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
gInputRecorder.mode = RECORDER_DISABLED;
|
||||
gPhysicalInput = 0;
|
||||
gInputPlaybackData = NULL;
|
||||
@@ -342,7 +342,7 @@ void EngineInit(void)
|
||||
gExecSoundMain = TRUE;
|
||||
|
||||
TasksInit();
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
EwramInitHeap();
|
||||
#endif
|
||||
|
||||
@@ -414,7 +414,7 @@ void EngineMainLoop(void)
|
||||
#if (ENGINE >= ENGINE_3)
|
||||
gNextFreeAffineIndex = 0;
|
||||
#endif
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (gFlags & FLAGS_4000) {
|
||||
UpdateScreenCpuSet();
|
||||
|
||||
@@ -578,7 +578,7 @@ static void ClearOamBufferDma(void)
|
||||
gFlags &= ~FLAGS_10;
|
||||
}
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
static void UpdateScreenCpuSet(void)
|
||||
{
|
||||
u8 i, j = 0;
|
||||
@@ -689,7 +689,7 @@ static void VBlankIntr(void)
|
||||
REG_IE &= ~INTR_FLAG_VCOUNT;
|
||||
}
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (!(gFlagsPreVBlank & FLAGS_8000)) {
|
||||
keys = ~REG_KEYINPUT & (START_BUTTON | SELECT_BUTTON | B_BUTTON | A_BUTTON);
|
||||
if (keys == (START_BUTTON | SELECT_BUTTON | B_BUTTON | A_BUTTON)) {
|
||||
@@ -800,7 +800,7 @@ void GetInput(void)
|
||||
// to exit the demo
|
||||
gPhysicalInput = gInput;
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (gInputRecorder.mode == RECORDER_RECORD) {
|
||||
InputRecorderWrite(gInput);
|
||||
} else if (gInputRecorder.mode == RECORDER_PLAYBACK) {
|
||||
@@ -894,7 +894,7 @@ static void ClearOamBufferCpuSet(void)
|
||||
gFlags &= ~FLAGS_10;
|
||||
}
|
||||
#else
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
static void ClearOamBufferCpuSet(void)
|
||||
{
|
||||
gNumHBlankCallbacks = 0;
|
||||
|
||||
@@ -72,7 +72,7 @@ extern const u16 gUnknown_02015B18[];
|
||||
void CreateMultiplayerSinglePakResultsScreen(u32 a)
|
||||
{
|
||||
struct MultiplayerSinglePakResultsScreen *resultsScreen;
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
const u8 *tilemaps = gCollectRingsTilemaps;
|
||||
const u8 *bgStageTileset = gCollectRingsBgStageTileset;
|
||||
#endif
|
||||
@@ -93,7 +93,7 @@ void CreateMultiplayerSinglePakResultsScreen(u32 a)
|
||||
m4aSoundVSyncOn();
|
||||
gGameMode = GAME_MODE_MULTI_PLAYER_COLLECT_RINGS;
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
CpuFastCopy(bgStageTileset, (void *)BG_VRAM, SIO32ML_BLOCK_SIZE);
|
||||
CpuFastCopy(tilemaps, (void *)EWRAM_START + 0x33000, EWRAM_SIZE - 0x33000);
|
||||
#endif
|
||||
@@ -209,7 +209,7 @@ void Task_MultiplayerSinglePakResultsScreenInit(void)
|
||||
gBldRegs.bldY = 0;
|
||||
|
||||
if (++resultsScreen->unk430 > 0xF0) {
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
gFlags &= ~0x8000;
|
||||
#endif
|
||||
|
||||
@@ -266,7 +266,7 @@ void Task_MultiplayerSinglePakResultsScreenInit(void)
|
||||
UpdateSpriteAnimation(s);
|
||||
}
|
||||
}
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (gMultiSioStatusFlags & MULTI_SIO_PARENT) {
|
||||
s = &resultsScreen->unk400;
|
||||
s->x = (DISPLAY_WIDTH / 2);
|
||||
@@ -404,7 +404,7 @@ void sub_80823FC(void)
|
||||
} else {
|
||||
sub_8082788();
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (gMultiSioStatusFlags & MULTI_SIO_PARENT) {
|
||||
DisplaySprite(&resultsScreen->unk400);
|
||||
}
|
||||
@@ -616,7 +616,7 @@ struct MultiplayerSinglePakResultsScreen *InitAndGetResultsScreenObject(s16 mode
|
||||
return resultsScreen;
|
||||
}
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
void sub_8082B80(struct MultiplayerSinglePakResultsScreen *resultsScreen)
|
||||
{
|
||||
s16 i;
|
||||
|
||||
@@ -26,7 +26,7 @@ const RoomEventHandler gRoomEventHandlers[] = {
|
||||
[ROOMEVENT_TYPE_PLAYER_RING_LOSS - 1] = ReceiveRoomEvent_PlayerRingLoss,
|
||||
[ROOMEVENT_TYPE_MYSTERY_ITEMBOX_BREAK - 1] = ReceiveRoomEvent_MysteryItemBoxBreak,
|
||||
[ROOMEVENT_TYPE_ITEMEFFECT_APPLIED - 1] = ReceiveRoomEvent_ItemEffect,
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
[ROOMEVENT_TYPE_REACHED_STAGE_GOAL - 1] = ReceiveRoomEvent_ReachedStageGoal,
|
||||
[ROOMEVENT_TYPE_UNKNOWN - 1] = ReceiveRoomEvent_Unknown,
|
||||
#endif
|
||||
@@ -99,7 +99,7 @@ void ReceiveRoomEvent_ItemEffect(union MultiSioData *recv, u8 i)
|
||||
|
||||
if (!(us->unk5C & 1) && PLAYER_IS_ALIVE && gUnknown_030054B4[SIO_MULTI_CNT->id] == -1) {
|
||||
switch (recv->pat0.unkF) {
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
case 0: {
|
||||
if (gGameMode != GAME_MODE_TEAM_PLAY
|
||||
|| ((gMultiplayerConnections & (0x10 << (i))) >> ((i + 4))
|
||||
@@ -176,7 +176,7 @@ void ReceiveRoomEvent_ItemEffect(union MultiSioData *recv, u8 i)
|
||||
}
|
||||
}
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
void ReceiveRoomEvent_ReachedStageGoal(union MultiSioData *recv, u8 i)
|
||||
{
|
||||
u32 j;
|
||||
|
||||
@@ -151,7 +151,7 @@ void ReceiveRoomEvent_MysteryItemBoxBreak(union MultiSioData *msioData, u8 UNUSE
|
||||
}
|
||||
}
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
// Type of this is determined by it being referenced in a C func-array
|
||||
void ReceiveRoomEvent_Unknown(union MultiSioData *msioData, u8 UNUSED someId) { REG_SIOCNT_32; }
|
||||
#endif
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "constants/player_transitions.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
u32 Coll_Player_Entity_RectIntersection(Sprite *s, s32 sx, s32 sy, Player *p, Rect8 *rectPlayer)
|
||||
{
|
||||
u32 result = 0;
|
||||
@@ -89,6 +90,7 @@ u32 Coll_Player_PlatformCrumbling(Sprite *s, s32 sx, s32 sy, Player *p)
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool32 Coll_Player_Entity_HitboxN(Sprite *s, s32 sx, s32 sy, s16 hbIndex, Player *p, s16 hbIndexPlayer)
|
||||
{
|
||||
@@ -114,6 +116,7 @@ bool32 Coll_Player_Entity_HitboxN(Sprite *s, s32 sx, s32 sy, s16 hbIndex, Player
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
bool32 Coll_Player_Boss_Attack(Sprite *s, s32 sx, s32 sy, s16 hbIndex, Player *p)
|
||||
{
|
||||
PlayerSpriteInfo *psi = p->spriteInfoBody;
|
||||
@@ -281,6 +284,7 @@ bool32 Coll_Player_Projectile(Sprite *s, s32 sx, s32 sy)
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool32 Coll_Player_ItemBox(Sprite *s, s32 sx, s32 sy)
|
||||
{
|
||||
@@ -299,6 +303,7 @@ bool32 Coll_Player_ItemBox(Sprite *s, s32 sx, s32 sy)
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
bool32 Coll_Player_Enemy(Sprite *s, s32 sx, s32 sy, s16 hbIndex, Player *p)
|
||||
{
|
||||
PlayerSpriteInfo *psi = p->spriteInfoBody;
|
||||
@@ -338,6 +343,7 @@ void Coll_Player_Enemy_AdjustSpeed(Player *p)
|
||||
|
||||
gPlayer.moveState |= MOVESTATE_4000;
|
||||
}
|
||||
#endif
|
||||
|
||||
// (100.00%) https://decomp.me/scratch/verla
|
||||
// TODO: Register fake-match
|
||||
@@ -395,10 +401,13 @@ bool32 Coll_DamagePlayer(Player *p)
|
||||
} else if (!(gStageFlags & STAGE_FLAG__DEMO_RUNNING)) {
|
||||
p->moveState |= MOVESTATE_DEAD;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
else {
|
||||
m4aSongNumStart(SE_LIFE_LOST);
|
||||
p->itemEffect &= ~(PLAYER_ITEM_EFFECT__SHIELD_MAGNETIC | PLAYER_ITEM_EFFECT__SHIELD_NORMAL);
|
||||
}
|
||||
#endif
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -442,10 +451,11 @@ u32 Coll_Player_Platform(Sprite *s, s32 sx, s32 sy, Player *p)
|
||||
p->moveState &= ~MOVESTATE_20;
|
||||
p->moveState |= MOVESTATE_IN_AIR;
|
||||
p->stoodObj = NULL;
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (IS_BOSS_STAGE(gCurrentLevel)) {
|
||||
p->qSpeedGround -= Q(gCamera.dx);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -485,10 +495,11 @@ u32 Coll_Player_Interactable(Sprite *s, s32 sx, s32 sy, Player *p)
|
||||
p->stoodObj = s;
|
||||
} else if (stoodOnSprite) {
|
||||
p->stoodObj = NULL;
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (IS_BOSS_STAGE(gCurrentLevel)) {
|
||||
p->qSpeedGround -= Q(gCamera.dx);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
return mask;
|
||||
@@ -578,8 +589,13 @@ u32 sub_800CE94(Sprite *s, s32 sx, s32 sy, Rect8 *inRect, Player *p)
|
||||
return result;
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/game/sa1_sa2_shared/collision__sub_800D0A0.inc",
|
||||
u32 sub_800D0A0(Sprite *s, s16 param1, s16 param2, s16 param3, s16 param4, u8 param5, u32 param6))
|
||||
NONMATCH(
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
"asm/non_matching/game/sa1_sa2_shared/collision__sub_800D0A0.inc",
|
||||
#else
|
||||
"asm/non_matching/game/sa1_sa2_shared/collision__sub_800D0A0_collect_rings.inc",
|
||||
#endif
|
||||
u32 sub_800D0A0(Sprite *s, s16 param1, s16 param2, s16 param3, s16 param4, u8 param5, u32 param6))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -658,10 +674,12 @@ bool32 sub_800DD54(Player *p)
|
||||
|
||||
p->qSpeedAirY = -Q(3.0);
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (p->moveState & MOVESTATE_IN_WATER) {
|
||||
HALVE(p->qSpeedAirY);
|
||||
HALVE(p->qSpeedAirX);
|
||||
}
|
||||
#endif
|
||||
|
||||
p->moveState &= ~MOVESTATE_STOOD_ON_OBJ;
|
||||
p->moveState &= ~MOVESTATE_20;
|
||||
@@ -704,6 +722,7 @@ bool32 sub_800DD54(Player *p)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
bool32 sub_800DE44(Player *p)
|
||||
{
|
||||
if (p->timerInvincibility > 0 || p->timerInvulnerability > 0) {
|
||||
@@ -772,3 +791,4 @@ u32 Coll_Player_Entity_Intersection(Sprite *s, s32 x, s32 y, Player *p)
|
||||
|
||||
return Coll_Player_Entity_RectIntersection(s, x, y, p, (Rect8 *)&rectPlayer);
|
||||
}
|
||||
#endif
|
||||
@@ -126,16 +126,11 @@ struct Range {
|
||||
CamCoord xHigh, yHigh;
|
||||
};
|
||||
|
||||
struct Ranges {
|
||||
struct Range a;
|
||||
struct Range b;
|
||||
};
|
||||
static void Task_8008DCC(void);
|
||||
|
||||
void Task_8008DCC(void);
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
static void TaskDestructor_EntitiesManager(struct Task *);
|
||||
|
||||
void sub_80095FC(struct Task *);
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
const RLCompressed *const gSpritePosData_interactables[NUM_LEVEL_IDS] = {
|
||||
(void *)&zone1_act1_interactables,
|
||||
(void *)&zone1_act2_interactables,
|
||||
@@ -387,8 +382,9 @@ const MapEntityInit gSpriteInits_Enemies[] = {
|
||||
const u16 enemyDefeatScores[NUM_ENEMY_DEFEAT_SCORES] = {
|
||||
100, 200, 400, 800, 1000,
|
||||
};
|
||||
#endif
|
||||
|
||||
const MapEntityInit gSpriteInits_InteractablesMultiplayer[] = {
|
||||
const MapEntityInit gSpriteInits_CollectRingsInteractables[] = {
|
||||
CreateEntity_Toggle_PlayerLayer,
|
||||
CreateEntity_Toggle_PlayerLayer,
|
||||
CreateEntity_Spring_Normal_Up,
|
||||
@@ -420,6 +416,7 @@ const MapEntityInit gSpriteInits_InteractablesMultiplayer[] = {
|
||||
CreateEntity_MultiplayerTeleport,
|
||||
};
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
const StagePreInitFunc gSpriteTileInits_PreStageEntry[] = {
|
||||
NULL, NULL, NULL, NULL, // Leaf Forest
|
||||
NULL, NULL, NULL, NULL, // Hot Crater
|
||||
@@ -438,7 +435,7 @@ void CreateStageEntitiesManager(void)
|
||||
struct Task *t;
|
||||
EntitiesManager *em;
|
||||
if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
||||
t = TaskCreate(Task_8008DCC, sizeof(EntitiesManager), 0x2000, 0, sub_80095FC);
|
||||
t = TaskCreate(Task_8008DCC, sizeof(EntitiesManager), 0x2000, 0, TaskDestructor_EntitiesManager);
|
||||
} else {
|
||||
t = TaskCreate(Task_8008DCC, sizeof(EntitiesManager), 0x2000, 0, NULL);
|
||||
}
|
||||
@@ -476,7 +473,7 @@ void CreateStageEntitiesManager(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
void SpawnMapEntities()
|
||||
static void SpawnMapEntities()
|
||||
{
|
||||
// Required to be here to help the stack match
|
||||
#ifndef NON_MATCHING
|
||||
@@ -546,6 +543,7 @@ void SpawnMapEntities()
|
||||
while (Q(regionY) < (u32)range.yHigh && regionY < v_regionCount) {
|
||||
regionX = I(range.xLow);
|
||||
while (Q(regionX) < (u32)range.xHigh && regionX < h_regionCount) {
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
||||
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
||||
if (i != 0) {
|
||||
@@ -589,7 +587,15 @@ void SpawnMapEntities()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
#ifndef NON_MATCHING
|
||||
// Only required in the collect rings rom for non matching
|
||||
if (0) {
|
||||
while (1) { }
|
||||
}
|
||||
#endif
|
||||
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
||||
if (i != 0) {
|
||||
MapEntity *me = ((void *)interactables + (i - 8));
|
||||
@@ -598,7 +604,7 @@ void SpawnMapEntities()
|
||||
s32 x = TO_WORLD_POS(me->x, regionX);
|
||||
s32 y = TO_WORLD_POS(me->y, regionY);
|
||||
if (x >= range.xLow && x <= range.xHigh && y >= range.yLow && y <= range.yHigh) {
|
||||
gSpriteInits_InteractablesMultiplayer[me->index](me, regionX, regionY, i);
|
||||
gSpriteInits_CollectRingsInteractables[me->index](me, regionX, regionY, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -606,7 +612,14 @@ void SpawnMapEntities()
|
||||
}
|
||||
regionX++;
|
||||
}
|
||||
regionY++;
|
||||
#ifndef NON_MATCHING
|
||||
// Only required in the collect rings rom for non matching
|
||||
do {
|
||||
#endif
|
||||
regionY++;
|
||||
#ifndef NON_MATCHING
|
||||
} while (0);
|
||||
#endif
|
||||
}
|
||||
em->prevCamX = gCamera.x;
|
||||
em->prevCamY = gCamera.y;
|
||||
@@ -615,7 +628,7 @@ void SpawnMapEntities()
|
||||
}
|
||||
}
|
||||
|
||||
void Task_8008DCC(void)
|
||||
static void Task_8008DCC(void)
|
||||
{
|
||||
#ifndef NON_MATCHING
|
||||
struct Range *newrange2Ptr;
|
||||
@@ -810,6 +823,7 @@ void Task_8008DCC(void)
|
||||
while (Q(regionY) < range1.yHigh && regionY < v_regionCount) {
|
||||
regionX = I(range1.xLow);
|
||||
while (Q(regionX) < range1.xHigh && regionX < h_regionCount) {
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
||||
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
||||
if (i != 0) {
|
||||
@@ -852,7 +866,15 @@ void Task_8008DCC(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
#ifndef NON_MATCHING
|
||||
// Only required in the collect rings rom for non matching
|
||||
if (0) {
|
||||
while (1) { }
|
||||
}
|
||||
#endif
|
||||
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
||||
if (i != 0) {
|
||||
MapEntity *me = ((void *)interactables + (i - 8));
|
||||
@@ -861,7 +883,7 @@ void Task_8008DCC(void)
|
||||
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
||||
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
||||
if (x >= range1.xLow && x <= range1.xHigh && y >= range1.yLow && y <= range1.yHigh) {
|
||||
gSpriteInits_InteractablesMultiplayer[me->index](me, regionX, regionY, i);
|
||||
gSpriteInits_CollectRingsInteractables[me->index](me, regionX, regionY, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -884,6 +906,7 @@ void Task_8008DCC(void)
|
||||
#endif
|
||||
regionX = I(range2.xLow);
|
||||
while (Q(regionX) < range2.xHigh && regionX < h_regionCount) {
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
||||
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
||||
if (i != 0) {
|
||||
@@ -926,7 +949,15 @@ void Task_8008DCC(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
#ifndef NON_MATCHING
|
||||
// Only required in the collect rings rom for non matching
|
||||
if (0) {
|
||||
while (1) { }
|
||||
}
|
||||
#endif
|
||||
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
||||
if (i != 0) {
|
||||
MapEntity *me = ((void *)interactables + (i - 8));
|
||||
@@ -935,7 +966,7 @@ void Task_8008DCC(void)
|
||||
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
||||
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
||||
if (x >= range2.xLow && x <= range2.xHigh && y >= range2.yLow && y <= range2.yHigh) {
|
||||
gSpriteInits_InteractablesMultiplayer[me->index](me, regionX, regionY, i);
|
||||
gSpriteInits_CollectRingsInteractables[me->index](me, regionX, regionY, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -951,6 +982,25 @@ void Task_8008DCC(void)
|
||||
}
|
||||
}
|
||||
|
||||
#if COLLECT_RINGS_ROM
|
||||
void CreateStageEntitiesManager(void)
|
||||
{
|
||||
void *decompBuf;
|
||||
struct Task *t = TaskCreate(Task_8008DCC, sizeof(EntitiesManager), 0x2000, 0, NULL);
|
||||
EntitiesManager *em = TASK_DATA(t);
|
||||
|
||||
decompBuf = (void *)EWRAM_START + 0x3F000;
|
||||
RLUnCompWram(*(void **)((void *)EWRAM_START + 0x3300C), decompBuf);
|
||||
em->interactables = decompBuf;
|
||||
|
||||
em->prevCamX = gCamera.x;
|
||||
em->prevCamY = gCamera.y;
|
||||
em->unk14 = 1;
|
||||
gEntitiesManagerTask = t;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
void CreateEnemyDefeatScoreAndManageLives(s16 x, s16 y)
|
||||
{
|
||||
u32 old;
|
||||
@@ -976,7 +1026,7 @@ void TaskDestructor_80095E8(struct Task *t)
|
||||
VramFree(s->displayed.graphics.dest);
|
||||
}
|
||||
|
||||
void sub_80095FC(struct Task *t)
|
||||
static void TaskDestructor_EntitiesManager(struct Task *t)
|
||||
{
|
||||
EntitiesManager *em = TASK_DATA(t);
|
||||
EwramFree(em->interactables);
|
||||
@@ -984,3 +1034,5 @@ void sub_80095FC(struct Task *t)
|
||||
EwramFree(em->enemies);
|
||||
gEntitiesManagerTask = NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
+1
-1
@@ -94,7 +94,7 @@ s16 sub_8004418(s16 x, s16 y)
|
||||
return result;
|
||||
}
|
||||
|
||||
#if !COLLECT_RINGS_ROM
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
void numToASCII(u8 digits[5], u16 number)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
Reference in new issue
Block a user