summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoroctorock <79596758+octorock@users.noreply.github.com>2021-06-16 21:11:01 +0200
committeroctorock <79596758+octorock@users.noreply.github.com>2021-06-23 08:30:45 +0200
commitb0510402aba80e534c85ba29aa8ffa6d7c5a2c17 (patch)
tree18d555f7aabc3848c388bf28f9bd0f0bd508ca8b /src
parent8621bc9329e7c4989ce6e391a06867638a7b23e7 (diff)
Add DEMO variant
Diffstat (limited to 'src')
-rw-r--r--src/audio.c42
-rw-r--r--src/code_0805436C.c2
-rw-r--r--src/code_0805F9A0.c32
-rw-r--r--src/eeprom.c9
-rw-r--r--src/game.c13
-rw-r--r--src/intro.c18
-rw-r--r--src/main.c17
-rw-r--r--src/room.c24
-rw-r--r--src/save.c51
-rw-r--r--src/sub_080A3B84.c2
10 files changed, 206 insertions, 4 deletions
diff --git a/src/audio.c b/src/audio.c
index 580a940e..39e1cfdd 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -742,7 +742,11 @@ extern const SongHeader sfx21F;
extern const SongHeader sfx220;
extern const SongHeader sfx221;
+#ifdef DEMO
+extern MusicPlayerTrack gMPlayTracksDEMO[];
+#else
extern MusicPlayerTrack gMPlayTracks[];
+#endif
extern MusicPlayerInfo gMPlayInfos[0x1C];
extern u8 gMPlayMemAccArea[0x10];
@@ -783,6 +787,43 @@ typedef enum {
MUSIC_PLAYER_BGM,
} MusicPlayerE;
+
+#ifdef DEMO
+const MusicPlayer gMusicPlayers[] = {
+ [MUSIC_PLAYER_00] = { &gMPlayInfos[0x08], &gMPlayTracksDEMO[0x00], 2, 1 },
+ [MUSIC_PLAYER_PLY_VO] = { &gMPlayInfos[0x12], &gMPlayTracksDEMO[0x02], 1, 1 },
+ [MUSIC_PLAYER_02] = { &gMPlayInfos[0x13], &gMPlayTracksDEMO[0x03], 1, 1 },
+ [MUSIC_PLAYER_03] = { &gMPlayInfos2[0x2], &gMPlayTracksDEMO[0x04], 2, 1 },
+ [MUSIC_PLAYER_04] = { &gMPlayInfos[0x1B], &gMPlayTracksDEMO[0x06], 2, 1 },
+ [MUSIC_PLAYER_05] = { &gMPlayInfos[0x03], &gMPlayTracksDEMO[0x08], 2, 1 },
+ [MUSIC_PLAYER_06] = { &gMPlayInfos[0x07], &gMPlayTracksDEMO[0x0A], 2, 1 },
+ [MUSIC_PLAYER_07] = { &gMPlayInfos[0x11], &gMPlayTracksDEMO[0x0C], 2, 1 },
+ [MUSIC_PLAYER_08] = { &gMPlayInfos2[0x1], &gMPlayTracksDEMO[0x0E], 2, 1 },
+ [MUSIC_PLAYER_09] = { &gMPlayInfos[0x06], &gMPlayTracksDEMO[0x10], 2, 1 },
+ [MUSIC_PLAYER_0A] = { &gMPlayInfos[0x14], &gMPlayTracksDEMO[0x12], 2, 1 },
+ [MUSIC_PLAYER_0B] = { &gMPlayInfos2[0x3], &gMPlayTracksDEMO[0x14], 2, 1 },
+ [MUSIC_PLAYER_0C] = { &gMPlayInfos[0x19], &gMPlayTracksDEMO[0x16], 2, 1 },
+ [MUSIC_PLAYER_0D] = { &gMPlayInfos[0x02], &gMPlayTracksDEMO[0x18], 2, 1 },
+ [MUSIC_PLAYER_0E] = { &gMPlayInfos[0x0E], &gMPlayTracksDEMO[0x1A], 2, 1 },
+ [MUSIC_PLAYER_0F] = { &gMPlayInfos[0x18], &gMPlayTracksDEMO[0x1C], 2, 1 },
+ [MUSIC_PLAYER_10] = { &gMPlayInfos[0x05], &gMPlayTracksDEMO[0x1E], 2, 1 },
+ [MUSIC_PLAYER_11] = { &gMPlayInfos[0x1A], &gMPlayTracksDEMO[0x20], 2, 1 },
+ [MUSIC_PLAYER_12] = { &gMPlayInfos[0x0D], &gMPlayTracksDEMO[0x22], 2, 1 },
+ [MUSIC_PLAYER_13] = { &gMPlayInfos[0x00], &gMPlayTracksDEMO[0x24], 2, 1 },
+ [MUSIC_PLAYER_14] = { &gMPlayInfos[0x0A], &gMPlayTracksDEMO[0x26], 2, 1 },
+ [MUSIC_PLAYER_15] = { &gMPlayInfos[0x0C], &gMPlayTracksDEMO[0x28], 2, 1 },
+ [MUSIC_PLAYER_16] = { &gMPlayInfos[0x17], &gMPlayTracksDEMO[0x2A], 2, 1 },
+ [MUSIC_PLAYER_17] = { &gMPlayInfos[0x01], &gMPlayTracksDEMO[0x2C], 2, 1 },
+ [MUSIC_PLAYER_18] = { &gMPlayInfos[0x0B], &gMPlayTracksDEMO[0x2E], 2, 1 },
+ [MUSIC_PLAYER_19] = { &gMPlayInfos[0x15], &gMPlayTracksDEMO[0x30], 2, 1 },
+ [MUSIC_PLAYER_1A] = { &gMPlayInfos[0x09], &gMPlayTracksDEMO[0x32], 2, 1 },
+ [MUSIC_PLAYER_1B] = { &gMPlayInfos2[0x0], &gMPlayTracksDEMO[0x34], 2, 1 },
+ [MUSIC_PLAYER_1C] = { &gMPlayInfos[0x0F], &gMPlayTracksDEMO[0x36], 2, 1 },
+ [MUSIC_PLAYER_1D] = { &gMPlayInfos[0x16], &gMPlayTracksDEMO[0x38], 2, 1 },
+ [MUSIC_PLAYER_1E] = { &gMPlayInfos[0x04], &gMPlayTracksDEMO[0x3A], 0xc, 0 },
+ [MUSIC_PLAYER_BGM] = { &gMPlayInfos[0x10], &gMPlayTracksDEMO[0x46], 0xc, 0 },
+};
+#else
const MusicPlayer gMusicPlayers[] = {
[MUSIC_PLAYER_00] = { &gMPlayInfos[0x08], &gMPlayTracks[0x00], 2, 1 },
[MUSIC_PLAYER_PLY_VO] = { &gMPlayInfos[0x12], &gMPlayTracks[0x02], 1, 1 },
@@ -817,6 +858,7 @@ const MusicPlayer gMusicPlayers[] = {
[MUSIC_PLAYER_1E] = { &gMPlayInfos[0x04], &gMPlayTracks[0x3A], 0xc, 0 },
[MUSIC_PLAYER_BGM] = { &gMPlayInfos[0x10], &gMPlayTracks[0x46], 0xc, 0 },
};
+#endif
const Song gSongTable[] = {
[SFX_NONE] = { &sfxNone, MUSIC_PLAYER_BGM, MUSIC_PLAYER_BGM },
diff --git a/src/code_0805436C.c b/src/code_0805436C.c
index 61dfa3e0..21934343 100644
--- a/src/code_0805436C.c
+++ b/src/code_0805436C.c
@@ -265,5 +265,7 @@ u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) {
*/
void sub_08054870(void) {
+ #ifndef DEMO
gUnk_080FE2A0[gMenu.menuType]();
+ #endif
}
diff --git a/src/code_0805F9A0.c b/src/code_0805F9A0.c
index 856357d5..612c4371 100644
--- a/src/code_0805F9A0.c
+++ b/src/code_0805F9A0.c
@@ -4,9 +4,14 @@
#include "functions.h"
extern u16 gUnk_081092D4;
-extern u8 gUnk_02036AD8;
extern u8 gUnk_081094CE;
+#ifdef DEMO
+extern u8 gUnk_02036AD0;
+extern u8 gUnk_02036A50;
+#else
+extern u8 gUnk_02036AD8;
extern u8 gUnk_02036A58;
+#endif
extern void* gUnk_081092AC[];
typedef struct {
@@ -59,7 +64,11 @@ void sub_0805F820(WStruct* r0, u32* r1) {
VStruct* temp3;
if (r0->unk4 - r0->unk6 > 0) {
+ #ifdef DEMO
+ sub_08002724(r1, &gUnk_02036A50);
+ #else
sub_08002724(r1, &gUnk_02036A58);
+ #endif
if (r0->unk1 == 0) {
u32 tmp = sub_0805F7A0(*r1);
uVar6 = tmp & 0xf;
@@ -77,7 +86,11 @@ void sub_0805F820(WStruct* r0, u32* r1) {
uVar3 = uVar4;
}
+ #ifdef DEMO
+ puVar8 = &gUnk_02036A50 + uVar6;
+ #else
puVar8 = &gUnk_02036A58 + uVar6;
+ #endif
temp2 = r0->unk8;
temp = gUnk_0810942E[r0->unk3].filler0[r0->unk2 * 2];
uVar7 = r0->unk6;
@@ -120,23 +133,40 @@ void sub_0805F918(u32 idx, u32 idx2, void* dest) {
u8* temp;
u8* temp2;
+ #ifdef DEMO
+ MemFill32(sub_0805F8F8(idx2), &gUnk_02036AD0, 0xe0);
+ #else
MemFill32(sub_0805F8F8(idx2), &gUnk_02036AD8, 0xe0);
+ #endif
puVar1 = gUnk_081092AC[idx];
temp = &gUnk_081094CE + idx2 * 0xc0;
idx3 = 0;
for (i = 0; i < 3; i++) {
+ #ifdef DEMO
+ puVar2 = &gUnk_02036A50;
+ sub_08002724(puVar1, &gUnk_02036A50);
+ #else
puVar2 = &gUnk_02036A58;
sub_08002724(puVar1, &gUnk_02036A58);
+ #endif
puVar1 += 0x40;
for (j = 0; j < 8; j++) {
+ #ifdef DEMO
+ sub_080026C4(puVar2, &gUnk_02036AD0, temp, idx3);
+ #else
sub_080026C4(puVar2, &gUnk_02036AD8, temp, idx3);
+ #endif
puVar2++;
idx3++;
}
}
+ #ifdef DEMO
+ LoadResourceAsync((const void*)&gUnk_02036AD0, (u32)dest, 0xe0);
+ #else
LoadResourceAsync((const void*)&gUnk_02036AD8, (u32)dest, 0xe0);
+ #endif
}
u32 sub_0805F9A0(u32 r0) {
diff --git a/src/eeprom.c b/src/eeprom.c
index 4ea218b3..945c788f 100644
--- a/src/eeprom.c
+++ b/src/eeprom.c
@@ -1,6 +1,10 @@
#include "global.h"
#include "gba/eeprom.h"
+#ifdef DEMO
+const u8 unk[] = {0xff, 0xff, 0xff, 0xff};
+const u8 padding[0x18] = {};
+#else
typedef struct EEPROMConfig {
u32 unk_00;
u16 size;
@@ -9,6 +13,7 @@ typedef struct EEPROMConfig {
// u8 filler[3];
} EEPROMConfig;
+
const char EEPROM_V124[] = "EEPROM_V124";
extern const EEPROMConfig* gEEPROMConfig;
const EEPROMConfig gEEPROMConfig512 = { 0x200, 0x40, 0x300, 0x6 };
@@ -16,6 +21,8 @@ const EEPROMConfig gEEPROMConfig8k = { 0x2000, 0x400, 0x300, 0xe };
u16 EEPROMWrite(u16, const u16*, u8);
+
+
u16 EEPROMConfigure(u16 unk_1) {
u16 ret;
@@ -248,3 +255,5 @@ u16 EEPROMWrite0_8k_Check(u16 address, const u16* data) {
}
const char thing[0x1c] = "\xff\xff\xff\xff";
+
+#endif \ No newline at end of file
diff --git a/src/game.c b/src/game.c
index 49fe233f..4117416d 100644
--- a/src/game.c
+++ b/src/game.c
@@ -61,10 +61,15 @@ void sub_0805212C(void) {
gMenu.transitionTimer--;
if (gMenu.transitionTimer == 0) {
sub_080520C4(2);
+ #ifdef DEMO
+ SoundReq(0x80080000);
+ DoFade(7,4);
+ #else
sub_08052418(0, 0);
gScreen.lcd.displayControl |= 0x600;
gFadeControl.field_0x4 = 0xffff;
DoFade(4, 0x10);
+ #endif
}
}
} else {
@@ -72,6 +77,13 @@ void sub_0805212C(void) {
}
}
+#ifdef DEMO
+void sub_080521A0(void) {
+ if (gFadeControl.active == 0) {
+ DoSoftReset();
+ }
+}
+#else
void sub_080521A0(void) {
s32 temp3;
u32 temp2;
@@ -147,6 +159,7 @@ void sub_080521A0(void) {
break;
}
}
+#endif
void sub_080522F4(void) {
switch (gMenu.menuType) {
diff --git a/src/intro.c b/src/intro.c
index 8eca40dc..33e87e6c 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -104,6 +104,24 @@ static void HandleNintendoCapcomLogos(void) {
gScreen.bg.bg1Updated = 1;
DoFade(6, 8);
advance = ADVANCE_NONE;
+ #ifdef DEMO
+ if (gUnk_02000010.listenForKeyPresses == 0) {
+ if ((gInput.heldKeys & 0x204) == 0x204) { // TODO
+ gUnk_02000010.field_0x7 = 1;
+ SoundReq(0x73);
+ }
+ else {
+ if ((gInput.heldKeys & 0x104) == 0x104) { // TODO
+ gUnk_02000010.field_0x7 = 2;
+ SoundReq(0xcd);
+ }
+ else {
+ gUnk_02000010.field_0x7 = 0;
+ }
+ }
+ }
+ #endif
+
} else {
if (advance == ADVANCE_TIMER_EXPIRED) {
advance = ADVANCE_KEY_PRESSED;
diff --git a/src/main.c b/src/main.c
index 78e9fdd0..3fa19e65 100644
--- a/src/main.c
+++ b/src/main.c
@@ -12,13 +12,20 @@
extern void HandleIntroScreen(void);
extern void HandleChooseFileScreen(void);
+extern void HandleChooseDemoScreen(void);
extern void HandleGameplayScreen(void);
extern void HandleGameOverScreen(void);
extern void HandleCreditsScreen(void);
extern void HandleDebugTextScreen(void);
static void (*const sScreenHandlers[])(void) = {
- [SCREEN_INTRO] = HandleIntroScreen, [SCREEN_CHOOSE_FILE] = HandleChooseFileScreen,
+ [SCREEN_INTRO] = HandleIntroScreen,
+ #ifdef DEMO
+ [SCREEN_CHOOSE_FILE] = HandleChooseDemoScreen,
+ #else
+ [SCREEN_CHOOSE_FILE] = HandleChooseFileScreen,
+ #endif
+
[SCREEN_GAMEPLAY] = HandleGameplayScreen, [SCREEN_GAME_OVER] = HandleGameOverScreen,
[SCREEN_CREDITS] = HandleCreditsScreen, [SCREEN_DEBUG_TEXT] = HandleDebugTextScreen,
};
@@ -83,7 +90,11 @@ void AgbMain(void) {
// Interrupt handlers that are loaded into RAM.
extern u8 sub_080B197C[];
extern u8 gUnk_030056F0[];
+#ifdef DEMO
+extern u8 gUnk_02038558[];
+#else
extern u8 gUnk_02038560[];
+#endif
extern u8 gUnk_080B2CD8[];
extern u8 gUnk_080B2CD8_2[];
extern u8 gUnk_080B2CD8_3[];
@@ -105,7 +116,11 @@ static void sub_08055F70(void) {
size = (u32)gUnk_080B2CD8_2 - (u32)gUnk_080B2CD8_3;
if (size != 0) {
+ #ifdef DEMO
+ MemCopy(gUnk_080B2CD8_3, gUnk_02038558, size);
+ #else
MemCopy(gUnk_080B2CD8_3, gUnk_02038560, size);
+ #endif
}
DispReset(0);
diff --git a/src/room.c b/src/room.c
index c2b1f07b..5e9deac0 100644
--- a/src/room.c
+++ b/src/room.c
@@ -2161,8 +2161,18 @@ u32 sub_0804CD0C() {
return 1;
}
+#ifdef DEMO
void nullsub_251() {
+ if (gUnk_02000000->saveFileId != 0 && GetInventoryValue(0x40) == 0) {
+ SetTileType(0x365,0x349,1);
+ SetTileType(0x365,0x34a,1);
+ SetTileType(0x365,0x34b,1);
+ }
}
+#else
+void nullsub_251() {
+}
+#endif
u32 sub_0804CD14() {
return 1;
@@ -2288,8 +2298,18 @@ u32 sub_0804CE38() {
return 1;
}
+#ifdef DEMO
void nullsub_262() {
+ if (GetInventoryValue(0x41) == 0) {
+ SetTileType(0x365,0x287,2);
+ SetTileType(0x365,0x288,2);
+ SetTileType(0x365,0x289,2);
+ }
}
+#else
+void nullsub_262() {
+}
+#endif
u32 sub_0804CE40() {
return 1;
@@ -5049,6 +5069,10 @@ void sub_0804EC00(void) {
if ((s32)gSave.windcrests > -1) {
LoadRoomEntityList(&gUnk_080F4E10);
}
+ #ifdef DEMO
+ SetTileType(0x177,0x5b4,1);
+ SetTileType(0x177,0x5f4,1);
+ #endif
}
void sub_0804EC98(void) {
diff --git a/src/save.c b/src/save.c
index 749b6730..8b751914 100644
--- a/src/save.c
+++ b/src/save.c
@@ -41,10 +41,20 @@ u32 DataCompare(u32 address, const void* data, u32 size);
const u16 gUnk_0811E454[] = { 0x0, 0x0, 0x100, 0x200, 0x300, 0x400, 0x500,
0x5C0, 0x680, 0x740, 0x800, 0x8C0, 0x9C0, 0xA80 };
-const char gUnk_0811E470[6] = "LINK";
+const char gUnk_0811E470[4] = "LINK";
+
+#ifdef DEMO
+const u8 unknown[] = { 0x0, 0x0f, 0x0a, 0x0a, 0x0f, 0x0f, 0x0f, 0x08, 0x05, 0x05, 0x00, 0x00 };
+#else
+const u8 padding[2] = {0,0};
+#endif
static SaveResult (*const sSaveHandlers[])(u32) = { HandleSaveInit, HandleSaveInProgress, HandleSaveDone };
+
+#ifdef DEMO
+asm(".incbin \"baserom_demo.gba\", 0x11e010, 0xf0c"); // @nocheckin
+#else
static const char sSignatureLong[32] = "AGBZELDA:THE MINISH CAP:ZELDA 5";
// Save file is untouched
@@ -60,7 +70,7 @@ const SaveFileEEPROMAddresses gSaveFileEEPROMAddresses[] = { { 0x500, 0x30, 0x10
{ 0x20, 0, 0, 0, 0x1000 },
{ 0x20, 0x60, 0x1060, 0xf80, 0x1f80 },
{ 0x8, 0xfa0, 0x1fa0, 0xfa0, 0x1fa0 } };
-
+#endif
void sub_0807CD9C() {
sub_080530C8();
}
@@ -122,7 +132,12 @@ SaveResult HandleSaveDone(u32 arg0) {
return result;
}
+
u32 InitSaveData(void) {
+#ifdef DEMO
+ CpuSet(NULL,&gSave,0x4b4);
+ return 1;
+#else
const SaveFileEEPROMAddresses* eepromAddresses;
u32 error;
@@ -147,40 +162,71 @@ u32 InitSaveData(void) {
DataWrite(eepromAddresses->address1, sSignatureLong, eepromAddresses->size);
}
return 1;
+#endif
}
u32 WriteSaveFile(u32 index, SaveFile* saveFile) {
+ #ifdef DEMO
+ return 1;
+ #else
return DataDoubleWriteWithStatus(index, saveFile);
+ #endif
}
u32 Write_02000000(struct_02000000* arg0) {
+ #ifdef DEMO
+ return 1;
+ #else
return DataDoubleWriteWithStatus(3, arg0);
+ #endif
}
u32 sub_0807CF1C(u8* arg0) {
+ #ifdef DEMO
+ return 1;
+ #else
return DataDoubleWriteWithStatus(5, arg0);
+ #endif
}
s32 ReadSaveFile(u32 index, SaveFile* saveFile) {
+ #ifdef DEMO
+ return 1;
+ #else
return DataDoubleReadWithStatus(index, saveFile);
+ #endif
}
u32 Read_02000000(struct_02000000* arg0) {
+ #ifdef DEMO
+ return 0;
+ #else
return DataDoubleReadWithStatus(3, arg0);
+ #endif
}
u32 sub_0807CF3C(u8* arg0) {
+ #ifdef DEMO
+ return 0;
+ #else
return DataDoubleReadWithStatus(5, arg0);
+ #endif
}
+
+
void SetFileStatusDeleted(u32 index) {
+ #ifndef DEMO
const SaveFileEEPROMAddresses* eepromAddresses;
eepromAddresses = GetSaveFileEEPROMAddresses(index);
WriteSaveFileStatus(eepromAddresses->checksum2, &sSaveDescDeleted);
WriteSaveFileStatus(eepromAddresses->checksum1, &sSaveDescDeleted);
+ #endif
}
+
+#ifndef DEMO
void SetFileStatusInit(u32 index) {
const SaveFileEEPROMAddresses* eepromAddresses;
const SaveFileStatus* fileStatus;
@@ -406,3 +452,4 @@ bool32 DataCompare(u32 address, const void* data, u32 size) {
}
return TRUE;
}
+#endif \ No newline at end of file
diff --git a/src/sub_080A3B84.c b/src/sub_080A3B84.c
index b4df18d0..af806c36 100644
--- a/src/sub_080A3B84.c
+++ b/src/sub_080A3B84.c
@@ -7,6 +7,7 @@
extern void (*const gUnk_081280C4[])();
void DrawKinstoneMenu(void) {
+ #ifndef DEMO
gScreenTransition.field_0x24[8] = 2;
FlushSprites();
gUnk_081280C4[gMenu.menuType]();
@@ -18,6 +19,7 @@ void DrawKinstoneMenu(void) {
sub_080AD9B0();
sub_080AD918();
gScreenTransition.field_0x24[8] = 0;
+ #endif
}
extern void gUnk_081280DC;