mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 09:43:38 +00:00
collect_rings: match multiplayer_teleport
This commit is contained in:
1 parent
e5d20fef84
commit
f77ec0f443
12 files changed
+59
-595
No files matched your search
Vendored
+2
-1
@@ -370,7 +370,8 @@
|
||||
"french_horn.h": "c",
|
||||
"pipe_sequence.h": "c",
|
||||
"terrain_collision.h": "c",
|
||||
"indicators.h": "c"
|
||||
"indicators.h": "c",
|
||||
"multiplayer_teleport.h": "c"
|
||||
},
|
||||
"asm-code-lens.donated": true,
|
||||
"editor.formatOnSave": true,
|
||||
|
||||
@@ -491,7 +491,12 @@
|
||||
#define SA2_ANIM_VARIANT_GAME_OVER_NUE 3
|
||||
#define SA2_ANIM_VARIANT_GAME_OVER_TIME 4
|
||||
|
||||
#define SA2_ANIM_NOTIFICATION_RING_BONUS 735
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
#define SA2_ANIM_NOTIFICATION_RING_BONUS 735
|
||||
#else
|
||||
#define SA2_ANIM_NOTIFICATION_RING_BONUS 112
|
||||
#endif
|
||||
|
||||
#define SA2_ANIM_CHAR_SELECT_CHARACTER 736
|
||||
#define SA2_ANIM_VARIANT_CHAR_SELECT_CHARACTER_STATIC 0
|
||||
#define SA2_ANIM_VARIANT_CHAR_SELECT_CHARACTER_SELECTED 1
|
||||
|
||||
@@ -344,11 +344,17 @@
|
||||
#define MUS_MESSAGE_2 408
|
||||
|
||||
#define MUS_GOT_ALL_CHAOS_EMERALDS 410
|
||||
#define MUS_FANFARE 411
|
||||
#define MUS_VS_EXIT 412
|
||||
#define MUS_VS_SUCCESS 413
|
||||
#define MUS_VS_MISS 414
|
||||
#define MUS_MESSAGE 415
|
||||
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
#define MUS_FANFARE 411
|
||||
#else
|
||||
#define MUS_FANFARE 4
|
||||
#endif
|
||||
|
||||
#define MUS_VS_EXIT 412
|
||||
#define MUS_VS_SUCCESS 413
|
||||
#define MUS_VS_MISS 414
|
||||
#define MUS_MESSAGE 415
|
||||
|
||||
/* 416 - 503: Dummies */
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
#ifndef GUARD_INTERACTABLE_MULTIPLAYER_TELEPORT
|
||||
#define GUARD_INTERACTABLE_MULTIPLAYER_TELEPORT
|
||||
|
||||
#include "global.h"
|
||||
#include "game/entity.h"
|
||||
|
||||
void CreateEntity_MultiplayerTeleport(MapEntity *, u16, u16, u8);
|
||||
|
||||
#endif // GUARD_INTERACTABLE_MULTIPLAYER_TELEPORT
|
||||
@@ -1,9 +0,0 @@
|
||||
#ifndef GUARD_INTERACTABLE_NOTIFICATION_RING_BONUS_H
|
||||
#define GUARD_INTERACTABLE_NOTIFICATION_RING_BONUS_H
|
||||
|
||||
#include "global.h"
|
||||
#include "game/entity.h"
|
||||
|
||||
void CreateEntity_MultiplayerTeleport(MapEntity *, u16, u16, u8);
|
||||
|
||||
#endif // GUARD_INTERACTABLE_NOTIFICATION_RING_BONUS_H
|
||||
+1
-1
@@ -306,7 +306,7 @@ SECTIONS
|
||||
src/game/interactables_2/egg_utopia/flying_handle.o(.text);
|
||||
src/game/interactables_2/egg_utopia/speeding_platform.o(.text);
|
||||
src/game/interactables_2/egg_utopia/gravity_toggle.o(.text);
|
||||
src/game/interactables_2/notification_ring_bonus.o(.text);
|
||||
src/game/interactables_2/multiplayer_teleport.o(.text);
|
||||
src/game/interactables_2/sky_canyon_init.o(.text);
|
||||
src/game/interactables_2/105.o(.text);
|
||||
src/game/interactables_2/note_particle.o(.text);
|
||||
|
||||
@@ -117,7 +117,8 @@ SA2_C_FILES := \
|
||||
sa2/game/sa1_sa2_shared/interactables/spring.c \
|
||||
sa2/game/sa1_sa2_shared/interactables/ramp.c \
|
||||
sa2/game/interactables_1/spikes.c \
|
||||
sa2/game/sa1_sa2_shared/interactables/grind_rail.c
|
||||
sa2/game/sa1_sa2_shared/interactables/grind_rail.c \
|
||||
sa2/game/interactables_2/multiplayer_teleport.c
|
||||
|
||||
SA2_C_ASM_FILES := \
|
||||
sa2/lib/m4a/m4a0.s \
|
||||
|
||||
@@ -4,563 +4,6 @@
|
||||
.syntax unified
|
||||
.arm
|
||||
|
||||
thumb_func_start CreateEntity_MultiplayerTeleport
|
||||
CreateEntity_MultiplayerTeleport: @ 0x0200B7CC
|
||||
push {r4, r5, r6, lr}
|
||||
mov r6, r8
|
||||
push {r6}
|
||||
sub sp, #4
|
||||
mov r8, r0
|
||||
adds r4, r1, #0
|
||||
adds r6, r2, #0
|
||||
lsls r4, r4, #0x10
|
||||
lsrs r4, r4, #0x10
|
||||
lsls r6, r6, #0x10
|
||||
lsrs r6, r6, #0x10
|
||||
ldr r0, _0200B858 @ =sub_0200BB44
|
||||
ldr r2, _0200B85C @ =0x00002010
|
||||
movs r5, #0
|
||||
str r5, [sp]
|
||||
movs r1, #0x24
|
||||
movs r3, #0
|
||||
bl TaskCreate
|
||||
ldrh r2, [r0, #6]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #0x12
|
||||
adds r2, r2, r0
|
||||
str r5, [r2, #0x14]
|
||||
strh r5, [r2, #0x18]
|
||||
strh r5, [r2, #0x1a]
|
||||
str r5, [r2, #0x1c]
|
||||
mov r1, r8
|
||||
ldrb r0, [r1]
|
||||
lsls r0, r0, #3
|
||||
lsls r4, r4, #8
|
||||
adds r0, r0, r4
|
||||
str r0, [r2]
|
||||
ldrb r0, [r1, #1]
|
||||
lsls r0, r0, #3
|
||||
lsls r6, r6, #8
|
||||
adds r0, r0, r6
|
||||
str r0, [r2, #4]
|
||||
movs r4, #3
|
||||
ldrsb r4, [r1, r4]
|
||||
lsls r4, r4, #3
|
||||
strh r4, [r2, #8]
|
||||
movs r3, #4
|
||||
ldrsb r3, [r1, r3]
|
||||
lsls r3, r3, #3
|
||||
strh r3, [r2, #0xa]
|
||||
ldrb r1, [r1, #5]
|
||||
lsls r1, r1, #3
|
||||
adds r1, r4, r1
|
||||
strh r1, [r2, #0xc]
|
||||
mov r5, r8
|
||||
ldrb r0, [r5, #6]
|
||||
lsls r0, r0, #3
|
||||
adds r0, r3, r0
|
||||
strh r0, [r2, #0xe]
|
||||
subs r1, r1, r4
|
||||
strh r1, [r2, #0x10]
|
||||
subs r0, r0, r3
|
||||
strh r0, [r2, #0x12]
|
||||
movs r1, #2
|
||||
rsbs r1, r1, #0
|
||||
adds r0, r1, #0
|
||||
strb r0, [r5]
|
||||
add sp, #4
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0200B858: .4byte sub_0200BB44
|
||||
_0200B85C: .4byte 0x00002010
|
||||
|
||||
thumb_func_start sub_0200B860
|
||||
sub_0200B860: @ 0x0200B860
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r5, r0, #0
|
||||
movs r1, #8
|
||||
ldrsh r0, [r5, r1]
|
||||
ldr r2, [r5]
|
||||
adds r0, r2, r0
|
||||
lsls r0, r0, #8
|
||||
ldr r1, [r5, #0x20]
|
||||
cmp r1, r0
|
||||
bge _0200B964
|
||||
ldr r0, _0200B8B8 @ =gPlayer
|
||||
movs r3, #0xc
|
||||
ldrsh r1, [r5, r3]
|
||||
adds r1, r2, r1
|
||||
lsls r1, r1, #8
|
||||
ldr r0, [r0, #8]
|
||||
cmp r0, r1
|
||||
ble _0200B964
|
||||
ldr r0, [r5, #0x1c]
|
||||
cmp r0, #0
|
||||
beq _0200B94C
|
||||
ldrh r0, [r5, #0x18]
|
||||
adds r2, r0, #1
|
||||
strh r2, [r5, #0x18]
|
||||
movs r0, #0x1a
|
||||
ldrsh r1, [r5, r0]
|
||||
lsls r0, r2, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
cmp r1, r0
|
||||
bge _0200B956
|
||||
strh r2, [r5, #0x1a]
|
||||
ldr r0, _0200B8BC @ =gUnknown_030053A4
|
||||
ldr r0, [r0]
|
||||
ldr r1, [r5, #0x14]
|
||||
subs r0, r0, r1
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r7, r0, #0x10
|
||||
movs r0, #0xe1
|
||||
lsls r0, r0, #3
|
||||
cmp r7, r0
|
||||
bls _0200B8C0
|
||||
movs r1, #5
|
||||
b _0200B8CC
|
||||
.align 2, 0
|
||||
_0200B8B8: .4byte gPlayer
|
||||
_0200B8BC: .4byte gUnknown_030053A4
|
||||
_0200B8C0:
|
||||
movs r0, #0x96
|
||||
lsls r0, r0, #3
|
||||
movs r1, #0xf
|
||||
cmp r7, r0
|
||||
bls _0200B8CC
|
||||
movs r1, #0xa
|
||||
_0200B8CC:
|
||||
ldr r2, _0200B934 @ =gRingCount
|
||||
ldrh r6, [r2]
|
||||
adds r0, r1, r6
|
||||
strh r0, [r2]
|
||||
ldr r0, _0200B938 @ =gCurrentLevel
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
cmp r0, #0x1d
|
||||
beq _0200B90A
|
||||
ldrh r0, [r2]
|
||||
movs r1, #0x64
|
||||
bl Div
|
||||
adds r4, r0, #0
|
||||
adds r0, r6, #0
|
||||
movs r1, #0x64
|
||||
bl Div
|
||||
cmp r4, r0
|
||||
beq _0200B90A
|
||||
ldr r0, _0200B93C @ =gGameMode
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _0200B90A
|
||||
ldr r1, _0200B940 @ =gNumLives
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0xfe
|
||||
bhi _0200B90A
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
_0200B90A:
|
||||
ldr r0, _0200B93C @ =gGameMode
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #5
|
||||
bne _0200B91E
|
||||
ldr r1, _0200B934 @ =gRingCount
|
||||
ldrh r0, [r1]
|
||||
cmp r0, #0xff
|
||||
bls _0200B91E
|
||||
movs r0, #0xff
|
||||
strh r0, [r1]
|
||||
_0200B91E:
|
||||
movs r0, #4
|
||||
bl m4aSongNumStart
|
||||
bl sub_0200BAB8
|
||||
ldr r0, _0200B944 @ =gUnknown_030053A4
|
||||
ldr r0, [r0]
|
||||
str r0, [r5, #0x14]
|
||||
ldr r0, _0200B948 @ =gUnknown_03005B6C
|
||||
str r7, [r0]
|
||||
b _0200B956
|
||||
.align 2, 0
|
||||
_0200B934: .4byte gRingCount
|
||||
_0200B938: .4byte gCurrentLevel
|
||||
_0200B93C: .4byte gGameMode
|
||||
_0200B940: .4byte gNumLives
|
||||
_0200B944: .4byte gUnknown_030053A4
|
||||
_0200B948: .4byte gUnknown_03005B6C
|
||||
_0200B94C:
|
||||
movs r0, #1
|
||||
str r0, [r5, #0x1c]
|
||||
ldr r0, _0200B95C @ =gUnknown_030053A4
|
||||
ldr r0, [r0]
|
||||
str r0, [r5, #0x14]
|
||||
_0200B956:
|
||||
ldr r0, _0200B960 @ =gPlayer
|
||||
ldr r0, [r0, #8]
|
||||
b _0200B992
|
||||
.align 2, 0
|
||||
_0200B95C: .4byte gUnknown_030053A4
|
||||
_0200B960: .4byte gPlayer
|
||||
_0200B964:
|
||||
movs r1, #0xc
|
||||
ldrsh r0, [r5, r1]
|
||||
ldr r2, [r5]
|
||||
adds r0, r2, r0
|
||||
lsls r0, r0, #8
|
||||
ldr r1, [r5, #0x20]
|
||||
cmp r1, r0
|
||||
ble _0200B994
|
||||
ldr r3, _0200B9A4 @ =gPlayer
|
||||
movs r1, #8
|
||||
ldrsh r0, [r5, r1]
|
||||
adds r0, r2, r0
|
||||
lsls r0, r0, #8
|
||||
ldr r1, [r3, #8]
|
||||
cmp r1, r0
|
||||
bge _0200B994
|
||||
ldr r0, [r5, #0x1c]
|
||||
cmp r0, #0
|
||||
beq _0200B990
|
||||
ldrh r0, [r5, #0x18]
|
||||
subs r0, #1
|
||||
strh r0, [r5, #0x18]
|
||||
_0200B990:
|
||||
ldr r0, [r3, #8]
|
||||
_0200B992:
|
||||
str r0, [r5, #0x20]
|
||||
_0200B994:
|
||||
ldr r0, _0200B9A8 @ =gCurTask
|
||||
ldr r1, [r0]
|
||||
ldr r0, _0200B9AC @ =sub_0200BB44
|
||||
str r0, [r1, #8]
|
||||
pop {r4, r5, r6, r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0200B9A4: .4byte gPlayer
|
||||
_0200B9A8: .4byte gCurTask
|
||||
_0200B9AC: .4byte sub_0200BB44
|
||||
|
||||
thumb_func_start sub_0200B9B0
|
||||
sub_0200B9B0: @ 0x0200B9B0
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r0, #0
|
||||
ldr r2, [r5]
|
||||
ldr r1, _0200BA14 @ =gCamera
|
||||
ldr r3, [r1]
|
||||
subs r2, r2, r3
|
||||
ldr r0, [r5, #4]
|
||||
ldr r4, [r1, #4]
|
||||
subs r0, r0, r4
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r6, r0, #0x10
|
||||
ldr r0, _0200BA18 @ =gPlayer
|
||||
ldr r1, [r0, #8]
|
||||
asrs r1, r1, #8
|
||||
subs r1, r1, r3
|
||||
ldr r0, [r0, #0xc]
|
||||
asrs r0, r0, #8
|
||||
subs r0, r0, r4
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r3, r0, #0x10
|
||||
lsls r2, r2, #0x10
|
||||
asrs r2, r2, #0x10
|
||||
movs r4, #8
|
||||
ldrsh r0, [r5, r4]
|
||||
adds r0, r2, r0
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
cmp r0, r1
|
||||
bgt _0200BA1C
|
||||
movs r4, #0xc
|
||||
ldrsh r0, [r5, r4]
|
||||
adds r0, r2, r0
|
||||
cmp r1, r0
|
||||
bgt _0200BA1C
|
||||
lsls r0, r6, #0x10
|
||||
asrs r2, r0, #0x10
|
||||
movs r1, #0xa
|
||||
ldrsh r0, [r5, r1]
|
||||
adds r0, r2, r0
|
||||
lsls r1, r3, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
cmp r0, r1
|
||||
bgt _0200BA1C
|
||||
movs r3, #0xe
|
||||
ldrsh r0, [r5, r3]
|
||||
adds r0, r2, r0
|
||||
cmp r1, r0
|
||||
bgt _0200BA1C
|
||||
movs r0, #1
|
||||
b _0200BA1E
|
||||
.align 2, 0
|
||||
_0200BA14: .4byte gCamera
|
||||
_0200BA18: .4byte gPlayer
|
||||
_0200BA1C:
|
||||
movs r0, #0
|
||||
_0200BA1E:
|
||||
pop {r4, r5, r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
|
||||
thumb_func_start sub_0200BA24
|
||||
sub_0200BA24: @ 0x0200BA24
|
||||
push {r4, lr}
|
||||
ldr r0, [r0, #0x1c]
|
||||
cmp r0, #0
|
||||
beq _0200BAA6
|
||||
ldr r0, _0200BA4C @ =gPlayer
|
||||
ldr r2, [r0, #8]
|
||||
ldr r1, _0200BA50 @ =0x0000EFFF
|
||||
adds r3, r0, #0
|
||||
cmp r2, r1
|
||||
bgt _0200BA58
|
||||
ldr r1, [r3, #0xc]
|
||||
ldr r0, _0200BA54 @ =0x00011FFF
|
||||
cmp r1, r0
|
||||
bgt _0200BA58
|
||||
movs r2, #0xb4
|
||||
lsls r2, r2, #0xb
|
||||
movs r4, #0xd8
|
||||
lsls r4, r4, #0xa
|
||||
b _0200BA70
|
||||
.align 2, 0
|
||||
_0200BA4C: .4byte gPlayer
|
||||
_0200BA50: .4byte 0x0000EFFF
|
||||
_0200BA54: .4byte 0x00011FFF
|
||||
_0200BA58:
|
||||
ldr r1, [r3, #8]
|
||||
movs r0, #0xd2
|
||||
lsls r0, r0, #0xb
|
||||
cmp r1, r0
|
||||
ble _0200BAA6
|
||||
ldr r1, [r3, #0xc]
|
||||
movs r0, #0xd8
|
||||
lsls r0, r0, #0xa
|
||||
cmp r1, r0
|
||||
ble _0200BAA6
|
||||
ldr r2, _0200BAAC @ =0xFFFA6000
|
||||
ldr r4, _0200BAB0 @ =0xFFFCA000
|
||||
_0200BA70:
|
||||
ldr r0, [r3, #8]
|
||||
adds r0, r0, r2
|
||||
str r0, [r3, #8]
|
||||
ldr r0, [r3, #0xc]
|
||||
adds r0, r0, r4
|
||||
str r0, [r3, #0xc]
|
||||
asrs r2, r2, #8
|
||||
asrs r4, r4, #8
|
||||
ldr r1, _0200BAB4 @ =gCamera
|
||||
ldr r0, [r1]
|
||||
adds r0, r0, r2
|
||||
str r0, [r1]
|
||||
ldr r0, [r1, #0x20]
|
||||
adds r0, r0, r2
|
||||
str r0, [r1, #0x20]
|
||||
ldr r0, [r1, #0x10]
|
||||
adds r0, r0, r2
|
||||
str r0, [r1, #0x10]
|
||||
ldr r0, [r1, #4]
|
||||
adds r0, r0, r4
|
||||
str r0, [r1, #4]
|
||||
ldr r0, [r1, #0x24]
|
||||
adds r0, r0, r4
|
||||
str r0, [r1, #0x24]
|
||||
ldr r0, [r1, #0x14]
|
||||
adds r0, r0, r4
|
||||
str r0, [r1, #0x14]
|
||||
_0200BAA6:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0200BAAC: .4byte 0xFFFA6000
|
||||
_0200BAB0: .4byte 0xFFFCA000
|
||||
_0200BAB4: .4byte gCamera
|
||||
|
||||
thumb_func_start sub_0200BAB8
|
||||
sub_0200BAB8: @ 0x0200BAB8
|
||||
push {r4, r5, r6, lr}
|
||||
sub sp, #4
|
||||
ldr r0, _0200BB28 @ =sub_0200BBA0
|
||||
ldr r2, _0200BB2C @ =0x00002010
|
||||
ldr r1, _0200BB30 @ =sub_0200BBE0
|
||||
str r1, [sp]
|
||||
movs r1, #0x34
|
||||
movs r3, #0
|
||||
bl TaskCreate
|
||||
ldrh r5, [r0, #6]
|
||||
movs r4, #0xc0
|
||||
lsls r4, r4, #0x12
|
||||
adds r4, r5, r4
|
||||
movs r6, #0
|
||||
movs r1, #0
|
||||
movs r0, #0x78
|
||||
strh r0, [r4, #0x30]
|
||||
movs r0, #0x40
|
||||
strh r0, [r4, #0x1a]
|
||||
strh r1, [r4, #8]
|
||||
strh r1, [r4, #0x14]
|
||||
strh r1, [r4, #0x1c]
|
||||
ldr r0, _0200BB34 @ =gUnknown_03000021
|
||||
adds r1, r5, r0
|
||||
movs r0, #0xff
|
||||
strb r0, [r1]
|
||||
ldr r0, _0200BB38 @ =gUnknown_03000022
|
||||
adds r1, r5, r0
|
||||
movs r0, #0x10
|
||||
strb r0, [r1]
|
||||
ldr r1, _0200BB3C @ =gUnknown_03000025
|
||||
adds r0, r5, r1
|
||||
strb r6, [r0]
|
||||
movs r0, #1
|
||||
rsbs r0, r0, #0
|
||||
str r0, [r4, #0x28]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #5
|
||||
str r0, [r4, #0x10]
|
||||
movs r0, #0x1a
|
||||
bl VramMalloc
|
||||
str r0, [r4, #4]
|
||||
movs r0, #0x70
|
||||
strh r0, [r4, #0xa]
|
||||
ldr r0, _0200BB40 @ =gUnknown_03000020
|
||||
adds r5, r5, r0
|
||||
strb r6, [r5]
|
||||
adds r0, r4, #0
|
||||
bl UpdateSpriteAnimation
|
||||
add sp, #4
|
||||
pop {r4, r5, r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0200BB28: .4byte sub_0200BBA0
|
||||
_0200BB2C: .4byte 0x00002010
|
||||
_0200BB30: .4byte sub_0200BBE0
|
||||
_0200BB34: .4byte gUnknown_03000021
|
||||
_0200BB38: .4byte gUnknown_03000022
|
||||
_0200BB3C: .4byte gUnknown_03000025
|
||||
_0200BB40: .4byte gUnknown_03000020
|
||||
|
||||
thumb_func_start sub_0200BB44
|
||||
sub_0200BB44: @ 0x0200BB44
|
||||
push {r4, r5, lr}
|
||||
ldr r0, _0200BB74 @ =gCurTask
|
||||
ldr r0, [r0]
|
||||
ldrh r1, [r0, #6]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #0x12
|
||||
adds r4, r1, r0
|
||||
ldr r5, _0200BB78 @ =gPlayer
|
||||
ldr r0, [r5, #0x20]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0200BB62
|
||||
ldrh r0, [r4, #0x1a]
|
||||
strh r0, [r4, #0x18]
|
||||
_0200BB62:
|
||||
adds r0, r4, #0
|
||||
bl sub_0200B9B0
|
||||
cmp r0, #0
|
||||
beq _0200BB7C
|
||||
adds r0, r4, #0
|
||||
bl sub_0200BB8C
|
||||
b _0200BB80
|
||||
.align 2, 0
|
||||
_0200BB74: .4byte gCurTask
|
||||
_0200BB78: .4byte gPlayer
|
||||
_0200BB7C:
|
||||
ldr r0, [r5, #8]
|
||||
str r0, [r4, #0x20]
|
||||
_0200BB80:
|
||||
adds r0, r4, #0
|
||||
bl sub_0200BA24
|
||||
pop {r4, r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
|
||||
thumb_func_start sub_0200BB8C
|
||||
sub_0200BB8C: @ 0x0200BB8C
|
||||
ldr r0, _0200BB98 @ =gCurTask
|
||||
ldr r1, [r0]
|
||||
ldr r0, _0200BB9C @ =sub_0200BBF4
|
||||
str r0, [r1, #8]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200BB98: .4byte gCurTask
|
||||
_0200BB9C: .4byte sub_0200BBF4
|
||||
|
||||
thumb_func_start sub_0200BBA0
|
||||
sub_0200BBA0: @ 0x0200BBA0
|
||||
push {lr}
|
||||
ldr r0, _0200BBC4 @ =gCurTask
|
||||
ldr r3, [r0]
|
||||
ldrh r1, [r3, #6]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #0x12
|
||||
adds r2, r1, r0
|
||||
ldrh r0, [r2, #0x30]
|
||||
subs r0, #1
|
||||
strh r0, [r2, #0x30]
|
||||
lsls r0, r0, #0x10
|
||||
ldr r1, _0200BBC8 @ =0xFFFF0000
|
||||
cmp r0, r1
|
||||
bne _0200BBCC
|
||||
adds r0, r3, #0
|
||||
bl TaskDestroy
|
||||
b _0200BBDA
|
||||
.align 2, 0
|
||||
_0200BBC4: .4byte gCurTask
|
||||
_0200BBC8: .4byte 0xFFFF0000
|
||||
_0200BBCC:
|
||||
movs r0, #0x78
|
||||
strh r0, [r2, #0x16]
|
||||
movs r0, #0x30
|
||||
strh r0, [r2, #0x18]
|
||||
adds r0, r2, #0
|
||||
bl DisplaySprite
|
||||
_0200BBDA:
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0200BBE0
|
||||
sub_0200BBE0: @ 0x0200BBE0
|
||||
push {lr}
|
||||
ldrh r0, [r0, #6]
|
||||
movs r1, #0xc0
|
||||
lsls r1, r1, #0x12
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0, #4]
|
||||
bl VramFree
|
||||
pop {r0}
|
||||
bx r0
|
||||
|
||||
thumb_func_start sub_0200BBF4
|
||||
sub_0200BBF4: @ 0x0200BBF4
|
||||
push {r4, lr}
|
||||
ldr r0, _0200BC18 @ =gCurTask
|
||||
ldr r0, [r0]
|
||||
ldrh r1, [r0, #6]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #0x12
|
||||
adds r4, r1, r0
|
||||
adds r0, r4, #0
|
||||
bl sub_0200B9B0
|
||||
cmp r0, #0
|
||||
bne _0200BC12
|
||||
adds r0, r4, #0
|
||||
bl sub_0200B860
|
||||
_0200BC12:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0200BC18: .4byte gCurTask
|
||||
|
||||
thumb_func_start CreateDustCloud
|
||||
CreateDustCloud: @ 0x0200BC1C
|
||||
@@ -14668,7 +14111,7 @@ _02012656:
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
bne _0201268E
|
||||
ldr r0, _020126A4 @ =gUnknown_030053A4
|
||||
ldr r0, _020126A4 @ =gCheckpointTime
|
||||
ldr r1, [r0]
|
||||
add r1, ip
|
||||
str r1, [r0]
|
||||
@@ -14696,7 +14139,7 @@ _02012694: .4byte gMultiplayerConnections
|
||||
_02012698: .4byte gUnknown_030053E0
|
||||
_0201269C: .4byte gUnknown_03005400
|
||||
_020126A0: .4byte gStageFlags
|
||||
_020126A4: .4byte gUnknown_030053A4
|
||||
_020126A4: .4byte gCheckpointTime
|
||||
_020126A8: .4byte gCourseTime
|
||||
|
||||
thumb_func_start sub_020126AC
|
||||
@@ -14772,7 +14215,7 @@ _02012724:
|
||||
ldr r0, _0201277C @ =gFrameCount
|
||||
ldr r0, [r0]
|
||||
str r0, [r1]
|
||||
ldr r0, _02012780 @ =gUnknown_030053A4
|
||||
ldr r0, _02012780 @ =gCheckpointTime
|
||||
str r3, [r0]
|
||||
ldr r1, _02012784 @ =gCourseTime
|
||||
ldr r0, _02012788 @ =0x00002A30
|
||||
@@ -14793,7 +14236,7 @@ _02012770: .4byte gStageFlags
|
||||
_02012774: .4byte 0x0000FF7F
|
||||
_02012778: .4byte gUnknown_03005418
|
||||
_0201277C: .4byte gFrameCount
|
||||
_02012780: .4byte gUnknown_030053A4
|
||||
_02012780: .4byte gCheckpointTime
|
||||
_02012784: .4byte gCourseTime
|
||||
_02012788: .4byte 0x00002A30
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ SECTIONS {
|
||||
build/collect_rings/src/sa2/game/sa1_sa2_shared/interactables/ramp.o(.text);
|
||||
build/collect_rings/src/sa2/game/interactables_1/spikes.o(.text);
|
||||
build/collect_rings/src/sa2/game/sa1_sa2_shared/interactables/grind_rail.o(.text);
|
||||
build/collect_rings/src/sa2/game/interactables_2/multiplayer_teleport.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,7 +51,7 @@ build/collect_rings/src/sa2/sio32_multi_load.o(COMMON);
|
||||
build/collect_rings/src/sa2/core.o(.data);
|
||||
|
||||
. = 0x000053A0; gUnknown_030053E0 = .;
|
||||
. = 0x000053A4; gUnknown_030053A4 = .;
|
||||
. = 0x000053A4; gCheckpointTime = .;
|
||||
. = 0x000053A8; gMultiplayerCharRings = .;
|
||||
. = 0x000053AC; gMultiplayerLanguage = .;
|
||||
. = 0x000053B0; gRingCount = .;
|
||||
|
||||
+21
-14
@@ -5,6 +5,7 @@
|
||||
#include "game/stage/camera.h"
|
||||
|
||||
#include "game/multiboot/collect_rings/time_display.h"
|
||||
#include "game/interactables_2/multiplayer_teleport.h"
|
||||
#include "game/entity.h"
|
||||
#include "sprite.h"
|
||||
#include "task.h"
|
||||
@@ -35,13 +36,13 @@ typedef struct {
|
||||
/* 0x32 */ u8 filler32[2];
|
||||
} Sprite_Notif_RingBonus; /* size: 0x34 */
|
||||
|
||||
extern void sub_80803FC(Sprite_MultiplayerTeleport *);
|
||||
extern bool32 sub_808055C(Sprite_MultiplayerTeleport *);
|
||||
extern void sub_80805D0(Sprite_MultiplayerTeleport *);
|
||||
extern void CreateSprite_Notif_RingBonus(void);
|
||||
static void sub_80803FC(Sprite_MultiplayerTeleport *);
|
||||
static bool32 sub_808055C(Sprite_MultiplayerTeleport *);
|
||||
static void sub_80805D0(Sprite_MultiplayerTeleport *);
|
||||
static void CreateSprite_Notif_RingBonus(void);
|
||||
|
||||
void Task_80806F4(void);
|
||||
void sub_808073C(Sprite_MultiplayerTeleport UNUSED *s);
|
||||
static void Task_80806F4(void);
|
||||
static void sub_808073C(Sprite_MultiplayerTeleport UNUSED *s);
|
||||
static void Task_8080750(void);
|
||||
static void TaskDestructor_8080790(struct Task *t);
|
||||
static void Task_80807A4(void);
|
||||
@@ -70,7 +71,7 @@ void CreateEntity_MultiplayerTeleport(MapEntity *me, u16 spriteRegionX, u16 spri
|
||||
SET_MAP_ENTITY_INITIALIZED(me);
|
||||
}
|
||||
|
||||
void sub_80803FC(Sprite_MultiplayerTeleport *sprite)
|
||||
static void sub_80803FC(Sprite_MultiplayerTeleport *sprite)
|
||||
{
|
||||
if ((sprite->someX < Q(sprite->posX + sprite->unk8)) && (gPlayer.qWorldX > Q(sprite->posX + sprite->unkC))) {
|
||||
if (sprite->unk1C != 0) {
|
||||
@@ -100,10 +101,16 @@ void sub_80803FC(Sprite_MultiplayerTeleport *sprite)
|
||||
|
||||
if (!IS_EXTRA_STAGE(gCurrentLevel) && (Div(gRingCount, 100) != Div(prevRingCount, 100))
|
||||
&& (gGameMode == GAME_MODE_SINGLE_PLAYER)) {
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
u32 lives = gNumLives + 1;
|
||||
LIVES_BOUND_CHECK_B(lives);
|
||||
|
||||
gMusicManagerState.unk3 = 0x10;
|
||||
#else
|
||||
if (gNumLives < 255) {
|
||||
gNumLives++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
||||
@@ -134,7 +141,7 @@ void sub_80803FC(Sprite_MultiplayerTeleport *sprite)
|
||||
gCurTask->main = Task_80806F4;
|
||||
}
|
||||
|
||||
bool32 sub_808055C(Sprite_MultiplayerTeleport *sprite)
|
||||
static bool32 sub_808055C(Sprite_MultiplayerTeleport *sprite)
|
||||
{
|
||||
s16 spriteX, spriteY;
|
||||
s16 playerX, playerY;
|
||||
@@ -152,7 +159,7 @@ bool32 sub_808055C(Sprite_MultiplayerTeleport *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80805D0(Sprite_MultiplayerTeleport *sprite)
|
||||
static void sub_80805D0(Sprite_MultiplayerTeleport *sprite)
|
||||
{
|
||||
if (sprite->unk1C != 0) {
|
||||
s32 xValue, yValue;
|
||||
@@ -182,7 +189,7 @@ void sub_80805D0(Sprite_MultiplayerTeleport *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
void CreateSprite_Notif_RingBonus(void)
|
||||
static void CreateSprite_Notif_RingBonus(void)
|
||||
{
|
||||
struct Task *t = TaskCreate(Task_8080750, sizeof(Sprite_Notif_RingBonus), 0x2010, 0, TaskDestructor_8080790);
|
||||
Sprite_Notif_RingBonus *notif = TASK_DATA(t);
|
||||
@@ -198,7 +205,7 @@ void CreateSprite_Notif_RingBonus(void)
|
||||
UpdateSpriteAnimation(s);
|
||||
}
|
||||
|
||||
void Task_80806F4(void)
|
||||
static void Task_80806F4(void)
|
||||
{
|
||||
Sprite_MultiplayerTeleport *sprite = TASK_DATA(gCurTask);
|
||||
if (gPlayer.moveState & MOVESTATE_DEAD) {
|
||||
@@ -212,9 +219,9 @@ void Task_80806F4(void)
|
||||
sub_80805D0(sprite);
|
||||
}
|
||||
|
||||
void sub_808073C(Sprite_MultiplayerTeleport UNUSED *s) { gCurTask->main = Task_80807A4; }
|
||||
static void sub_808073C(Sprite_MultiplayerTeleport UNUSED *s) { gCurTask->main = Task_80807A4; }
|
||||
|
||||
void Task_8080750(void)
|
||||
static void Task_8080750(void)
|
||||
{
|
||||
Sprite_Notif_RingBonus *sprite = TASK_DATA(gCurTask);
|
||||
if (--sprite->framesVisible == (u16)-1) {
|
||||
@@ -237,4 +244,4 @@ static void Task_80807A4(void)
|
||||
Sprite_MultiplayerTeleport *sprite = TASK_DATA(gCurTask);
|
||||
if (sub_808055C(sprite) == 0)
|
||||
sub_80803FC(sprite);
|
||||
}
|
||||
}
|
||||
@@ -81,7 +81,7 @@
|
||||
#include "game/interactables_2/note_particle.h"
|
||||
#include "game/interactables_2/105.h"
|
||||
#include "game/interactables_2/special_ring.h"
|
||||
#include "game/interactables_2/notification_ring_bonus.h"
|
||||
#include "game/interactables_2/multiplayer_teleport.h"
|
||||
#include "game/interactables_2/sky_canyon_init.h"
|
||||
|
||||
#include "game/mystery_item_box.h"
|
||||
|
||||
Reference in new issue
Block a user