Add DEMO variant

This commit is contained in:
octorock 2021-06-16 21:11:01 +02:00
parent 8621bc9329
commit b0510402ab
27 changed files with 511 additions and 12 deletions

View File

@ -5,17 +5,34 @@ COMPARE ?= 0
CPP := $(CC) -E CPP := $(CC) -E
LD := $(DEVKITARM)/bin/arm-none-eabi-ld LD := $(DEVKITARM)/bin/arm-none-eabi-ld
GAME_VERSION := THEMINISHCAP GAME_VERSION ?= USA
REVISION := 0 REVISION := 0
GAME_LANGUAGE := ENGLISH GAME_LANGUAGE := ENGLISH
TITLE := GBAZELDA MC TITLE := GBAZELDA MC
GAME_CODE := BZME
MAKER_CODE := 01 MAKER_CODE := 01
ifeq ($(GAME_VERSION), USA)
GAME_CODE := BZME
BUILD_NAME := tmc
else
ifeq ($(GAME_VERSION), DEMO)
GAME_CODE := BZHE
BUILD_NAME := tmc
else
ifeq ($(GAME_VERSION), JP)
GAME_CODE := BZMJ
BUILD_NAME := tmc
else
$(error unknown version $(GAME_VERSION))
endif
endif
endif
SHELL := /bin/bash -o pipefail SHELL := /bin/bash -o pipefail
BUILD_NAME := tmc
ROM := $(BUILD_NAME).gba ROM := $(BUILD_NAME).gba
OBJ_DIR := build/$(BUILD_NAME) OBJ_DIR := build/$(BUILD_NAME)
@ -120,11 +137,11 @@ MAKEFLAGS += --no-print-directory
AUTO_GEN_TARGETS := AUTO_GEN_TARGETS :=
all: $(ROM) all: $(ROM)
@$(SHA1) tmc.sha1 @$(SHA1) $(BUILD_NAME).sha1
# kept for backwards compat # kept for backwards compat
compare: $(ROM) compare: $(ROM)
@$(SHA1) tmc.sha1 @$(SHA1) $(BUILD_NAME).sha1
setup: $(TOOLDIRS) setup: $(TOOLDIRS)
@ -205,3 +222,8 @@ $(ELF): $(OBJS) linker.ld
$(ROM): $(ELF) $(ROM): $(ELF)
$(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0x9000000 $< $@ $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0x9000000 $< $@
usa: ; @$(MAKE) GAME_VERSION=USA
demo: ; @$(MAKE) GAME_VERSION=DEMO
jp: ; @$(MAKE) GAME_VERSION=JP
eu: ; @$(MAKE) GAME_VERSION=EU

View File

@ -591,7 +591,11 @@ sub_0808C650: @ 0x0808C650
movs r0, #0 movs r0, #0
b _0808C674 b _0808C674
.align 2, 0 .align 2, 0
.ifdef DEMO
_0808C66C: .4byte gUnk_02036BB0
.else
_0808C66C: .4byte gUnk_02036BB8 _0808C66C: .4byte gUnk_02036BB8
.endif
_0808C670: _0808C670:
ldr r1, _0808C678 @ =gUnk_02036BB8 ldr r1, _0808C678 @ =gUnk_02036BB8
movs r0, #1 movs r0, #1
@ -599,7 +603,11 @@ _0808C674:
str r0, [r1] str r0, [r1]
pop {r4, pc} pop {r4, pc}
.align 2, 0 .align 2, 0
.ifdef DEMO
_0808C678: .4byte gUnk_02036BB0
.else
_0808C678: .4byte gUnk_02036BB8 _0808C678: .4byte gUnk_02036BB8
.endif
thumb_func_start sub_0808C67C thumb_func_start sub_0808C67C
sub_0808C67C: @ 0x0808C67C sub_0808C67C: @ 0x0808C67C
@ -607,7 +615,11 @@ sub_0808C67C: @ 0x0808C67C
ldr r0, [r0] ldr r0, [r0]
bx lr bx lr
.align 2, 0 .align 2, 0
.ifdef DEMO
_0808C684: .4byte gUnk_02036BB0
.else
_0808C684: .4byte gUnk_02036BB8 _0808C684: .4byte gUnk_02036BB8
.endif
thumb_func_start sub_0808C688 thumb_func_start sub_0808C688
sub_0808C688: @ 0x0808C688 sub_0808C688: @ 0x0808C688
@ -618,4 +630,8 @@ sub_0808C688: @ 0x0808C688
str r0, [r1] str r0, [r1]
pop {pc} pop {pc}
.align 2, 0 .align 2, 0
.ifdef DEMO
_0808C698: .4byte gUnk_02036BB0
.else
_0808C698: .4byte gUnk_02036BB8 _0808C698: .4byte gUnk_02036BB8
.endif

View File

@ -2254,7 +2254,12 @@ gUnk_08007CAC:: @ 08007CAC
.incbin "baserom.gba", 0x007CAC, 0x000005B .incbin "baserom.gba", 0x007CAC, 0x000005B
gUnk_08007D07:: @ 08007D07 gUnk_08007D07:: @ 08007D07
.ifdef DEMO
@ TODO only one byte differs
.incbin "baserom_demo.gba", 0x007D07, 0x00000CF
.else
.incbin "baserom.gba", 0x007D07, 0x00000CF .incbin "baserom.gba", 0x007D07, 0x00000CF
.endif
non_word_aligned_thumb_func_start sub_08007DD6 non_word_aligned_thumb_func_start sub_08007DD6
sub_08007DD6: @ 0x08007DD6 sub_08007DD6: @ 0x08007DD6

View File

@ -1206,6 +1206,10 @@ _080A45A2:
thumb_func_start sub_080A45A4 thumb_func_start sub_080A45A4
sub_080A45A4: @ 0x080A45A4 sub_080A45A4: @ 0x080A45A4
.ifdef DEMO
bx lr
.align 2, 0
.else
push {lr} push {lr}
bl FlushSprites bl FlushSprites
ldr r0, _080A45C4 @ =gUnk_02032EC0 ldr r0, _080A45C4 @ =gUnk_02032EC0
@ -1244,6 +1248,7 @@ _080A45E0:
.align 2, 0 .align 2, 0
_080A4600: .4byte gUnk_0812814C _080A4600: .4byte gUnk_0812814C
_080A4604: .4byte gMenu _080A4604: .4byte gMenu
.endif
thumb_func_start sub_080A4608 thumb_func_start sub_080A4608
sub_080A4608: @ 0x080A4608 sub_080A4608: @ 0x080A4608
@ -2890,9 +2895,15 @@ _080A52DC: .4byte gInput
_080A52E0: _080A52E0:
cmp r4, #0x10 cmp r4, #0x10
bne _080A52EC bne _080A52EC
.ifdef DEMO
movs r0, #0x6d
bl SoundReq
b _080A5336
.else
movs r0, #0xb movs r0, #0xb
bl sub_080A4E84 bl sub_080A4E84
b _080A530A b _080A530A
.endif
_080A52EC: _080A52EC:
ldr r0, _080A5314 @ =gMenu ldr r0, _080A5314 @ =gMenu
adds r0, #0x10 adds r0, #0x10

View File

@ -202,7 +202,11 @@ _080A570C:
cmp r0, #1 cmp r0, #1
bne _080A575E bne _080A575E
ldrb r3, [r2, #3] ldrb r3, [r2, #3]
.ifdef DEMO
movs r4, #0
.else
movs r1, #0 movs r1, #0
.endif
cmp r3, #2 cmp r3, #2
beq _080A572E beq _080A572E
cmp r3, #2 cmp r3, #2
@ -223,23 +227,48 @@ _080A572E:
ldrb r0, [r0] ldrb r0, [r0]
cmp r0, #0 cmp r0, #0
beq _080A574E beq _080A574E
.ifdef DEMO
movs r4, #8
.else
movs r1, #8 movs r1, #8
.endif
cmp r3, #0 cmp r3, #0
bne _080A574E bne _080A574E
.ifdef DEMO
movs r4, #7
.else
movs r1, #7 movs r1, #7
.endif
b _080A5752 b _080A5752
.align 2, 0 .align 2, 0
_080A5744: .4byte gMenu _080A5744: .4byte gMenu
_080A5748: _080A5748:
.ifdef DEMO
movs r0, #0x6d
bl SoundReq
b _080A574E
_080A574C:
movs r0, #0x6d
bl SoundReq
.else
movs r1, #9 movs r1, #9
b _080A5752 b _080A5752
_080A574C: _080A574C:
movs r1, #0xa movs r1, #0xa
.endif
_080A574E: _080A574E:
.ifdef DEMO
cmp r4, #0
.else
cmp r1, #0 cmp r1, #0
.endif
beq _080A575E beq _080A575E
_080A5752: _080A5752:
.ifdef DEMO
adds r0, r4, #0
.else
adds r0, r1, #0 adds r0, r1, #0
.endif
bl sub_080A4E84 bl sub_080A4E84
movs r0, #0x6a movs r0, #0x6a
bl SoundReq bl SoundReq

View File

@ -5,6 +5,45 @@
.text .text
.ifdef DEMO
thumb_func_start HandleGameplayScreen
HandleGameplayScreen: @ 08051A28
push {r4, lr}
ldr r1, _08051A68 @ =0x030010A0
ldr r0, [r1, #0x00]
adds r0, #0x01
str r0, [r1, #0x00]
ldr r1, _08051A6C @ =0x080FC55C
ldr r4, _08051A70x @ =0x03001000
ldrb r0, [r4, #0x03]
lsls r0, r0, #0x02
adds r0, r0, r1
ldr r0, [r0, #0x00]
bl _call_via_r0
ldr r0, _08051A74x @ =0x02002A40
movs r2, #0x95
lsls r2, r2, #0x03
adds r1, r0, r2
ldr r0, [r1, #0x00]
cmp r0, #0x00
beq _08051A64
subs r0, #0x01
str r0, [r1, #0x00]
cmp r0, #0x00
bne _08051A64
movs r0, #0x07
movs r1, #0x02
bl DoFade
movs r0, #0x03
strb r0, [r4, #0x03]
_08051A64:
pop {r4, pc}
.byte 0x00, 0x00
_08051A68: .4byte 0x030010A0 @TODO ptr
_08051A6C: .4byte 0x080FC55C @TODO ptr
_08051A70x: .4byte 0x03001000 @TODO ptr
_08051A74x: .4byte 0x02002A40 @TODO ptr
.else
thumb_func_start HandleGameplayScreen thumb_func_start HandleGameplayScreen
HandleGameplayScreen: @ 0x08051988 HandleGameplayScreen: @ 0x08051988
push {lr} push {lr}
@ -24,6 +63,8 @@ HandleGameplayScreen: @ 0x08051988
_080519A4: .4byte gScreenTransition _080519A4: .4byte gScreenTransition
_080519A8: .4byte gUnk_080FC9D8 _080519A8: .4byte gUnk_080FC9D8
_080519AC: .4byte gMain _080519AC: .4byte gMain
.endif
thumb_func_start sub_080519B0 thumb_func_start sub_080519B0
sub_080519B0: @ 0x080519B0 sub_080519B0: @ 0x080519B0
@ -382,6 +423,9 @@ _08051D28: .4byte gScreenTransition
thumb_func_start sub_08051D2C thumb_func_start sub_08051D2C
sub_08051D2C: @ 0x08051D2C sub_08051D2C: @ 0x08051D2C
.ifdef DEMO
.incbin "baserom_demo.gba", 0x051df4, 0x14 @nocheckin
.else
push {lr} push {lr}
movs r0, #7 movs r0, #7
movs r1, #8 movs r1, #8
@ -390,6 +434,7 @@ sub_08051D2C: @ 0x08051D2C
bl InitScreen bl InitScreen
pop {pc} pop {pc}
.align 2, 0 .align 2, 0
.endif
thumb_func_start InitializeEntities thumb_func_start InitializeEntities
InitializeEntities: @ 0x08051D40 InitializeEntities: @ 0x08051D40

View File

@ -223,7 +223,11 @@ _0808C828:
bl sub_0801E49C bl sub_0801E49C
pop {r4, r5, r6, pc} pop {r4, r5, r6, pc}
.align 2, 0 .align 2, 0
.ifdef DEMO
_0808C83C: .4byte gUnk_02036BB0
.else
_0808C83C: .4byte gUnk_02036BB8 _0808C83C: .4byte gUnk_02036BB8
.endif
thumb_func_start sub_0808C840 thumb_func_start sub_0808C840
sub_0808C840: @ 0x0808C840 sub_0808C840: @ 0x0808C840

View File

@ -199,3 +199,27 @@ _080A31FC:
_080A3200: _080A3200:
pop {r4, r5, pc} pop {r4, r5, pc}
.align 2, 0 .align 2, 0
// DEMO only functions
.ifdef DEMO
// @nocheckin
thumb_func_start HandleChooseDemoScreen
HandleChooseDemoScreen: @ 0x080A2E18
.incbin "baserom_demo.gba", 0x0a2e18, 0x28
thumb_func_start sub_080A2E40
sub_080A2E40: @ 0x080A2E40
.incbin "baserom_demo.gba", 0x0a2e40, 0x14c
thumb_func_start sub_080A2F8C
sub_080A2F8C: @ 0x080A2F8C
.incbin "baserom_demo.gba", 0x0A2F8C, 0x44
thumb_func_start sub_080A2FD0
sub_080A2FD0: @ 0x080A2FD0
.incbin "baserom_demo.gba", 0x0A2FD0, 0x210
.endif

View File

@ -4,7 +4,117 @@
.syntax unified .syntax unified
.text .text
.ifdef DEMO
thumb_func_start sub_0807CA18
sub_0807CA18:
push {r4, r5, r6, lr}
ldr r4, _0807CA38 @ =0x02002A40
ldrh r1, [r4, #0x00]
movs r0, #0x80
lsls r0, r0, #0x01
cmp r1, r0
beq _0807C9BA
movs r2, #0x00
strb r2, [r4, #0x00]
movs r3, #0x01
strb r3, [r4, #0x01]
strb r3, [r4, #0x08]
adds r1, r4, #0x0
adds r1, #0xAA
movs r0, #0x18
strb r0, [r1, #0x00]
adds r1, #0x01
strb r0, [r1, #0x00]
subs r1, #0x23
movs r0, #0x22
strb r0, [r1, #0x00]
adds r1, #0x01
movs r0, #0x15
strb r0, [r1, #0x00]
adds r0, r4, #0x0
adds r0, #0x8A
strb r2, [r0, #0x00]
adds r0, #0x01
strb r2, [r0, #0x00]
adds r0, #0x05
strb r3, [r0, #0x00]
adds r1, #0x03
movs r0, #0x90
strh r0, [r1, #0x00]
adds r1, #0x02
movs r0, #0x38
strh r0, [r1, #0x00]
_0807C9BA:
adds r5, r4, #0x0
adds r5, #0x80
ldrb r0, [r5, #0x00]
cmp r0, #0x00
bne _0807C9CE
ldr r0, _0807CA3C @ =0x0811DFF4
adds r1, r5, #0x0
movs r2, #0x05
bl MemCopy
_0807C9CE:
ldr r1, _0807CA40 @ =0x0811EF10
movs r6, #0x80
lsls r6, r6, #0x12
ldrb r0, [r6, #0x04]
lsls r0, r0, #0x02
adds r0, r0, r1
ldr r0, [r0, #0x00]
ldr r2, _0807CA44 @ =0x000004B4
adds r1, r4, #0x0
bl MemCopy
ldrb r0, [r6, #0x07]
adds r2, r0, #0x0
cmp r2, #0x00
bne _0807CA04
movs r0, #0x97
strb r0, [r5, #0x00]
adds r1, r4, #0x0
adds r1, #0x81
movs r0, #0x7F
strb r0, [r1, #0x00]
adds r1, #0x01
movs r0, #0xDD
strb r0, [r1, #0x00]
adds r0, r4, #0x0
adds r0, #0x83
strb r2, [r0, #0x00]
_0807CA04:
movs r0, #0xA0
bl ModHealth
ldr r0, _0807CA48 @ =0xFFFFD8F1
bl ModRupees
ldr r0, _0807CA4C @ =0x02000010
ldrb r1, [r0, #0x07]
lsls r0, r1, #0x01
adds r0, r0, r1
ldr r1, _0807CA50 @ =0x0811DFF9
adds r0, r0, r1
movs r1, #0x95
lsls r1, r1, #0x03
adds r2, r4, r1
ldrb r1, [r6, #0x04]
adds r0, r0, r1
ldrb r1, [r0, #0x00]
lsls r0, r1, #0x03
subs r0, r0, r1
lsls r0, r0, #0x05
adds r0, r0, r1
lsls r0, r0, #0x04
str r0, [r2, #0x00]
movs r0, #0x01
pop {r4, r5, r6, pc}
_0807CA38: .4byte 0x02002A40 @TODO ptr
_0807CA3C: .4byte 0x0811DFF4 @TODO ptr
_0807CA40: .4byte 0x0811EF10 @TODO ptr
_0807CA44: .4byte 0x000004B4
_0807CA48: .4byte 0xFFFFD8F1
_0807CA4C: .4byte 0x02000010 @TODO ptr
_0807CA50: .4byte 0x0811DFF9 @TODO ptr
.else
thumb_func_start sub_0807CA18 thumb_func_start sub_0807CA18
sub_0807CA18: @ 0x0807CA18 sub_0807CA18: @ 0x0807CA18
push {lr} push {lr}
@ -61,3 +171,4 @@ _0807CA78:
.align 2, 0 .align 2, 0
_0807CA7C: .4byte gSave _0807CA7C: .4byte gSave
_0807CA80: .4byte gUnk_0811E470 _0807CA80: .4byte gUnk_0811E470
.endif

View File

@ -7,6 +7,19 @@
gUnk_08127270:: @ 08127270 gUnk_08127270:: @ 08127270
.4byte sub_080A3084 .4byte sub_080A3084
.4byte sub_080A310C .4byte sub_080A310C
gUnk_08127278:: @ 08127278 gUnk_08127278:: @ 08127278
.incbin "baserom.gba", 0x127278, 0x0000008 .incbin "baserom.gba", 0x127278, 0x0000008
.ifdef DEMO
@ TODO choose demo screen
something:
.4byte sub_080A2E40
.4byte sub_080A2FD0
.4byte sub_080A2F8C
something2::
.incbin "baserom_demo.gba", 0x127c98, 0x38 @nocheckin
.endif

View File

@ -2477,6 +2477,7 @@ gUnk_0813A7F0:: @ 0813A7F0
.4byte gUnk_08133FDC .4byte gUnk_08133FDC
.4byte gUnk_08133FDC .4byte gUnk_08133FDC
.4byte gUnk_08133FDC .4byte gUnk_08133FDC
.ifndef DEMO
.4byte gUnk_08139108 .4byte gUnk_08139108
.4byte gUnk_081391D0 .4byte gUnk_081391D0
.4byte gUnk_081391FC .4byte gUnk_081391FC
@ -2485,6 +2486,7 @@ gUnk_0813A7F0:: @ 0813A7F0
.4byte gUnk_08133FDC .4byte gUnk_08133FDC
.4byte gUnk_08133FDC .4byte gUnk_08133FDC
.4byte gUnk_08133FDC .4byte gUnk_08133FDC
.endif
.4byte gUnk_081395D8 .4byte gUnk_081395D8
.4byte gUnk_08139714 .4byte gUnk_08139714
.4byte gUnk_08138848 .4byte gUnk_08138848

View File

@ -9,3 +9,8 @@ gUnk_089FB770:: @ 089FB770
gUnk_089FB780:: @ 089FB780 gUnk_089FB780:: @ 089FB780
.incbin "baserom.gba", 0x9FB780, 0x0000F44 .incbin "baserom.gba", 0x9FB780, 0x0000F44
@ More sprites in demo
.ifdef DEMO
.incbin "baserom_demo.gba", 0x9FD0F4, 0x984c
.endif

View File

@ -30,6 +30,8 @@ typedef struct {
s32 signature; s32 signature;
u8 field_0x4; u8 field_0x4;
u8 listenForKeyPresses; u8 listenForKeyPresses;
u8 field_0x6;
u8 field_0x7;
} struct_02000010; } struct_02000010;
extern struct_02000010 gUnk_02000010; extern struct_02000010 gUnk_02000010;

View File

@ -152,10 +152,15 @@ SECTIONS {
. = 0x00036A38; gCurrentWindow = .; . = 0x00036A38; gCurrentWindow = .;
. = 0x00036A40; gNewWindow = .; . = 0x00036A40; gNewWindow = .;
. = 0x00036A50; gEEPROMConfig = .; . = 0x00036A50; gEEPROMConfig = .;
. = 0x00036A50; gUnk_02036A50 = .; /* DEMO is 8 bytes earlier due to missing eeprom*/
. = 0x00036A58; gUnk_02036A58 = .; . = 0x00036A58; gUnk_02036A58 = .;
. = 0x00036AD8; gUnk_02036AD8 = .; . = 0x00036AD0; gUnk_02036AD0 = .; /* DEMO is 8 bytes earlier due to missing eeprom*/
. = 0x00036AD8; gUnk_02036AD8 = .;
. = 0x00036BB0; gUnk_02036BB0 = .; /* DEMO is 8 bytes earlier due to missing eeprom*/
. = 0x00036BB8; gUnk_02036BB8 = .; . = 0x00036BB8; gUnk_02036BB8 = .;
. = 0x00036BB8; gMPlayTracksDEMO = .; /* DEMO is 8 bytes earlier due to missing eeprom*/
. = 0x00036BC0; gMPlayTracks = .; . = 0x00036BC0; gMPlayTracks = .;
. = 0x00038558; gUnk_02038558 = .; /* DEMO is 8 bytes earlier due to missing eeprom*/
. = 0x00038560; gUnk_02038560 = .; . = 0x00038560; gUnk_02038560 = .;
. = 0x00040000; . = 0x00040000;
} >ewram } >ewram

View File

@ -742,7 +742,11 @@ extern const SongHeader sfx21F;
extern const SongHeader sfx220; extern const SongHeader sfx220;
extern const SongHeader sfx221; extern const SongHeader sfx221;
#ifdef DEMO
extern MusicPlayerTrack gMPlayTracksDEMO[];
#else
extern MusicPlayerTrack gMPlayTracks[]; extern MusicPlayerTrack gMPlayTracks[];
#endif
extern MusicPlayerInfo gMPlayInfos[0x1C]; extern MusicPlayerInfo gMPlayInfos[0x1C];
extern u8 gMPlayMemAccArea[0x10]; extern u8 gMPlayMemAccArea[0x10];
@ -783,6 +787,43 @@ typedef enum {
MUSIC_PLAYER_BGM, MUSIC_PLAYER_BGM,
} MusicPlayerE; } 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[] = { const MusicPlayer gMusicPlayers[] = {
[MUSIC_PLAYER_00] = { &gMPlayInfos[0x08], &gMPlayTracks[0x00], 2, 1 }, [MUSIC_PLAYER_00] = { &gMPlayInfos[0x08], &gMPlayTracks[0x00], 2, 1 },
[MUSIC_PLAYER_PLY_VO] = { &gMPlayInfos[0x12], &gMPlayTracks[0x02], 1, 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_1E] = { &gMPlayInfos[0x04], &gMPlayTracks[0x3A], 0xc, 0 },
[MUSIC_PLAYER_BGM] = { &gMPlayInfos[0x10], &gMPlayTracks[0x46], 0xc, 0 }, [MUSIC_PLAYER_BGM] = { &gMPlayInfos[0x10], &gMPlayTracks[0x46], 0xc, 0 },
}; };
#endif
const Song gSongTable[] = { const Song gSongTable[] = {
[SFX_NONE] = { &sfxNone, MUSIC_PLAYER_BGM, MUSIC_PLAYER_BGM }, [SFX_NONE] = { &sfxNone, MUSIC_PLAYER_BGM, MUSIC_PLAYER_BGM },

View File

@ -265,5 +265,7 @@ u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) {
*/ */
void sub_08054870(void) { void sub_08054870(void) {
#ifndef DEMO
gUnk_080FE2A0[gMenu.menuType](); gUnk_080FE2A0[gMenu.menuType]();
#endif
} }

View File

@ -4,9 +4,14 @@
#include "functions.h" #include "functions.h"
extern u16 gUnk_081092D4; extern u16 gUnk_081092D4;
extern u8 gUnk_02036AD8;
extern u8 gUnk_081094CE; extern u8 gUnk_081094CE;
#ifdef DEMO
extern u8 gUnk_02036AD0;
extern u8 gUnk_02036A50;
#else
extern u8 gUnk_02036AD8;
extern u8 gUnk_02036A58; extern u8 gUnk_02036A58;
#endif
extern void* gUnk_081092AC[]; extern void* gUnk_081092AC[];
typedef struct { typedef struct {
@ -59,7 +64,11 @@ void sub_0805F820(WStruct* r0, u32* r1) {
VStruct* temp3; VStruct* temp3;
if (r0->unk4 - r0->unk6 > 0) { if (r0->unk4 - r0->unk6 > 0) {
#ifdef DEMO
sub_08002724(r1, &gUnk_02036A50);
#else
sub_08002724(r1, &gUnk_02036A58); sub_08002724(r1, &gUnk_02036A58);
#endif
if (r0->unk1 == 0) { if (r0->unk1 == 0) {
u32 tmp = sub_0805F7A0(*r1); u32 tmp = sub_0805F7A0(*r1);
uVar6 = tmp & 0xf; uVar6 = tmp & 0xf;
@ -77,7 +86,11 @@ void sub_0805F820(WStruct* r0, u32* r1) {
uVar3 = uVar4; uVar3 = uVar4;
} }
#ifdef DEMO
puVar8 = &gUnk_02036A50 + uVar6;
#else
puVar8 = &gUnk_02036A58 + uVar6; puVar8 = &gUnk_02036A58 + uVar6;
#endif
temp2 = r0->unk8; temp2 = r0->unk8;
temp = gUnk_0810942E[r0->unk3].filler0[r0->unk2 * 2]; temp = gUnk_0810942E[r0->unk3].filler0[r0->unk2 * 2];
uVar7 = r0->unk6; uVar7 = r0->unk6;
@ -120,23 +133,40 @@ void sub_0805F918(u32 idx, u32 idx2, void* dest) {
u8* temp; u8* temp;
u8* temp2; u8* temp2;
#ifdef DEMO
MemFill32(sub_0805F8F8(idx2), &gUnk_02036AD0, 0xe0);
#else
MemFill32(sub_0805F8F8(idx2), &gUnk_02036AD8, 0xe0); MemFill32(sub_0805F8F8(idx2), &gUnk_02036AD8, 0xe0);
#endif
puVar1 = gUnk_081092AC[idx]; puVar1 = gUnk_081092AC[idx];
temp = &gUnk_081094CE + idx2 * 0xc0; temp = &gUnk_081094CE + idx2 * 0xc0;
idx3 = 0; idx3 = 0;
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
#ifdef DEMO
puVar2 = &gUnk_02036A50;
sub_08002724(puVar1, &gUnk_02036A50);
#else
puVar2 = &gUnk_02036A58; puVar2 = &gUnk_02036A58;
sub_08002724(puVar1, &gUnk_02036A58); sub_08002724(puVar1, &gUnk_02036A58);
#endif
puVar1 += 0x40; puVar1 += 0x40;
for (j = 0; j < 8; j++) { for (j = 0; j < 8; j++) {
#ifdef DEMO
sub_080026C4(puVar2, &gUnk_02036AD0, temp, idx3);
#else
sub_080026C4(puVar2, &gUnk_02036AD8, temp, idx3); sub_080026C4(puVar2, &gUnk_02036AD8, temp, idx3);
#endif
puVar2++; puVar2++;
idx3++; idx3++;
} }
} }
#ifdef DEMO
LoadResourceAsync((const void*)&gUnk_02036AD0, (u32)dest, 0xe0);
#else
LoadResourceAsync((const void*)&gUnk_02036AD8, (u32)dest, 0xe0); LoadResourceAsync((const void*)&gUnk_02036AD8, (u32)dest, 0xe0);
#endif
} }
u32 sub_0805F9A0(u32 r0) { u32 sub_0805F9A0(u32 r0) {

View File

@ -1,6 +1,10 @@
#include "global.h" #include "global.h"
#include "gba/eeprom.h" #include "gba/eeprom.h"
#ifdef DEMO
const u8 unk[] = {0xff, 0xff, 0xff, 0xff};
const u8 padding[0x18] = {};
#else
typedef struct EEPROMConfig { typedef struct EEPROMConfig {
u32 unk_00; u32 unk_00;
u16 size; u16 size;
@ -9,6 +13,7 @@ typedef struct EEPROMConfig {
// u8 filler[3]; // u8 filler[3];
} EEPROMConfig; } EEPROMConfig;
const char EEPROM_V124[] = "EEPROM_V124"; const char EEPROM_V124[] = "EEPROM_V124";
extern const EEPROMConfig* gEEPROMConfig; extern const EEPROMConfig* gEEPROMConfig;
const EEPROMConfig gEEPROMConfig512 = { 0x200, 0x40, 0x300, 0x6 }; 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 EEPROMWrite(u16, const u16*, u8);
u16 EEPROMConfigure(u16 unk_1) { u16 EEPROMConfigure(u16 unk_1) {
u16 ret; u16 ret;
@ -248,3 +255,5 @@ u16 EEPROMWrite0_8k_Check(u16 address, const u16* data) {
} }
const char thing[0x1c] = "\xff\xff\xff\xff"; const char thing[0x1c] = "\xff\xff\xff\xff";
#endif

View File

@ -61,10 +61,15 @@ void sub_0805212C(void) {
gMenu.transitionTimer--; gMenu.transitionTimer--;
if (gMenu.transitionTimer == 0) { if (gMenu.transitionTimer == 0) {
sub_080520C4(2); sub_080520C4(2);
#ifdef DEMO
SoundReq(0x80080000);
DoFade(7,4);
#else
sub_08052418(0, 0); sub_08052418(0, 0);
gScreen.lcd.displayControl |= 0x600; gScreen.lcd.displayControl |= 0x600;
gFadeControl.field_0x4 = 0xffff; gFadeControl.field_0x4 = 0xffff;
DoFade(4, 0x10); DoFade(4, 0x10);
#endif
} }
} }
} else { } 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) { void sub_080521A0(void) {
s32 temp3; s32 temp3;
u32 temp2; u32 temp2;
@ -147,6 +159,7 @@ void sub_080521A0(void) {
break; break;
} }
} }
#endif
void sub_080522F4(void) { void sub_080522F4(void) {
switch (gMenu.menuType) { switch (gMenu.menuType) {

View File

@ -104,6 +104,24 @@ static void HandleNintendoCapcomLogos(void) {
gScreen.bg.bg1Updated = 1; gScreen.bg.bg1Updated = 1;
DoFade(6, 8); DoFade(6, 8);
advance = ADVANCE_NONE; 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 { } else {
if (advance == ADVANCE_TIMER_EXPIRED) { if (advance == ADVANCE_TIMER_EXPIRED) {
advance = ADVANCE_KEY_PRESSED; advance = ADVANCE_KEY_PRESSED;

View File

@ -12,13 +12,20 @@
extern void HandleIntroScreen(void); extern void HandleIntroScreen(void);
extern void HandleChooseFileScreen(void); extern void HandleChooseFileScreen(void);
extern void HandleChooseDemoScreen(void);
extern void HandleGameplayScreen(void); extern void HandleGameplayScreen(void);
extern void HandleGameOverScreen(void); extern void HandleGameOverScreen(void);
extern void HandleCreditsScreen(void); extern void HandleCreditsScreen(void);
extern void HandleDebugTextScreen(void); extern void HandleDebugTextScreen(void);
static void (*const sScreenHandlers[])(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_GAMEPLAY] = HandleGameplayScreen, [SCREEN_GAME_OVER] = HandleGameOverScreen,
[SCREEN_CREDITS] = HandleCreditsScreen, [SCREEN_DEBUG_TEXT] = HandleDebugTextScreen, [SCREEN_CREDITS] = HandleCreditsScreen, [SCREEN_DEBUG_TEXT] = HandleDebugTextScreen,
}; };
@ -83,7 +90,11 @@ void AgbMain(void) {
// Interrupt handlers that are loaded into RAM. // Interrupt handlers that are loaded into RAM.
extern u8 sub_080B197C[]; extern u8 sub_080B197C[];
extern u8 gUnk_030056F0[]; extern u8 gUnk_030056F0[];
#ifdef DEMO
extern u8 gUnk_02038558[];
#else
extern u8 gUnk_02038560[]; extern u8 gUnk_02038560[];
#endif
extern u8 gUnk_080B2CD8[]; extern u8 gUnk_080B2CD8[];
extern u8 gUnk_080B2CD8_2[]; extern u8 gUnk_080B2CD8_2[];
extern u8 gUnk_080B2CD8_3[]; extern u8 gUnk_080B2CD8_3[];
@ -105,7 +116,11 @@ static void sub_08055F70(void) {
size = (u32)gUnk_080B2CD8_2 - (u32)gUnk_080B2CD8_3; size = (u32)gUnk_080B2CD8_2 - (u32)gUnk_080B2CD8_3;
if (size != 0) { if (size != 0) {
#ifdef DEMO
MemCopy(gUnk_080B2CD8_3, gUnk_02038558, size);
#else
MemCopy(gUnk_080B2CD8_3, gUnk_02038560, size); MemCopy(gUnk_080B2CD8_3, gUnk_02038560, size);
#endif
} }
DispReset(0); DispReset(0);

View File

@ -2161,8 +2161,18 @@ u32 sub_0804CD0C() {
return 1; 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() { void nullsub_251() {
} }
#endif
u32 sub_0804CD14() { u32 sub_0804CD14() {
return 1; return 1;
@ -2288,8 +2298,18 @@ u32 sub_0804CE38() {
return 1; 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() { void nullsub_262() {
} }
#endif
u32 sub_0804CE40() { u32 sub_0804CE40() {
return 1; return 1;
@ -5049,6 +5069,10 @@ void sub_0804EC00(void) {
if ((s32)gSave.windcrests > -1) { if ((s32)gSave.windcrests > -1) {
LoadRoomEntityList(&gUnk_080F4E10); LoadRoomEntityList(&gUnk_080F4E10);
} }
#ifdef DEMO
SetTileType(0x177,0x5b4,1);
SetTileType(0x177,0x5f4,1);
#endif
} }
void sub_0804EC98(void) { void sub_0804EC98(void) {

View File

@ -41,10 +41,20 @@ u32 DataCompare(u32 address, const void* data, u32 size);
const u16 gUnk_0811E454[] = { 0x0, 0x0, 0x100, 0x200, 0x300, 0x400, 0x500, const u16 gUnk_0811E454[] = { 0x0, 0x0, 0x100, 0x200, 0x300, 0x400, 0x500,
0x5C0, 0x680, 0x740, 0x800, 0x8C0, 0x9C0, 0xA80 }; 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 }; 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"; static const char sSignatureLong[32] = "AGBZELDA:THE MINISH CAP:ZELDA 5";
// Save file is untouched // Save file is untouched
@ -60,7 +70,7 @@ const SaveFileEEPROMAddresses gSaveFileEEPROMAddresses[] = { { 0x500, 0x30, 0x10
{ 0x20, 0, 0, 0, 0x1000 }, { 0x20, 0, 0, 0, 0x1000 },
{ 0x20, 0x60, 0x1060, 0xf80, 0x1f80 }, { 0x20, 0x60, 0x1060, 0xf80, 0x1f80 },
{ 0x8, 0xfa0, 0x1fa0, 0xfa0, 0x1fa0 } }; { 0x8, 0xfa0, 0x1fa0, 0xfa0, 0x1fa0 } };
#endif
void sub_0807CD9C() { void sub_0807CD9C() {
sub_080530C8(); sub_080530C8();
} }
@ -122,7 +132,12 @@ SaveResult HandleSaveDone(u32 arg0) {
return result; return result;
} }
u32 InitSaveData(void) { u32 InitSaveData(void) {
#ifdef DEMO
CpuSet(NULL,&gSave,0x4b4);
return 1;
#else
const SaveFileEEPROMAddresses* eepromAddresses; const SaveFileEEPROMAddresses* eepromAddresses;
u32 error; u32 error;
@ -147,40 +162,71 @@ u32 InitSaveData(void) {
DataWrite(eepromAddresses->address1, sSignatureLong, eepromAddresses->size); DataWrite(eepromAddresses->address1, sSignatureLong, eepromAddresses->size);
} }
return 1; return 1;
#endif
} }
u32 WriteSaveFile(u32 index, SaveFile* saveFile) { u32 WriteSaveFile(u32 index, SaveFile* saveFile) {
#ifdef DEMO
return 1;
#else
return DataDoubleWriteWithStatus(index, saveFile); return DataDoubleWriteWithStatus(index, saveFile);
#endif
} }
u32 Write_02000000(struct_02000000* arg0) { u32 Write_02000000(struct_02000000* arg0) {
#ifdef DEMO
return 1;
#else
return DataDoubleWriteWithStatus(3, arg0); return DataDoubleWriteWithStatus(3, arg0);
#endif
} }
u32 sub_0807CF1C(u8* arg0) { u32 sub_0807CF1C(u8* arg0) {
#ifdef DEMO
return 1;
#else
return DataDoubleWriteWithStatus(5, arg0); return DataDoubleWriteWithStatus(5, arg0);
#endif
} }
s32 ReadSaveFile(u32 index, SaveFile* saveFile) { s32 ReadSaveFile(u32 index, SaveFile* saveFile) {
#ifdef DEMO
return 1;
#else
return DataDoubleReadWithStatus(index, saveFile); return DataDoubleReadWithStatus(index, saveFile);
#endif
} }
u32 Read_02000000(struct_02000000* arg0) { u32 Read_02000000(struct_02000000* arg0) {
#ifdef DEMO
return 0;
#else
return DataDoubleReadWithStatus(3, arg0); return DataDoubleReadWithStatus(3, arg0);
#endif
} }
u32 sub_0807CF3C(u8* arg0) { u32 sub_0807CF3C(u8* arg0) {
#ifdef DEMO
return 0;
#else
return DataDoubleReadWithStatus(5, arg0); return DataDoubleReadWithStatus(5, arg0);
#endif
} }
void SetFileStatusDeleted(u32 index) { void SetFileStatusDeleted(u32 index) {
#ifndef DEMO
const SaveFileEEPROMAddresses* eepromAddresses; const SaveFileEEPROMAddresses* eepromAddresses;
eepromAddresses = GetSaveFileEEPROMAddresses(index); eepromAddresses = GetSaveFileEEPROMAddresses(index);
WriteSaveFileStatus(eepromAddresses->checksum2, &sSaveDescDeleted); WriteSaveFileStatus(eepromAddresses->checksum2, &sSaveDescDeleted);
WriteSaveFileStatus(eepromAddresses->checksum1, &sSaveDescDeleted); WriteSaveFileStatus(eepromAddresses->checksum1, &sSaveDescDeleted);
#endif
} }
#ifndef DEMO
void SetFileStatusInit(u32 index) { void SetFileStatusInit(u32 index) {
const SaveFileEEPROMAddresses* eepromAddresses; const SaveFileEEPROMAddresses* eepromAddresses;
const SaveFileStatus* fileStatus; const SaveFileStatus* fileStatus;
@ -406,3 +452,4 @@ bool32 DataCompare(u32 address, const void* data, u32 size) {
} }
return TRUE; return TRUE;
} }
#endif

View File

@ -7,6 +7,7 @@
extern void (*const gUnk_081280C4[])(); extern void (*const gUnk_081280C4[])();
void DrawKinstoneMenu(void) { void DrawKinstoneMenu(void) {
#ifndef DEMO
gScreenTransition.field_0x24[8] = 2; gScreenTransition.field_0x24[8] = 2;
FlushSprites(); FlushSprites();
gUnk_081280C4[gMenu.menuType](); gUnk_081280C4[gMenu.menuType]();
@ -18,6 +19,7 @@ void DrawKinstoneMenu(void) {
sub_080AD9B0(); sub_080AD9B0();
sub_080AD918(); sub_080AD918();
gScreenTransition.field_0x24[8] = 0; gScreenTransition.field_0x24[8] = 0;
#endif
} }
extern void gUnk_081280DC; extern void gUnk_081280DC;

1
tmc_demo.sha1 Normal file
View File

@ -0,0 +1 @@
63fcad218f9047b6a9edbb68c98bd0dec322d7a1 tmc_demo.gba

1
tmc_eu.sha1 Normal file
View File

@ -0,0 +1 @@
cff199b36ff173fb6faf152653d1bccf87c26fb7 tmc_eu.gba

1
tmc_jp.sha1 Normal file
View File

@ -0,0 +1 @@
6c5404a1effb17f481f352181d0f1c61a2765c5d tmc_jp.gba