mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 09:43:38 +00:00
chao_garden: more code, split input(?) code
This commit is contained in:
1 parent
293787148b
commit
0383c80539
11 files changed
+693
-1194
No files matched your search
+131
-1148
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,102 @@
|
||||
.include "../asm/macros/function.inc"
|
||||
.include "../constants/gba_constants.inc"
|
||||
|
||||
.syntax unified
|
||||
.arm
|
||||
|
||||
thumb_func_start sub_02000bd0
|
||||
sub_02000bd0: @ 0x02000bd0
|
||||
push {r4, r5, r6, lr}
|
||||
ldr r1, _02000C40 @ =gUnknown_030043F0
|
||||
ldrh r5, [r1]
|
||||
ldrh r6, [r1, #2]
|
||||
ldr r0, _02000C44 @ =0x04000130
|
||||
ldrh r2, [r0]
|
||||
movs r3, #0xfc
|
||||
lsls r3, r3, #8
|
||||
adds r0, r3, #0
|
||||
orrs r0, r2
|
||||
strh r0, [r1, #2]
|
||||
mvns r2, r0
|
||||
strh r2, [r1]
|
||||
ldr r0, _02000C48 @ =gUnknown_03003330
|
||||
ldrb r1, [r0, #0xf]
|
||||
movs r0, #0x40
|
||||
ands r0, r1
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r4, r0, #0x18
|
||||
cmp r4, #0
|
||||
bne _02000C20
|
||||
movs r0, #0xf
|
||||
ands r2, r0
|
||||
cmp r2, #0xf
|
||||
bne _02000C20
|
||||
bl m4aMPlayAllStop
|
||||
bl m4aSoundMain
|
||||
bl VBlankIntrWait
|
||||
bl m4aSoundVSyncOff
|
||||
ldr r0, _02000C4C @ =0x04000208
|
||||
strh r4, [r0]
|
||||
subs r0, #8
|
||||
strh r4, [r0]
|
||||
movs r0, #0x20
|
||||
bl SoftResetRom
|
||||
_02000C20:
|
||||
ldr r1, _02000C40 @ =gUnknown_030043F0
|
||||
ldrh r2, [r1]
|
||||
ands r6, r2
|
||||
movs r3, #0
|
||||
strh r6, [r1, #4]
|
||||
lsls r0, r2, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
cmp r0, #0
|
||||
beq _02000C5C
|
||||
cmp r0, r5
|
||||
bls _02000C50
|
||||
eors r5, r2
|
||||
strh r5, [r1, #6]
|
||||
ldrb r0, [r1, #9]
|
||||
b _02000C64
|
||||
.align 2, 0
|
||||
_02000C40: .4byte gUnknown_030043F0
|
||||
_02000C44: .4byte 0x04000130
|
||||
_02000C48: .4byte gUnknown_03003330
|
||||
_02000C4C: .4byte 0x04000208
|
||||
_02000C50:
|
||||
ldrb r0, [r1, #8]
|
||||
subs r0, #1
|
||||
strb r0, [r1, #8]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
beq _02000C60
|
||||
_02000C5C:
|
||||
strh r3, [r1, #6]
|
||||
b _02000C66
|
||||
_02000C60:
|
||||
strh r2, [r1, #6]
|
||||
ldrb r0, [r1, #0xa]
|
||||
_02000C64:
|
||||
strb r0, [r1, #8]
|
||||
_02000C66:
|
||||
pop {r4, r5, r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
|
||||
thumb_func_start sub_02000c6c
|
||||
sub_02000c6c: @ 0x02000c6c
|
||||
ldr r1, _02000C88 @ =gUnknown_030043F0
|
||||
movs r0, #0
|
||||
strh r0, [r1, #6]
|
||||
strh r0, [r1, #4]
|
||||
strh r0, [r1]
|
||||
ldr r0, _02000C8C @ =0x0000FFFF
|
||||
strh r0, [r1, #2]
|
||||
movs r0, #0xf
|
||||
strb r0, [r1, #9]
|
||||
strb r0, [r1, #8]
|
||||
movs r0, #7
|
||||
strb r0, [r1, #0xa]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02000C88: .4byte gUnknown_030043F0
|
||||
_02000C8C: .4byte 0x0000FFFF
|
||||
@@ -0,0 +1,39 @@
|
||||
.syntax unified
|
||||
.text
|
||||
push {lr}
|
||||
ldr r2, _02000474 @ =gUnknown_03003B88
|
||||
movs r0, #0
|
||||
movs r1, #0x50
|
||||
cmp r0, r1
|
||||
bhs _02000454
|
||||
movs r3, #0
|
||||
_0200044A:
|
||||
strb r3, [r2]
|
||||
adds r2, #1
|
||||
adds r0, #1
|
||||
cmp r0, r1
|
||||
blo _0200044A
|
||||
_02000454:
|
||||
ldr r1, _02000478 @ =gUnknown_03003BD8
|
||||
movs r2, #0xff
|
||||
adds r0, r1, #0
|
||||
adds r0, #0x11
|
||||
_0200045C:
|
||||
strb r2, [r0]
|
||||
subs r0, #1
|
||||
cmp r0, r1
|
||||
bge _0200045C
|
||||
bl sub_02008810
|
||||
ldr r1, _0200047C @ =gGameState
|
||||
str r0, [r1, #0x10]
|
||||
movs r0, #0xff
|
||||
strb r0, [r1, #0x1c]
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_02000474: .4byte gUnknown_03003B88
|
||||
_02000478: .4byte gUnknown_03003BD8
|
||||
_0200047C: .4byte gGameState
|
||||
|
||||
|
||||
.syntax divided
|
||||
@@ -489,6 +489,10 @@
|
||||
#define REG_KEYCNT (*(vu16 *)REG_ADDR_KEYCNT)
|
||||
|
||||
#define REG_RCNT (*(vu16 *)REG_ADDR_RCNT)
|
||||
#define REG_JOYCNT (*(vu16 *)REG_ADDR_JOYCNT)
|
||||
#define REG_JOYSTAT (*(vu16 *)REG_ADDR_JOYSTAT)
|
||||
#define REG_JOY_RECV (*(vu32 *)REG_ADDR_JOY_RECV)
|
||||
#define REG_JOY_TRANS (*(vu32 *)REG_ADDR_JOY_TRANS)
|
||||
|
||||
#define REG_IME (*(vu16 *)REG_ADDR_IME)
|
||||
#define REG_IE (*(vu16 *)REG_ADDR_IE)
|
||||
|
||||
@@ -106,6 +106,7 @@ struct GameConfig {
|
||||
extern struct GameConfig gUnknown_02000008;
|
||||
|
||||
struct UNK_03003330 {
|
||||
// Main
|
||||
void (*unk0)(void);
|
||||
u32 filler4;
|
||||
u32 unk8;
|
||||
@@ -120,7 +121,6 @@ extern struct UNK_03003330 gUnknown_03003330;
|
||||
extern u8 gSaveSectorNum;
|
||||
extern u32 gSaveVersion;
|
||||
|
||||
extern u8 gUnknown_03003BD8[2];
|
||||
extern u32 gUnknown_03005274;
|
||||
|
||||
// These should be moved once we know
|
||||
|
||||
@@ -22,7 +22,8 @@ struct TCG_SaveSectorData {
|
||||
u8 unk1E;
|
||||
u8 unk1F;
|
||||
u8 unk20;
|
||||
u8 filler21[0x38];
|
||||
u8 filler21[0x37];
|
||||
u8 unk58;
|
||||
u8 unk59;
|
||||
u8 filler[0xA];
|
||||
u32 unk64;
|
||||
@@ -31,7 +32,7 @@ struct TCG_SaveSectorData {
|
||||
u8 pad[0x7EE];
|
||||
}; /* size:0x858 according to LoadGameState */
|
||||
|
||||
extern struct TCG_SaveSectorData gUnknown_03003B80;
|
||||
extern struct TCG_SaveSectorData gGameState;
|
||||
|
||||
void LoadGameState(void);
|
||||
|
||||
|
||||
@@ -182,7 +182,9 @@ SECTIONS {
|
||||
. = 0x00003B60; gIntrTable = .;
|
||||
|
||||
. = 0x00003B70; gUnknown_03003B70 = .;
|
||||
. = 0x00003B80; gUnknown_03003B80 = .;
|
||||
|
||||
/* japan this is all game state */
|
||||
. = 0x00003B80; gGameState = .;
|
||||
. = 0x00003B88; gUnknown_03003B88 = .;
|
||||
. = 0x00003BA1; gUnknown_03003BA1 = .;
|
||||
. = 0x00003BB5; gUnknown_03003BB5 = .;
|
||||
@@ -196,6 +198,7 @@ SECTIONS {
|
||||
. = 0x00003C08; gUnknown_03003C08 = .;
|
||||
. = 0x00003C10; gUnknown_03003C10 = .;
|
||||
. = 0x00003C58; gUnknown_03003C58 = .;
|
||||
|
||||
. = 0x000043D8; gUnknown_030043D8 = .;
|
||||
. = 0x000043DC; gUnknown_030043DC = .;
|
||||
. = 0x000043E0; gUnknown_030043E0 = .;
|
||||
@@ -238,6 +241,8 @@ SECTIONS {
|
||||
build/mb_chao_garden/asm/crt0.o(.text);
|
||||
build/mb_chao_garden/src/main.o(.text);
|
||||
build/mb_chao_garden/src/save.o(.text);
|
||||
build/mb_chao_garden/src/game.o(.text);
|
||||
build/mb_chao_garden/asm/game.o(.text);
|
||||
build/mb_chao_garden/asm/code.o(.text);
|
||||
build/mb_chao_garden/asm/m4a0.o(.text);
|
||||
build/mb_chao_garden/src/m4a.o(.text);
|
||||
|
||||
@@ -0,0 +1,359 @@
|
||||
#include "global.h"
|
||||
#include "m4a.h"
|
||||
#include "save.h"
|
||||
|
||||
extern s32 gUnknown_030005A8;
|
||||
extern s32 gUnknown_030005AC;
|
||||
extern vu8 gUnknown_030005B0;
|
||||
extern vu8 gUnknown_030005B1;
|
||||
extern s32 gUnknown_030005BC;
|
||||
extern vu8 gUnknown_030043D8;
|
||||
extern vu8 gUnknown_030043DC;
|
||||
extern vu8 gUnknown_030043E4;
|
||||
extern vu8 gUnknown_030043E8;
|
||||
extern vu8 gUnknown_030043EC;
|
||||
extern u16 gUnknown_030043F0;
|
||||
extern IntrFunc gUnknown_03000088;
|
||||
extern u8 *gUnknown_030005B4;
|
||||
extern u16 gUnknown_030005B8;
|
||||
extern u16 gUnknown_030005BA;
|
||||
|
||||
// This could be gUnknown_03003330->unk20?
|
||||
extern s8 gUnknown_03003350;
|
||||
|
||||
extern s32 gUnknown_030043E0;
|
||||
|
||||
s32 sub_02000988(s32);
|
||||
s32 sub_02000a40(s32);
|
||||
void sub_02000b0c(u32);
|
||||
void sub_02000b64(u32);
|
||||
void sub_02000bb0(void);
|
||||
|
||||
void sub_020006b8(void);
|
||||
|
||||
void sub_02000480(void)
|
||||
{
|
||||
REG_IME = 0;
|
||||
REG_IE &= ~0x80;
|
||||
REG_RCNT = 0xC000;
|
||||
REG_JOYSTAT = 0;
|
||||
// oops?
|
||||
REG_JOY_RECV;
|
||||
REG_JOY_TRANS = 0;
|
||||
REG_JOYCNT = 0x47;
|
||||
#if !PORTABLE
|
||||
CpuCopy32(&sub_020006b8, &gUnknown_03000088, 0x520);
|
||||
gIntrTable[0] = (void *)&gUnknown_03000088 + 1;
|
||||
#else
|
||||
gIntrTable[0] = sub_020006b8;
|
||||
#endif
|
||||
gUnknown_030043DC = 0;
|
||||
gUnknown_030043EC = 0;
|
||||
gUnknown_030005B1 = 0xA;
|
||||
gUnknown_030043E8 = 0;
|
||||
gUnknown_030043D8 = gUnknown_030043E4 = 0;
|
||||
gUnknown_030005B0 = 0;
|
||||
gUnknown_030005BC = 0;
|
||||
gUnknown_030005A8 = (*(u8 *)0x080000AF << 0x18) | 0x4F5341;
|
||||
gUnknown_030005AC = (*(u8 *)0x080000AF << 0x18) | 0x425347;
|
||||
REG_IF = 0x80;
|
||||
REG_IE |= 0x80;
|
||||
REG_IME = 1;
|
||||
}
|
||||
|
||||
void sub_02000590(void)
|
||||
{
|
||||
REG_IME = 0;
|
||||
if (gUnknown_030005B1 < 10) {
|
||||
gUnknown_030005B1++;
|
||||
} else if (gUnknown_030043EC != 0) {
|
||||
u32 before = REG_IME;
|
||||
REG_IME = 0;
|
||||
REG_RCNT = 0x8000;
|
||||
REG_RCNT = 0xC000;
|
||||
REG_JOYSTAT = 0;
|
||||
REG_JOY_RECV;
|
||||
REG_JOY_TRANS = 0;
|
||||
REG_JOYCNT = 0x47;
|
||||
gUnknown_030043DC = 0;
|
||||
gUnknown_030043EC = 0;
|
||||
gUnknown_030005B1 = 10;
|
||||
gUnknown_030043E8 = 0;
|
||||
gUnknown_030005B0 = 0;
|
||||
gUnknown_030005BC = 0;
|
||||
REG_IF = 0x80;
|
||||
REG_IME = before;
|
||||
} else if (gUnknown_030005B0 < 11) {
|
||||
gUnknown_030005B0++;
|
||||
} else {
|
||||
u32 before = REG_IME;
|
||||
REG_IME = 0;
|
||||
REG_RCNT = 0x8000;
|
||||
REG_RCNT = 0xC000;
|
||||
REG_JOYSTAT = 0;
|
||||
REG_JOY_RECV;
|
||||
REG_JOY_TRANS = 0;
|
||||
REG_JOYCNT = 0x47;
|
||||
gUnknown_030043DC = 0;
|
||||
gUnknown_030043EC = 0;
|
||||
gUnknown_030005B1 = 10;
|
||||
gUnknown_030043E8 = 0;
|
||||
gUnknown_030005B0 = 0;
|
||||
gUnknown_030005BC = 0;
|
||||
REG_IF = 0x80;
|
||||
REG_IME = before;
|
||||
}
|
||||
REG_IME = 1;
|
||||
}
|
||||
|
||||
void sub_020006b8(void)
|
||||
{
|
||||
s32 r4;
|
||||
u16 joyCnt;
|
||||
|
||||
joyCnt = REG_JOYCNT;
|
||||
|
||||
switch (gUnknown_030043DC) {
|
||||
case 0:
|
||||
default:
|
||||
if ((joyCnt & 1)) {
|
||||
sub_02000bb0();
|
||||
gUnknown_030043DC += 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (!(joyCnt & 4)) {
|
||||
if ((joyCnt & 1)) {
|
||||
sub_02000bb0();
|
||||
} else {
|
||||
gUnknown_030043DC = 0;
|
||||
}
|
||||
} else {
|
||||
gUnknown_030043DC++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (joyCnt & 2) {
|
||||
if (REG_JOY_RECV == gUnknown_030005AC) {
|
||||
REG_JOYSTAT = 0x30;
|
||||
gUnknown_030043DC++;
|
||||
break;
|
||||
}
|
||||
gUnknown_030043DC = 0;
|
||||
break;
|
||||
}
|
||||
if ((joyCnt & 1)) {
|
||||
sub_02000bb0();
|
||||
gUnknown_030043DC = 1;
|
||||
} else {
|
||||
gUnknown_030043DC = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
gUnknown_030043DC++;
|
||||
break;
|
||||
case 4:
|
||||
if ((joyCnt & 4)) {
|
||||
REG_JOY_TRANS = gUnknown_030005BC;
|
||||
} else if ((2 & joyCnt)) {
|
||||
r4 = REG_JOY_RECV;
|
||||
if (r4 == 0x6F616843) {
|
||||
gUnknown_030005B1 = 0;
|
||||
gUnknown_030043EC = 1;
|
||||
} else {
|
||||
r4 = 0;
|
||||
}
|
||||
REG_JOY_TRANS = r4;
|
||||
gUnknown_030005BC = r4;
|
||||
}
|
||||
break;
|
||||
case 5:;
|
||||
if ((joyCnt & 4) != 0) {
|
||||
REG_JOY_TRANS = gUnknown_030005BC;
|
||||
break;
|
||||
}
|
||||
if ((2 & joyCnt)) {
|
||||
r4 = REG_JOY_RECV;
|
||||
if (r4 == 0x6F616843) {
|
||||
u16 a;
|
||||
gUnknown_030005B1 = 0;
|
||||
gUnknown_030043E8 = 0;
|
||||
a = gUnknown_030043F0;
|
||||
r4 = ((0xFF00 & a) << 8) | 0x4B43 | ((a << 0x18));
|
||||
} else if (r4 == 0x4F414843) {
|
||||
u16 a;
|
||||
gUnknown_030005B1 = 0;
|
||||
gUnknown_030043E8 = 1;
|
||||
a = gUnknown_030043F0;
|
||||
r4 = ((0xFF00 & a) << 8) | 0x4B43 | ((a << 0x18));
|
||||
} else {
|
||||
if ((r4 & 0xFF) == 0x2A) {
|
||||
sub_02000b0c(r4);
|
||||
gUnknown_030043DC = 6;
|
||||
} else if ((r4 & 0xFF) == 0x22) {
|
||||
sub_02000b64(r4);
|
||||
gUnknown_030043DC = 8;
|
||||
} else {
|
||||
r4 = 0;
|
||||
}
|
||||
}
|
||||
REG_JOY_TRANS = r4;
|
||||
gUnknown_030005BC = r4;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (!(joyCnt & 4)) {
|
||||
if ((joyCnt & 2)) {
|
||||
r4 = REG_JOY_RECV;
|
||||
if (!(r4 & 0xFFFF)) {
|
||||
r4 = sub_02000988(r4);
|
||||
gUnknown_030043DC = 7;
|
||||
} else if ((r4 & 0xFF) == 0x2A) {
|
||||
sub_02000b0c(r4);
|
||||
} else {
|
||||
r4 = 0;
|
||||
}
|
||||
REG_JOY_TRANS = r4;
|
||||
gUnknown_030005BC = r4;
|
||||
}
|
||||
} else {
|
||||
REG_JOY_TRANS = gUnknown_030005BC;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (!(joyCnt & 4)) {
|
||||
if (joyCnt & 2) {
|
||||
r4 = sub_02000988(REG_JOY_RECV);
|
||||
REG_JOY_TRANS = r4;
|
||||
gUnknown_030005BC = r4;
|
||||
}
|
||||
} else {
|
||||
REG_JOY_TRANS = gUnknown_030005BC;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
if (!(joyCnt & 4)) {
|
||||
if (joyCnt & 2) {
|
||||
r4 = REG_JOY_RECV;
|
||||
if ((r4 & 0xFF) == 0x22) {
|
||||
sub_02000b64(r4);
|
||||
} else if ((r4 & 0xFF) == 0x26) {
|
||||
r4 = sub_02000a40(r4);
|
||||
gUnknown_030043DC = 9;
|
||||
} else {
|
||||
r4 = 0;
|
||||
}
|
||||
REG_JOY_TRANS = r4;
|
||||
gUnknown_030005BC = r4;
|
||||
}
|
||||
} else {
|
||||
REG_JOY_TRANS = gUnknown_030005BC;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
if ((joyCnt & 4)) {
|
||||
REG_JOY_TRANS = gUnknown_030005BC;
|
||||
break;
|
||||
}
|
||||
|
||||
if (joyCnt & 2) {
|
||||
r4 = sub_02000a40(REG_JOY_RECV);
|
||||
REG_JOY_TRANS = r4;
|
||||
gUnknown_030005BC = r4;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
gUnknown_030005B0 = 0;
|
||||
REG_JOYCNT = joyCnt;
|
||||
}
|
||||
|
||||
s32 sub_02000988(s32 in)
|
||||
{
|
||||
u32 ret = in;
|
||||
if ((gUnknown_030005B8 == (gUnknown_030005BA + 1)) && (ret == 0x6F616843)) {
|
||||
gUnknown_030005B1 = 0;
|
||||
ret = ({
|
||||
u16 a = gUnknown_030043F0;
|
||||
((0xFF00 & a) << 8) | 0x4B43 | (a << 0x18);
|
||||
});
|
||||
gUnknown_030043DC = 5;
|
||||
gUnknown_030043D8 = 2;
|
||||
} else {
|
||||
u16 r2 = ((ret & 0xff) << 8) | ((ret >> 8) & 0xff);
|
||||
if ((r2 - gUnknown_030005BA) == 1) {
|
||||
gUnknown_030005BA = r2;
|
||||
gUnknown_030005B4 += 2;
|
||||
}
|
||||
if (r2 == gUnknown_030005BA) {
|
||||
gUnknown_030005B1 = 0;
|
||||
gUnknown_030005B4[0] = ret >> 0x10;
|
||||
gUnknown_030005B4[1] = ret >> 0x18;
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 sub_02000a40(s32 in)
|
||||
{
|
||||
s32 ret = in;
|
||||
|
||||
if (gUnknown_030005B8 == (gUnknown_030005BA + 1) && gUnknown_030005BC == ret) {
|
||||
gUnknown_030005B1 = 0;
|
||||
ret = ({
|
||||
u16 a = gUnknown_030043F0;
|
||||
((0xFF00 & a) << 8) | 0x4B43 | (a << 0x18);
|
||||
});
|
||||
gUnknown_030043DC = 5;
|
||||
gUnknown_030043E4 = 2;
|
||||
} else {
|
||||
if (gUnknown_030005BC == ret) {
|
||||
gUnknown_030005B1 = 0;
|
||||
gUnknown_030005BA += 1;
|
||||
gUnknown_030005B4 += 2;
|
||||
}
|
||||
ret = (gUnknown_030005B4[0] << 0x10) | (gUnknown_030005B4[1] << 0x18) | ((u16)gUnknown_030005BA >> 8)
|
||||
| ((0xFF & gUnknown_030005BA) << 8);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void sub_02000af0(u8 p)
|
||||
{
|
||||
REG_IME = 0;
|
||||
gUnknown_030043DC = p;
|
||||
REG_IME = 1;
|
||||
}
|
||||
|
||||
void sub_02000b0c(u32 arg0)
|
||||
{
|
||||
gUnknown_030005B1 = 0;
|
||||
// This could be gUnknown_03003330->unk20?
|
||||
gUnknown_030005B4 = &gUnknown_03003350;
|
||||
gUnknown_030005B8 = ((arg0 >> 8) & 0xFF00) | (arg0 >> 0x18);
|
||||
gUnknown_030005BA = 0;
|
||||
gUnknown_030043E0 = gUnknown_030005B8 * 2;
|
||||
gUnknown_030043D8 = 1;
|
||||
}
|
||||
|
||||
void sub_02000b64(u32 p1)
|
||||
{
|
||||
gUnknown_030005B1 = 0;
|
||||
gUnknown_030005B4 = &gGameState.unk58;
|
||||
gUnknown_030005B8 = ((p1 >> 8) & 0xFF00) | (p1 >> 0x18);
|
||||
gUnknown_030005BA = 0;
|
||||
gUnknown_030043E4 = 1;
|
||||
}
|
||||
|
||||
void sub_02000bb0(void)
|
||||
{
|
||||
REG_JOY_RECV;
|
||||
REG_JOY_TRANS = gUnknown_030005A8;
|
||||
REG_JOYSTAT = 0x20;
|
||||
}
|
||||
+47
-42
@@ -27,16 +27,16 @@ void LoadGameState(void)
|
||||
sector = -1;
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
ReadFlash(i + 10, 0, &gUnknown_03003B80, sizeof(struct TCG_SaveSectorData));
|
||||
if (gUnknown_03003B80.header.unk2 == 0x1965) {
|
||||
u16 checksum = sub_0200185c((void *)&gUnknown_03003B80.header.unk2, sizeof(struct TCG_SaveSectorData) - sizeof(u16));
|
||||
if (checksum == gUnknown_03003B80.header.checksum) {
|
||||
ReadFlash(i + 10, 0, &gGameState, sizeof(struct TCG_SaveSectorData));
|
||||
if (gGameState.header.unk2 == 0x1965) {
|
||||
u16 checksum = sub_0200185c((void *)&gGameState.header.unk2, sizeof(struct TCG_SaveSectorData) - sizeof(u16));
|
||||
if (checksum == gGameState.header.checksum) {
|
||||
if (sector < 0) {
|
||||
sector = i;
|
||||
p = gUnknown_03003B80.header.unk4;
|
||||
} else if (gUnknown_03003B80.header.unk4 > p) {
|
||||
p = gGameState.header.unk4;
|
||||
} else if (gGameState.header.unk4 > p) {
|
||||
sector = i;
|
||||
p = gUnknown_03003B80.header.unk4;
|
||||
p = gGameState.header.unk4;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -46,40 +46,39 @@ void LoadGameState(void)
|
||||
gSaveSectorNum = TCG_SAVE_SECTOR_COUNT;
|
||||
gSaveVersion = 0;
|
||||
InitGameState();
|
||||
gUnknown_03003B80.unk59 = 0;
|
||||
gUnknown_03003B80.unk1F = 0x58;
|
||||
gUnknown_03003B80.unk20 = 0x68;
|
||||
gGameState.unk59 = 0;
|
||||
gGameState.unk1F = 0x58;
|
||||
gGameState.unk20 = 0x68;
|
||||
} else {
|
||||
gSaveSectorNum = sector;
|
||||
gSaveVersion = p;
|
||||
ReadFlash(gSaveSectorNum + TCG_FIRST_SAVE_SECTOR, 0, &gUnknown_03003B80, sizeof(struct TCG_SaveSectorData));
|
||||
sub_02001528(gUnknown_03003B80.unk18);
|
||||
ReadFlash(gSaveSectorNum + TCG_FIRST_SAVE_SECTOR, 0, &gGameState, sizeof(struct TCG_SaveSectorData));
|
||||
sub_02001528(gGameState.unk18);
|
||||
}
|
||||
if (gUnknown_03003B80.unk8 >= gUnknown_02000008.unk0) {
|
||||
gUnknown_03005274 = gUnknown_03003B80.unkC;
|
||||
if (gGameState.unk8 >= gUnknown_02000008.unk0) {
|
||||
gUnknown_03005274 = gGameState.unkC;
|
||||
} else {
|
||||
p = gUnknown_03003B80.unkC + (gUnknown_02000008.unk0 - gUnknown_03003B80.unk8);
|
||||
p = gGameState.unkC + (gUnknown_02000008.unk0 - gGameState.unk8);
|
||||
if (p > 0x1869F) {
|
||||
p = 0x1869F;
|
||||
}
|
||||
gUnknown_03005274 = p;
|
||||
gUnknown_03003B80.unk8 = gUnknown_02000008.unk0;
|
||||
gGameState.unk8 = gUnknown_02000008.unk0;
|
||||
}
|
||||
gUnknown_03003B80.unk64 = (gUnknown_03005274 & 0xFF) << 24 | ((gUnknown_03005274 & 0xFF00) << 8) | (gUnknown_03005274 & 0xFF0000) >> 8
|
||||
gGameState.unk64 = (gUnknown_03005274 & 0xFF) << 24 | ((gUnknown_03005274 & 0xFF00) << 8) | (gUnknown_03005274 & 0xFF0000) >> 8
|
||||
| gUnknown_03005274 >> 24;
|
||||
gUnknown_03003B80.unk68 = 0;
|
||||
gGameState.unk68 = 0;
|
||||
}
|
||||
|
||||
void SaveGameState(void)
|
||||
{
|
||||
s32 i;
|
||||
gUnknown_03003B80.header.unk2 = 0x1965;
|
||||
gGameState.header.unk2 = 0x1965;
|
||||
gSaveVersion++;
|
||||
gUnknown_03003B80.header.unk4 = gSaveVersion;
|
||||
gUnknown_03003B80.unkC = gUnknown_03005274;
|
||||
gUnknown_03003B80.unk18 = sub_0200151c();
|
||||
gUnknown_03003B80.header.checksum
|
||||
= sub_0200185c((void *)&gUnknown_03003B80.header.unk2, sizeof(struct TCG_SaveSectorData) - sizeof(u16));
|
||||
gGameState.header.unk4 = gSaveVersion;
|
||||
gGameState.unkC = gUnknown_03005274;
|
||||
gGameState.unk18 = sub_0200151c();
|
||||
gGameState.header.checksum = sub_0200185c((void *)&gGameState.header.unk2, sizeof(struct TCG_SaveSectorData) - sizeof(u16));
|
||||
m4aMPlayAllStop();
|
||||
m4aSoundMain();
|
||||
VBlankIntrWait();
|
||||
@@ -92,8 +91,7 @@ void SaveGameState(void)
|
||||
gSaveSectorNum = 0;
|
||||
}
|
||||
|
||||
failure = ProgramFlashSectorAndVerifyNBytes(gSaveSectorNum + TCG_FIRST_SAVE_SECTOR, &gUnknown_03003B80,
|
||||
sizeof(struct TCG_SaveSectorData));
|
||||
failure = ProgramFlashSectorAndVerifyNBytes(gSaveSectorNum + TCG_FIRST_SAVE_SECTOR, &gGameState, sizeof(struct TCG_SaveSectorData));
|
||||
|
||||
if (!failure) {
|
||||
break;
|
||||
@@ -103,20 +101,27 @@ void SaveGameState(void)
|
||||
VBlankIntrWait();
|
||||
}
|
||||
|
||||
// void InitGameState(void)
|
||||
// {
|
||||
// u32 i = 0;
|
||||
// u8 *p = (u8*)&gUnknown_03003B80.unk8;
|
||||
// u8 *p2;
|
||||
// for (i = 0; i < 0x50; i++) {
|
||||
// *p = 0;
|
||||
// p++;
|
||||
// }
|
||||
NONMATCH("asm/non_matching/InitGameState.inc", void InitGameState(void))
|
||||
{
|
||||
u8 *p, *p2;
|
||||
u32 r1, i;
|
||||
p = (u8 *)(&gGameState.unk8);
|
||||
|
||||
// p2 = &gUnknown_03003B80.unk68;
|
||||
// while ((u32)p2 < (u32)&gUnknown_03003B80 + sizeof(gUnknown_03003B80)) {
|
||||
// p2 = 0;
|
||||
// }
|
||||
// gUnknown_03003B80.unk10 = sub_02008810();
|
||||
// gUnknown_03003B80.unk1C = -1;
|
||||
// }
|
||||
i = 0;
|
||||
r1 = 0x50;
|
||||
for (i = 0; i < r1; i++) {
|
||||
*p = 0;
|
||||
p++;
|
||||
}
|
||||
|
||||
p = (u8 *)&gGameState.unk58;
|
||||
r1 = 0xFF;
|
||||
p2 = p + 0x11;
|
||||
do {
|
||||
*p2-- = r1;
|
||||
} while ((s32)p2 >= (s32)p);
|
||||
|
||||
gGameState.unk10 = sub_02008810();
|
||||
gGameState.unk1C = 0xFF;
|
||||
}
|
||||
END_NONMATCH
|
||||
Vendored
+1
@@ -1,2 +1,3 @@
|
||||
epos
|
||||
*.csv
|
||||
entity_positions
|
||||
BIN
Binary file not shown.
Reference in new issue
Block a user