mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 18:02:16 +00:00
document multiplayer_mode_select
This commit is contained in:
1 parent
d90914a07a
commit
db5847517d
10 files changed
+282
-200
No files matched your search
+2
-2
@@ -602,7 +602,7 @@ _0805B268:
|
||||
strb r0, [r1, #2]
|
||||
movs r0, #0x20
|
||||
strb r0, [r1, #3]
|
||||
bl sub_805A1CC
|
||||
bl CreateMultiplayerModeSelectScreen
|
||||
ldr r0, _0805B2AC @ =gCurTask
|
||||
ldr r0, [r0]
|
||||
bl TaskDestroy
|
||||
@@ -848,7 +848,7 @@ sub_805B454: @ 0x0805B454
|
||||
strb r0, [r1, #2]
|
||||
movs r0, #0x20
|
||||
strb r0, [r1, #3]
|
||||
bl sub_805A1CC
|
||||
bl CreateMultiplayerModeSelectScreen
|
||||
ldr r0, [r5]
|
||||
bl TaskDestroy
|
||||
_0805B4A0:
|
||||
|
||||
@@ -588,7 +588,7 @@ _0808178C:
|
||||
ldr r0, _080817D0 @ =gCurTask
|
||||
ldr r0, [r0]
|
||||
bl TaskDestroy
|
||||
bl sub_805A1CC
|
||||
bl CreateMultiplayerModeSelectScreen
|
||||
b _08081896
|
||||
.align 2, 0
|
||||
_080817BC: .4byte IWRAM_START + 0xF0
|
||||
|
||||
@@ -627,99 +627,3 @@ gUnknown_080D8F38:
|
||||
.global gUnknown_080D8F50
|
||||
gUnknown_080D8F50:
|
||||
.incbin "baserom.gba", 0x000D8F50, 0x20
|
||||
|
||||
.global gUnknown_080D8F70
|
||||
gUnknown_080D8F70:
|
||||
.incbin "baserom.gba", 0x000D8F70, 0xE0
|
||||
|
||||
.global gUnknown_080D9050
|
||||
gUnknown_080D9050:
|
||||
.incbin "baserom.gba", 0x000D9050, 0x38
|
||||
|
||||
.global gUnknown_080D9088
|
||||
gUnknown_080D9088:
|
||||
.incbin "baserom.gba", 0x000D9088, 0x4
|
||||
|
||||
.global gUnknown_080D908C
|
||||
gUnknown_080D908C:
|
||||
.incbin "baserom.gba", 0x000D908C, 0x4
|
||||
|
||||
.global gUnknown_080D9090
|
||||
gUnknown_080D9090:
|
||||
.incbin "baserom.gba", 0x000D9090, 0x70
|
||||
|
||||
.global gUnknown_080D9100
|
||||
gUnknown_080D9100:
|
||||
.incbin "baserom.gba", 0x000D9100, 0x188
|
||||
|
||||
.global gUnknown_080D9288
|
||||
gUnknown_080D9288:
|
||||
.incbin "baserom.gba", 0x000D9288, 0x20
|
||||
|
||||
.global gUnknown_080D92A8
|
||||
gUnknown_080D92A8:
|
||||
.incbin "baserom.gba", 0x000D92A8, 0x10
|
||||
|
||||
.global gUnknown_080D92B8
|
||||
gUnknown_080D92B8:
|
||||
.incbin "baserom.gba", 0x000D92B8, 0x2
|
||||
|
||||
.global gUnknown_080D92BA
|
||||
gUnknown_080D92BA:
|
||||
.incbin "baserom.gba", 0x000D92BA, 0x2
|
||||
|
||||
.global gUnknown_080D92BC
|
||||
gUnknown_080D92BC:
|
||||
.incbin "baserom.gba", 0x000D92BC, 0x20
|
||||
|
||||
.global gUnknown_080D92DC
|
||||
gUnknown_080D92DC:
|
||||
.incbin "baserom.gba", 0x000D92DC, 0x118
|
||||
|
||||
.global gUnknown_080D93F4
|
||||
gUnknown_080D93F4:
|
||||
.incbin "baserom.gba", 0x000D93F4, 0x38
|
||||
|
||||
.global gUnknown_080D942C
|
||||
gUnknown_080D942C:
|
||||
.incbin "baserom.gba", 0x000D942C, 0x60
|
||||
|
||||
.global gUnknown_080D948C
|
||||
gUnknown_080D948C:
|
||||
.incbin "baserom.gba", 0x000D948C, 0x18
|
||||
|
||||
.global gUnknown_080D94A4
|
||||
gUnknown_080D94A4:
|
||||
.incbin "baserom.gba", 0x000D94A4, 0x18
|
||||
|
||||
.global gUnknown_080D94BC
|
||||
gUnknown_080D94BC:
|
||||
.incbin "baserom.gba", 0x000D94BC, 0x18
|
||||
|
||||
.global gUnknown_080D94D4
|
||||
gUnknown_080D94D4:
|
||||
.incbin "baserom.gba", 0x000D94D4, 0x4
|
||||
|
||||
.global gUnknown_080D94D8
|
||||
gUnknown_080D94D8:
|
||||
.incbin "baserom.gba", 0x000D94D8, 0x10
|
||||
|
||||
.global gUnknown_080D94E8
|
||||
gUnknown_080D94E8:
|
||||
.incbin "baserom.gba", 0x000D94E8, 0x6
|
||||
|
||||
.global gUnknown_080D94EE
|
||||
gUnknown_080D94EE:
|
||||
.incbin "baserom.gba", 0x000D94EE, 0x4
|
||||
|
||||
.global gUnknown_080D94F2
|
||||
gUnknown_080D94F2:
|
||||
.incbin "baserom.gba", 0x000D94F2, 0x6
|
||||
|
||||
.global gUnknown_080D94F8
|
||||
gUnknown_080D94F8:
|
||||
.incbin "baserom.gba", 0x000D94F8, 0x20
|
||||
|
||||
.global gUnknown_080D9518
|
||||
gUnknown_080D9518:
|
||||
.incbin "baserom.gba", 0x000D9518, 0x28
|
||||
@@ -0,0 +1,93 @@
|
||||
.section .rodata
|
||||
|
||||
.global gUnknown_080D9050
|
||||
gUnknown_080D9050:
|
||||
.incbin "baserom.gba", 0x000D9050, 0x38
|
||||
|
||||
.global gUnknown_080D9088
|
||||
gUnknown_080D9088:
|
||||
.incbin "baserom.gba", 0x000D9088, 0x4
|
||||
|
||||
.global gUnknown_080D908C
|
||||
gUnknown_080D908C:
|
||||
.incbin "baserom.gba", 0x000D908C, 0x4
|
||||
|
||||
.global gUnknown_080D9090
|
||||
gUnknown_080D9090:
|
||||
.incbin "baserom.gba", 0x000D9090, 0x70
|
||||
|
||||
.global gUnknown_080D9100
|
||||
gUnknown_080D9100:
|
||||
.incbin "baserom.gba", 0x000D9100, 0x188
|
||||
|
||||
.global gUnknown_080D9288
|
||||
gUnknown_080D9288:
|
||||
.incbin "baserom.gba", 0x000D9288, 0x20
|
||||
|
||||
.global gUnknown_080D92A8
|
||||
gUnknown_080D92A8:
|
||||
.incbin "baserom.gba", 0x000D92A8, 0x10
|
||||
|
||||
.global gUnknown_080D92B8
|
||||
gUnknown_080D92B8:
|
||||
.incbin "baserom.gba", 0x000D92B8, 0x2
|
||||
|
||||
.global gUnknown_080D92BA
|
||||
gUnknown_080D92BA:
|
||||
.incbin "baserom.gba", 0x000D92BA, 0x2
|
||||
|
||||
.global gUnknown_080D92BC
|
||||
gUnknown_080D92BC:
|
||||
.incbin "baserom.gba", 0x000D92BC, 0x20
|
||||
|
||||
.global gUnknown_080D92DC
|
||||
gUnknown_080D92DC:
|
||||
.incbin "baserom.gba", 0x000D92DC, 0x118
|
||||
|
||||
.global gUnknown_080D93F4
|
||||
gUnknown_080D93F4:
|
||||
.incbin "baserom.gba", 0x000D93F4, 0x38
|
||||
|
||||
.global gUnknown_080D942C
|
||||
gUnknown_080D942C:
|
||||
.incbin "baserom.gba", 0x000D942C, 0x60
|
||||
|
||||
.global gUnknown_080D948C
|
||||
gUnknown_080D948C:
|
||||
.incbin "baserom.gba", 0x000D948C, 0x18
|
||||
|
||||
.global gUnknown_080D94A4
|
||||
gUnknown_080D94A4:
|
||||
.incbin "baserom.gba", 0x000D94A4, 0x18
|
||||
|
||||
.global gUnknown_080D94BC
|
||||
gUnknown_080D94BC:
|
||||
.incbin "baserom.gba", 0x000D94BC, 0x18
|
||||
|
||||
.global gUnknown_080D94D4
|
||||
gUnknown_080D94D4:
|
||||
.incbin "baserom.gba", 0x000D94D4, 0x4
|
||||
|
||||
.global gUnknown_080D94D8
|
||||
gUnknown_080D94D8:
|
||||
.incbin "baserom.gba", 0x000D94D8, 0x10
|
||||
|
||||
.global gUnknown_080D94E8
|
||||
gUnknown_080D94E8:
|
||||
.incbin "baserom.gba", 0x000D94E8, 0x6
|
||||
|
||||
.global gUnknown_080D94EE
|
||||
gUnknown_080D94EE:
|
||||
.incbin "baserom.gba", 0x000D94EE, 0x4
|
||||
|
||||
.global gUnknown_080D94F2
|
||||
gUnknown_080D94F2:
|
||||
.incbin "baserom.gba", 0x000D94F2, 0x6
|
||||
|
||||
.global gUnknown_080D94F8
|
||||
gUnknown_080D94F8:
|
||||
.incbin "baserom.gba", 0x000D94F8, 0x20
|
||||
|
||||
.global gUnknown_080D9518
|
||||
gUnknown_080D9518:
|
||||
.incbin "baserom.gba", 0x000D9518, 0x28
|
||||
@@ -3,6 +3,6 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
void sub_805A1CC(void);
|
||||
void CreateMultiplayerModeSelectScreen(void);
|
||||
|
||||
#endif // GUARD_MULTIPLAYER_MODE_SELECT_H
|
||||
@@ -91,6 +91,8 @@ SECTIONS
|
||||
build/sa2/data/time_data.o(.rodata);
|
||||
build/sa2/src/time.o(.rodata);
|
||||
build/sa2/data/data1_1_2.o(.rodata);
|
||||
build/sa2/src/multiplayer_mode_select.o(.rodata);
|
||||
build/sa2/data/data1_1_3.o(.rodata);
|
||||
build/sa2/src/profile.o(.rodata);
|
||||
build/sa2/data/data1_2.o(.rodata);
|
||||
build/sa2/data/math_data.o(.rodata);
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
from io import BufferedReader
|
||||
import os
|
||||
import sys
|
||||
import struct
|
||||
|
||||
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()}"
|
||||
|
||||
langs = [
|
||||
"DEFAULT",
|
||||
"JAPANESE",
|
||||
"ENGLISH",
|
||||
"GERMAN",
|
||||
"FRENCH",
|
||||
"SPANISH",
|
||||
"ITALIAN"
|
||||
]
|
||||
|
||||
with open('baserom.gba', 'rb') as rom:
|
||||
rom.seek(address)
|
||||
for i in range(length // 8 // 4):
|
||||
lang = langs.pop(0)
|
||||
|
||||
# num elements
|
||||
for j in range(4):
|
||||
unk0 = read_u32(rom)
|
||||
unk4 = read_u16(rom)
|
||||
element = read_u8(rom)
|
||||
print(f"Text(LANG_{lang}, {element}, {unk0}, {unk4}),")
|
||||
|
||||
# unused
|
||||
read_u8(rom)
|
||||
+131
-97
@@ -13,33 +13,79 @@
|
||||
#include "flags.h"
|
||||
#include "input.h"
|
||||
#include "title_screen.h"
|
||||
#include "constants/text.h"
|
||||
|
||||
struct MultiplayerModeScreen {
|
||||
#define PAK_MODE_MULTI 0
|
||||
#define PAK_MODE_SINGLE 1
|
||||
|
||||
struct MultiplayerModeSelectScreen {
|
||||
struct Unk_03002400 unk0;
|
||||
struct Unk_03002400 unk40;
|
||||
|
||||
struct UNK_0808B3FC_UNK240 unk80;
|
||||
struct UNK_0808B3FC_UNK240 unkB0;
|
||||
struct UNK_0808B3FC_UNK240 unkE0;
|
||||
struct UNK_0808B3FC_UNK240 unk110;
|
||||
struct UNK_0808B3FC_UNK240 subText;
|
||||
|
||||
struct UNK_802D4CC_UNK270 unk140;
|
||||
|
||||
// animFrame
|
||||
u8 unk14C;
|
||||
u8 animFrame;
|
||||
|
||||
u8 unk14D;
|
||||
u8 unk14E;
|
||||
u8 pakMode;
|
||||
bool8 enterAnimDone;
|
||||
};
|
||||
|
||||
void sub_805A9B0(void);
|
||||
void sub_805AA94(struct Task*);
|
||||
extern void sub_802EFDC(u32);
|
||||
extern void sub_802E164(u16, u16);
|
||||
extern void sub_808129C(void);
|
||||
|
||||
extern const struct UNK_080E0D64 gUnknown_080D8F70[28];
|
||||
static void Task_FadeInAndStartEnterAnim(void);
|
||||
static void MultiplayerModeSelectScreenOnDestroy(struct Task*);
|
||||
static void Task_EnterAnimPart2(void);
|
||||
static void Task_ScreenMain(void);
|
||||
static void RenderUI(struct MultiplayerModeSelectScreen*);
|
||||
static void Task_FadeOutToSelectedMode(void);
|
||||
static void Task_FadeOutAndExitToTitleScreen(void);
|
||||
static void Task_ExitAndInitSelectedPakMode(void);
|
||||
|
||||
void sub_805A1CC(void) {
|
||||
#define TextAlt(lang, element, a, b) [(lang) * 4 + (element - 1)] = { .unk0 = (a), .unk4 = (b), .unk6 = (element) }
|
||||
#define Text(lang, element, a, b) [(lang) * 4 + (element)] = { .unk0 = (a), .unk4 = (b), .unk6 = (element) }
|
||||
|
||||
static const struct UNK_080E0D64 sMultiplayerModeSelectScreenText[] = {
|
||||
TextAlt(LANG_DEFAULT, 1, 38, 1073),
|
||||
TextAlt(LANG_DEFAULT, 2, 32, 1073),
|
||||
TextAlt(LANG_DEFAULT, 3, 168, 1073),
|
||||
TextAlt(LANG_DEFAULT, 4, 168, 1073),
|
||||
TextAlt(LANG_JAPANESE, 1, 38, 1073),
|
||||
TextAlt(LANG_JAPANESE, 2, 32, 1073),
|
||||
TextAlt(LANG_JAPANESE, 3, 168, 1073),
|
||||
TextAlt(LANG_JAPANESE, 4, 168, 1073),
|
||||
Text(LANG_ENGLISH, 0, 36, 1094),
|
||||
Text(LANG_ENGLISH, 1, 38, 1094),
|
||||
Text(LANG_ENGLISH, 2, 168, 1094),
|
||||
Text(LANG_ENGLISH, 3, 168, 1094),
|
||||
Text(LANG_GERMAN, 0, 34, 1095),
|
||||
Text(LANG_GERMAN, 1, 28, 1095),
|
||||
Text(LANG_GERMAN, 2, 168, 1095),
|
||||
Text(LANG_GERMAN, 3, 168, 1095),
|
||||
Text(LANG_FRENCH, 0, 36, 1096),
|
||||
Text(LANG_FRENCH, 1, 32, 1096),
|
||||
Text(LANG_FRENCH, 2, 168, 1096),
|
||||
Text(LANG_FRENCH, 3, 168, 1096),
|
||||
Text(LANG_SPANISH, 0, 36, 1097),
|
||||
Text(LANG_SPANISH, 1, 36, 1097),
|
||||
Text(LANG_SPANISH, 2, 168, 1097),
|
||||
Text(LANG_SPANISH, 3, 168, 1097),
|
||||
Text(LANG_ITALIAN, 0, 36, 1098),
|
||||
Text(LANG_ITALIAN, 1, 36, 1098),
|
||||
Text(LANG_ITALIAN, 2, 168, 1098),
|
||||
Text(LANG_ITALIAN, 3, 168, 1098),
|
||||
};
|
||||
|
||||
void CreateMultiplayerModeSelectScreen(void) {
|
||||
struct Task* t;
|
||||
struct MultiplayerModeScreen* modeScreen;
|
||||
struct MultiplayerModeSelectScreen* modeScreen;
|
||||
struct UNK_802D4CC_UNK270* unk140;
|
||||
struct UNK_0808B3FC_UNK240* unk80;
|
||||
struct Unk_03002400* unk0;
|
||||
@@ -57,11 +103,11 @@ void sub_805A1CC(void) {
|
||||
gBgScrollRegs[1][0] = 0;
|
||||
gBgScrollRegs[1][1] = 0;
|
||||
|
||||
t = TaskCreate(sub_805A9B0, 0x150, 0x2000, 0, sub_805AA94);
|
||||
t = TaskCreate(Task_FadeInAndStartEnterAnim, 0x150, 0x2000, 0, MultiplayerModeSelectScreenOnDestroy);
|
||||
modeScreen = TaskGetStructPtr(t, modeScreen);
|
||||
modeScreen->unk14C = 0;
|
||||
modeScreen->unk14D = 0;
|
||||
modeScreen->unk14E = 0;
|
||||
modeScreen->animFrame = 0;
|
||||
modeScreen->pakMode = PAK_MODE_MULTI;
|
||||
modeScreen->enterAnimDone = FALSE;
|
||||
|
||||
unk140 = &modeScreen->unk140;
|
||||
unk140->unk0 = 1;
|
||||
@@ -90,9 +136,9 @@ void sub_805A1CC(void) {
|
||||
sub_8004558(unk80);
|
||||
|
||||
unk80 = &modeScreen->unkB0;
|
||||
unk80->unk4 = sub_8007C10(gUnknown_080D8F70[lang].unk0);
|
||||
unk80->unkA = gUnknown_080D8F70[lang].unk4;
|
||||
unk80->unk20 = gUnknown_080D8F70[lang].unk6;
|
||||
unk80->unk4 = sub_8007C10(sMultiplayerModeSelectScreenText[lang].unk0);
|
||||
unk80->unkA = sMultiplayerModeSelectScreenText[lang].unk4;
|
||||
unk80->unk20 = sMultiplayerModeSelectScreenText[lang].unk6;
|
||||
unk80->unk21 = 0xFF;
|
||||
|
||||
unk80->unk16 = 0;
|
||||
@@ -108,9 +154,9 @@ void sub_805A1CC(void) {
|
||||
sub_8004558(unk80);
|
||||
|
||||
unk80 = &modeScreen->unkE0;
|
||||
unk80->unk4 = sub_8007C10(gUnknown_080D8F70[lang + 1].unk0);
|
||||
unk80->unkA = gUnknown_080D8F70[lang + 1].unk4;
|
||||
unk80->unk20 = gUnknown_080D8F70[lang + 1].unk6;
|
||||
unk80->unk4 = sub_8007C10(sMultiplayerModeSelectScreenText[lang + 1].unk0);
|
||||
unk80->unkA = sMultiplayerModeSelectScreenText[lang + 1].unk4;
|
||||
unk80->unk20 = sMultiplayerModeSelectScreenText[lang + 1].unk6;
|
||||
unk80->unk21 = 0xFF;
|
||||
|
||||
unk80->unk16 = 0;
|
||||
@@ -125,10 +171,10 @@ void sub_805A1CC(void) {
|
||||
unk80->unk10 = 0x1000;
|
||||
sub_8004558(unk80);
|
||||
|
||||
unk80 = &modeScreen->unk110;
|
||||
unk80->unk4 = sub_8007C10(gUnknown_080D8F70[lang + 2].unk0);
|
||||
unk80->unkA = gUnknown_080D8F70[lang + 2].unk4;
|
||||
unk80->unk20 = gUnknown_080D8F70[lang + 2].unk6;
|
||||
unk80 = &modeScreen->subText;
|
||||
unk80->unk4 = sub_8007C10(sMultiplayerModeSelectScreenText[lang + 2].unk0);
|
||||
unk80->unkA = sMultiplayerModeSelectScreenText[lang + 2].unk4;
|
||||
unk80->unk20 = sMultiplayerModeSelectScreenText[lang + 2].unk6;
|
||||
unk80->unk21 = 0xFF;
|
||||
|
||||
unk80->unk16 = 8;
|
||||
@@ -180,41 +226,37 @@ void sub_805A1CC(void) {
|
||||
m4aSongNumStart(MUS_VS_SELECT_PAK_MODE);
|
||||
}
|
||||
|
||||
extern void sub_802EFDC(u32);
|
||||
extern void sub_802E164(u16, u16);
|
||||
void sub_805A598(void);
|
||||
void sub_805A4F8(void) {
|
||||
struct MultiplayerModeScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
|
||||
static void Task_EnterAnimPart1(void) {
|
||||
struct MultiplayerModeSelectScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
gUnknown_03002A80 = 2;
|
||||
gUnknown_03002878 = (void*)REG_ADDR_WIN1H;
|
||||
gWinRegs[4] = 0x1300;
|
||||
gWinRegs[5] = 0x11;
|
||||
gFlags |= 0x4;
|
||||
sub_802EFDC(0xF0);
|
||||
sub_802E164(0x6400, (0x10 - modeScreen->unk14C) * 20);
|
||||
sub_802E164(0x6400, (0x10 - modeScreen->animFrame) * 20);
|
||||
if (gPressedKeys & A_BUTTON) {
|
||||
modeScreen->unk14C = 0;
|
||||
gCurTask->main = sub_805A598;
|
||||
modeScreen->animFrame = 0;
|
||||
gCurTask->main = Task_EnterAnimPart2;
|
||||
}
|
||||
|
||||
if (--modeScreen->unk14C == 0) {
|
||||
modeScreen->unk14C = 0;
|
||||
gCurTask->main = sub_805A598;
|
||||
if (--modeScreen->animFrame == 0) {
|
||||
modeScreen->animFrame = 0;
|
||||
gCurTask->main = Task_EnterAnimPart2;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_805A6C0(void);
|
||||
void sub_805AA50(struct MultiplayerModeScreen*);
|
||||
void sub_805A598(void) {
|
||||
static void Task_EnterAnimPart2(void) {
|
||||
struct UNK_0808B3FC_UNK240* unk80;
|
||||
struct MultiplayerModeScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
if (++modeScreen->unk14C == 32) {
|
||||
modeScreen->unk14E = 1;
|
||||
gCurTask->main = sub_805A6C0;
|
||||
struct MultiplayerModeSelectScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
if (++modeScreen->animFrame == 32) {
|
||||
modeScreen->enterAnimDone = TRUE;
|
||||
gCurTask->main = Task_ScreenMain;
|
||||
}
|
||||
|
||||
if (gPressedKeys & A_BUTTON) {
|
||||
modeScreen->unk14C = 31;
|
||||
modeScreen->animFrame = 31;
|
||||
}
|
||||
|
||||
// TODO: make a macro
|
||||
@@ -227,17 +269,17 @@ void sub_805A598(void) {
|
||||
sub_802E164(0x6400, 0x140);
|
||||
|
||||
unk80 = &modeScreen->unk80;
|
||||
if (modeScreen->unk14C < 10) {
|
||||
unk80->unk16 = modeScreen->unk14C * 0xC - 0x14;
|
||||
if (modeScreen->animFrame < 10) {
|
||||
unk80->unk16 = modeScreen->animFrame * 0xC - 0x14;
|
||||
} else {
|
||||
unk80->unk16 = 100;
|
||||
}
|
||||
unk80->unk18 = 10;
|
||||
unk80 = &modeScreen->unkB0;
|
||||
if (modeScreen->unk14C < 10) {
|
||||
if (modeScreen->animFrame < 10) {
|
||||
unk80->unk16 = -0x50;
|
||||
} else if (modeScreen->unk14C < 20) {
|
||||
unk80->unk16 = modeScreen->unk14C * 0x10 - 0xF0;
|
||||
} else if (modeScreen->animFrame < 20) {
|
||||
unk80->unk16 = modeScreen->animFrame * 0x10 - 0xF0;
|
||||
} else {
|
||||
unk80->unk16 = 0x50;
|
||||
}
|
||||
@@ -245,22 +287,19 @@ void sub_805A598(void) {
|
||||
|
||||
unk80 = &modeScreen->unkE0;
|
||||
|
||||
if (modeScreen->unk14C < 20) {
|
||||
if (modeScreen->animFrame < 20) {
|
||||
unk80->unk16 = -0x5A;
|
||||
} else if (modeScreen->unk14C < 30) {
|
||||
unk80->unk16 = modeScreen->unk14C * 0x10 - 0x19A;
|
||||
} else if (modeScreen->animFrame < 30) {
|
||||
unk80->unk16 = modeScreen->animFrame * 0x10 - 0x19A;
|
||||
} else {
|
||||
unk80->unk16 = 0x46;
|
||||
}
|
||||
unk80->unk18 = 0x55;
|
||||
sub_805AA50(modeScreen);
|
||||
RenderUI(modeScreen);
|
||||
}
|
||||
|
||||
void sub_805A878(void);
|
||||
void sub_805A918(void);
|
||||
|
||||
void sub_805A6C0(void) {
|
||||
struct MultiplayerModeScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
static void Task_ScreenMain(void) {
|
||||
struct MultiplayerModeSelectScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
struct UNK_802D4CC_UNK270* unk140;
|
||||
if (gPressedKeys & A_BUTTON) {
|
||||
unk140 = &modeScreen->unk140;
|
||||
@@ -273,7 +312,7 @@ void sub_805A6C0(void) {
|
||||
m4aSongNumStart(SE_SELECT);
|
||||
MultiSioStop();
|
||||
MultiSioInit(0);
|
||||
gCurTask->main = sub_805A878;
|
||||
gCurTask->main = Task_FadeOutToSelectedMode;
|
||||
} else if (gPressedKeys & B_BUTTON) {
|
||||
unk140 = &modeScreen->unk140;
|
||||
unk140->unk0 = 1;
|
||||
@@ -283,7 +322,7 @@ void sub_805A6C0(void) {
|
||||
unk140->unk8 = 0x3FFF;
|
||||
unk140->unkA = 0;
|
||||
m4aSongNumStart(SE_RETURN);
|
||||
gCurTask->main = sub_805A918;
|
||||
gCurTask->main = Task_FadeOutAndExitToTitleScreen;
|
||||
}
|
||||
|
||||
gUnknown_03002A80 = 2;
|
||||
@@ -296,41 +335,39 @@ void sub_805A6C0(void) {
|
||||
|
||||
if (gPressedKeys & (DPAD_DOWN | DPAD_UP)) {
|
||||
m4aSongNumStart(SE_MENU_CURSOR_MOVE);
|
||||
modeScreen->unk14D ^= 1;
|
||||
modeScreen->pakMode ^= 1;
|
||||
}
|
||||
|
||||
if (modeScreen->unk14D != 0) {
|
||||
struct UNK_0808B3FC_UNK240* unk110;
|
||||
if (modeScreen->pakMode != PAK_MODE_MULTI) {
|
||||
struct UNK_0808B3FC_UNK240* subText;
|
||||
u8 lang = gLoadedSaveGame->unk6 * 4;
|
||||
modeScreen->unkB0.unk25 = 1;
|
||||
modeScreen->unkE0.unk25 = 0xFF;
|
||||
|
||||
unk110 = &modeScreen->unk110;
|
||||
unk110->unkA = gUnknown_080D8F70[lang + 3].unk4;
|
||||
unk110->unk20 = gUnknown_080D8F70[lang + 3].unk6;
|
||||
unk110->unk21 = 0xFF;
|
||||
subText = &modeScreen->subText;
|
||||
subText->unkA = sMultiplayerModeSelectScreenText[lang + 3].unk4;
|
||||
subText->unk20 = sMultiplayerModeSelectScreenText[lang + 3].unk6;
|
||||
subText->unk21 = 0xFF;
|
||||
} else {
|
||||
struct UNK_0808B3FC_UNK240* unk110;
|
||||
struct UNK_0808B3FC_UNK240* subText;
|
||||
u8 lang = gLoadedSaveGame->unk6 * 4;
|
||||
modeScreen->unkB0.unk25 = 0;
|
||||
modeScreen->unkE0.unk25 = 0;
|
||||
unk110 = &modeScreen->unk110;
|
||||
unk110->unkA = gUnknown_080D8F70[lang + 2].unk4;
|
||||
unk110->unk20 = gUnknown_080D8F70[lang +2].unk6;
|
||||
unk110->unk21 = 0xFF;
|
||||
subText = &modeScreen->subText;
|
||||
subText->unkA = sMultiplayerModeSelectScreenText[lang + 2].unk4;
|
||||
subText->unk20 = sMultiplayerModeSelectScreenText[lang +2].unk6;
|
||||
subText->unk21 = 0xFF;
|
||||
}
|
||||
|
||||
sub_805AA50(modeScreen);
|
||||
RenderUI(modeScreen);
|
||||
}
|
||||
|
||||
void sub_805A9EC(void);
|
||||
|
||||
void sub_805A878(void) {
|
||||
struct MultiplayerModeScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
static void Task_FadeOutToSelectedMode(void) {
|
||||
struct MultiplayerModeSelectScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
if (sub_802D4CC(&modeScreen->unk140) == 1) {
|
||||
gFlags &= ~0x4;
|
||||
gMultiSioEnabled = TRUE;
|
||||
gCurTask->main = sub_805A9EC;
|
||||
gCurTask->main = Task_ExitAndInitSelectedPakMode;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -342,12 +379,11 @@ void sub_805A878(void) {
|
||||
sub_802EFDC(0xF0);
|
||||
sub_802E164(0x6400, 0x140);
|
||||
|
||||
sub_805AA50(modeScreen);
|
||||
RenderUI(modeScreen);
|
||||
}
|
||||
|
||||
|
||||
void sub_805A918(void) {
|
||||
struct MultiplayerModeScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
static void Task_FadeOutAndExitToTitleScreen(void) {
|
||||
struct MultiplayerModeSelectScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
if (sub_802D4CC(&modeScreen->unk140) == 1) {
|
||||
gFlags &= ~0x4;
|
||||
CreateTitleScreenAtPlayModeMenu();
|
||||
@@ -363,53 +399,51 @@ void sub_805A918(void) {
|
||||
sub_802EFDC(0xF0);
|
||||
sub_802E164(0x6400, 0x140);
|
||||
|
||||
sub_805AA50(modeScreen);
|
||||
RenderUI(modeScreen);
|
||||
}
|
||||
|
||||
void sub_805A9B0(void) {
|
||||
struct MultiplayerModeScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
static void Task_FadeInAndStartEnterAnim(void) {
|
||||
struct MultiplayerModeSelectScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
if (sub_802D4CC(&modeScreen->unk140) == 1) {
|
||||
modeScreen->unk14C = 0xF;
|
||||
gCurTask->main = sub_805A4F8;
|
||||
modeScreen->animFrame = 15;
|
||||
gCurTask->main = Task_EnterAnimPart1;
|
||||
}
|
||||
}
|
||||
|
||||
extern void sub_808129C(void);
|
||||
|
||||
void sub_805A9EC(void) {
|
||||
struct MultiplayerModeScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
u8 unk14D = modeScreen->unk14D;
|
||||
static void Task_ExitAndInitSelectedPakMode(void) {
|
||||
struct MultiplayerModeSelectScreen* modeScreen = TaskGetStructPtr(gCurTask, modeScreen);
|
||||
u8 pakMode = modeScreen->pakMode;
|
||||
TasksDestroyAll();
|
||||
|
||||
gUnknown_03002AE4 = gUnknown_0300287C;
|
||||
gUnknown_03005390 = 0;
|
||||
gUnknown_03004D5C = gUnknown_03002A84;
|
||||
|
||||
if (unk14D == 0) {
|
||||
if (pakMode == PAK_MODE_MULTI) {
|
||||
sub_805AAD8();
|
||||
} else {
|
||||
sub_808129C();
|
||||
}
|
||||
}
|
||||
|
||||
void sub_805AA50(struct MultiplayerModeScreen* modeScreen) {
|
||||
static void RenderUI(struct MultiplayerModeSelectScreen* modeScreen) {
|
||||
struct UNK_0808B3FC_UNK240* unk80 = &modeScreen->unk80;
|
||||
sub_80051E8(unk80);
|
||||
unk80++;
|
||||
sub_80051E8(unk80);
|
||||
unk80++;
|
||||
sub_80051E8(unk80);
|
||||
if (modeScreen->unk14E) {
|
||||
if (modeScreen->enterAnimDone) {
|
||||
unk80++;
|
||||
sub_8004558(unk80);
|
||||
sub_80051E8(unk80);
|
||||
};
|
||||
}
|
||||
|
||||
void sub_805AA94(struct Task* t) {
|
||||
struct MultiplayerModeScreen* modeScreen = TaskGetStructPtr(t, modeScreen);
|
||||
static void MultiplayerModeSelectScreenOnDestroy(struct Task* t) {
|
||||
struct MultiplayerModeSelectScreen* modeScreen = TaskGetStructPtr(t, modeScreen);
|
||||
sub_8007CF0(modeScreen->unk80.unk4);
|
||||
sub_8007CF0(modeScreen->unkB0.unk4);
|
||||
sub_8007CF0(modeScreen->unkE0.unk4);
|
||||
sub_8007CF0(modeScreen->unk110.unk4);
|
||||
sub_8007CF0(modeScreen->subText.unk4);
|
||||
}
|
||||
+1
-2
@@ -4288,8 +4288,7 @@ static void ProfileNameScreenFadeOutAndExit(void) {
|
||||
gUnknown_03004D5C = gUnknown_03002A84;
|
||||
|
||||
if (onCompleteAction == NAME_SCREEN_COMPLETE_ACTION_MULTIPLAYER) {
|
||||
// Continue to multiplayer
|
||||
sub_805A1CC();
|
||||
CreateMultiplayerModeSelectScreen();
|
||||
} else {
|
||||
CreateTitleScreen();
|
||||
}
|
||||
|
||||
+1
-1
@@ -1294,7 +1294,7 @@ static void Task_HandleTitleScreenExit(void) {
|
||||
gGameMode = GAME_MODE_MULTI_PLAYER;
|
||||
sub_801A6D8();
|
||||
if (gLoadedSaveGame->unk20[0] != PLAYER_NAME_END_CHAR) {
|
||||
sub_805A1CC();
|
||||
CreateMultiplayerModeSelectScreen();
|
||||
} else {
|
||||
// If we don't have a profile name
|
||||
// show the profile creator screen
|
||||
|
||||
Reference in new issue
Block a user