collect_rings: match entities manager, match collision

This commit is contained in:
Oliver Bell committed 2025-05-29 00:20:21 +01:00
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
-6
View File
@@ -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
+12 -6
View File
@@ -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
+3 -1
View File
@@ -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);
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+6 -6
View File
@@ -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;
+3 -3
View File
@@ -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
+25 -5
View File
@@ -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
+72 -20
View File
@@ -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
View File
@@ -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;