mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 09:43:38 +00:00
collect_rings: match rings_scatter
This commit is contained in:
1 parent
ef15f06c32
commit
b3ff6aea72
7 files changed
+687
-941
No files matched your search
@@ -0,0 +1,646 @@
|
||||
.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, #0x28
|
||||
ldr r0, _02011D98 @ =gCurTask
|
||||
ldr r0, [r0]
|
||||
ldrh r1, [r0, #6]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #0x12
|
||||
adds r0, r1, r0
|
||||
str r0, [sp, #4]
|
||||
ldr r0, _02011D9C @ =gUnknown_03000030
|
||||
adds r5, r1, r0
|
||||
ldr r2, [sp, #4]
|
||||
str r2, [sp, #8]
|
||||
ldr r3, _02011DA0 @ =gUnknown_030002B0
|
||||
adds r0, r1, r3
|
||||
ldr r0, [r0]
|
||||
str r0, [sp, #0xc]
|
||||
ldr r4, _02011DA4 @ =gUnknown_030002B4
|
||||
adds r1, r1, r4
|
||||
ldrh r1, [r1]
|
||||
str r1, [sp, #0x10]
|
||||
movs r0, #0
|
||||
str r0, [sp, #0x14]
|
||||
adds r0, r2, #0
|
||||
bl UpdateSpriteAnimation
|
||||
movs r1, #0
|
||||
str r1, [sp, #0x18]
|
||||
_02011D88:
|
||||
ldrh r0, [r5, #0xc]
|
||||
cmp r0, #0
|
||||
bne _02011DA8
|
||||
adds r5, #0x14
|
||||
ldr r2, [sp, #0x18]
|
||||
adds r2, #1
|
||||
str r2, [sp, #0x20]
|
||||
b _02012216
|
||||
.align 2, 0
|
||||
_02011D98: .4byte gCurTask
|
||||
_02011D9C: .4byte gUnknown_03000030
|
||||
_02011DA0: .4byte gUnknown_030002B0
|
||||
_02011DA4: .4byte gUnknown_030002B4
|
||||
_02011DA8:
|
||||
movs r3, #8
|
||||
ldrsh r1, [r5, r3]
|
||||
ldr r0, [r5]
|
||||
adds r2, r0, r1
|
||||
str r2, [r5]
|
||||
movs r4, #0xa
|
||||
ldrsh r1, [r5, r4]
|
||||
ldr r0, [r5, #4]
|
||||
adds r3, r0, r1
|
||||
str r3, [r5, #4]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #5
|
||||
adds r1, r2, r0
|
||||
movs r0, #0xf4
|
||||
lsls r0, r0, #0xb
|
||||
cmp r1, r0
|
||||
bls _02011DD6
|
||||
movs r0, #0
|
||||
strh r0, [r5, #0xc]
|
||||
ldr r1, [sp, #0x18]
|
||||
adds r1, #1
|
||||
str r1, [sp, #0x20]
|
||||
b _02012216
|
||||
_02011DD6:
|
||||
ldr r0, _02011DF4 @ =0x0000EFFF
|
||||
cmp r2, r0
|
||||
bgt _02011DFC
|
||||
ldr r0, _02011DF8 @ =0x00011FFF
|
||||
cmp r3, r0
|
||||
bgt _02011DFC
|
||||
movs r4, #0xb4
|
||||
lsls r4, r4, #0xb
|
||||
adds r0, r2, r4
|
||||
str r0, [r5]
|
||||
movs r1, #0xd8
|
||||
lsls r1, r1, #0xa
|
||||
adds r0, r3, r1
|
||||
b _02011E1A
|
||||
.align 2, 0
|
||||
_02011DF4: .4byte 0x0000EFFF
|
||||
_02011DF8: .4byte 0x00011FFF
|
||||
_02011DFC:
|
||||
ldr r2, [r5]
|
||||
movs r0, #0xd2
|
||||
lsls r0, r0, #0xb
|
||||
cmp r2, r0
|
||||
ble _02011E1C
|
||||
ldr r1, [r5, #4]
|
||||
movs r0, #0xd8
|
||||
lsls r0, r0, #0xa
|
||||
cmp r1, r0
|
||||
ble _02011E1C
|
||||
ldr r3, _02011F40 @ =0xFFFA6000
|
||||
adds r0, r2, r3
|
||||
str r0, [r5]
|
||||
ldr r4, _02011F44 @ =0xFFFCA000
|
||||
adds r0, r1, r4
|
||||
_02011E1A:
|
||||
str r0, [r5, #4]
|
||||
_02011E1C:
|
||||
ldr r0, [r5]
|
||||
asrs r0, r0, #8
|
||||
str r0, [sp, #0x1c]
|
||||
mov sb, r0
|
||||
ldr r0, [r5, #4]
|
||||
asrs r7, r0, #8
|
||||
ldr r1, _02011F48 @ =gCamera
|
||||
ldr r0, [r1]
|
||||
ldr r2, [sp, #0x1c]
|
||||
subs r2, r2, r0
|
||||
mov sl, r2
|
||||
ldr r0, [r1, #4]
|
||||
subs r0, r7, r0
|
||||
mov r8, r0
|
||||
ldr r3, _02011F4C @ =gPlayer
|
||||
mov ip, r3
|
||||
mov r0, ip
|
||||
adds r0, #0x90
|
||||
ldr r2, [r0]
|
||||
adds r4, r5, #0
|
||||
adds r4, #0x14
|
||||
str r4, [sp, #0x24]
|
||||
ldrh r6, [r5, #0xc]
|
||||
ldr r0, [sp, #0x18]
|
||||
adds r0, #1
|
||||
str r0, [sp, #0x20]
|
||||
ldr r1, [sp, #0x10]
|
||||
cmp r6, r1
|
||||
ble _02011E58
|
||||
b _0201205E
|
||||
_02011E58:
|
||||
mov r0, ip
|
||||
adds r0, #0x64
|
||||
movs r3, #0
|
||||
ldrsh r0, [r0, r3]
|
||||
cmp r0, #0x14
|
||||
bne _02011E6E
|
||||
mov r4, ip
|
||||
movs r1, #0x2c
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, #0
|
||||
bne _02011F60
|
||||
_02011E6E:
|
||||
mov r3, ip
|
||||
ldr r0, [r3, #0x20]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _02011F60
|
||||
adds r4, r2, #0
|
||||
adds r4, #0x38
|
||||
ldr r2, [sp, #0x1c]
|
||||
subs r2, #8
|
||||
ldr r0, [r3, #8]
|
||||
asrs r0, r0, #8
|
||||
movs r3, #0
|
||||
ldrsb r3, [r4, r3]
|
||||
adds r1, r0, r3
|
||||
cmp r2, r1
|
||||
bgt _02011E9C
|
||||
ldr r0, [sp, #0x1c]
|
||||
adds r0, #8
|
||||
cmp r0, r1
|
||||
bge _02011EA8
|
||||
cmp r2, r1
|
||||
blt _02011F60
|
||||
_02011E9C:
|
||||
movs r0, #2
|
||||
ldrsb r0, [r4, r0]
|
||||
subs r0, r0, r3
|
||||
adds r0, r1, r0
|
||||
cmp r0, r2
|
||||
blt _02011F60
|
||||
_02011EA8:
|
||||
adds r2, r7, #0
|
||||
subs r2, #0x10
|
||||
mov r1, ip
|
||||
ldr r0, [r1, #0xc]
|
||||
asrs r0, r0, #8
|
||||
movs r3, #1
|
||||
ldrsb r3, [r4, r3]
|
||||
adds r1, r0, r3
|
||||
cmp r2, r1
|
||||
bgt _02011EC4
|
||||
cmp r7, r1
|
||||
bge _02011ED0
|
||||
cmp r2, r1
|
||||
blt _02011F60
|
||||
_02011EC4:
|
||||
movs r0, #3
|
||||
ldrsb r0, [r4, r0]
|
||||
subs r0, r0, r3
|
||||
adds r0, r1, r0
|
||||
cmp r0, r2
|
||||
blt _02011F60
|
||||
_02011ED0:
|
||||
mov r2, sb
|
||||
lsls r0, r2, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
lsls r1, r7, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
bl CreateCollectRingEffect
|
||||
ldr r1, _02011F50 @ =gRingCount
|
||||
ldrh r6, [r1]
|
||||
adds r0, r6, #1
|
||||
strh r0, [r1]
|
||||
ldr r0, _02011F54 @ =gCurrentLevel
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
cmp r0, #0x1d
|
||||
beq _02011F1C
|
||||
ldrh r0, [r1]
|
||||
movs r1, #0x64
|
||||
bl Div
|
||||
adds r4, r0, #0
|
||||
adds r0, r6, #0
|
||||
movs r1, #0x64
|
||||
bl Div
|
||||
cmp r4, r0
|
||||
beq _02011F1C
|
||||
ldr r0, _02011F58 @ =gGameMode
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _02011F1C
|
||||
ldr r1, _02011F5C @ =gNumLives
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0xfe
|
||||
bhi _02011F1C
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
_02011F1C:
|
||||
ldr r0, _02011F58 @ =gGameMode
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #5
|
||||
bne _02011F30
|
||||
ldr r1, _02011F50 @ =gRingCount
|
||||
ldrh r0, [r1]
|
||||
cmp r0, #0xff
|
||||
bls _02011F30
|
||||
movs r0, #0xff
|
||||
strh r0, [r1]
|
||||
_02011F30:
|
||||
movs r0, #0
|
||||
strh r0, [r5, #0xc]
|
||||
adds r5, #0x14
|
||||
ldr r3, [sp, #0x18]
|
||||
adds r3, #1
|
||||
str r3, [sp, #0x20]
|
||||
b _02012216
|
||||
.align 2, 0
|
||||
_02011F40: .4byte 0xFFFA6000
|
||||
_02011F44: .4byte 0xFFFCA000
|
||||
_02011F48: .4byte gCamera
|
||||
_02011F4C: .4byte gPlayer
|
||||
_02011F50: .4byte gRingCount
|
||||
_02011F54: .4byte gCurrentLevel
|
||||
_02011F58: .4byte gGameMode
|
||||
_02011F5C: .4byte gNumLives
|
||||
_02011F60:
|
||||
adds r4, r5, #0
|
||||
adds r4, #0x14
|
||||
str r4, [sp, #0x24]
|
||||
ldr r0, [sp, #0x18]
|
||||
adds r0, #1
|
||||
str r0, [sp, #0x20]
|
||||
ldr r1, [sp, #0x10]
|
||||
cmp r6, r1
|
||||
bgt _0201205E
|
||||
movs r2, #0
|
||||
mov ip, r2
|
||||
_02011F76:
|
||||
ldr r0, _02012034 @ =0x04000128
|
||||
ldr r0, [r0]
|
||||
lsls r0, r0, #0x1a
|
||||
lsrs r0, r0, #0x1e
|
||||
cmp ip, r0
|
||||
beq _02012050
|
||||
ldr r1, _02012038 @ =gMultiplayerPlayerTasks
|
||||
mov r3, ip
|
||||
lsls r0, r3, #2
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _02012050
|
||||
ldrh r2, [r0, #6]
|
||||
movs r4, #0xc0
|
||||
lsls r4, r4, #0x12
|
||||
adds r6, r2, r4
|
||||
ldr r1, _0201203C @ =gUnknown_0300006A
|
||||
adds r0, r2, r1
|
||||
ldrb r0, [r0]
|
||||
subs r0, #0x1c
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #1
|
||||
bhi _02011FB6
|
||||
ldr r3, _02012040 @ =gUnknown_03000054
|
||||
adds r0, r2, r3
|
||||
ldrh r1, [r0]
|
||||
movs r0, #4
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _02012050
|
||||
_02011FB6:
|
||||
mov r4, sb
|
||||
subs r4, #8
|
||||
ldr r1, _02012044 @ =gUnknown_03000050
|
||||
adds r0, r2, r1
|
||||
movs r3, #0
|
||||
ldrsh r1, [r0, r3]
|
||||
ldr r3, _02012048 @ =gUnknown_0300002C
|
||||
adds r0, r2, r3
|
||||
movs r3, #0
|
||||
ldrsb r3, [r0, r3]
|
||||
adds r1, r1, r3
|
||||
cmp r4, r1
|
||||
bgt _02011FDC
|
||||
mov r0, sb
|
||||
adds r0, #8
|
||||
cmp r0, r1
|
||||
bge _02011FEC
|
||||
cmp r4, r1
|
||||
blt _02012050
|
||||
_02011FDC:
|
||||
ldr r0, _0201204C @ =gUnknown_0300002E
|
||||
adds r2, r2, r0
|
||||
movs r0, #0
|
||||
ldrsb r0, [r2, r0]
|
||||
subs r0, r0, r3
|
||||
adds r0, r1, r0
|
||||
cmp r0, r4
|
||||
blt _02012050
|
||||
_02011FEC:
|
||||
adds r3, r7, #0
|
||||
subs r3, #0x10
|
||||
adds r0, r6, #0
|
||||
adds r0, #0x52
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
adds r1, r6, #0
|
||||
adds r1, #0x2d
|
||||
movs r2, #0
|
||||
ldrsb r2, [r1, r2]
|
||||
adds r1, r0, r2
|
||||
cmp r3, r1
|
||||
bgt _0201200E
|
||||
cmp r7, r1
|
||||
bge _02012020
|
||||
cmp r3, r1
|
||||
blt _02012050
|
||||
_0201200E:
|
||||
adds r0, r6, #0
|
||||
adds r0, #0x2f
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
subs r0, r0, r2
|
||||
adds r0, r1, r0
|
||||
cmp r0, r3
|
||||
blt _02012050
|
||||
_02012020:
|
||||
mov r2, sb
|
||||
lsls r0, r2, #0x10
|
||||
lsls r1, r7, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
bl CreateCollectRingEffect
|
||||
movs r0, #0
|
||||
b _02012212
|
||||
.align 2, 0
|
||||
_02012034: .4byte 0x04000128
|
||||
_02012038: .4byte gMultiplayerPlayerTasks
|
||||
_0201203C: .4byte gUnknown_0300006A
|
||||
_02012040: .4byte gUnknown_03000054
|
||||
_02012044: .4byte gUnknown_03000050
|
||||
_02012048: .4byte gUnknown_0300002C
|
||||
_0201204C: .4byte gUnknown_0300002E
|
||||
_02012050:
|
||||
mov r0, ip
|
||||
adds r0, #1
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
mov ip, r0
|
||||
cmp r0, #3
|
||||
bls _02011F76
|
||||
_0201205E:
|
||||
movs r3, #0xa
|
||||
ldrsh r0, [r5, r3]
|
||||
cmp r0, #0
|
||||
ble _02012098
|
||||
ldrh r1, [r5, #0x10]
|
||||
movs r0, #7
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _02012098
|
||||
movs r4, #0xe
|
||||
ldrsh r2, [r5, r4]
|
||||
ldr r0, _02012118 @ =sub_801EC3C
|
||||
str r0, [sp]
|
||||
adds r0, r7, #0
|
||||
ldr r1, [sp, #0x1c]
|
||||
movs r3, #8
|
||||
bl sub_801F100
|
||||
cmp r0, #0
|
||||
bgt _02012098
|
||||
lsls r1, r0, #8
|
||||
ldr r0, [r5, #4]
|
||||
adds r0, r0, r1
|
||||
str r0, [r5, #4]
|
||||
ldrh r1, [r5, #0xa]
|
||||
lsls r0, r1, #0x10
|
||||
asrs r0, r0, #0x12
|
||||
subs r0, r0, r1
|
||||
strh r0, [r5, #0xa]
|
||||
_02012098:
|
||||
ldr r1, [sp, #4]
|
||||
ldr r2, _0201211C @ =0x000002B6
|
||||
adds r0, r1, r2
|
||||
ldrh r1, [r0]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _020120E6
|
||||
movs r3, #0xa
|
||||
ldrsh r0, [r5, r3]
|
||||
cmp r0, #0
|
||||
bge _020120E6
|
||||
ldrh r1, [r5, #0x10]
|
||||
movs r0, #7
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _020120E6
|
||||
adds r0, r7, #0
|
||||
subs r0, #0x10
|
||||
movs r4, #0xe
|
||||
ldrsh r2, [r5, r4]
|
||||
ldr r1, _02012118 @ =sub_801EC3C
|
||||
str r1, [sp]
|
||||
ldr r1, [sp, #0x1c]
|
||||
movs r3, #8
|
||||
rsbs r3, r3, #0
|
||||
bl sub_801F100
|
||||
cmp r0, #0
|
||||
bgt _020120E6
|
||||
lsls r1, r0, #8
|
||||
ldr r0, [r5, #4]
|
||||
subs r0, r0, r1
|
||||
str r0, [r5, #4]
|
||||
ldrh r1, [r5, #0xa]
|
||||
lsls r0, r1, #0x10
|
||||
asrs r0, r0, #0x12
|
||||
subs r0, r0, r1
|
||||
strh r0, [r5, #0xa]
|
||||
_020120E6:
|
||||
ldrh r0, [r5, #0xa]
|
||||
ldr r1, [sp, #0xc]
|
||||
adds r0, r0, r1
|
||||
strh r0, [r5, #0xa]
|
||||
mov r0, sl
|
||||
adds r0, #7
|
||||
cmp r0, #0xfe
|
||||
bhi _02012104
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
cmp r8, r0
|
||||
ble _02012104
|
||||
mov r2, r8
|
||||
cmp r2, #0xa7
|
||||
ble _02012134
|
||||
_02012104:
|
||||
ldr r1, [r5]
|
||||
movs r0, #0xf0
|
||||
lsls r0, r0, #0xa
|
||||
cmp r1, r0
|
||||
ble _02012128
|
||||
ldr r3, _02012120 @ =0xFFFFFA60
|
||||
add sl, r3
|
||||
ldr r4, _02012124 @ =0xFFFFFCA0
|
||||
add r8, r4
|
||||
b _02012134
|
||||
.align 2, 0
|
||||
_02012118: .4byte sub_801EC3C
|
||||
_0201211C: .4byte 0x000002B6
|
||||
_02012120: .4byte 0xFFFFFA60
|
||||
_02012124: .4byte 0xFFFFFCA0
|
||||
_02012128:
|
||||
movs r0, #0xb4
|
||||
lsls r0, r0, #3
|
||||
add sl, r0
|
||||
movs r1, #0xd8
|
||||
lsls r1, r1, #2
|
||||
add r8, r1
|
||||
_02012134:
|
||||
mov r0, sl
|
||||
adds r0, #7
|
||||
cmp r0, #0xfe
|
||||
bhi _020121FA
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
cmp r8, r0
|
||||
ble _020121FA
|
||||
mov r2, r8
|
||||
cmp r2, #0xa7
|
||||
bgt _020121FA
|
||||
ldrh r0, [r5, #0xc]
|
||||
cmp r0, #0x1f
|
||||
bhi _0201215C
|
||||
ldr r0, _02012188 @ =gStageTime
|
||||
ldr r0, [r0]
|
||||
movs r1, #2
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _020121FA
|
||||
_0201215C:
|
||||
ldr r2, [sp, #8]
|
||||
adds r2, #0x23
|
||||
ldr r3, [sp, #0x14]
|
||||
cmp r3, #0
|
||||
beq _0201216E
|
||||
adds r1, r2, #0
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0xff
|
||||
bne _0201218C
|
||||
_0201216E:
|
||||
movs r0, #0xff
|
||||
strb r0, [r2]
|
||||
mov r0, sl
|
||||
ldr r4, [sp, #8]
|
||||
strh r0, [r4, #0x16]
|
||||
mov r1, r8
|
||||
strh r1, [r4, #0x18]
|
||||
ldr r0, [sp, #8]
|
||||
bl DisplaySprite
|
||||
movs r2, #1
|
||||
str r2, [sp, #0x14]
|
||||
b _020121FA
|
||||
.align 2, 0
|
||||
_02012188: .4byte gStageTime
|
||||
_0201218C:
|
||||
ldrb r0, [r1]
|
||||
lsls r0, r0, #3
|
||||
ldr r1, _02012230 @ =gOamBuffer2
|
||||
adds r4, r0, r1
|
||||
ldr r3, [sp, #8]
|
||||
ldrh r0, [r3, #0x1a]
|
||||
movs r2, #0xf8
|
||||
lsls r2, r2, #3
|
||||
adds r1, r2, #0
|
||||
ands r0, r1
|
||||
lsrs r0, r0, #6
|
||||
bl OamMalloc
|
||||
adds r3, r0, #0
|
||||
ldr r0, _02012234 @ =iwram_end
|
||||
ldr r0, [r0]
|
||||
cmp r0, r3
|
||||
beq _020121FA
|
||||
ldr r1, _02012238 @ =0x040000D4
|
||||
str r4, [r1]
|
||||
str r3, [r1, #4]
|
||||
ldr r0, _0201223C @ =0x80000003
|
||||
str r0, [r1, #8]
|
||||
ldr r0, [r1, #8]
|
||||
ldrh r2, [r3]
|
||||
movs r4, #0xff
|
||||
lsls r4, r4, #8
|
||||
adds r0, r4, #0
|
||||
ands r2, r0
|
||||
strh r2, [r3]
|
||||
ldr r1, [sp, #8]
|
||||
ldr r0, [r1, #0xc]
|
||||
ldrh r0, [r0, #0xa]
|
||||
mov r4, r8
|
||||
subs r0, r4, r0
|
||||
movs r1, #0xff
|
||||
ands r0, r1
|
||||
adds r2, r2, r0
|
||||
strh r2, [r3]
|
||||
ldrh r2, [r3, #2]
|
||||
movs r1, #0xfe
|
||||
lsls r1, r1, #8
|
||||
adds r0, r1, #0
|
||||
ands r2, r0
|
||||
strh r2, [r3, #2]
|
||||
ldr r4, [sp, #8]
|
||||
ldr r0, [r4, #0xc]
|
||||
ldrh r0, [r0, #8]
|
||||
mov r1, sl
|
||||
subs r0, r1, r0
|
||||
ldr r4, _02012240 @ =0x000001FF
|
||||
adds r1, r4, #0
|
||||
ands r0, r1
|
||||
adds r2, r2, r0
|
||||
strh r2, [r3, #2]
|
||||
_020121FA:
|
||||
ldrh r1, [r5, #0x10]
|
||||
ldr r2, _02012244 @ =0x0000FFFC
|
||||
adds r0, r2, #0
|
||||
adds r2, r1, #0
|
||||
ands r2, r0
|
||||
adds r1, #1
|
||||
movs r0, #3
|
||||
ands r1, r0
|
||||
orrs r2, r1
|
||||
strh r2, [r5, #0x10]
|
||||
ldrh r0, [r5, #0xc]
|
||||
subs r0, #1
|
||||
_02012212:
|
||||
strh r0, [r5, #0xc]
|
||||
ldr r5, [sp, #0x24]
|
||||
_02012216:
|
||||
ldr r3, [sp, #0x20]
|
||||
str r3, [sp, #0x18]
|
||||
cmp r3, #0x1f
|
||||
bgt _02012220
|
||||
b _02011D88
|
||||
_02012220:
|
||||
add sp, #0x28
|
||||
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
|
||||
_02012230: .4byte gOamBuffer2
|
||||
_02012234: .4byte iwram_end
|
||||
_02012238: .4byte 0x040000D4
|
||||
_0201223C: .4byte 0x80000003
|
||||
_02012240: .4byte 0x000001FF
|
||||
_02012244: .4byte 0x0000FFFC
|
||||
|
||||
|
||||
.syntax divided
|
||||
@@ -124,12 +124,12 @@
|
||||
#define SE_RING_COPY 15
|
||||
#endif
|
||||
|
||||
#define SE_RINGS_LOST 118
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
#define SE_LIFE_LOST 119
|
||||
#define SE_RINGS_LOST 118
|
||||
#define SE_LIFE_LOST 119
|
||||
#else
|
||||
#define SE_LIFE_LOST 17
|
||||
#define SE_RINGS_LOST 16
|
||||
#define SE_LIFE_LOST 17
|
||||
#endif
|
||||
|
||||
#define SE_TAILS_PROPELLER_FLYING 120
|
||||
|
||||
@@ -124,7 +124,8 @@ SA2_C_FILES := \
|
||||
sa2/game/multiplayer/mp_attack_2_effect.c \
|
||||
sa2/game/stage/camera.c \
|
||||
sa2/game/stage/terrain_collision.c \
|
||||
sa2/game/stage/player.c
|
||||
sa2/game/stage/player.c \
|
||||
sa2/game/stage/rings_scatter.c
|
||||
|
||||
SA2_C_ASM_FILES := \
|
||||
sa2/lib/m4a/m4a0.s \
|
||||
|
||||
@@ -4,925 +4,6 @@
|
||||
.syntax unified
|
||||
.arm
|
||||
|
||||
thumb_func_start InitPlayerHitRingsScatter
|
||||
InitPlayerHitRingsScatter: @ 0x02011B44
|
||||
push {r4, r5, lr}
|
||||
sub sp, #8
|
||||
ldr r4, _02011BD8 @ =gUnknown_030057C4
|
||||
ldr r0, _02011BDC @ =sub_02012260
|
||||
movs r1, #0xae
|
||||
lsls r1, r1, #2
|
||||
ldr r2, _02011BE0 @ =0x00002001
|
||||
ldr r3, _02011BE4 @ =sub_0201226C
|
||||
str r3, [sp]
|
||||
movs r3, #0
|
||||
bl TaskCreate
|
||||
str r0, [r4]
|
||||
ldrh r3, [r0, #6]
|
||||
movs r1, #0xc0
|
||||
lsls r1, r1, #0x12
|
||||
adds r1, r3, r1
|
||||
movs r5, #0
|
||||
movs r4, #0
|
||||
strh r4, [r1, #0x16]
|
||||
strh r4, [r1, #0x18]
|
||||
ldr r0, _02011BE8 @ =0x06012E40
|
||||
str r0, [r1, #4]
|
||||
movs r0, #0xa0
|
||||
lsls r0, r0, #3
|
||||
strh r0, [r1, #0x1a]
|
||||
strh r4, [r1, #8]
|
||||
movs r0, #0x6a
|
||||
strh r0, [r1, #0xa]
|
||||
ldr r2, _02011BEC @ =gUnknown_03000020
|
||||
adds r0, r3, r2
|
||||
strb r5, [r0]
|
||||
strh r4, [r1, #0x14]
|
||||
strh r4, [r1, #0x1c]
|
||||
ldr r0, _02011BF0 @ =gUnknown_03000021
|
||||
adds r2, r3, r0
|
||||
movs r0, #0xff
|
||||
strb r0, [r2]
|
||||
ldr r0, _02011BF4 @ =gUnknown_03000022
|
||||
adds r2, r3, r0
|
||||
movs r0, #0x20
|
||||
strb r0, [r2]
|
||||
ldr r2, _02011BF8 @ =gUnknown_03000025
|
||||
adds r0, r3, r2
|
||||
strb r5, [r0]
|
||||
ldr r0, _02011BFC @ =0x00042200
|
||||
str r0, [r1, #0x10]
|
||||
ldr r1, _02011C00 @ =gUnknown_030002B6
|
||||
adds r0, r3, r1
|
||||
strh r4, [r0]
|
||||
ldr r2, _02011C04 @ =gUnknown_030002B4
|
||||
adds r1, r3, r2
|
||||
movs r0, #0x94
|
||||
strh r0, [r1]
|
||||
ldr r0, _02011C08 @ =gUnknown_030002B0
|
||||
adds r1, r3, r0
|
||||
movs r0, #0x12
|
||||
str r0, [r1]
|
||||
ldr r1, _02011C0C @ =gUnknown_03000030
|
||||
adds r3, r3, r1
|
||||
add r0, sp, #4
|
||||
strh r4, [r0]
|
||||
ldr r0, _02011C10 @ =0x040000D4
|
||||
add r2, sp, #4
|
||||
str r2, [r0]
|
||||
str r3, [r0, #4]
|
||||
ldr r1, _02011C14 @ =0x81000140
|
||||
str r1, [r0, #8]
|
||||
ldr r0, [r0, #8]
|
||||
add sp, #8
|
||||
pop {r4, r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_02011BD8: .4byte gUnknown_030057C4
|
||||
_02011BDC: .4byte sub_02012260
|
||||
_02011BE0: .4byte 0x00002001
|
||||
_02011BE4: .4byte sub_0201226C
|
||||
_02011BE8: .4byte 0x06012E40
|
||||
_02011BEC: .4byte gUnknown_03000020
|
||||
_02011BF0: .4byte gUnknown_03000021
|
||||
_02011BF4: .4byte gUnknown_03000022
|
||||
_02011BF8: .4byte gUnknown_03000025
|
||||
_02011BFC: .4byte 0x00042200
|
||||
_02011C00: .4byte gUnknown_030002B6
|
||||
_02011C04: .4byte gUnknown_030002B4
|
||||
_02011C08: .4byte gUnknown_030002B0
|
||||
_02011C0C: .4byte gUnknown_03000030
|
||||
_02011C10: .4byte 0x040000D4
|
||||
_02011C14: .4byte 0x81000140
|
||||
|
||||
thumb_func_start InitScatteringRings
|
||||
InitScatteringRings: @ 0x02011C18
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
sub sp, #0xc
|
||||
str r0, [sp]
|
||||
str r1, [sp, #4]
|
||||
adds r7, r2, #0
|
||||
ldr r0, _02011C9C @ =gUnknown_030057C4
|
||||
ldr r0, [r0]
|
||||
ldrh r0, [r0, #6]
|
||||
ldr r1, _02011CA0 @ =gUnknown_03000030
|
||||
adds r4, r0, r1
|
||||
ldr r6, _02011CA4 @ =gPlayer
|
||||
str r6, [sp, #8]
|
||||
movs r5, #0
|
||||
movs r6, #0
|
||||
cmp r7, #0
|
||||
beq _02011D2E
|
||||
cmp r7, #0x20
|
||||
ble _02011C46
|
||||
movs r7, #0x20
|
||||
_02011C46:
|
||||
ldr r0, _02011CA8 @ =gGameMode
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #2
|
||||
bls _02011C54
|
||||
cmp r7, #0x10
|
||||
ble _02011C54
|
||||
movs r7, #0x10
|
||||
_02011C54:
|
||||
movs r0, #0x10
|
||||
bl m4aSongNumStart
|
||||
movs r3, #0x91
|
||||
lsls r3, r3, #3
|
||||
movs r0, #0
|
||||
mov r8, r0
|
||||
mov ip, r0
|
||||
ldr r1, _02011CAC @ =gSineTable
|
||||
mov sl, r1
|
||||
ldr r0, _02011CB0 @ =gPseudoRandom
|
||||
mov sb, r0
|
||||
_02011C6C:
|
||||
ldrh r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _02011D22
|
||||
movs r0, #0xb4
|
||||
strh r0, [r4, #0xc]
|
||||
ldr r0, [sp, #8]
|
||||
adds r0, #0x38
|
||||
ldrb r0, [r0]
|
||||
strh r0, [r4, #0xe]
|
||||
ldr r1, [sp]
|
||||
lsls r0, r1, #8
|
||||
str r0, [r4]
|
||||
ldr r1, [sp, #4]
|
||||
lsls r0, r1, #8
|
||||
str r0, [r4, #4]
|
||||
cmp r3, #0
|
||||
blt _02011CE4
|
||||
asrs r2, r3, #8
|
||||
cmp r2, #5
|
||||
ble _02011CB4
|
||||
rsbs r0, r2, #0
|
||||
adds r0, #9
|
||||
b _02011CB6
|
||||
.align 2, 0
|
||||
_02011C9C: .4byte gUnknown_030057C4
|
||||
_02011CA0: .4byte gUnknown_03000030
|
||||
_02011CA4: .4byte gPlayer
|
||||
_02011CA8: .4byte gGameMode
|
||||
_02011CAC: .4byte gSineTable
|
||||
_02011CB0: .4byte gPseudoRandom
|
||||
_02011CB4:
|
||||
adds r0, r2, #0
|
||||
_02011CB6:
|
||||
adds r2, r0, #0
|
||||
movs r1, #0xff
|
||||
ands r1, r3
|
||||
lsls r0, r1, #3
|
||||
add r0, sl
|
||||
movs r6, #0
|
||||
ldrsh r5, [r0, r6]
|
||||
asrs r5, r2
|
||||
lsls r1, r1, #3
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #2
|
||||
adds r1, r1, r0
|
||||
add r1, sl
|
||||
movs r0, #0
|
||||
ldrsh r6, [r1, r0]
|
||||
asrs r6, r2
|
||||
asrs r0, r5, #2
|
||||
subs r5, r5, r0
|
||||
asrs r0, r6, #2
|
||||
subs r6, r6, r0
|
||||
adds r3, #0x10
|
||||
movs r0, #0x80
|
||||
orrs r3, r0
|
||||
_02011CE4:
|
||||
strh r5, [r4, #8]
|
||||
strh r6, [r4, #0xa]
|
||||
rsbs r3, r3, #0
|
||||
rsbs r5, r5, #0
|
||||
movs r1, #0
|
||||
strh r1, [r4, #0x10]
|
||||
mov r0, sb
|
||||
ldr r1, [r0]
|
||||
ldr r0, _02011D40 @ =0x00196225
|
||||
muls r0, r1, r0
|
||||
ldr r1, _02011D44 @ =0x3C6EF35F
|
||||
adds r0, r0, r1
|
||||
mov r1, sb
|
||||
str r0, [r1]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #9
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _02011D0E
|
||||
movs r0, #4
|
||||
strh r0, [r4, #0x10]
|
||||
_02011D0E:
|
||||
movs r0, #3
|
||||
mov r1, ip
|
||||
ands r1, r0
|
||||
ldrh r0, [r4, #0x10]
|
||||
orrs r1, r0
|
||||
strh r1, [r4, #0x10]
|
||||
movs r0, #1
|
||||
add ip, r0
|
||||
cmp ip, r7
|
||||
bge _02011D2E
|
||||
_02011D22:
|
||||
adds r4, #0x14
|
||||
movs r1, #1
|
||||
add r8, r1
|
||||
mov r0, r8
|
||||
cmp r0, #0x1f
|
||||
ble _02011C6C
|
||||
_02011D2E:
|
||||
add sp, #0xc
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_02011D40: .4byte 0x00196225
|
||||
_02011D44: .4byte 0x3C6EF35F
|
||||
|
||||
thumb_func_start sub_02011D48
|
||||
sub_02011D48: @ 0x02011D48
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
sub sp, #0x28
|
||||
ldr r0, _02011D98 @ =gCurTask
|
||||
ldr r0, [r0]
|
||||
ldrh r1, [r0, #6]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #0x12
|
||||
adds r0, r1, r0
|
||||
str r0, [sp, #4]
|
||||
ldr r0, _02011D9C @ =gUnknown_03000030
|
||||
adds r5, r1, r0
|
||||
ldr r2, [sp, #4]
|
||||
str r2, [sp, #8]
|
||||
ldr r3, _02011DA0 @ =gUnknown_030002B0
|
||||
adds r0, r1, r3
|
||||
ldr r0, [r0]
|
||||
str r0, [sp, #0xc]
|
||||
ldr r4, _02011DA4 @ =gUnknown_030002B4
|
||||
adds r1, r1, r4
|
||||
ldrh r1, [r1]
|
||||
str r1, [sp, #0x10]
|
||||
movs r0, #0
|
||||
str r0, [sp, #0x14]
|
||||
adds r0, r2, #0
|
||||
bl UpdateSpriteAnimation
|
||||
movs r1, #0
|
||||
str r1, [sp, #0x18]
|
||||
_02011D88:
|
||||
ldrh r0, [r5, #0xc]
|
||||
cmp r0, #0
|
||||
bne _02011DA8
|
||||
adds r5, #0x14
|
||||
ldr r2, [sp, #0x18]
|
||||
adds r2, #1
|
||||
str r2, [sp, #0x20]
|
||||
b _02012216
|
||||
.align 2, 0
|
||||
_02011D98: .4byte gCurTask
|
||||
_02011D9C: .4byte gUnknown_03000030
|
||||
_02011DA0: .4byte gUnknown_030002B0
|
||||
_02011DA4: .4byte gUnknown_030002B4
|
||||
_02011DA8:
|
||||
movs r3, #8
|
||||
ldrsh r1, [r5, r3]
|
||||
ldr r0, [r5]
|
||||
adds r2, r0, r1
|
||||
str r2, [r5]
|
||||
movs r4, #0xa
|
||||
ldrsh r1, [r5, r4]
|
||||
ldr r0, [r5, #4]
|
||||
adds r3, r0, r1
|
||||
str r3, [r5, #4]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #5
|
||||
adds r1, r2, r0
|
||||
movs r0, #0xf4
|
||||
lsls r0, r0, #0xb
|
||||
cmp r1, r0
|
||||
bls _02011DD6
|
||||
movs r0, #0
|
||||
strh r0, [r5, #0xc]
|
||||
ldr r1, [sp, #0x18]
|
||||
adds r1, #1
|
||||
str r1, [sp, #0x20]
|
||||
b _02012216
|
||||
_02011DD6:
|
||||
ldr r0, _02011DF4 @ =0x0000EFFF
|
||||
cmp r2, r0
|
||||
bgt _02011DFC
|
||||
ldr r0, _02011DF8 @ =0x00011FFF
|
||||
cmp r3, r0
|
||||
bgt _02011DFC
|
||||
movs r4, #0xb4
|
||||
lsls r4, r4, #0xb
|
||||
adds r0, r2, r4
|
||||
str r0, [r5]
|
||||
movs r1, #0xd8
|
||||
lsls r1, r1, #0xa
|
||||
adds r0, r3, r1
|
||||
b _02011E1A
|
||||
.align 2, 0
|
||||
_02011DF4: .4byte 0x0000EFFF
|
||||
_02011DF8: .4byte 0x00011FFF
|
||||
_02011DFC:
|
||||
ldr r2, [r5]
|
||||
movs r0, #0xd2
|
||||
lsls r0, r0, #0xb
|
||||
cmp r2, r0
|
||||
ble _02011E1C
|
||||
ldr r1, [r5, #4]
|
||||
movs r0, #0xd8
|
||||
lsls r0, r0, #0xa
|
||||
cmp r1, r0
|
||||
ble _02011E1C
|
||||
ldr r3, _02011F40 @ =0xFFFA6000
|
||||
adds r0, r2, r3
|
||||
str r0, [r5]
|
||||
ldr r4, _02011F44 @ =0xFFFCA000
|
||||
adds r0, r1, r4
|
||||
_02011E1A:
|
||||
str r0, [r5, #4]
|
||||
_02011E1C:
|
||||
ldr r0, [r5]
|
||||
asrs r0, r0, #8
|
||||
str r0, [sp, #0x1c]
|
||||
mov sb, r0
|
||||
ldr r0, [r5, #4]
|
||||
asrs r7, r0, #8
|
||||
ldr r1, _02011F48 @ =gCamera
|
||||
ldr r0, [r1]
|
||||
ldr r2, [sp, #0x1c]
|
||||
subs r2, r2, r0
|
||||
mov sl, r2
|
||||
ldr r0, [r1, #4]
|
||||
subs r0, r7, r0
|
||||
mov r8, r0
|
||||
ldr r3, _02011F4C @ =gPlayer
|
||||
mov ip, r3
|
||||
mov r0, ip
|
||||
adds r0, #0x90
|
||||
ldr r2, [r0]
|
||||
adds r4, r5, #0
|
||||
adds r4, #0x14
|
||||
str r4, [sp, #0x24]
|
||||
ldrh r6, [r5, #0xc]
|
||||
ldr r0, [sp, #0x18]
|
||||
adds r0, #1
|
||||
str r0, [sp, #0x20]
|
||||
ldr r1, [sp, #0x10]
|
||||
cmp r6, r1
|
||||
ble _02011E58
|
||||
b _0201205E
|
||||
_02011E58:
|
||||
mov r0, ip
|
||||
adds r0, #0x64
|
||||
movs r3, #0
|
||||
ldrsh r0, [r0, r3]
|
||||
cmp r0, #0x14
|
||||
bne _02011E6E
|
||||
mov r4, ip
|
||||
movs r1, #0x2c
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, #0
|
||||
bne _02011F60
|
||||
_02011E6E:
|
||||
mov r3, ip
|
||||
ldr r0, [r3, #0x20]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _02011F60
|
||||
adds r4, r2, #0
|
||||
adds r4, #0x38
|
||||
ldr r2, [sp, #0x1c]
|
||||
subs r2, #8
|
||||
ldr r0, [r3, #8]
|
||||
asrs r0, r0, #8
|
||||
movs r3, #0
|
||||
ldrsb r3, [r4, r3]
|
||||
adds r1, r0, r3
|
||||
cmp r2, r1
|
||||
bgt _02011E9C
|
||||
ldr r0, [sp, #0x1c]
|
||||
adds r0, #8
|
||||
cmp r0, r1
|
||||
bge _02011EA8
|
||||
cmp r2, r1
|
||||
blt _02011F60
|
||||
_02011E9C:
|
||||
movs r0, #2
|
||||
ldrsb r0, [r4, r0]
|
||||
subs r0, r0, r3
|
||||
adds r0, r1, r0
|
||||
cmp r0, r2
|
||||
blt _02011F60
|
||||
_02011EA8:
|
||||
adds r2, r7, #0
|
||||
subs r2, #0x10
|
||||
mov r1, ip
|
||||
ldr r0, [r1, #0xc]
|
||||
asrs r0, r0, #8
|
||||
movs r3, #1
|
||||
ldrsb r3, [r4, r3]
|
||||
adds r1, r0, r3
|
||||
cmp r2, r1
|
||||
bgt _02011EC4
|
||||
cmp r7, r1
|
||||
bge _02011ED0
|
||||
cmp r2, r1
|
||||
blt _02011F60
|
||||
_02011EC4:
|
||||
movs r0, #3
|
||||
ldrsb r0, [r4, r0]
|
||||
subs r0, r0, r3
|
||||
adds r0, r1, r0
|
||||
cmp r0, r2
|
||||
blt _02011F60
|
||||
_02011ED0:
|
||||
mov r2, sb
|
||||
lsls r0, r2, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
lsls r1, r7, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
bl CreateCollectRingEffect
|
||||
ldr r1, _02011F50 @ =gRingCount
|
||||
ldrh r6, [r1]
|
||||
adds r0, r6, #1
|
||||
strh r0, [r1]
|
||||
ldr r0, _02011F54 @ =gCurrentLevel
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
cmp r0, #0x1d
|
||||
beq _02011F1C
|
||||
ldrh r0, [r1]
|
||||
movs r1, #0x64
|
||||
bl Div
|
||||
adds r4, r0, #0
|
||||
adds r0, r6, #0
|
||||
movs r1, #0x64
|
||||
bl Div
|
||||
cmp r4, r0
|
||||
beq _02011F1C
|
||||
ldr r0, _02011F58 @ =gGameMode
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _02011F1C
|
||||
ldr r1, _02011F5C @ =gNumLives
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0xfe
|
||||
bhi _02011F1C
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
_02011F1C:
|
||||
ldr r0, _02011F58 @ =gGameMode
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #5
|
||||
bne _02011F30
|
||||
ldr r1, _02011F50 @ =gRingCount
|
||||
ldrh r0, [r1]
|
||||
cmp r0, #0xff
|
||||
bls _02011F30
|
||||
movs r0, #0xff
|
||||
strh r0, [r1]
|
||||
_02011F30:
|
||||
movs r0, #0
|
||||
strh r0, [r5, #0xc]
|
||||
adds r5, #0x14
|
||||
ldr r3, [sp, #0x18]
|
||||
adds r3, #1
|
||||
str r3, [sp, #0x20]
|
||||
b _02012216
|
||||
.align 2, 0
|
||||
_02011F40: .4byte 0xFFFA6000
|
||||
_02011F44: .4byte 0xFFFCA000
|
||||
_02011F48: .4byte gCamera
|
||||
_02011F4C: .4byte gPlayer
|
||||
_02011F50: .4byte gRingCount
|
||||
_02011F54: .4byte gCurrentLevel
|
||||
_02011F58: .4byte gGameMode
|
||||
_02011F5C: .4byte gNumLives
|
||||
_02011F60:
|
||||
adds r4, r5, #0
|
||||
adds r4, #0x14
|
||||
str r4, [sp, #0x24]
|
||||
ldr r0, [sp, #0x18]
|
||||
adds r0, #1
|
||||
str r0, [sp, #0x20]
|
||||
ldr r1, [sp, #0x10]
|
||||
cmp r6, r1
|
||||
bgt _0201205E
|
||||
movs r2, #0
|
||||
mov ip, r2
|
||||
_02011F76:
|
||||
ldr r0, _02012034 @ =0x04000128
|
||||
ldr r0, [r0]
|
||||
lsls r0, r0, #0x1a
|
||||
lsrs r0, r0, #0x1e
|
||||
cmp ip, r0
|
||||
beq _02012050
|
||||
ldr r1, _02012038 @ =gMultiplayerPlayerTasks
|
||||
mov r3, ip
|
||||
lsls r0, r3, #2
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _02012050
|
||||
ldrh r2, [r0, #6]
|
||||
movs r4, #0xc0
|
||||
lsls r4, r4, #0x12
|
||||
adds r6, r2, r4
|
||||
ldr r1, _0201203C @ =gUnknown_0300006A
|
||||
adds r0, r2, r1
|
||||
ldrb r0, [r0]
|
||||
subs r0, #0x1c
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #1
|
||||
bhi _02011FB6
|
||||
ldr r3, _02012040 @ =gUnknown_03000054
|
||||
adds r0, r2, r3
|
||||
ldrh r1, [r0]
|
||||
movs r0, #4
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _02012050
|
||||
_02011FB6:
|
||||
mov r4, sb
|
||||
subs r4, #8
|
||||
ldr r1, _02012044 @ =gUnknown_03000050
|
||||
adds r0, r2, r1
|
||||
movs r3, #0
|
||||
ldrsh r1, [r0, r3]
|
||||
ldr r3, _02012048 @ =gUnknown_0300002C
|
||||
adds r0, r2, r3
|
||||
movs r3, #0
|
||||
ldrsb r3, [r0, r3]
|
||||
adds r1, r1, r3
|
||||
cmp r4, r1
|
||||
bgt _02011FDC
|
||||
mov r0, sb
|
||||
adds r0, #8
|
||||
cmp r0, r1
|
||||
bge _02011FEC
|
||||
cmp r4, r1
|
||||
blt _02012050
|
||||
_02011FDC:
|
||||
ldr r0, _0201204C @ =gUnknown_0300002E
|
||||
adds r2, r2, r0
|
||||
movs r0, #0
|
||||
ldrsb r0, [r2, r0]
|
||||
subs r0, r0, r3
|
||||
adds r0, r1, r0
|
||||
cmp r0, r4
|
||||
blt _02012050
|
||||
_02011FEC:
|
||||
adds r3, r7, #0
|
||||
subs r3, #0x10
|
||||
adds r0, r6, #0
|
||||
adds r0, #0x52
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
adds r1, r6, #0
|
||||
adds r1, #0x2d
|
||||
movs r2, #0
|
||||
ldrsb r2, [r1, r2]
|
||||
adds r1, r0, r2
|
||||
cmp r3, r1
|
||||
bgt _0201200E
|
||||
cmp r7, r1
|
||||
bge _02012020
|
||||
cmp r3, r1
|
||||
blt _02012050
|
||||
_0201200E:
|
||||
adds r0, r6, #0
|
||||
adds r0, #0x2f
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
subs r0, r0, r2
|
||||
adds r0, r1, r0
|
||||
cmp r0, r3
|
||||
blt _02012050
|
||||
_02012020:
|
||||
mov r2, sb
|
||||
lsls r0, r2, #0x10
|
||||
lsls r1, r7, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
bl CreateCollectRingEffect
|
||||
movs r0, #0
|
||||
b _02012212
|
||||
.align 2, 0
|
||||
_02012034: .4byte 0x04000128
|
||||
_02012038: .4byte gMultiplayerPlayerTasks
|
||||
_0201203C: .4byte gUnknown_0300006A
|
||||
_02012040: .4byte gUnknown_03000054
|
||||
_02012044: .4byte gUnknown_03000050
|
||||
_02012048: .4byte gUnknown_0300002C
|
||||
_0201204C: .4byte gUnknown_0300002E
|
||||
_02012050:
|
||||
mov r0, ip
|
||||
adds r0, #1
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
mov ip, r0
|
||||
cmp r0, #3
|
||||
bls _02011F76
|
||||
_0201205E:
|
||||
movs r3, #0xa
|
||||
ldrsh r0, [r5, r3]
|
||||
cmp r0, #0
|
||||
ble _02012098
|
||||
ldrh r1, [r5, #0x10]
|
||||
movs r0, #7
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _02012098
|
||||
movs r4, #0xe
|
||||
ldrsh r2, [r5, r4]
|
||||
ldr r0, _02012118 @ =sub_801EC3C
|
||||
str r0, [sp]
|
||||
adds r0, r7, #0
|
||||
ldr r1, [sp, #0x1c]
|
||||
movs r3, #8
|
||||
bl sub_801F100
|
||||
cmp r0, #0
|
||||
bgt _02012098
|
||||
lsls r1, r0, #8
|
||||
ldr r0, [r5, #4]
|
||||
adds r0, r0, r1
|
||||
str r0, [r5, #4]
|
||||
ldrh r1, [r5, #0xa]
|
||||
lsls r0, r1, #0x10
|
||||
asrs r0, r0, #0x12
|
||||
subs r0, r0, r1
|
||||
strh r0, [r5, #0xa]
|
||||
_02012098:
|
||||
ldr r1, [sp, #4]
|
||||
ldr r2, _0201211C @ =0x000002B6
|
||||
adds r0, r1, r2
|
||||
ldrh r1, [r0]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _020120E6
|
||||
movs r3, #0xa
|
||||
ldrsh r0, [r5, r3]
|
||||
cmp r0, #0
|
||||
bge _020120E6
|
||||
ldrh r1, [r5, #0x10]
|
||||
movs r0, #7
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _020120E6
|
||||
adds r0, r7, #0
|
||||
subs r0, #0x10
|
||||
movs r4, #0xe
|
||||
ldrsh r2, [r5, r4]
|
||||
ldr r1, _02012118 @ =sub_801EC3C
|
||||
str r1, [sp]
|
||||
ldr r1, [sp, #0x1c]
|
||||
movs r3, #8
|
||||
rsbs r3, r3, #0
|
||||
bl sub_801F100
|
||||
cmp r0, #0
|
||||
bgt _020120E6
|
||||
lsls r1, r0, #8
|
||||
ldr r0, [r5, #4]
|
||||
subs r0, r0, r1
|
||||
str r0, [r5, #4]
|
||||
ldrh r1, [r5, #0xa]
|
||||
lsls r0, r1, #0x10
|
||||
asrs r0, r0, #0x12
|
||||
subs r0, r0, r1
|
||||
strh r0, [r5, #0xa]
|
||||
_020120E6:
|
||||
ldrh r0, [r5, #0xa]
|
||||
ldr r1, [sp, #0xc]
|
||||
adds r0, r0, r1
|
||||
strh r0, [r5, #0xa]
|
||||
mov r0, sl
|
||||
adds r0, #7
|
||||
cmp r0, #0xfe
|
||||
bhi _02012104
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
cmp r8, r0
|
||||
ble _02012104
|
||||
mov r2, r8
|
||||
cmp r2, #0xa7
|
||||
ble _02012134
|
||||
_02012104:
|
||||
ldr r1, [r5]
|
||||
movs r0, #0xf0
|
||||
lsls r0, r0, #0xa
|
||||
cmp r1, r0
|
||||
ble _02012128
|
||||
ldr r3, _02012120 @ =0xFFFFFA60
|
||||
add sl, r3
|
||||
ldr r4, _02012124 @ =0xFFFFFCA0
|
||||
add r8, r4
|
||||
b _02012134
|
||||
.align 2, 0
|
||||
_02012118: .4byte sub_801EC3C
|
||||
_0201211C: .4byte 0x000002B6
|
||||
_02012120: .4byte 0xFFFFFA60
|
||||
_02012124: .4byte 0xFFFFFCA0
|
||||
_02012128:
|
||||
movs r0, #0xb4
|
||||
lsls r0, r0, #3
|
||||
add sl, r0
|
||||
movs r1, #0xd8
|
||||
lsls r1, r1, #2
|
||||
add r8, r1
|
||||
_02012134:
|
||||
mov r0, sl
|
||||
adds r0, #7
|
||||
cmp r0, #0xfe
|
||||
bhi _020121FA
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
cmp r8, r0
|
||||
ble _020121FA
|
||||
mov r2, r8
|
||||
cmp r2, #0xa7
|
||||
bgt _020121FA
|
||||
ldrh r0, [r5, #0xc]
|
||||
cmp r0, #0x1f
|
||||
bhi _0201215C
|
||||
ldr r0, _02012188 @ =gStageTime
|
||||
ldr r0, [r0]
|
||||
movs r1, #2
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _020121FA
|
||||
_0201215C:
|
||||
ldr r2, [sp, #8]
|
||||
adds r2, #0x23
|
||||
ldr r3, [sp, #0x14]
|
||||
cmp r3, #0
|
||||
beq _0201216E
|
||||
adds r1, r2, #0
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0xff
|
||||
bne _0201218C
|
||||
_0201216E:
|
||||
movs r0, #0xff
|
||||
strb r0, [r2]
|
||||
mov r0, sl
|
||||
ldr r4, [sp, #8]
|
||||
strh r0, [r4, #0x16]
|
||||
mov r1, r8
|
||||
strh r1, [r4, #0x18]
|
||||
ldr r0, [sp, #8]
|
||||
bl DisplaySprite
|
||||
movs r2, #1
|
||||
str r2, [sp, #0x14]
|
||||
b _020121FA
|
||||
.align 2, 0
|
||||
_02012188: .4byte gStageTime
|
||||
_0201218C:
|
||||
ldrb r0, [r1]
|
||||
lsls r0, r0, #3
|
||||
ldr r1, _02012230 @ =gOamBuffer2
|
||||
adds r4, r0, r1
|
||||
ldr r3, [sp, #8]
|
||||
ldrh r0, [r3, #0x1a]
|
||||
movs r2, #0xf8
|
||||
lsls r2, r2, #3
|
||||
adds r1, r2, #0
|
||||
ands r0, r1
|
||||
lsrs r0, r0, #6
|
||||
bl OamMalloc
|
||||
adds r3, r0, #0
|
||||
ldr r0, _02012234 @ =iwram_end
|
||||
ldr r0, [r0]
|
||||
cmp r0, r3
|
||||
beq _020121FA
|
||||
ldr r1, _02012238 @ =0x040000D4
|
||||
str r4, [r1]
|
||||
str r3, [r1, #4]
|
||||
ldr r0, _0201223C @ =0x80000003
|
||||
str r0, [r1, #8]
|
||||
ldr r0, [r1, #8]
|
||||
ldrh r2, [r3]
|
||||
movs r4, #0xff
|
||||
lsls r4, r4, #8
|
||||
adds r0, r4, #0
|
||||
ands r2, r0
|
||||
strh r2, [r3]
|
||||
ldr r1, [sp, #8]
|
||||
ldr r0, [r1, #0xc]
|
||||
ldrh r0, [r0, #0xa]
|
||||
mov r4, r8
|
||||
subs r0, r4, r0
|
||||
movs r1, #0xff
|
||||
ands r0, r1
|
||||
adds r2, r2, r0
|
||||
strh r2, [r3]
|
||||
ldrh r2, [r3, #2]
|
||||
movs r1, #0xfe
|
||||
lsls r1, r1, #8
|
||||
adds r0, r1, #0
|
||||
ands r2, r0
|
||||
strh r2, [r3, #2]
|
||||
ldr r4, [sp, #8]
|
||||
ldr r0, [r4, #0xc]
|
||||
ldrh r0, [r0, #8]
|
||||
mov r1, sl
|
||||
subs r0, r1, r0
|
||||
ldr r4, _02012240 @ =0x000001FF
|
||||
adds r1, r4, #0
|
||||
ands r0, r1
|
||||
adds r2, r2, r0
|
||||
strh r2, [r3, #2]
|
||||
_020121FA:
|
||||
ldrh r1, [r5, #0x10]
|
||||
ldr r2, _02012244 @ =0x0000FFFC
|
||||
adds r0, r2, #0
|
||||
adds r2, r1, #0
|
||||
ands r2, r0
|
||||
adds r1, #1
|
||||
movs r0, #3
|
||||
ands r1, r0
|
||||
orrs r2, r1
|
||||
strh r2, [r5, #0x10]
|
||||
ldrh r0, [r5, #0xc]
|
||||
subs r0, #1
|
||||
_02012212:
|
||||
strh r0, [r5, #0xc]
|
||||
ldr r5, [sp, #0x24]
|
||||
_02012216:
|
||||
ldr r3, [sp, #0x20]
|
||||
str r3, [sp, #0x18]
|
||||
cmp r3, #0x1f
|
||||
bgt _02012220
|
||||
b _02011D88
|
||||
_02012220:
|
||||
add sp, #0x28
|
||||
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
|
||||
_02012230: .4byte gOamBuffer2
|
||||
_02012234: .4byte iwram_end
|
||||
_02012238: .4byte 0x040000D4
|
||||
_0201223C: .4byte 0x80000003
|
||||
_02012240: .4byte 0x000001FF
|
||||
_02012244: .4byte 0x0000FFFC
|
||||
|
||||
thumb_func_start DestroyRingsScatterTask
|
||||
DestroyRingsScatterTask: @ 0x02012248
|
||||
push {r4, lr}
|
||||
ldr r4, _0201225C @ =gUnknown_030057C4
|
||||
ldr r0, [r4]
|
||||
bl TaskDestroy
|
||||
movs r0, #0
|
||||
str r0, [r4]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0201225C: .4byte gUnknown_030057C4
|
||||
|
||||
thumb_func_start sub_02012260
|
||||
sub_02012260: @ 0x02012260
|
||||
push {lr}
|
||||
bl sub_02011D48
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0201226C
|
||||
sub_0201226C: @ 0x0201226C
|
||||
ldr r1, _02012274 @ =gUnknown_030057C4
|
||||
movs r0, #0
|
||||
str r0, [r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02012274: .4byte gUnknown_030057C4
|
||||
|
||||
thumb_func_start sub_02012278
|
||||
sub_02012278: @ 0x02012278
|
||||
push {r4, r5, r6, lr}
|
||||
@@ -1780,7 +861,7 @@ sub_8081200: @ 0x020129A0
|
||||
ldr r1, _020129F8 @ =gGameMode
|
||||
movs r0, #5
|
||||
strb r0, [r1]
|
||||
ldr r0, _020129FC @ =gUnknown_030057C4
|
||||
ldr r0, _020129FC @ =gRingsScatterTask
|
||||
movs r1, #0
|
||||
str r1, [r0]
|
||||
ldr r0, _02012A00 @ =gUnknown_030057D4
|
||||
@@ -1821,7 +902,7 @@ _020129CC:
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_020129F8: .4byte gGameMode
|
||||
_020129FC: .4byte gUnknown_030057C4
|
||||
_020129FC: .4byte gRingsScatterTask
|
||||
_02012A00: .4byte gUnknown_030057D4
|
||||
_02012A04: .4byte gUnknown_030057D0
|
||||
_02012A08: .4byte gPlayer
|
||||
|
||||
@@ -48,6 +48,7 @@ SECTIONS {
|
||||
build/collect_rings/src/sa2/game/stage/camera.o(.text);
|
||||
build/collect_rings/src/sa2/game/stage/terrain_collision.o(.text);
|
||||
build/collect_rings/src/sa2/game/stage/player.o(.text);
|
||||
build/collect_rings/src/sa2/game/stage/rings_scatter.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);
|
||||
|
||||
@@ -102,7 +102,7 @@ build/collect_rings/src/sa2/core.o(.data);
|
||||
. = 0x000056B8; gRefCollision = .;
|
||||
. = 0x000056C0; gPlayer = .;
|
||||
. = 0x00005780; gPlayerBodyPSI = .;
|
||||
. = 0x000057C4; gUnknown_030057C4 = .;
|
||||
. = 0x000057C4; gRingsScatterTask = .;
|
||||
. = 0x000057C8; gPlayerControls = .;
|
||||
. = 0x000057D0; gUnknown_030057D0 = .;
|
||||
. = 0x000057D4; gUnknown_030057D4 = .;
|
||||
|
||||
@@ -31,6 +31,16 @@
|
||||
#define UNK10_CONDITION !(ring->unk10 & 0x7)
|
||||
#endif
|
||||
|
||||
#define USE_HITBOX_RECT 1
|
||||
|
||||
// TODO: Use improved version of these globaly!
|
||||
#define HB_ALT_LEFT(p, hb) (I((p)->qWorldX) + (hb)->left)
|
||||
#define HB_ALT_WIDTH(hb) ((hb)->right - (hb)->left)
|
||||
#define HB_ALT_RIGHT(p, hb) (I((p)->qWorldX) + HB_ALT_WIDTH(hb))
|
||||
#define HB_ALT_TOP(p, hb) (I((p)->qWorldY) + (hb)->top)
|
||||
#define HB_ALT_HEIGHT(hb) ((hb)->bottom - (hb)->top)
|
||||
#define HB_ALT_BOTTOM(p, hb) (I((p)->qWorldY) + HB_ALT_HEIGHT(hb))
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s32 x;
|
||||
/* 0x04 */ s32 y;
|
||||
@@ -82,6 +92,7 @@ void InitPlayerHitRingsScatter(void)
|
||||
taskFn = Task_RingsScatter_Singleplayer;
|
||||
}
|
||||
#elif (GAME == GAME_SA2)
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
||||
if (IS_SINGLE_PLAYER) {
|
||||
tgtTask = &gRingsScatterTask;
|
||||
@@ -90,7 +101,9 @@ void InitPlayerHitRingsScatter(void)
|
||||
tgtTask = &gRingsScatterTask;
|
||||
taskFn = Task_RingsScatter_MP_Multipak;
|
||||
}
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
tgtTask = &gRingsScatterTask;
|
||||
taskFn = Task_RingsScatter_MP_Singlepak;
|
||||
}
|
||||
@@ -223,20 +236,26 @@ void InitScatteringRings(s32 x, s32 y, s32 numRings)
|
||||
r3 += 0x10;
|
||||
r3 |= 0x80;
|
||||
}
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
r2 = 0;
|
||||
#endif
|
||||
ring->velX = velX;
|
||||
ring->velY = velY;
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
if (GRAVITY_IS_INVERTED) {
|
||||
ring->velY = -velY;
|
||||
}
|
||||
#endif
|
||||
|
||||
r3 = -r3;
|
||||
velX = -velX;
|
||||
|
||||
#if (GAME == GAME_SA2)
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
ring->unk10 = r2;
|
||||
#else
|
||||
ring->unk10 = 0;
|
||||
#endif
|
||||
|
||||
if (!(PseudoRandom32() & 0x10000)) {
|
||||
ring->unk10 = 0x4;
|
||||
@@ -253,6 +272,7 @@ void InitScatteringRings(s32 x, s32 y, s32 numRings)
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
|
||||
#if (GAME == GAME_SA1)
|
||||
// TODO: Either not in SA2, or in a different place!
|
||||
@@ -589,16 +609,6 @@ void RingsScatterSingleplayer_NormalGravity(void)
|
||||
}
|
||||
}
|
||||
|
||||
#define USE_HITBOX_RECT 1
|
||||
|
||||
// TODO: Use improved version of these globaly!
|
||||
#define HB_ALT_LEFT(p, hb) (I((p)->qWorldX) + (hb)->left)
|
||||
#define HB_ALT_WIDTH(hb) ((hb)->right - (hb)->left)
|
||||
#define HB_ALT_RIGHT(p, hb) (I((p)->qWorldX) + HB_ALT_WIDTH(hb))
|
||||
#define HB_ALT_TOP(p, hb) (I((p)->qWorldY) + (hb)->top)
|
||||
#define HB_ALT_HEIGHT(hb) ((hb)->bottom - (hb)->top)
|
||||
#define HB_ALT_BOTTOM(p, hb) (I((p)->qWorldY) + HB_ALT_HEIGHT(hb))
|
||||
|
||||
// NOTE: VERY WRONG!!!
|
||||
// A ton of code is missing here.
|
||||
// (Basically a copy-paste of RingsScatterSingleplayer_FlippedGravity)
|
||||
@@ -854,12 +864,17 @@ NONMATCH("asm/non_matching/game/stage/rings_scatter/RingsScatterMultipak_NormalG
|
||||
}
|
||||
|
||||
END_NONMATCH
|
||||
#endif
|
||||
|
||||
// NOTE: VERY WRONG!!!
|
||||
// A ton of code is missing here.
|
||||
// (Basically a copy-paste of RingsScatterSingleplayer_NormalGravity)
|
||||
// (54.61%) https://decomp.me/scratch/v9rXO
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
NONMATCH("asm/non_matching/game/stage/rings_scatter/RingsScatterSinglepakMain.inc", void RingsScatterSinglepakMain(void))
|
||||
#else
|
||||
NONMATCH("asm/non_matching/game/stage/rings_scatter/RingsScatterSinglepakMain_CollectRings.inc", void RingsScatterSinglepakMain(void))
|
||||
#endif
|
||||
{
|
||||
RingsScatter *rs = TASK_DATA(gCurTask);
|
||||
ScatterRing *ring = &rs->rings[0];
|
||||
@@ -989,6 +1004,7 @@ void DestroyRingsScatterTask(void)
|
||||
gRingsScatterTask = NULL;
|
||||
}
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
void Task_RingsScatter_Singleplayer(void)
|
||||
{
|
||||
if (GRAVITY_IS_INVERTED) {
|
||||
@@ -1006,7 +1022,8 @@ void Task_RingsScatter_MP_Multipak(void)
|
||||
RingsScatterMultipak_NormalGravity();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void Task_RingsScatter_MP_Singlepak(void) { RingsScatterSinglepakMain(); }
|
||||
|
||||
void TaskDestructor_RingsScatter(struct Task UNUSED *t) { gRingsScatterTask = NULL; }
|
||||
void TaskDestructor_RingsScatter(struct Task UNUSED *t) { gRingsScatterTask = NULL; }
|
||||
Reference in new issue
Block a user