mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 09:43:38 +00:00
more special stage docs and data extract
This commit is contained in:
1 parent
89a7638cea
commit
dcc5e738fe
19 files changed
+455
-209
No files matched your search
@@ -20,6 +20,6 @@ gUnknown_080DF9A0:
|
||||
gUnknown_080DF9D8:
|
||||
.incbin "baserom.gba", 0x000DF9D8, 0x2A
|
||||
|
||||
.global gUnknown_080DFA02
|
||||
gUnknown_080DFA02:
|
||||
.global gSpecialStageLevelTimes
|
||||
gSpecialStageLevelTimes:
|
||||
.incbin "baserom.gba", 0x000DFA02, 0xE
|
||||
@@ -1,17 +0,0 @@
|
||||
.section .rodata
|
||||
|
||||
.global gUnknown_080DF2F8
|
||||
gUnknown_080DF2F8:
|
||||
.incbin "baserom.gba", 0x000DF2F8, 0x370
|
||||
|
||||
.global gUnknown_080DF668
|
||||
gUnknown_080DF668:
|
||||
.incbin "baserom.gba", 0x000DF668, 0x8
|
||||
|
||||
.global gUnknown_080DF670
|
||||
gUnknown_080DF670:
|
||||
.incbin "baserom.gba", 0x000DF670, 0x14
|
||||
|
||||
.global gUnknown_080DF684
|
||||
gUnknown_080DF684:
|
||||
.incbin "baserom.gba", 0x000DF684, 0x48
|
||||
+5
-15
@@ -34,10 +34,10 @@ struct SpecialStage {
|
||||
|
||||
u16 unk5A0;
|
||||
s16 unk5A2;
|
||||
s16 unk5A4;
|
||||
s16 elapsedTime;
|
||||
|
||||
// time
|
||||
s16 unk5A6;
|
||||
s16 levelTime;
|
||||
|
||||
s32 unk5A8;
|
||||
s32 unk5AC;
|
||||
@@ -45,13 +45,11 @@ struct SpecialStage {
|
||||
|
||||
u16 unk5B4;
|
||||
|
||||
// character
|
||||
u8 unk5B6;
|
||||
u8 character;
|
||||
|
||||
u8 unk5B7;
|
||||
|
||||
// level
|
||||
u8 unk5B8;
|
||||
|
||||
u8 level;
|
||||
|
||||
u8 unk5B9;
|
||||
u8 unk5BA;
|
||||
@@ -122,14 +120,6 @@ struct UNK_806CB84 {
|
||||
s16 unk12;
|
||||
};
|
||||
|
||||
struct UNK_80DF670 {
|
||||
u16 unk0;
|
||||
u16 unk2;
|
||||
u16 unk4;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
} /* size 0x8 */;
|
||||
|
||||
void sub_806BA84(s16, s16);
|
||||
|
||||
#endif
|
||||
@@ -20,6 +20,15 @@ struct UNK_8C87904 {
|
||||
s16 unkA;
|
||||
} /* size 0xC */;
|
||||
|
||||
struct UNK_80DF670 {
|
||||
u16 unk0;
|
||||
u16 unk2;
|
||||
u16 unk4;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
} /* size 0x8 */;
|
||||
|
||||
extern const struct UNK_80DF670 gUnknown_080DF2F8[];
|
||||
|
||||
/* This is at the end of the rom */
|
||||
extern const struct UNK_8C878E8** const gUnknown_08C878E8[7];
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "global.h"
|
||||
#include "task.h"
|
||||
#include "special_stage.h"
|
||||
#include "special_stage_data.h"
|
||||
|
||||
struct SpecialStageGamma {
|
||||
struct SpecialStage* stage;
|
||||
@@ -27,4 +28,6 @@ struct SpecialStageGamma {
|
||||
|
||||
struct Task* CreateGamma(struct SpecialStage*);
|
||||
|
||||
extern const s16 gUnknown_080DF9D8[][3];
|
||||
|
||||
#endif
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "special_stage.h"
|
||||
#include "special_stage_data.h"
|
||||
|
||||
// Player
|
||||
struct SpecialStagePlayer {
|
||||
|
||||
@@ -3,16 +3,12 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "special_stage.h"
|
||||
#include "special_stage_data.h"
|
||||
#include "sprite.h"
|
||||
|
||||
extern void* gUnknown_03005B58;
|
||||
extern void* gUnknown_03005B5C;
|
||||
|
||||
#define ResetSpecialStageScreenVram() ({ \
|
||||
gUnknown_03005B5C = (void*)OBJ_VRAM0; \
|
||||
gUnknown_03005B58 = NULL; \
|
||||
})
|
||||
|
||||
#define ResetSpecialStateScreenSubMenuVram() ({ \
|
||||
gUnknown_03005B58 = NULL; \
|
||||
})
|
||||
|
||||
+1
-1
@@ -126,7 +126,7 @@ SECTIONS
|
||||
build/sa2/data/unused_objects_data.o(.rodata);
|
||||
build/sa2/src/profile.o(.rodata);
|
||||
build/sa2/src/special_stage_data.o(.rodata);
|
||||
build/sa2/data/special_stage_player_data.o(.rodata);
|
||||
build/sa2/src/special_stage_player.o(.rodata);
|
||||
build/sa2/data/special_stage_unk_806BD94_data.o(.rodata);
|
||||
build/sa2/data/special_stage_unk_806E6E8_data.o(.rodata);
|
||||
build/sa2/data/special_stage_unk_806F910_data.o(.rodata);
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
from io import BufferedReader
|
||||
import os
|
||||
import sys
|
||||
import struct
|
||||
|
||||
start_address = int(sys.argv[1], 16)
|
||||
length = int(sys.argv[2], 16)
|
||||
|
||||
def read_u8(rom: BufferedReader):
|
||||
return struct.unpack('B', rom.read(1))[0]
|
||||
|
||||
def read_s8(rom: BufferedReader):
|
||||
return struct.unpack('b', rom.read(1))[0]
|
||||
|
||||
def read_u16(rom: BufferedReader):
|
||||
return struct.unpack('H', rom.read(2))[0]
|
||||
|
||||
def read_s16(rom: BufferedReader):
|
||||
return struct.unpack('h', rom.read(2))[0]
|
||||
|
||||
def read_u32(rom: BufferedReader):
|
||||
return struct.unpack('I', rom.read(4))[0]
|
||||
|
||||
def format_hex(val):
|
||||
return f"0x{hex(val)[2:].upper()}"
|
||||
|
||||
with open('baserom.gba', 'rb') as rom:
|
||||
rom.seek(start_address)
|
||||
|
||||
new_array = True
|
||||
for i in range(length // 4):
|
||||
addr = read_u32(rom)
|
||||
print(f"sub_{hex(addr - 1).replace('0x', '').upper()},")
|
||||
@@ -0,0 +1,51 @@
|
||||
from io import BufferedReader
|
||||
import os
|
||||
import sys
|
||||
import struct
|
||||
|
||||
start_address = int(sys.argv[1], 16)
|
||||
length = int(sys.argv[2], 16)
|
||||
|
||||
def read_u8(rom: BufferedReader):
|
||||
return struct.unpack('B', rom.read(1))[0]
|
||||
|
||||
def read_s8(rom: BufferedReader):
|
||||
return struct.unpack('b', rom.read(1))[0]
|
||||
|
||||
def read_u16(rom: BufferedReader):
|
||||
return struct.unpack('H', rom.read(2))[0]
|
||||
|
||||
def read_s16(rom: BufferedReader):
|
||||
return struct.unpack('h', rom.read(2))[0]
|
||||
|
||||
def read_u32(rom: BufferedReader):
|
||||
return struct.unpack('I', rom.read(4))[0]
|
||||
|
||||
def format_hex(val):
|
||||
return f"0x{hex(val)[2:].upper()}"
|
||||
|
||||
data_offset = 0x000DF2F8
|
||||
|
||||
with open('baserom.gba', 'rb') as rom:
|
||||
rom.seek(start_address)
|
||||
|
||||
new_array = True
|
||||
for i in range(length // 8):
|
||||
if new_array:
|
||||
print(f"\n/** {i} **/")
|
||||
new_array = False
|
||||
|
||||
print(" { ", end="")
|
||||
|
||||
start = read_u16(rom)
|
||||
print(f"{str(start)}, ", end="")
|
||||
print(f"{str(read_u16(rom))}, ", end="")
|
||||
print(f"{str(read_u16(rom))}, ", end="")
|
||||
print(f"{str(read_u8(rom))}, ", end="")
|
||||
end = read_u8(rom)
|
||||
print(f"{str(end)}, ", end="")
|
||||
|
||||
print("},")
|
||||
|
||||
if start == 0xFFFF:
|
||||
new_array = True
|
||||
+21
-21
@@ -18,9 +18,9 @@
|
||||
void sub_806C970(void);
|
||||
void sub_806C950(struct Task*);
|
||||
|
||||
extern const s16 gUnknown_080DFA02[7];
|
||||
extern const s16 gSpecialStageLevelTimes[7];
|
||||
|
||||
void sub_806BA84(s16 a, s16 b) {
|
||||
void sub_806BA84(s16 selectedCharacter, s16 selectedLevel) {
|
||||
struct Task* t;
|
||||
struct SpecialStage* stage;
|
||||
|
||||
@@ -28,22 +28,22 @@ void sub_806BA84(s16 a, s16 b) {
|
||||
|
||||
m4aMPlayAllStop();
|
||||
|
||||
if (b != -1) {
|
||||
temp = b >> 2;
|
||||
if (selectedLevel != -1) {
|
||||
temp = selectedLevel >> 2;
|
||||
} else {
|
||||
temp = gCurrentLevel >> 2;
|
||||
}
|
||||
level = temp;
|
||||
|
||||
if (a == -1) {
|
||||
if (selectedCharacter == -1) {
|
||||
character = gSelectedCharacter;
|
||||
} else {
|
||||
character = a;
|
||||
character = selectedCharacter;
|
||||
}
|
||||
|
||||
sub_806CEA8();
|
||||
|
||||
t = TaskCreate(sub_806C970, 0x5D8, 0x2000, 0, sub_806C950);
|
||||
t = TaskCreate(sub_806C970, sizeof(struct SpecialStage), 0x2000, 0, sub_806C950);
|
||||
stage = TaskGetStructPtr(t);
|
||||
stage->unk594 = 0x1000000;
|
||||
stage->unk598 = 0x1000000;
|
||||
@@ -51,15 +51,15 @@ void sub_806BA84(s16 a, s16 b) {
|
||||
stage->unk5A0 = 0x200;
|
||||
|
||||
if (character < 5) {
|
||||
stage->unk5B6 = character;
|
||||
stage->character = character;
|
||||
stage->unk5B7 = 0;
|
||||
} else {
|
||||
stage->unk5B6 = 2;
|
||||
stage->character = 2;
|
||||
stage->unk5B7 = 1;
|
||||
}
|
||||
|
||||
stage->unk5B8 = level;
|
||||
stage->unk5B9 = b;
|
||||
stage->level = level;
|
||||
stage->unk5B9 = selectedLevel;
|
||||
stage->unk5A2 = 0;
|
||||
|
||||
stage->unk5BB = 1;
|
||||
@@ -67,8 +67,8 @@ void sub_806BA84(s16 a, s16 b) {
|
||||
stage->unk5BD = 0;
|
||||
stage->unk5BE = 0;
|
||||
|
||||
stage->unk5A4 = 0;
|
||||
stage->unk5A6 = gUnknown_080DFA02[level];
|
||||
stage->elapsedTime = 0;
|
||||
stage->levelTime = gSpecialStageLevelTimes[level];
|
||||
|
||||
stage->unk5B4 = 0;
|
||||
stage->unk5BA = 0;
|
||||
@@ -77,9 +77,9 @@ void sub_806BA84(s16 a, s16 b) {
|
||||
stage->unk5C0 = 0;
|
||||
stage->unk5C1 = 0;
|
||||
|
||||
stage->unk5C2 = Div(stage->unk5A6, 100);
|
||||
stage->unk5C3 = Div(stage->unk5A6, 10) - (stage->unk5C2 * 10);
|
||||
stage->unk5C4 = Mod(stage->unk5A6, 10);
|
||||
stage->unk5C2 = Div(stage->levelTime, 100);
|
||||
stage->unk5C3 = Div(stage->levelTime, 10) - (stage->unk5C2 * 10);
|
||||
stage->unk5C4 = Mod(stage->levelTime, 10);
|
||||
|
||||
stage->unk5C5 = 0;
|
||||
stage->unk5C5 = 0;
|
||||
@@ -355,7 +355,7 @@ void sub_806C158(void) {
|
||||
gBldRegs.bldAlpha = 0;
|
||||
|
||||
stage->unk10 = sub_8070BF0(stage);
|
||||
stage->unk5A8 = stage->unk5A4 * 100;
|
||||
stage->unk5A8 = stage->elapsedTime * 100;
|
||||
|
||||
if (stage->unk5A8 > 0x1863C) {
|
||||
stage->unk5A8 = 0x1863C;
|
||||
@@ -529,7 +529,7 @@ void sub_806C638(void);
|
||||
|
||||
void sub_806C560(void) {
|
||||
struct SpecialStage* stage = TaskGetStructPtr(gCurTask);
|
||||
u8 unk5B6 = stage->unk5B6;
|
||||
u8 unk5B6 = stage->character;
|
||||
u8 something = gLoadedSaveGame->unkC[unk5B6];
|
||||
|
||||
if (stage->unk5C7 == 1) {
|
||||
@@ -540,9 +540,9 @@ void sub_806C560(void) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!GetBit(something, stage->unk5B8)) {
|
||||
if (!GetBit(something, stage->level)) {
|
||||
sub_8070C30(stage);
|
||||
gLoadedSaveGame->unkC[unk5B6] |= 1 << stage->unk5B8;
|
||||
gLoadedSaveGame->unkC[unk5B6] |= 1 << stage->level;
|
||||
stage->unk5A2 = 0x78;
|
||||
} else {
|
||||
stage->unk5A2 = 0xC;
|
||||
@@ -612,7 +612,7 @@ void sub_806C6A4(void) {
|
||||
gUnknown_03005448 = temp5;
|
||||
}
|
||||
|
||||
gLoadedSaveGame->unk374 += stage->unk5A4;
|
||||
gLoadedSaveGame->unk374 += stage->elapsedTime;
|
||||
|
||||
TasksDestroyAll();
|
||||
gUnknown_03002AE4 = gUnknown_0300287C;
|
||||
|
||||
@@ -3472,3 +3472,127 @@ const struct UNK_8C87904 gUnknown_080DF040[] = {
|
||||
{ 0, 928, 592, 32, 32, 0, },
|
||||
ARRAY_END,
|
||||
};
|
||||
|
||||
#define SPRITE_ARRAY_END { 65535, 65535, 65535,}
|
||||
|
||||
const struct UNK_80DF670 gUnknown_080DF2F8[] = {
|
||||
/** 0 **/
|
||||
{ 85, 0, 20, 16, 0, },
|
||||
{ 85, 1, 20, 16, 0, },
|
||||
{ 85, 1, 20, 16, 1, },
|
||||
{ 86, 0, 24, 8, 0, },
|
||||
{ 86, 1, 20, 8, 0, },
|
||||
{ 86, 1, 20, 8, 1, },
|
||||
{ 86, 2, 20, 16, 0, },
|
||||
{ 86, 3, 20, 16, 0, },
|
||||
{ 86, 3, 20, 16, 1, },
|
||||
{ 87, 0, 36, 4, 0, },
|
||||
{ 87, 2, 30, 4, 0, },
|
||||
{ 87, 2, 30, 4, 1, },
|
||||
{ 89, 0, 16, 16, 0, },
|
||||
{ 89, 0, 16, 16, 0, },
|
||||
{ 89, 0, 16, 16, 0, },
|
||||
{ 88, 0, 20, 16, 0, },
|
||||
{ 88, 1, 30, 16, 0, },
|
||||
{ 88, 1, 30, 16, 1, },
|
||||
{ 90, 0, 20, 16, 0, },
|
||||
{ 29, 0, 25, 16, 0, },
|
||||
{ 34, 0, 28, 16, 0, },
|
||||
SPRITE_ARRAY_END,
|
||||
|
||||
/** 22 **/
|
||||
{ 176, 0, 16, 16, 0, },
|
||||
{ 176, 1, 16, 16, 0, },
|
||||
{ 176, 1, 16, 16, 1, },
|
||||
{ 177, 1, 20, 8, 0, },
|
||||
{ 177, 0, 20, 8, 0, },
|
||||
{ 177, 0, 20, 8, 1, },
|
||||
{ 177, 3, 20, 16, 0, },
|
||||
{ 177, 2, 25, 16, 0, },
|
||||
{ 177, 2, 25, 16, 1, },
|
||||
{ 178, 0, 30, 4, 0, },
|
||||
{ 178, 2, 25, 4, 0, },
|
||||
{ 178, 2, 25, 4, 1, },
|
||||
{ 180, 0, 16, 16, 0, },
|
||||
{ 180, 0, 16, 16, 0, },
|
||||
{ 180, 0, 16, 16, 0, },
|
||||
{ 179, 0, 24, 16, 0, },
|
||||
{ 179, 1, 24, 16, 0, },
|
||||
{ 179, 1, 24, 16, 1, },
|
||||
{ 181, 0, 16, 16, 0, },
|
||||
{ 120, 0, 24, 16, 0, },
|
||||
{ 125, 0, 25, 16, 0, },
|
||||
SPRITE_ARRAY_END,
|
||||
|
||||
/** 44 **/
|
||||
{ 267, 0, 16, 16, 0, },
|
||||
{ 267, 1, 16, 16, 0, },
|
||||
{ 267, 1, 16, 16, 1, },
|
||||
{ 268, 0, 20, 8, 0, },
|
||||
{ 268, 1, 25, 8, 0, },
|
||||
{ 268, 1, 25, 8, 1, },
|
||||
{ 268, 2, 16, 16, 0, },
|
||||
{ 268, 3, 20, 16, 0, },
|
||||
{ 268, 3, 20, 16, 1, },
|
||||
{ 269, 0, 36, 4, 0, },
|
||||
{ 269, 2, 25, 4, 0, },
|
||||
{ 269, 2, 25, 4, 1, },
|
||||
{ 271, 0, 16, 16, 0, },
|
||||
{ 271, 0, 16, 16, 0, },
|
||||
{ 271, 0, 16, 16, 0, },
|
||||
{ 270, 0, 20, 16, 0, },
|
||||
{ 270, 1, 30, 16, 0, },
|
||||
{ 270, 1, 30, 16, 1, },
|
||||
{ 272, 0, 20, 16, 0, },
|
||||
{ 211, 0, 25, 16, 0, },
|
||||
{ 216, 0, 30, 16, 0, },
|
||||
SPRITE_ARRAY_END,
|
||||
|
||||
/** 66 **/
|
||||
{ 358, 0, 20, 16, 0, },
|
||||
{ 358, 1, 20, 16, 0, },
|
||||
{ 358, 1, 20, 16, 1, },
|
||||
{ 359, 0, 20, 8, 0, },
|
||||
{ 359, 1, 20, 8, 0, },
|
||||
{ 359, 1, 20, 8, 1, },
|
||||
{ 359, 2, 30, 16, 0, },
|
||||
{ 359, 3, 25, 16, 0, },
|
||||
{ 359, 3, 25, 16, 1, },
|
||||
{ 360, 0, 36, 4, 0, },
|
||||
{ 360, 2, 30, 4, 0, },
|
||||
{ 360, 2, 30, 4, 1, },
|
||||
{ 362, 0, 16, 16, 0, },
|
||||
{ 362, 0, 16, 16, 0, },
|
||||
{ 362, 0, 16, 16, 0, },
|
||||
{ 361, 0, 20, 16, 0, },
|
||||
{ 361, 1, 30, 16, 0, },
|
||||
{ 361, 1, 30, 16, 1, },
|
||||
{ 363, 0, 20, 16, 0, },
|
||||
{ 302, 0, 36, 16, 0, },
|
||||
{ 307, 0, 36, 16, 0, },
|
||||
SPRITE_ARRAY_END,
|
||||
|
||||
/** 88 **/
|
||||
{ 449, 0, 20, 16, 0, },
|
||||
{ 449, 1, 20, 16, 0, },
|
||||
{ 449, 1, 20, 16, 1, },
|
||||
{ 450, 0, 25, 8, 0, },
|
||||
{ 450, 1, 20, 8, 0, },
|
||||
{ 450, 1, 20, 8, 1, },
|
||||
{ 450, 2, 16, 16, 0, },
|
||||
{ 450, 3, 20, 16, 0, },
|
||||
{ 450, 3, 20, 16, 1, },
|
||||
{ 451, 0, 36, 4, 0, },
|
||||
{ 451, 2, 25, 4, 0, },
|
||||
{ 451, 2, 25, 4, 1, },
|
||||
{ 453, 0, 16, 16, 0, },
|
||||
{ 453, 0, 16, 16, 0, },
|
||||
{ 453, 0, 16, 16, 0, },
|
||||
{ 452, 0, 24, 16, 0, },
|
||||
{ 452, 1, 25, 16, 0, },
|
||||
{ 452, 1, 25, 16, 1, },
|
||||
{ 454, 0, 20, 16, 0, },
|
||||
{ 393, 0, 30, 16, 0, },
|
||||
{ 398, 0, 20, 16, 0, },
|
||||
SPRITE_ARRAY_END,
|
||||
};
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "special_stage_gamma.h"
|
||||
#include "special_stage_unk_806F910.h"
|
||||
#include "special_stage_unk_806BD94.h"
|
||||
#include "special_stage_data.h"
|
||||
#include "trig.h"
|
||||
#include "m4a.h"
|
||||
#include "constants/songs.h"
|
||||
@@ -19,7 +20,7 @@ void sub_8071380(struct UNK_0808B3FC_UNK240* element, void* vram, s16 a1, s16 a,
|
||||
void sub_8071530(struct UNK_0808B3FC_UNK240* element, s16 a1, s16 a, u8 b, const struct UNK_80DF670* c4);
|
||||
|
||||
void sub_8070EFC(struct SpecialStageGamma* gamma) {
|
||||
u8 level = gamma->stage->unk5B8;
|
||||
u8 level = gamma->stage->level;
|
||||
const struct UNK_80DF670* unkF914 = &gUnknown_080DF914[0];
|
||||
s16 result = sub_806CF44(unkF914);
|
||||
void* vramOld = gUnknown_03005B5C;
|
||||
@@ -191,7 +192,7 @@ void sub_807120C(struct SpecialStageGamma* gamma) {
|
||||
sub_806F944(stage);
|
||||
player->unkB4 = 10;
|
||||
m4aSongNumStart(SE_275);
|
||||
} else if (stage->unk5A4 == 0) {
|
||||
} else if (stage->elapsedTime == 0) {
|
||||
if (player->unkB6 == 0) {
|
||||
player->unkB8 = player->unkFC;
|
||||
player->unkB4 = 0xE;
|
||||
|
||||
+177
-124
@@ -2,17 +2,78 @@
|
||||
#include "special_stage.h"
|
||||
#include "special_stage_player.h"
|
||||
#include "special_stage_utils.h"
|
||||
#include "special_stage_gamma.h"
|
||||
#include "special_stage_data.h"
|
||||
#include "player.h"
|
||||
|
||||
|
||||
void sub_806D788(void);
|
||||
void sub_806D2C8(void);
|
||||
void sub_806D548(struct UNK_0808B3FC_UNK240* element, void*, s16, u8, const struct UNK_80DF670*);
|
||||
void sub_806D7D0(struct UNK_0808B3FC_UNK240* element, s16, s16, const struct UNK_80DF670*);
|
||||
void sub_806D830(struct UNK_0808B3FC_UNK240* element, s16, s16, const struct UNK_80DF670*);
|
||||
|
||||
|
||||
void sub_806D5CC(void);
|
||||
void sub_806D388(void);
|
||||
void sub_806D424(void);
|
||||
void sub_806D484(void);
|
||||
void sub_806D4E4(void);
|
||||
void sub_806D5D0(void);
|
||||
void sub_806D5D0(void);
|
||||
void sub_806D634(void);
|
||||
void sub_806D698(void);
|
||||
void sub_806D388(void);
|
||||
void sub_806D5D0(void);
|
||||
void sub_806D5D0(void);
|
||||
void sub_806D5D0(void);
|
||||
void sub_806D4E4(void);
|
||||
void sub_806D388(void);
|
||||
void sub_806D6DC(void);
|
||||
void sub_806D5CC(void);
|
||||
void sub_806D740(void);
|
||||
|
||||
static const struct UNK_80DF670 gUnknown_080DF668 = {
|
||||
.unk0 = 884,
|
||||
.unk2 = 0,
|
||||
.unk4 = 2,
|
||||
.unk6 = 16,
|
||||
.unk7 = 0,
|
||||
};
|
||||
|
||||
// character sprites
|
||||
extern const struct UNK_80DF670* const gUnknown_080DF670[5];
|
||||
static const struct UNK_80DF670* const gUnknown_080DF670[5] = {
|
||||
[CHARACTER_SONIC] = &gUnknown_080DF2F8[0],
|
||||
[CHARACTER_CREAM] = &gUnknown_080DF2F8[22],
|
||||
[CHARACTER_TAILS] = &gUnknown_080DF2F8[44],
|
||||
[CHARACTER_KNUCKLES] = &gUnknown_080DF2F8[66],
|
||||
[CHARACTER_AMY] = &gUnknown_080DF2F8[88],
|
||||
};
|
||||
|
||||
extern const s16 gUnknown_080DF9D8[7][3];
|
||||
typedef void (*PlayerStateHandler)(void);
|
||||
|
||||
extern const struct UNK_80DF670 gUnknown_080DF668;
|
||||
// state handlers
|
||||
static PlayerStateHandler const gUnknown_080DF684[] = {
|
||||
sub_806D5CC,
|
||||
sub_806D388,
|
||||
sub_806D424,
|
||||
sub_806D484,
|
||||
sub_806D4E4,
|
||||
sub_806D5D0,
|
||||
sub_806D5D0,
|
||||
sub_806D634,
|
||||
sub_806D698,
|
||||
sub_806D388,
|
||||
sub_806D5D0,
|
||||
sub_806D5D0,
|
||||
sub_806D5D0,
|
||||
sub_806D4E4,
|
||||
sub_806D388,
|
||||
sub_806D6DC,
|
||||
sub_806D5CC,
|
||||
sub_806D740,
|
||||
};
|
||||
|
||||
void sub_806D2C8(void);
|
||||
|
||||
void sub_806D548(struct UNK_0808B3FC_UNK240* element, void*, s16, u8, const struct UNK_80DF670*);
|
||||
struct Task* CreatePlayer(struct SpecialStage* stage) {
|
||||
const struct UNK_80DF670* unkF670[5];
|
||||
u8 lang;
|
||||
@@ -22,46 +83,46 @@ struct Task* CreatePlayer(struct SpecialStage* stage) {
|
||||
u32 temp;
|
||||
|
||||
struct Task* t;
|
||||
struct SpecialStagePlayer* unkCF78;
|
||||
struct SpecialStagePlayer* player;
|
||||
|
||||
memcpy(&unkF670, &gUnknown_080DF670, 0x14);
|
||||
lang = stage->unk5B8;
|
||||
lang = stage->level;
|
||||
|
||||
t = TaskCreate(sub_806D2C8, 0x108, 0x9000, 0, NULL);
|
||||
unkCF78 = TaskGetStructPtr(t);
|
||||
unkCF78->unk0 = stage;
|
||||
unkCF78->unk4 = NULL;
|
||||
unkCF78->x = gUnknown_080DF9D8[lang][0] << 0x10;
|
||||
unkCF78->y = gUnknown_080DF9D8[lang][1] << 0x10;
|
||||
player = TaskGetStructPtr(t);
|
||||
player->unk0 = stage;
|
||||
player->unk4 = NULL;
|
||||
player->x = gUnknown_080DF9D8[lang][0] << 0x10;
|
||||
player->y = gUnknown_080DF9D8[lang][1] << 0x10;
|
||||
|
||||
unkCF78->unkB0 = 0;
|
||||
unkCF78->unkB2 = gUnknown_080DF9D8[lang][2];
|
||||
unkCF78->unkB4 = 0;
|
||||
unkCF78->unkB6 = 0x96;
|
||||
unkCF78->unkBC = 0;
|
||||
unkCF78->unkBE = 0;
|
||||
unkCF78->unkC0 = 1;
|
||||
player->unkB0 = 0;
|
||||
player->unkB2 = gUnknown_080DF9D8[lang][2];
|
||||
player->unkB4 = 0;
|
||||
player->unkB6 = 0x96;
|
||||
player->unkBC = 0;
|
||||
player->unkBE = 0;
|
||||
player->unkC0 = 1;
|
||||
|
||||
unkCF78->unkC4 = unkF670[stage->unk5B6];
|
||||
result = sub_806CF44(unkCF78->unkC4);
|
||||
unkCF78->unk98 = gUnknown_03005B5C;
|
||||
player->unkC4 = unkF670[stage->character];
|
||||
result = sub_806CF44(player->unkC4);
|
||||
player->unk98 = gUnknown_03005B5C;
|
||||
gUnknown_03005B5C += (result * TILE_SIZE_4BPP);
|
||||
unkCF78->unk9C = gUnknown_03005B5C;
|
||||
unkCF78->unkA0 = gUnknown_03005B5C + 0x40;
|
||||
player->unk9C = gUnknown_03005B5C;
|
||||
player->unkA0 = gUnknown_03005B5C + 0x40;
|
||||
|
||||
// required for match
|
||||
temp = 2;
|
||||
|
||||
gUnknown_03005B5C += 0xC0;
|
||||
|
||||
sub_806D548(&unkCF78->unk8, unkCF78->unk98, stage->unk5CC, 9, unkCF78->unkC4);
|
||||
sub_806D548(&unkCF78->unk38, unkCF78->unk9C, stage->unk5CC, 10, &gUnknown_080DF668);
|
||||
sub_806D548(&player->unk8, player->unk98, stage->unk5CC, 9, player->unkC4);
|
||||
sub_806D548(&player->unk38, player->unk9C, stage->unk5CC, 10, &gUnknown_080DF668);
|
||||
|
||||
{
|
||||
struct UNK_0808B3FC_UNK240* element = &unkCF78->unk68;
|
||||
struct UNK_0808B3FC_UNK240* element = &player->unk68;
|
||||
u16* affine = &gOamBuffer[120].all.affineParam;
|
||||
|
||||
element->unk4 = unkCF78->unkA0;
|
||||
element->unk4 = player->unkA0;
|
||||
element->unk8 = 0;
|
||||
element->unkA = 0x37A;
|
||||
element->unk10 = 0x107E;
|
||||
@@ -91,88 +152,80 @@ struct Task* CreatePlayer(struct SpecialStage* stage) {
|
||||
}
|
||||
|
||||
if (stage->unk5B7 == 0) {
|
||||
unkCF78->unkC8 = 0;
|
||||
unkCF78->unkCC = 6;
|
||||
unkCF78->unkD0 = 0x10000;
|
||||
unkCF78->unkD4 = 0x10000;
|
||||
unkCF78->unkD8 = 0x28;
|
||||
unkCF78->unkDC = -0x2B;
|
||||
unkCF78->unkE0 = -0x15E;
|
||||
unkCF78->unkE4 = 0x2C80;
|
||||
unkCF78->unkE8 = 0x3F80;
|
||||
unkCF78->unkEC = 0x502;
|
||||
unkCF78->unkEE = 0x8C0;
|
||||
unkCF78->unkF0 = 0x14;
|
||||
unkCF78->unkF2 = -0x28;
|
||||
unkCF78->unkF4 = -0x36;
|
||||
unkCF78->unkF6 = -0x48;
|
||||
unkCF78->unk100 = -0x10;
|
||||
unkCF78->unk104 = -8;
|
||||
unkCF78->unkF8 = 0x800;
|
||||
unkCF78->unkFA = -0x80;
|
||||
unkCF78->unkFC = 0x600;
|
||||
unkCF78->unkFE = -0x40;
|
||||
player->unkC8 = 0;
|
||||
player->unkCC = 6;
|
||||
player->unkD0 = 0x10000;
|
||||
player->unkD4 = 0x10000;
|
||||
player->unkD8 = 0x28;
|
||||
player->unkDC = -0x2B;
|
||||
player->unkE0 = -0x15E;
|
||||
player->unkE4 = 0x2C80;
|
||||
player->unkE8 = 0x3F80;
|
||||
player->unkEC = 0x502;
|
||||
player->unkEE = 0x8C0;
|
||||
player->unkF0 = 0x14;
|
||||
player->unkF2 = -0x28;
|
||||
player->unkF4 = -0x36;
|
||||
player->unkF6 = -0x48;
|
||||
player->unk100 = -0x10;
|
||||
player->unk104 = -8;
|
||||
player->unkF8 = 0x800;
|
||||
player->unkFA = -0x80;
|
||||
player->unkFC = 0x600;
|
||||
player->unkFE = -0x40;
|
||||
} else {
|
||||
unkCF78->unkC8 = 0;
|
||||
unkCF78->unkCC = 0;
|
||||
unkCF78->unkD0 = 0xC00;
|
||||
unkCF78->unkD4 = 0x7FFF;
|
||||
unkCF78->unkD8 = 0x100;
|
||||
unkCF78->unkDC = 0x800;
|
||||
player->unkC8 = 0;
|
||||
player->unkCC = 0;
|
||||
player->unkD0 = 0xC00;
|
||||
player->unkD4 = 0x7FFF;
|
||||
player->unkD8 = 0x100;
|
||||
player->unkDC = 0x800;
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
typedef void (*TaskFunc_80DF684)(void);
|
||||
|
||||
extern TaskFunc_80DF684 const gUnknown_080DF684[18];
|
||||
|
||||
void sub_806D788(void);
|
||||
|
||||
void sub_806D2C8(void) {
|
||||
TaskFunc_80DF684 funcs[18];
|
||||
PlayerStateHandler stateHandlers[18];
|
||||
struct UNK_0808B3FC_UNK240 *unk8, *unk38;
|
||||
|
||||
struct SpecialStagePlayer* unkCF78 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkCF78->unk0;
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = player->unk0;
|
||||
|
||||
memcpy(funcs, gUnknown_080DF684, sizeof(gUnknown_080DF684));
|
||||
memcpy(stateHandlers, gUnknown_080DF684, sizeof(gUnknown_080DF684));
|
||||
|
||||
if (stage->unk5BA == 0) {
|
||||
funcs[unkCF78->unkB4 + 1]();
|
||||
stateHandlers[player->unkB4 + 1]();
|
||||
sub_806D788();
|
||||
} else {
|
||||
funcs[0]();
|
||||
stateHandlers[0]();
|
||||
}
|
||||
|
||||
unk8 = &unkCF78->unk8;
|
||||
unk38 = &unkCF78->unk38;
|
||||
unk8 = &player->unk8;
|
||||
unk38 = &player->unk38;
|
||||
|
||||
if (unkCF78->unkB6 != 0 && stage->unk5BA == 0) {
|
||||
if ((--unkCF78->unkB6) & 2) {
|
||||
if (player->unkB6 != 0 && stage->unk5BA == 0) {
|
||||
if ((--player->unkB6) & 2) {
|
||||
sub_80051E8(unk8);
|
||||
if (unkCF78->unkB4 < 0xE) {
|
||||
if (player->unkB4 < 14) {
|
||||
sub_80051E8(unk38);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
sub_80051E8(unk8);
|
||||
if (unkCF78->unkB4 < 0xE) {
|
||||
if (player->unkB4 < 14) {
|
||||
sub_80051E8(unk38);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_806D7D0(struct UNK_0808B3FC_UNK240* element, s16, s16, const struct UNK_80DF670*);
|
||||
void sub_806D830(struct UNK_0808B3FC_UNK240* element, s16, s16, const struct UNK_80DF670*);
|
||||
|
||||
// Animations for different player speeds
|
||||
|
||||
// Stopped?
|
||||
void sub_806D388(void) {
|
||||
struct SpecialStagePlayer* unkCF78 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkCF78->unk0;
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = player->unk0;
|
||||
const struct UNK_80DF670* unkC4;
|
||||
struct UNK_0808B3FC_UNK240* unk8;
|
||||
u32 index = 0;
|
||||
@@ -185,8 +238,8 @@ void sub_806D388(void) {
|
||||
}
|
||||
}
|
||||
|
||||
unkC4 = &unkCF78->unkC4[index];
|
||||
unk8 = &unkCF78->unk8;
|
||||
unkC4 = &player->unkC4[index];
|
||||
unk8 = &player->unk8;
|
||||
|
||||
sub_806D7D0(unk8, -1, stage->unk5CC, unkC4);
|
||||
|
||||
@@ -198,8 +251,8 @@ void sub_806D388(void) {
|
||||
|
||||
// Moving?
|
||||
void sub_806D424(void) {
|
||||
struct SpecialStagePlayer* unkCF78 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkCF78->unk0;
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = player->unk0;
|
||||
|
||||
const struct UNK_80DF670* unkC4;
|
||||
struct UNK_0808B3FC_UNK240* unk8;
|
||||
@@ -211,15 +264,15 @@ void sub_806D424(void) {
|
||||
index = 5;
|
||||
}
|
||||
|
||||
unkC4 = &unkCF78->unkC4[index];
|
||||
unk8 = &unkCF78->unk8;
|
||||
sub_806D7D0(unk8, unkCF78->unkA4, stage->unk5CC, unkC4);
|
||||
unkC4 = &player->unkC4[index];
|
||||
unk8 = &player->unk8;
|
||||
sub_806D7D0(unk8, player->unkA4, stage->unk5CC, unkC4);
|
||||
}
|
||||
|
||||
// Running?
|
||||
void sub_806D484(void) {
|
||||
struct SpecialStagePlayer* unkCF78 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkCF78->unk0;
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = player->unk0;
|
||||
|
||||
const struct UNK_80DF670* unkC4;
|
||||
struct UNK_0808B3FC_UNK240* unk8;
|
||||
@@ -231,15 +284,15 @@ void sub_806D484(void) {
|
||||
index = 8;
|
||||
}
|
||||
|
||||
unkC4 = &unkCF78->unkC4[index];
|
||||
unk8 = &unkCF78->unk8;
|
||||
sub_806D7D0(unk8, unkCF78->unkA4, stage->unk5CC, unkC4);
|
||||
unkC4 = &player->unkC4[index];
|
||||
unk8 = &player->unk8;
|
||||
sub_806D7D0(unk8, player->unkA4, stage->unk5CC, unkC4);
|
||||
}
|
||||
|
||||
// Sprinting?
|
||||
void sub_806D4E4(void) {
|
||||
struct SpecialStagePlayer* unkCF78 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkCF78->unk0;
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = player->unk0;
|
||||
|
||||
const struct UNK_80DF670* unkC4;
|
||||
struct UNK_0808B3FC_UNK240* unk8;
|
||||
@@ -251,9 +304,9 @@ void sub_806D4E4(void) {
|
||||
index = 11;
|
||||
}
|
||||
|
||||
unkC4 = &unkCF78->unkC4[index];
|
||||
unk8 = &unkCF78->unk8;
|
||||
sub_806D7D0(unk8, unkCF78->unkA4 >> 1, stage->unk5CC, unkC4);
|
||||
unkC4 = &player->unkC4[index];
|
||||
unk8 = &player->unk8;
|
||||
sub_806D7D0(unk8, player->unkA4 >> 1, stage->unk5CC, unkC4);
|
||||
}
|
||||
|
||||
void sub_806D548(struct UNK_0808B3FC_UNK240* element, void* vram, s16 a, u8 b, const struct UNK_80DF670* c4) {
|
||||
@@ -283,65 +336,65 @@ void sub_806D548(struct UNK_0808B3FC_UNK240* element, void* vram, s16 a, u8 b, c
|
||||
sub_8004558(element);
|
||||
}
|
||||
|
||||
UNUSED static void sub_806D5CC(void) {}
|
||||
UNUSED void sub_806D5CC(void) {}
|
||||
|
||||
#define Macro_806D4E(val, val2) ({\
|
||||
((val) >> 4) + (val2); \
|
||||
})\
|
||||
|
||||
void sub_806D5D0(void) {
|
||||
struct SpecialStagePlayer* unkCF78 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkCF78->unk0;
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = player->unk0;
|
||||
|
||||
const struct UNK_80DF670* unkC4 = &unkCF78->unkC4[12];
|
||||
unkCF78->unkB0 += unkCF78->unkB8 >> 4;
|
||||
const struct UNK_80DF670* unkC4 = &player->unkC4[12];
|
||||
player->unkB0 += player->unkB8 >> 4;
|
||||
|
||||
sub_806D7D0(&unkCF78->unk8, -1, stage->unk5CC - Macro_806D4E(unkCF78->unkB0, 0xF), unkC4);
|
||||
sub_806D7D0(&player->unk8, -1, stage->unk5CC - Macro_806D4E(player->unkB0, 0xF), unkC4);
|
||||
}
|
||||
|
||||
void sub_806D634(void) {
|
||||
struct SpecialStagePlayer* unkCF78 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkCF78->unk0;
|
||||
const struct UNK_80DF670* unkC4 = &unkCF78->unkC4[15];
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = player->unk0;
|
||||
const struct UNK_80DF670* unkC4 = &player->unkC4[15];
|
||||
|
||||
unkCF78->unkB0 += unkCF78->unkB8 >> 4;
|
||||
player->unkB0 += player->unkB8 >> 4;
|
||||
|
||||
sub_806D7D0(&unkCF78->unk8, -1, stage->unk5CC - Macro_806D4E(unkCF78->unkB0, 10), unkC4);
|
||||
sub_806D7D0(&player->unk8, -1, stage->unk5CC - Macro_806D4E(player->unkB0, 10), unkC4);
|
||||
}
|
||||
|
||||
void sub_806D698(void) {
|
||||
struct SpecialStagePlayer* unkCF78 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkCF78->unk0;
|
||||
const struct UNK_80DF670* unkC4 = &unkCF78->unkC4[18];
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = player->unk0;
|
||||
const struct UNK_80DF670* unkC4 = &player->unkC4[18];
|
||||
|
||||
sub_806D7D0(&unkCF78->unk8, -1, stage->unk5CC, unkC4);
|
||||
sub_806D7D0(&player->unk8, -1, stage->unk5CC, unkC4);
|
||||
}
|
||||
|
||||
void sub_806D6DC(void) {
|
||||
struct SpecialStagePlayer* unkCF78 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkCF78->unk0;
|
||||
const struct UNK_80DF670* unkC4 = &unkCF78->unkC4[19];
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = player->unk0;
|
||||
const struct UNK_80DF670* unkC4 = &player->unkC4[19];
|
||||
|
||||
unkCF78->unkB0 += unkCF78->unkB8 >> 4;
|
||||
player->unkB0 += player->unkB8 >> 4;
|
||||
|
||||
sub_806D7D0(&unkCF78->unk8, -1, stage->unk5CC - Macro_806D4E(unkCF78->unkB0, 10), unkC4);
|
||||
sub_806D7D0(&player->unk8, -1, stage->unk5CC - Macro_806D4E(player->unkB0, 10), unkC4);
|
||||
}
|
||||
|
||||
void sub_806D740(void) {
|
||||
struct SpecialStagePlayer* unkCF78 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkCF78->unk0;
|
||||
const struct UNK_80DF670* unkC4 = &unkCF78->unkC4[20];
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = player->unk0;
|
||||
const struct UNK_80DF670* unkC4 = &player->unkC4[20];
|
||||
|
||||
sub_806D7D0(&unkCF78->unk8, -1, stage->unk5CC - 0xC, unkC4);
|
||||
sub_806D7D0(&player->unk8, -1, stage->unk5CC - 0xC, unkC4);
|
||||
}
|
||||
|
||||
void sub_806D788(void) {
|
||||
struct SpecialStagePlayer* unkCF78 = TaskGetStructPtr(gCurTask);
|
||||
if (unkCF78->unkBC != 0) {
|
||||
s32 temp = --unkCF78->unkBC;
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(gCurTask);
|
||||
if (player->unkBC != 0) {
|
||||
s32 temp = --player->unkBC;
|
||||
if (temp == 0) {
|
||||
unkCF78->unkBE = temp;
|
||||
unkCF78->unkC0 = 1;
|
||||
player->unkBE = temp;
|
||||
player->unkC0 = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "special_stage_player.h"
|
||||
#include "special_stage_ui.h"
|
||||
#include "special_stage_utils.h"
|
||||
#include "special_stage_data.h"
|
||||
#include "m4a.h"
|
||||
#include "save.h"
|
||||
#include "constants/songs.h"
|
||||
@@ -226,7 +227,7 @@ void sub_8070078(void) {
|
||||
sub_8004558(element);
|
||||
|
||||
if (stage->unk5C5 == 0) {
|
||||
if (stage->unk5A4 >= stage->unk5A6) {
|
||||
if (stage->elapsedTime >= stage->levelTime) {
|
||||
stage->unk5C5 = 1;
|
||||
m4aSongNumStart(MUS_ACHIEVEMENT);
|
||||
stage->unk5C7 = 1;
|
||||
@@ -240,7 +241,7 @@ void sub_8070078(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (stage->unk5A4 < stage->unk5A6) {
|
||||
if (stage->elapsedTime < stage->levelTime) {
|
||||
stage->unk5C5 = 0;
|
||||
|
||||
element = &unk0B90->unk154;
|
||||
@@ -289,8 +290,8 @@ void sub_807028C(struct UNK_8070BF0* unk0BF0) {
|
||||
s32 temp1;
|
||||
s16 temp3;
|
||||
|
||||
u8 val = gLoadedSaveGame->unkC[stage->unk5B6];
|
||||
u8 unk5B6 = stage->unk5B6;
|
||||
u8 val = gLoadedSaveGame->unkC[stage->character];
|
||||
u8 unk5B6 = stage->character;
|
||||
|
||||
gUnknown_03005B5C = stage->unk5D4;
|
||||
gUnknown_03005B58 = 0;
|
||||
@@ -479,7 +480,7 @@ void sub_8070EE4(void);
|
||||
void sub_8070814(void) {
|
||||
struct UNK_8070BF0* unk0BF0 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unk0BF0->stage;
|
||||
u8 level = stage->unk5B8;
|
||||
u8 level = stage->level;
|
||||
sub_807087C();
|
||||
|
||||
unk0BF0->unk514++;
|
||||
@@ -727,7 +728,7 @@ void sub_8070E68(struct UNK_8070B90* unk0B90) {
|
||||
void sub_8070E88(void) {
|
||||
struct UNK_8070BF0* unk0BF0 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unk0BF0->stage;
|
||||
struct UNK_0808B3FC_UNK240* element = &unk0BF0->unk64[stage->unk5B8];
|
||||
struct UNK_0808B3FC_UNK240* element = &unk0BF0->unk64[stage->level];
|
||||
|
||||
element->unkA = gUnknown_080DF8A8[8].unk0;
|
||||
element->unk20 = gUnknown_080DF8A8[8].unk2;
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
|
||||
void sub_806D890(struct SpecialStage* stage, s16 num) {
|
||||
s16 i;
|
||||
stage->unk5A4 += num;
|
||||
stage->elapsedTime += num;
|
||||
|
||||
if (stage->unk5A4 > 999) {
|
||||
stage->unk5A4 = 999;
|
||||
if (stage->elapsedTime > 999) {
|
||||
stage->elapsedTime = 999;
|
||||
}
|
||||
|
||||
for (i = 0; i < num; i++) {
|
||||
@@ -48,9 +48,9 @@ void sub_806D924(struct SpecialStage* stage, s16 num) {
|
||||
s16 i;
|
||||
sub_806E3B8(stage, -1);
|
||||
|
||||
stage->unk5A4 -= num;
|
||||
if (stage->unk5A4 < 0) {
|
||||
stage->unk5A4 = 0;
|
||||
stage->elapsedTime -= num;
|
||||
if (stage->elapsedTime < 0) {
|
||||
stage->elapsedTime = 0;
|
||||
}
|
||||
|
||||
for (i = num; i > 0; i--) {
|
||||
@@ -147,7 +147,7 @@ void sub_806DB48(void) {
|
||||
void sub_806DC98(void) {
|
||||
struct UNK_806BD94* unkBD94 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkBD94->stage;
|
||||
const struct UNK_8C878E8** unk78E8_vals = gUnknown_08C878E8[stage->unk5B8];
|
||||
const struct UNK_8C878E8** unk78E8_vals = gUnknown_08C878E8[stage->level];
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(stage->playerTask);
|
||||
|
||||
s32 val1 = player->x >> 0x10;
|
||||
@@ -204,7 +204,7 @@ bool16 sub_806DE10(void) {
|
||||
result = FALSE;
|
||||
memcpy(unkF6CC, gUnknown_080DF6CC, 0xE);
|
||||
|
||||
val = unkF6CC[stage->unk5B8];
|
||||
val = unkF6CC[stage->level];
|
||||
for (i = 0; i < val; i++) {
|
||||
if (unkBD94->unk914[i] > 2) {
|
||||
unkBD94->unk914[i]++;
|
||||
@@ -250,7 +250,7 @@ void sub_806DEA4(void) {
|
||||
struct UNK_806BD94* unkBD94 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkBD94->stage;
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(stage->playerTask);
|
||||
const struct UNK_8C878E8** unk78E8_vals = gUnknown_08C878E8[stage->unk5B8];
|
||||
const struct UNK_8C878E8** unk78E8_vals = gUnknown_08C878E8[stage->level];
|
||||
const struct UNK_8C878E8** unk78E8;
|
||||
const struct UNK_8C878E8* unk78E8_val = NULL;
|
||||
|
||||
@@ -440,7 +440,7 @@ void sub_806E3B8(struct SpecialStage* stage, s16 mode) {
|
||||
s16 temp;
|
||||
|
||||
if (mode == -1) {
|
||||
temp = stage->unk5A4 > 8 ? 8 : stage->unk5A4;
|
||||
temp = stage->elapsedTime > 8 ? 8 : stage->elapsedTime;
|
||||
} else {
|
||||
temp = mode;
|
||||
}
|
||||
@@ -556,7 +556,7 @@ struct Task* sub_806E684(struct SpecialStage* stage) {
|
||||
t = TaskCreate(sub_806D9B4, 0xA5C, 0xB000, 0, NULL);
|
||||
unkBD94 = TaskGetStructPtr(t);
|
||||
unkBD94->stage = stage;
|
||||
unkBD94->unkA58 = unkF6CC[stage->unk5B8];
|
||||
unkBD94->unkA58 = unkF6CC[stage->level];
|
||||
unkBD94->unkA5A = 0;
|
||||
|
||||
return t;
|
||||
|
||||
@@ -36,8 +36,8 @@ struct Task* sub_806E6E8(struct SpecialStage* stage) {
|
||||
unkE6E8->unk8 = NULL;
|
||||
unkE6E8->unkC = NULL;
|
||||
|
||||
sub_806CEC4(&unkE6E8->unk10, 1, 0x10, unkF776[stage->unk5B8], 0x80, 0x80, 0, 2, 0, 0);
|
||||
sub_806CEC4(&unkE6E8->unk50, 0, 7, unkF768[stage->unk5B8], 0x20, 0x20, 0, 1, 0, 0);
|
||||
sub_806CEC4(&unkE6E8->unk10, 1, 0x10, unkF776[stage->level], 0x80, 0x80, 0, 2, 0, 0);
|
||||
sub_806CEC4(&unkE6E8->unk50, 0, 7, unkF768[stage->level], 0x20, 0x20, 0, 1, 0, 0);
|
||||
|
||||
sub_806E7C0(unkE6E8);
|
||||
|
||||
@@ -117,7 +117,7 @@ extern const struct UNK_8C87920* const gUnknown_08C87920[7];
|
||||
void sub_806E94C(struct UNK_806E6E8* unkE6E8) {
|
||||
s16 i;
|
||||
// Maybe some macro? Who knows...
|
||||
u8* level = &unkE6E8->stage->unk5B8;
|
||||
u8* level = &unkE6E8->stage->level;
|
||||
const struct UNK_8C87920* assets = gUnknown_08C87920[*level];
|
||||
s16 num = gUnknown_080DF6DC[*level];
|
||||
|
||||
@@ -197,7 +197,7 @@ void sub_806EB74(void) {
|
||||
s16 i;
|
||||
struct UNK_806E6E8* unkE6E8 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkE6E8->stage;
|
||||
u8* level = &stage->unk5B8;
|
||||
u8* level = &stage->level;
|
||||
s16 num = gUnknown_080DF6DC[*level];
|
||||
// Huh?
|
||||
u8 *temp = (u8*)&stage->unk5A0;
|
||||
|
||||
@@ -387,7 +387,7 @@ void sub_806F468(void) {
|
||||
struct UNK_806F910* unkF910 = TaskGetStructPtr(gCurTask);
|
||||
struct SpecialStage* stage = unkF910->stage;
|
||||
struct SpecialStagePlayer* player = TaskGetStructPtr(stage->playerTask);
|
||||
const struct UNK_8C87904* unk7904 = gUnknown_08C87904[stage->unk5B8];
|
||||
const struct UNK_8C87904* unk7904 = gUnknown_08C87904[stage->level];
|
||||
|
||||
s16 playerX = player->x >> 0x10;
|
||||
s16 playerY = player->y >> 0x10;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "special_stage.h"
|
||||
#include "special_stage_unk_806E6E8.h"
|
||||
#include "special_stage_utils.h"
|
||||
#include "special_stage_data.h"
|
||||
#include "sprite.h"
|
||||
#include "trig.h"
|
||||
|
||||
|
||||
Reference in new issue
Block a user