mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 18:02:16 +00:00
Enable nested folders in src and refactor (#59)
- move engine modules to engine/ - split main into main and core - merge math and random - move some data - rename files based on folders
This commit is contained in:
1 parent
e31a7a6c37
commit
e4b8c6accd
210 files changed
+2242
-1977
No files matched your search
Vendored
+185
-177
@@ -1,179 +1,187 @@
|
||||
{
|
||||
"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Google, IndentWidth: 4 }",
|
||||
"files.associations": {
|
||||
"multi_sio.h": "c",
|
||||
"global.h": "c",
|
||||
"m4a_internal.h": "c",
|
||||
"m4a.h": "c",
|
||||
"task.h": "c",
|
||||
"flash_internal.h": "c",
|
||||
"agb_flash.h": "c",
|
||||
"malloc_ewram.h": "c",
|
||||
"data.h": "c",
|
||||
"sprite.h": "c",
|
||||
"random.h": "c",
|
||||
"save.h": "c",
|
||||
"flags.h": "c",
|
||||
"gba.h": "c",
|
||||
"title_screen.h": "c",
|
||||
"stddef.h": "c",
|
||||
"defines.h": "c",
|
||||
"functions.h": "c",
|
||||
"init.h": "c",
|
||||
"chrono": "c",
|
||||
"math.h": "c",
|
||||
"main.h": "c",
|
||||
"ios": "c",
|
||||
"options_screen.h": "c",
|
||||
"game.h": "c",
|
||||
"zones.h": "c",
|
||||
"player.h": "c",
|
||||
"input.h": "c",
|
||||
"input_recorder.h": "c",
|
||||
"recordings.h": "c",
|
||||
"trig.h": "c",
|
||||
"profile.h": "c",
|
||||
"songs.h": "c",
|
||||
"text.h": "c",
|
||||
"ui.h": "c",
|
||||
"typeinfo": "c",
|
||||
"time.h": "c",
|
||||
"random": "c",
|
||||
"multiplayer.h": "c",
|
||||
"malloc_vram.h": "c",
|
||||
"multiplayer_multipak_connection.h": "c",
|
||||
"multiplayer_team_play.h": "c",
|
||||
"multi_boot.h": "c",
|
||||
"character_select.h": "c",
|
||||
"transition.h": "c",
|
||||
"palettes.h": "c",
|
||||
"multiplayer_mode_select.h": "c",
|
||||
"time_attack.h": "c",
|
||||
"course_select.h": "c",
|
||||
"algorithm": "c",
|
||||
"array": "c",
|
||||
"atomic": "c",
|
||||
"bit": "c",
|
||||
"*.tcc": "c",
|
||||
"cassert": "c",
|
||||
"cctype": "c",
|
||||
"cerrno": "c",
|
||||
"cfloat": "c",
|
||||
"ciso646": "c",
|
||||
"climits": "c",
|
||||
"clocale": "c",
|
||||
"cmath": "c",
|
||||
"compare": "c",
|
||||
"concepts": "c",
|
||||
"cstdarg": "c",
|
||||
"cstddef": "c",
|
||||
"cstdint": "c",
|
||||
"cstdio": "c",
|
||||
"cstdlib": "c",
|
||||
"cstring": "c",
|
||||
"ctime": "c",
|
||||
"cwchar": "c",
|
||||
"cwctype": "c",
|
||||
"deque": "c",
|
||||
"exception": "c",
|
||||
"forward_list": "c",
|
||||
"functional": "c",
|
||||
"iterator": "c",
|
||||
"list": "c",
|
||||
"map": "c",
|
||||
"memory": "c",
|
||||
"memory_resource": "c",
|
||||
"numeric": "c",
|
||||
"set": "c",
|
||||
"string": "c",
|
||||
"string_view": "c",
|
||||
"system_error": "c",
|
||||
"tuple": "c",
|
||||
"type_traits": "c",
|
||||
"unordered_map": "c",
|
||||
"utility": "c",
|
||||
"vector": "c",
|
||||
"fstream": "c",
|
||||
"initializer_list": "c",
|
||||
"iosfwd": "c",
|
||||
"iostream": "c",
|
||||
"istream": "c",
|
||||
"limits": "c",
|
||||
"locale": "c",
|
||||
"new": "c",
|
||||
"numbers": "c",
|
||||
"ostream": "c",
|
||||
"queue": "c",
|
||||
"sstream": "c",
|
||||
"stack": "c",
|
||||
"stdexcept": "c",
|
||||
"streambuf": "c",
|
||||
"cinttypes": "c",
|
||||
"cstdbool": "c",
|
||||
"valarray": "c",
|
||||
"time_attack_mode_select.h": "c",
|
||||
"time_attack_end_menu.h": "c",
|
||||
"time_attack_lobby.h": "c",
|
||||
"course_progress.h": "c",
|
||||
"multiplayer_lobby.h": "c",
|
||||
"multiboot.h": "c",
|
||||
"syscall.h": "c",
|
||||
"multiplayer_singlepak_connection.h": "c",
|
||||
"multiplayer_singlepak_results.h": "c",
|
||||
"mb_programs.h": "c",
|
||||
"sio32_multi_load.h": "c",
|
||||
"special_stage.h": "c",
|
||||
"special_stage_utils.h": "c",
|
||||
"special_stage_collectables.h": "c",
|
||||
"special_stage_player.h": "c",
|
||||
"special_stage_physics.h": "c",
|
||||
"special_stage_guard_robo.h": "c",
|
||||
"special_stage_data.h": "c",
|
||||
"special_stage_tables.h": "c",
|
||||
"isagbprint.h": "c",
|
||||
"types.h": "c",
|
||||
"animations.h": "c",
|
||||
"cut_scenes.h": "c",
|
||||
"cut_scenes_credits.h": "c",
|
||||
"cut_scenes_extra_ending_slides.h": "c",
|
||||
"interactables.h": "c",
|
||||
"interactable.h": "c",
|
||||
"move_states.h": "c",
|
||||
"io_reg.h": "c",
|
||||
"macro.h": "c",
|
||||
"__config": "c",
|
||||
"__tree": "c",
|
||||
"bitset": "c",
|
||||
"complex": "c",
|
||||
"filesystem": "c",
|
||||
"mutex": "c",
|
||||
"__debug": "c",
|
||||
"collect_rings_time_display.h": "c",
|
||||
"__bit_reference": "c",
|
||||
"__node_handle": "c",
|
||||
"__memory": "c",
|
||||
"optional": "c",
|
||||
"ratio": "c",
|
||||
"__functional_base": "c",
|
||||
"interactable_051.h": "c",
|
||||
"interactable_windmill.h": "c",
|
||||
"__hash_table": "c",
|
||||
"__split_buffer": "c",
|
||||
"interactable_095.h": "c",
|
||||
"interactable_070.h": "c",
|
||||
"interactable_tec_base_note_block.h": "c",
|
||||
"interactable_094.h": "c",
|
||||
"interactable_080.h": "c",
|
||||
"interactable_music_plant_pipe_horn.h": "c",
|
||||
"animation_commands.h": "c",
|
||||
"interactable_074.h": "c",
|
||||
"interactable_tec_base_light_bridge.h": "c",
|
||||
"interactable_wind_up_stick.h": "c",
|
||||
"interactable_ice_paradise_half_pipe.h": "c"
|
||||
},
|
||||
"asm-code-lens.donated": true,
|
||||
"editor.formatOnSave": true,
|
||||
"editor.defaultFormatter": "xaver.clang-format",
|
||||
"clang-format.executable": "clang-format-13",
|
||||
"git.ignoreLimitWarning": true
|
||||
"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Google, IndentWidth: 4 }",
|
||||
"files.associations": {
|
||||
"multi_sio.h": "c",
|
||||
"global.h": "c",
|
||||
"m4a_internal.h": "c",
|
||||
"lib/m4a.h": "c",
|
||||
"engine/task.h": "c",
|
||||
"flash_internal.h": "c",
|
||||
"agb_flash.h": "c",
|
||||
"engine/malloc_ewram.h": "c",
|
||||
"data.h": "c",
|
||||
"engine/sprite.h": "c",
|
||||
"game/math.h": "c",
|
||||
"game/save.h": "c",
|
||||
"flags.h": "c",
|
||||
"gba.h": "c",
|
||||
"game/title_screen.h": "c",
|
||||
"stddef.h": "c",
|
||||
"defines.h": "c",
|
||||
"functions.h": "c",
|
||||
"game/init.h": "c",
|
||||
"chrono": "c",
|
||||
"core.h": "c",
|
||||
"ios": "c",
|
||||
"options_screen.h": "c",
|
||||
"game/game.h": "c",
|
||||
"zones.h": "c",
|
||||
"player.h": "c",
|
||||
"input.h": "c",
|
||||
"engine/input_recorder.h": "c",
|
||||
"recordings.h": "c",
|
||||
"engine/trig.h": "c",
|
||||
"game/options_screen.h": "c",
|
||||
"songs.h": "c",
|
||||
"text.h": "c",
|
||||
"ui.h": "c",
|
||||
"typeinfo": "c",
|
||||
"game/time.h": "c",
|
||||
"random": "c",
|
||||
"multiplayer.h": "c",
|
||||
"engine/malloc_vram.h": "c",
|
||||
"game/multiplayer/multipak_connection.h": "c",
|
||||
"game/multiplayer/team_play.h": "c",
|
||||
"multi_boot.h": "c",
|
||||
"game/character_select.h": "c",
|
||||
"transition.h": "c",
|
||||
"palettes.h": "c",
|
||||
"game/multiplayer/mode_select.h": "c",
|
||||
"game/time_attack/lobby.h": "c",
|
||||
"game/course_select.h": "c",
|
||||
"algorithm": "c",
|
||||
"array": "c",
|
||||
"atomic": "c",
|
||||
"bit": "c",
|
||||
"*.tcc": "c",
|
||||
"cassert": "c",
|
||||
"cctype": "c",
|
||||
"cerrno": "c",
|
||||
"cfloat": "c",
|
||||
"ciso646": "c",
|
||||
"climits": "c",
|
||||
"clocale": "c",
|
||||
"cmath": "c",
|
||||
"compare": "c",
|
||||
"concepts": "c",
|
||||
"cstdarg": "c",
|
||||
"cstddef": "c",
|
||||
"cstdint": "c",
|
||||
"cstdio": "c",
|
||||
"cstdlib": "c",
|
||||
"cstring": "c",
|
||||
"ctime": "c",
|
||||
"cwchar": "c",
|
||||
"cwctype": "c",
|
||||
"deque": "c",
|
||||
"exception": "c",
|
||||
"forward_list": "c",
|
||||
"functional": "c",
|
||||
"iterator": "c",
|
||||
"list": "c",
|
||||
"map": "c",
|
||||
"memory": "c",
|
||||
"memory_resource": "c",
|
||||
"numeric": "c",
|
||||
"set": "c",
|
||||
"string": "c",
|
||||
"string_view": "c",
|
||||
"system_error": "c",
|
||||
"tuple": "c",
|
||||
"type_traits": "c",
|
||||
"unordered_map": "c",
|
||||
"utility": "c",
|
||||
"vector": "c",
|
||||
"fstream": "c",
|
||||
"initializer_list": "c",
|
||||
"iosfwd": "c",
|
||||
"iostream": "c",
|
||||
"istream": "c",
|
||||
"limits": "c",
|
||||
"locale": "c",
|
||||
"new": "c",
|
||||
"numbers": "c",
|
||||
"ostream": "c",
|
||||
"queue": "c",
|
||||
"sstream": "c",
|
||||
"stack": "c",
|
||||
"stdexcept": "c",
|
||||
"streambuf": "c",
|
||||
"cinttypes": "c",
|
||||
"cstdbool": "c",
|
||||
"valarray": "c",
|
||||
"game/time_attack/mode_select.h": "c",
|
||||
"game/time_attack/end_menu.h": "c",
|
||||
"game/race_progress.h": "c",
|
||||
"game/multiplayer_lobby.h": "c",
|
||||
"multiboot.h": "c",
|
||||
"syscall.h": "c",
|
||||
"game/multiboot/connection.h": "c",
|
||||
"game/multiboot/collect_rings/results.h": "c",
|
||||
"mb_programs.h": "c",
|
||||
"sio32_multi_load.h": "c",
|
||||
"game/special_stage/main.h": "c",
|
||||
"game/special_stage/utils.h": "c",
|
||||
"game/special_stage/collectables.h": "c",
|
||||
"game/special_stage/player.h": "c",
|
||||
"game/special_stage/physics.h": "c",
|
||||
"game/special_stage/guard_robo.h": "c",
|
||||
"game/special_stage/data.h": "c",
|
||||
"game/special_stage/tables.h": "c",
|
||||
"isagbprint.h": "c",
|
||||
"types.h": "c",
|
||||
"animations.h": "c",
|
||||
"cut_scenes.h": "c",
|
||||
"game/cutscenes/credits.h": "c",
|
||||
"game/cutscenes/extra_ending_slides.h": "c",
|
||||
"interactables.h": "c",
|
||||
"game/interactable.h": "c",
|
||||
"move_states.h": "c",
|
||||
"io_reg.h": "c",
|
||||
"macro.h": "c",
|
||||
"__config": "c",
|
||||
"__tree": "c",
|
||||
"bitset": "c",
|
||||
"complex": "c",
|
||||
"filesystem": "c",
|
||||
"mutex": "c",
|
||||
"__debug": "c",
|
||||
"game/multiboot/collect_rings/time_display.h": "c",
|
||||
"__bit_reference": "c",
|
||||
"__node_handle": "c",
|
||||
"__memory": "c",
|
||||
"optional": "c",
|
||||
"ratio": "c",
|
||||
"__functional_base": "c",
|
||||
"game/interactables_2/051.h": "c",
|
||||
"game/interactables_1/windmill.h": "c",
|
||||
"__hash_table": "c",
|
||||
"__split_buffer": "c",
|
||||
"game/interactables_2/095.h": "c",
|
||||
"game/interactables_2/070.h": "c",
|
||||
"game/interactables_2/tec_base/note_block.h": "c",
|
||||
"game/interactables_2/094.h": "c",
|
||||
"game/interactables_2/080.h": "c",
|
||||
"game/interactables_2/music_plant/pipe_horn.h": "c",
|
||||
"engine/animation_commands.h": "c",
|
||||
"game/interactables_2/074.h": "c",
|
||||
"game/interactables_2/tec_base/light_bridge.h": "c",
|
||||
"game/interactables_2/wind_up_stick.h": "c",
|
||||
"game/interactables_2/ice_paradise/half_pipe.h": "c",
|
||||
"game.h": "c",
|
||||
"lobby.h": "c",
|
||||
"trig.h": "c",
|
||||
"math.h": "c",
|
||||
"boost_effect.h": "c",
|
||||
"interactable_music_plant_pipe_horn.h": "c",
|
||||
"note_particle.h": "c",
|
||||
"sprite.h": "c",
|
||||
"interactable.h": "c",
|
||||
"race_progress.h": "c"
|
||||
},
|
||||
"asm-code-lens.donated": true,
|
||||
"editor.formatOnSave": true,
|
||||
"editor.defaultFormatter": "xaver.clang-format",
|
||||
"clang-format.executable": "clang-format-13",
|
||||
"git.ignoreLimitWarning": true
|
||||
}
|
||||
@@ -108,7 +108,7 @@ MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR)
|
||||
|
||||
$(shell mkdir -p $(C_BUILDDIR) $(ASM_BUILDDIR) $(DATA_ASM_BUILDDIR) $(SOUND_ASM_BUILDDIR) $(SONG_BUILDDIR) $(MID_BUILDDIR))
|
||||
|
||||
C_SRCS := $(wildcard $(C_SUBDIR)/*.c)
|
||||
C_SRCS := $(shell find $(C_SUBDIR) -name "*.c")
|
||||
C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS))
|
||||
|
||||
ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s)
|
||||
@@ -131,11 +131,11 @@ OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS))
|
||||
|
||||
# Use the old compiler for m4a, as it was prebuilt and statically linked
|
||||
# to the original codebase
|
||||
$(C_BUILDDIR)/m4a.o: CC1 := $(CC1_OLD)
|
||||
$(C_BUILDDIR)/lib/m4a.o: CC1 := $(CC1_OLD)
|
||||
|
||||
# Use `-O1` for agb_flash libs, as these were also prebuilt
|
||||
$(C_BUILDDIR)/agb_flash.o: CC1FLAGS := -O1 -mthumb-interwork -Werror
|
||||
$(C_BUILDDIR)/agb_flash%.o: CC1FLAGS := -O1 -mthumb-interwork -Werror
|
||||
$(C_BUILDDIR)/lib/agb_flash.o: CC1FLAGS := -O1 -mthumb-interwork -Werror
|
||||
$(C_BUILDDIR)/lib/agb_flash%.o: CC1FLAGS := -O1 -mthumb-interwork -Werror
|
||||
|
||||
ifeq ($(DINFO),1)
|
||||
override CC1FLAGS += -g
|
||||
@@ -217,18 +217,20 @@ $(ROM): $(ELF)
|
||||
$(FIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(GAME_REVISION) --silent
|
||||
|
||||
ifeq ($(NODEP),1)
|
||||
$(C_BUILDDIR)/%.o: c_dep :=
|
||||
$(OBJ_DIR)/src/%.o: c_dep :=
|
||||
else
|
||||
$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c)
|
||||
$(OBJ_DIR)/src/%.o: C_FILE = $(*D)/$(*F).c
|
||||
$(OBJ_DIR)/src/%.o: c_dep = $(shell $(SCANINC) -I include $(C_FILE:$(OBJ_DIR)/=))
|
||||
endif
|
||||
|
||||
# Build c sources, and ensure alignment
|
||||
$(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep)
|
||||
$(C_OBJS): $(OBJ_DIR)/%.o: %.c $$(c_dep)
|
||||
@echo "$(CC1) <flags> -o $@ $<"
|
||||
@$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i
|
||||
@$(PREPROC) $(C_BUILDDIR)/$*.i | $(CC1) $(CC1FLAGS) -o $(C_BUILDDIR)/$*.s
|
||||
@printf ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s
|
||||
@$(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s
|
||||
@$(shell mkdir -p $(shell dirname '$(OBJ_DIR)/$*.i'))
|
||||
@$(CPP) $(CPPFLAGS) $< -o $(OBJ_DIR)/$*.i
|
||||
@$(PREPROC) $(OBJ_DIR)/$*.i | $(CC1) $(CC1FLAGS) -o $(OBJ_DIR)/$*.s
|
||||
@printf ".text\n\t.align\t2, 0\n" >> $(OBJ_DIR)/$*.s
|
||||
@$(AS) $(ASFLAGS) -o $@ $(OBJ_DIR)/$*.s
|
||||
|
||||
ifeq ($(NODEP),1)
|
||||
$(ASM_BUILDDIR)/%.o: asm_dep :=
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
OBJDUMP="arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb"
|
||||
OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb"
|
||||
OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))"
|
||||
$OBJDUMP $OPTIONS baserom.gba > baserom.dump
|
||||
$OBJDUMP $OPTIONS sa2.gba > sa2.dump
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
.global gUnknown_080DFCF0
|
||||
gUnknown_080DFCF0:
|
||||
.incbin "baserom.gba", 0x000DFCF0, 0x50
|
||||
|
||||
|
||||
.global gUnknown_080DFD40
|
||||
gUnknown_080DFD40:
|
||||
.incbin "baserom.gba", 0x000DFD40, 0x58
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
.section .rodata
|
||||
|
||||
@; TODO: understand why this data is included at the end of the rom
|
||||
.global gUnknown_08C8793C
|
||||
gUnknown_08C8793C:
|
||||
.4byte gUnknown_080DFCF0
|
||||
.4byte gUnknown_080DFCF0
|
||||
.4byte gUnknown_080DFD40
|
||||
.4byte gUnknown_080DFD40
|
||||
.4byte gUnknown_080DFD98
|
||||
.4byte gUnknown_080DFDD8
|
||||
.4byte gUnknown_080DFDD8
|
||||
.4byte gUnknown_080DFE30
|
||||
.4byte gUnknown_080DFE30
|
||||
|
||||
.global gUnknown_08C87960
|
||||
gUnknown_08C87960:
|
||||
.4byte gUnknown_080DFEE4
|
||||
.4byte gUnknown_080DFF3C
|
||||
.4byte gUnknown_080DFF9C
|
||||
+261
@@ -0,0 +1,261 @@
|
||||
#ifndef GUARD_MAIN_H
|
||||
#define GUARD_MAIN_H
|
||||
|
||||
#include "global.h"
|
||||
#include "data.h"
|
||||
#include "engine/task.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "engine/input_recorder.h"
|
||||
|
||||
struct MultiSioData_0_0 {
|
||||
// id
|
||||
u16 unk0;
|
||||
// value
|
||||
u8 unk2;
|
||||
|
||||
u8 unk3;
|
||||
u32 unk4;
|
||||
u16 unk8[3];
|
||||
u8 unkE;
|
||||
u8 unkF;
|
||||
u32 unk10;
|
||||
};
|
||||
|
||||
struct MultiSioData_0_1 {
|
||||
// id
|
||||
u16 unk0;
|
||||
// value
|
||||
u8 unk2;
|
||||
|
||||
u8 unk3;
|
||||
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
|
||||
u16 unk8[3];
|
||||
u8 unkE;
|
||||
u8 unkF;
|
||||
u32 unk10;
|
||||
};
|
||||
struct MultiSioData_0_2 {
|
||||
// id
|
||||
u8 unk0;
|
||||
u8 filler1;
|
||||
// value
|
||||
u8 unk2;
|
||||
|
||||
u8 unk3;
|
||||
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
|
||||
u16 unk8[3];
|
||||
u8 unkE;
|
||||
u8 unkF;
|
||||
u32 unk10;
|
||||
};
|
||||
|
||||
struct MultiSioData_0_3 {
|
||||
// id
|
||||
u16 unk0;
|
||||
// value
|
||||
u8 unk2;
|
||||
|
||||
u8 unk3;
|
||||
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
|
||||
u32 unk8;
|
||||
u16 unkC;
|
||||
u8 unkE;
|
||||
u8 unkF;
|
||||
u32 unk10;
|
||||
};
|
||||
|
||||
union MultiSioData {
|
||||
struct MultiSioData_0_0 pat0;
|
||||
struct MultiSioData_0_1 pat1;
|
||||
struct MultiSioData_0_2 pat2;
|
||||
struct MultiSioData_0_3 pat3;
|
||||
}; /* size = MULTI_SIO_BLOCK_SIZE */
|
||||
|
||||
// Used for the two background layers.
|
||||
struct MapHeader {
|
||||
/* 0x00 */ u16 xTiles; // Tiles inside Metatiles, usually 12 (0x0C)
|
||||
/* 0x02 */ u16 yTiles; // Tiles inside Metatiles, usually 12 (0x0C)
|
||||
/* 0x04 */ u16 animTileSize;
|
||||
/* 0x06 */ u8 animFrameCount;
|
||||
/* 0x07 */ u8 animDelay;
|
||||
/* 0x08 */ void *tileset;
|
||||
/* 0x0C */ u32 tilesetSize;
|
||||
/* 0x10 */ u16 *palette;
|
||||
/* 0x14 */ u16 palOffset;
|
||||
/* 0x16 */ u16 palLength;
|
||||
/* 0x18 */ const u16 *metatiles;
|
||||
/* 0x1C */ const u16 *map;
|
||||
}; /* size = 0x20 */
|
||||
|
||||
struct MapHeader_Full {
|
||||
struct MapHeader h;
|
||||
u16 mapWidth; // in Metatiles
|
||||
u16 mapHeight; // in Metatiles
|
||||
};
|
||||
|
||||
union __attribute__((transparent_union)) Unk_03002E60 {
|
||||
struct MapHeader *x;
|
||||
struct MapHeader_Full *y;
|
||||
};
|
||||
|
||||
struct Unk_03003674_1_Sub {
|
||||
u16 unk0, unk2, unk4, unk6;
|
||||
s16 unk8, unkA;
|
||||
}; /* size = 0xC */
|
||||
|
||||
struct Unk_03003674_1_Full {
|
||||
struct Unk_03003674_1_Sub sub;
|
||||
u32 unkC;
|
||||
}; /* size = 0x10 */
|
||||
|
||||
union __attribute__((transparent_union)) Unk_03003674_1 {
|
||||
const struct Unk_03003674_1_Sub *sub;
|
||||
const struct Unk_03003674_1_Full *full;
|
||||
};
|
||||
|
||||
struct Unk_03003674 {
|
||||
const union Unk_03003674_0 *const *unk0;
|
||||
const union Unk_03003674_1 *unk4;
|
||||
const u16 *const *unk8;
|
||||
const void *unkC;
|
||||
const void *unk10;
|
||||
const void *unk14;
|
||||
const s32 *unk18;
|
||||
}; /* size = 0x1C */
|
||||
|
||||
// No idea why this exists when there is a
|
||||
// better random number generator in the math
|
||||
// module
|
||||
#define PseudoRandom32() \
|
||||
({ \
|
||||
gPseudoRandom = (gPseudoRandom * 0x196225) + 0x3C6EF35F; \
|
||||
gPseudoRandom; \
|
||||
})
|
||||
#define PseudoRandBetween(min, max) ((PseudoRandom32() & ((-min) + (max))) + (min))
|
||||
|
||||
extern u32 gFlags;
|
||||
extern u32 gFlagsPreVBlank;
|
||||
|
||||
extern u32 gFrameCount;
|
||||
|
||||
extern IntrFunc gIntrTable[16];
|
||||
extern u32 gIntrMainBuf[0x80];
|
||||
|
||||
extern struct Task *gCurTask;
|
||||
extern struct Task gTasks[MAX_TASK_NUM];
|
||||
extern struct Task *gTaskPtrs[MAX_TASK_NUM];
|
||||
extern struct Task *gNextTask;
|
||||
extern struct Task gEmptyTask;
|
||||
extern s32 gNumTasks;
|
||||
|
||||
extern u16 gInput;
|
||||
extern u16 gPrevInput;
|
||||
extern u16 gPhysicalInput;
|
||||
extern u16 gReleasedKeys;
|
||||
extern u16 gRepeatedKeys;
|
||||
extern u16 gPressedKeys;
|
||||
extern u8 gKeysFirstRepeatIntervals[10];
|
||||
extern u8 gRepeatedKeysTestCounter[10];
|
||||
extern u8 gKeysContinuedRepeatIntervals[10];
|
||||
|
||||
extern const u8 *gInputPlaybackData;
|
||||
extern struct InputRecorder gInputRecorder;
|
||||
extern u16 *gInputRecorderTapeBuffer;
|
||||
|
||||
extern union MultiSioData gMultiSioSend;
|
||||
extern union MultiSioData gMultiSioRecv[4];
|
||||
extern u32 gMultiSioStatusFlags;
|
||||
extern bool8 gMultiSioEnabled;
|
||||
|
||||
extern HBlankFunc gHBlankIntrs[4];
|
||||
extern HBlankFunc gHBlankCallbacks[4];
|
||||
extern u8 gNumHBlankCallbacks;
|
||||
extern u8 gNumHBlankIntrs;
|
||||
|
||||
extern u8 gIwramHeap[0x2204];
|
||||
extern u8 gEwramHeap[0x20080];
|
||||
|
||||
extern u32 gVramHeapStartAddr;
|
||||
extern u16 gVramHeapMaxTileSlots;
|
||||
extern u16 gVramHeapState[256];
|
||||
|
||||
extern bool8 gExecSoundMain;
|
||||
|
||||
extern u16 gDispCnt;
|
||||
extern u16 gWinRegs[6];
|
||||
extern struct BlendRegs gBldRegs;
|
||||
extern struct BgAffineRegs gBgAffineRegs;
|
||||
extern u16 gObjPalette[OBJ_PLTT_SIZE / sizeof(u16)];
|
||||
extern u16 gBgPalette[BG_PLTT_SIZE / sizeof(u16)];
|
||||
extern u16 gBgCntRegs[4];
|
||||
|
||||
// TODO: Turn this into a struct-array:
|
||||
// [4]{s16 x, s16 y}
|
||||
// Should we introduce a
|
||||
// "#define NUM_BACKGROUNDS 4" in gba/defines.h?
|
||||
extern s16 gBgScrollRegs[4][2];
|
||||
|
||||
extern OamData gUnknown_030022C8;
|
||||
extern OamData gUnknown_030022D0[128];
|
||||
extern OamData gOamBuffer[128];
|
||||
|
||||
extern u32 gUnknown_03001B60[2][160];
|
||||
extern Background *gUnknown_03001800[16];
|
||||
|
||||
extern void *gUnknown_03001884;
|
||||
|
||||
extern u16 gUnknown_030017F0;
|
||||
extern s16 gUnknown_030017F4[2];
|
||||
extern u8 gUnknown_03001850[32];
|
||||
extern FuncType_030053A0 gUnknown_03001870[4];
|
||||
|
||||
extern u8 gUnknown_030018F0;
|
||||
extern u16 gUnknown_03001944;
|
||||
extern u8 gUnknown_03001948;
|
||||
extern u16 gUnknown_0300194C;
|
||||
|
||||
union Unk_03002E60 *gUnknown_03002260;
|
||||
extern u8 gUnknown_03002280[4][4];
|
||||
extern u8 gUnknown_03004D80[16];
|
||||
extern void *gUnknown_030022AC;
|
||||
extern void *gUnknown_030022C0;
|
||||
extern s16 gUnknown_030026D0;
|
||||
extern u8 gUnknown_030026F4;
|
||||
extern const struct SpriteTables *gUnknown_03002794;
|
||||
extern struct GraphicsData *gVramGraphicsCopyQueue[32];
|
||||
extern u16 gUnknown_03002820;
|
||||
extern u8 gUnknown_03002874;
|
||||
extern void *gUnknown_03002878;
|
||||
extern u8 gUnknown_0300287C;
|
||||
extern u8 gUnknown_03002A80;
|
||||
extern u8 gVramGraphicsCopyQueueIndex;
|
||||
extern u16 gUnknown_03002A8C;
|
||||
extern u8 gUnknown_03002AE0;
|
||||
extern u8 gUnknown_03002AE4;
|
||||
extern Sprite *gUnknown_03004D10[16];
|
||||
extern u8 gUnknown_03004D50;
|
||||
extern void *gUnknown_03004D54;
|
||||
extern u16 gUnknown_03004D58;
|
||||
extern u8 gVramGraphicsCopyCursor;
|
||||
extern u8 gUnknown_03004D60[0x20];
|
||||
extern u8 gUnknown_03005390;
|
||||
extern u16 gUnknown_03005394;
|
||||
extern u16 gUnknown_03005398;
|
||||
extern FuncType_030053A0 gUnknown_030053A0[4];
|
||||
extern s32 gPseudoRandom;
|
||||
extern u8 gUnknown_03002710[128];
|
||||
extern struct MultiBootParam gMultiBootParam;
|
||||
|
||||
void GameInit(void);
|
||||
void GameLoop(void);
|
||||
|
||||
#endif
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
#define GUARD_DATA_H
|
||||
|
||||
#include "global.h"
|
||||
#include "animation_commands.h"
|
||||
#include "engine/animation_commands.h"
|
||||
|
||||
// TODO: extract this data
|
||||
extern union Unk_03002E60 gMapHeaders[];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_ANIMATION_COMMANDS_H
|
||||
|
||||
#include "global.h"
|
||||
#include "sprite.h"
|
||||
#include "engine/sprite.h"
|
||||
|
||||
#define AnimCommandSizeInWords(_structType) ((sizeof(_structType)) / sizeof(s32))
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -2,7 +2,7 @@
|
||||
#define GUARD_BACKGROUNDS_H
|
||||
|
||||
#include "global.h"
|
||||
#include "sprite.h"
|
||||
#include "engine/sprite.h"
|
||||
|
||||
struct UNK_3005B80_UNK4 {
|
||||
u8 unk0;
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -14,10 +14,10 @@
|
||||
#define GAME_MODE_MULTI_PLAYER_COLLECT_RINGS 5
|
||||
|
||||
#include "global.h"
|
||||
#include "sprite.h"
|
||||
#include "multi_sio.h"
|
||||
#include "save.h"
|
||||
#include "task.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "lib/multi_sio.h"
|
||||
#include "game/save.h"
|
||||
#include "engine/task.h"
|
||||
|
||||
#include "constants/move_states.h"
|
||||
|
||||
File renamed without changes.
File renamed without changes.
@@ -3,8 +3,8 @@
|
||||
|
||||
#include "gba/defines.h"
|
||||
#include "gba/types.h"
|
||||
#include "sprite.h"
|
||||
#include "game.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "game/game.h"
|
||||
|
||||
#define INTERACTABLE_DATA_SIZE_SA1 4
|
||||
#define INTERACTABLE_DATA_SIZE_SA2 4
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTERACTABLE_BOUNCY_BAR_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_Interactable_BouncyBar(Interactable *ia, u16 spriteRegionX,
|
||||
u16 spriteRegionY, u8 spriteY);
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTERACTABLE_GAPPED_LOOP_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_Interactable_gappedLoop_Start(Interactable *ia, u16 spriteRegionX,
|
||||
u16 spriteRegionY, u8 spriteY);
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_IA_WINDMILL_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_InteractableWindmill(Interactable *ia, u16 spriteRegionX,
|
||||
u16 spriteRegionY, u8 spriteY);
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTERACTABLE_080_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_Interactable080(Interactable *ia, u16 spriteRegionX, u16 spriteRegionY,
|
||||
u8 spriteY);
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTERACTABLE_085_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_Interactable085(Interactable *ia, u16 spriteRegionX, u16 spriteRegionY,
|
||||
u8 spriteY);
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTERACTABLE_094_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_Interactable094(Interactable *ia, u16 spriteRegionX, u16 spriteRegionY,
|
||||
u8 spriteY);
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTERACTABLE_095_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_Interactable095(Interactable *ia, u16 spriteRegionX, u16 spriteRegionY,
|
||||
u8 spriteY);
|
||||
@@ -2,8 +2,8 @@
|
||||
#define GUARD_IA_DASH_RING_H
|
||||
|
||||
#include "global.h"
|
||||
#include "sprite.h"
|
||||
#include "interactable.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
#define DASH_RING__NUM_ORIENTATIONS 8
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTERACTABLE_098_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_Interactable098_Down(Interactable *ia, u16 spriteRegionX,
|
||||
u16 spriteRegionY, u8 spriteY);
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTERACTABLE_052_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_Interactable_IceParadise_HalfPipe_End(Interactable *ia,
|
||||
u16 spriteRegionX,
|
||||
+8
-2
@@ -1,7 +1,7 @@
|
||||
#ifndef GUARD_INTERACTABLE_PIPE_HORN_H
|
||||
#define GUARD_INTERACTABLE_PIPE_HORN_H
|
||||
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void sub_8080AFC(s32 p0, s32 p1, u16 p2, u16 p3, s16 p4, u8 p5, u8 p6);
|
||||
void sub_8080C78(s32 p0, s32 p1, u16 p2, u16 p3, s16 accelX, s16 accelY, u8 kind);
|
||||
@@ -41,4 +41,10 @@ typedef struct {
|
||||
#define NUM_PIPE_HANDLERS 16
|
||||
typedef void (*PipeHandler)(Sprite_Pipe_Horn *, const Pipe_Data[]);
|
||||
|
||||
#endif // GUARD_INTERACTABLE_PIPE_HORN_H
|
||||
// NOTE: Stored at end of rom, probably because it's configured data (like levels and
|
||||
// assets?) it's made up of pointers defined in handlers_ia_pipe_horn.c
|
||||
// see data/handlers_ia_pipe_horn_sequences.s
|
||||
extern const Pipe_Data (*gUnknown_08C8793C[9])[];
|
||||
extern const Pipe_Data (*gUnknown_08C87960[3])[];
|
||||
|
||||
#endif // GUARD_INTERACTABLE_PIPE_HORN_H
|
||||
File renamed without changes.
+1
-1
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTERACTABLE_074_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_InteractableTecBaseLightBridge(Interactable *ia, u16 spriteRegionX,
|
||||
u16 spriteRegionY, u8 spriteY);
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTERACTABLE_070_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_InteractableTecBaseNoteBlock(Interactable *ia, u16 spriteRegionX,
|
||||
u16 spriteRegionY, u8 spriteY);
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTERACTABLE_052_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_InteractableTurnAroundBar(Interactable *ia, u16 spriteRegionX,
|
||||
u16 spriteRegionY, u8 spriteY);
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_IA_WIND_UP_STICK_H
|
||||
|
||||
#include "global.h"
|
||||
#include "interactable.h"
|
||||
#include "game/interactable.h"
|
||||
|
||||
void initSprite_Interactable_WindUpStick(Interactable *ia, u16 spriteRegionX,
|
||||
u16 spriteRegionY, u8 spriteY);
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef GUARD_RANDOM_H
|
||||
#define GUARD_RANDOM_H
|
||||
#ifndef GUARD_MATH_H
|
||||
#define GUARD_MATH_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
@@ -25,4 +25,12 @@ u16 Random(void);
|
||||
// Sets the initial seed values of the pseudorandom number generator
|
||||
void SeedRng(u32 a, u32 b);
|
||||
|
||||
#endif // GUARD_RANDOM_H
|
||||
u32 AbsMax(s32 a, s32 b);
|
||||
// AbsSumMul
|
||||
u32 sub_8085530(s32 a, s32 b);
|
||||
s16 sub_808558C(u16 a, u16 b, u8 c);
|
||||
u32 sub_80855C0(s32 a, s32 b, s32 c, u8 d);
|
||||
s32 sub_8085698(s32 a, s32 b, s32 c, u8 d, u8 e);
|
||||
s32 sub_8085654(s32, s32, s32, u8, u8);
|
||||
|
||||
#endif // GUARD_MATH_H
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+2
-2
@@ -2,8 +2,8 @@
|
||||
#define GUARD_MULTIPLAYER_MULTIPAK_CONNECTION_H
|
||||
|
||||
#include "global.h"
|
||||
#include "game.h"
|
||||
#include "multi_sio.h"
|
||||
#include "game/game.h"
|
||||
#include "lib/multi_sio.h"
|
||||
|
||||
extern u8 gMultiplayerUnlockedCharacters;
|
||||
extern u8 gMultiplayerConnections;
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -2,8 +2,8 @@
|
||||
#define GUARD_OPTION_SCREEN_H
|
||||
|
||||
#include "global.h"
|
||||
#include "save.h"
|
||||
#include "sprite.h"
|
||||
#include "game/save.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "transition.h"
|
||||
#include "constants/text.h"
|
||||
|
||||
File renamed without changes.
@@ -4,7 +4,7 @@
|
||||
#include "global.h"
|
||||
#include "zones.h"
|
||||
#include "player.h"
|
||||
#include "time.h"
|
||||
#include "game/time.h"
|
||||
|
||||
#define TIME_RECORDS_PER_COURSE 3
|
||||
#define NUM_MULTIPLAYER_SCORES 10
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_SOUND_TEST_H
|
||||
|
||||
#include "global.h"
|
||||
#include "profile.h"
|
||||
#include "game/options_screen.h"
|
||||
|
||||
void CreateSoundTestScreen(struct OptionsScreen *);
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
#define GUARD_SPECIAL_COLLECTABLES_H
|
||||
|
||||
#include "global.h"
|
||||
#include "task.h"
|
||||
#include "special_stage.h"
|
||||
#include "engine/task.h"
|
||||
#include "game/special_stage/main.h"
|
||||
|
||||
#define MAX_RING_PARTICLES 8
|
||||
#define MAX_OBJECTS 323
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_SPECIAL_STAGE_DATA_H
|
||||
|
||||
#include "global.h"
|
||||
#include "sprite.h" // for the 'AnimId' type
|
||||
#include "engine/sprite.h" // for the 'AnimId' type
|
||||
#include "zones.h"
|
||||
|
||||
#define SPRITE_ARRAY_END \
|
||||
@@ -3,9 +3,9 @@
|
||||
#define GUARD_SPECIAL_GUARD_ROBO_H
|
||||
|
||||
#include "global.h"
|
||||
#include "task.h"
|
||||
#include "special_stage.h"
|
||||
#include "special_stage_data.h"
|
||||
#include "engine/task.h"
|
||||
#include "game/special_stage/main.h"
|
||||
#include "game/special_stage/data.h"
|
||||
|
||||
struct SpecialStageGuardRobo {
|
||||
struct SpecialStage *stage;
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_SPECIAL_STAGE_H
|
||||
|
||||
#include "global.h"
|
||||
#include "sprite.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "transition.h"
|
||||
|
||||
#define SPECIAL_STAGE_ZONE_SIZE 8
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_SPECIAL_PHYSICS_H
|
||||
|
||||
#include "global.h"
|
||||
#include "special_stage.h"
|
||||
#include "game/special_stage/main.h"
|
||||
|
||||
struct SpecialStagePhysics {
|
||||
struct SpecialStage *stage;
|
||||
@@ -2,8 +2,8 @@
|
||||
#define GUARD_SPECIAL_STAGE_PLAYER_H
|
||||
|
||||
#include "global.h"
|
||||
#include "special_stage.h"
|
||||
#include "special_stage_data.h"
|
||||
#include "game/special_stage/main.h"
|
||||
#include "game/special_stage/data.h"
|
||||
|
||||
// Player
|
||||
struct SpecialStagePlayer {
|
||||
File renamed without changes.
@@ -2,8 +2,8 @@
|
||||
#define GUARD_SPECIAL_STAGE_UI_H
|
||||
|
||||
#include "global.h"
|
||||
#include "sprite.h"
|
||||
#include "special_stage.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "game/special_stage/main.h"
|
||||
|
||||
struct SpecialStageUI {
|
||||
struct SpecialStage *stage;
|
||||
@@ -2,9 +2,9 @@
|
||||
#define GUARD_SPECIAL_STAGE_UTILS_H
|
||||
|
||||
#include "global.h"
|
||||
#include "special_stage.h"
|
||||
#include "special_stage_data.h"
|
||||
#include "sprite.h"
|
||||
#include "game/special_stage/main.h"
|
||||
#include "game/special_stage/data.h"
|
||||
#include "engine/sprite.h"
|
||||
|
||||
extern void *gUnknown_03005B58;
|
||||
extern void *gUnknown_03005B5C;
|
||||
@@ -2,7 +2,7 @@
|
||||
#define GUARD_SPECIAL_WORLD_H
|
||||
|
||||
#include "global.h"
|
||||
#include "special_stage.h"
|
||||
#include "game/special_stage/main.h"
|
||||
|
||||
struct SpecialStageWorld {
|
||||
struct SpecialStage *stage;
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef GUARD_STAGE_H
|
||||
#define GUARD_STAGE_H
|
||||
|
||||
#include "global.h"
|
||||
#include "zones.h"
|
||||
|
||||
extern const s16 gSpawnPositions[NUM_LEVEL_IDS][2];
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -2,7 +2,7 @@
|
||||
#define GUARD_INTRO_H
|
||||
|
||||
#include "global.h"
|
||||
#include "sprite.h"
|
||||
#include "engine/sprite.h"
|
||||
|
||||
// TODO: not sure why these were shared from here, may
|
||||
// not be
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,7 +1,7 @@
|
||||
#ifndef GUARD_SIO32_MULTI_LOAD_H
|
||||
#define GUARD_SIO32_MULTI_LOAD_H
|
||||
|
||||
#include "multi_sio.h"
|
||||
#include "lib/multi_sio.h"
|
||||
|
||||
// Optimize the following settings based on the software
|
||||
// specifications
|
||||
+3
-3
@@ -3,9 +3,9 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "data.h"
|
||||
#include "task.h"
|
||||
#include "sprite.h"
|
||||
#include "input_recorder.h"
|
||||
#include "engine/task.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "engine/input_recorder.h"
|
||||
|
||||
struct MultiSioData_0_0 {
|
||||
// id
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
#ifndef GUARD_MATH_H
|
||||
#define GUARD_MATH_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
u32 AbsMax(s32 a, s32 b);
|
||||
// AbsSumMul
|
||||
u32 sub_8085530(s32 a, s32 b);
|
||||
s16 sub_808558C(u16 a, u16 b, u8 c);
|
||||
u32 sub_80855C0(s32 a, s32 b, s32 c, u8 d);
|
||||
s32 sub_8085698(s32 a, s32 b, s32 c, u8 d, u8 e);
|
||||
s32 sub_8085654(s32, s32, s32, u8, u8);
|
||||
|
||||
#endif // GUARD_MATH_H
|
||||
@@ -1,8 +0,0 @@
|
||||
#ifndef GUARD_TIME_ATTACK_H
|
||||
#define GUARD_TIME_ATTACK_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
void CreateMultiplayerLobbyScreen(void);
|
||||
|
||||
#endif // GUARD_TIME_ATTACK_H
|
||||
+181
-181
@@ -9,8 +9,8 @@ SECTIONS
|
||||
ALIGN(4)
|
||||
{
|
||||
build/sa2/data/sound_data.o(ewram_data);
|
||||
build/sa2/src/m4a.o(ewram_data);
|
||||
build/sa2/src/main.o(ewram_data);
|
||||
build/sa2/src/lib/m4a.o(ewram_data);
|
||||
build/sa2/src/core.o(ewram_data);
|
||||
ewram_end = .;
|
||||
}
|
||||
|
||||
@@ -28,148 +28,148 @@ SECTIONS
|
||||
build/sa2/asm/rom_header.o(.text);
|
||||
build/sa2/asm/crt0.o(.text);
|
||||
build/sa2/asm/multi_sio_asm.o(.text);
|
||||
build/sa2/src/multi_sio.o(.text);
|
||||
build/sa2/src/multi_boot.o(.text);
|
||||
build/sa2/src/sio32_multi_load.o(.text);
|
||||
build/sa2/src/lib/multi_sio.o(.text);
|
||||
build/sa2/src/lib/multi_boot.o(.text);
|
||||
build/sa2/src/lib/sio32_multi_load.o(.text);
|
||||
build/sa2/src/core.o(.text);
|
||||
build/sa2/src/main.o(.text);
|
||||
build/sa2/src/task.o(.text);
|
||||
build/sa2/src/sprite_1.o(.text);
|
||||
build/sa2/src/bg_update.o(.text);
|
||||
build/sa2/src/animation_commands_extra.o(.text);
|
||||
build/sa2/src/engine/task.o(.text);
|
||||
build/sa2/src/engine/sprite_1.o(.text);
|
||||
build/sa2/src/engine/bg_update.o(.text);
|
||||
build/sa2/src/engine/animation_commands_extra.o(.text);
|
||||
build/sa2/asm/sprite_2.o(.text);
|
||||
build/sa2/src/sprite_3.o(.text);
|
||||
build/sa2/src/engine/sprite_3.o(.text);
|
||||
build/sa2/asm/sprite_3.o(.text);
|
||||
build/sa2/src/animation_commands.o(.text);
|
||||
build/sa2/src/engine/animation_commands.o(.text);
|
||||
build/sa2/asm/sprite_4.o(.text);
|
||||
build/sa2/src/malloc_ewram.o(.text);
|
||||
build/sa2/src/malloc_vram.o(.text);
|
||||
build/sa2/src/input_recorder.o(.text);
|
||||
build/sa2/src/engine/malloc_ewram.o(.text);
|
||||
build/sa2/src/engine/malloc_vram.o(.text);
|
||||
build/sa2/src/engine/input_recorder.o(.text);
|
||||
build/sa2/asm/entities_0.o(.text);
|
||||
build/sa2/src/interactable_spring.o(.text);
|
||||
build/sa2/src/game/interactables_0/spring.o(.text);
|
||||
build/sa2/asm/interactable_platform.o(.text);
|
||||
build/sa2/asm/interactable_081.o(.text);
|
||||
build/sa2/src/interactable_ramp.o(.text);
|
||||
build/sa2/src/game/interactables_0/ramp.o(.text);
|
||||
build/sa2/asm/interactable_grind_rail.o(.text);
|
||||
build/sa2/src/interactable_044.o(.text);
|
||||
build/sa2/src/interactable_clear_pipe.o(.text);
|
||||
build/sa2/src/game/interactables_0/044.o(.text);
|
||||
build/sa2/src/game/interactables_0/clear_pipe.o(.text);
|
||||
build/sa2/asm/interactable_platform_thin.o(.text);
|
||||
build/sa2/src/interactable_slidy_ice.o(.text);
|
||||
build/sa2/src/game/interactables_0/slidy_ice.o(.text);
|
||||
build/sa2/asm/entities_1.o(.text);
|
||||
build/sa2/src/init.o(.text);
|
||||
build/sa2/src/game.o(.text);
|
||||
build/sa2/src/game/init.o(.text);
|
||||
build/sa2/src/game/game.o(.text);
|
||||
build/sa2/asm/game.o(.text);
|
||||
build/sa2/src/character_select.o(.text);
|
||||
build/sa2/src/course_select.o(.text);
|
||||
build/sa2/src/countdown.o(.text);
|
||||
build/sa2/src/game_over.o(.text);
|
||||
build/sa2/src/true_area_53_intro.o(.text);
|
||||
build/sa2/src/game/character_select.o(.text);
|
||||
build/sa2/src/game/course_select.o(.text);
|
||||
build/sa2/src/game/countdown.o(.text);
|
||||
build/sa2/src/game/game_over.o(.text);
|
||||
build/sa2/src/game/true_area_53/intro.o(.text);
|
||||
build/sa2/asm/true_area_53.o(.text);
|
||||
build/sa2/asm/enemies.o(.text);
|
||||
build/sa2/src/multiplayer_mode_select.o(.text);
|
||||
build/sa2/src/multiplayer_multipak_connection.o(.text);
|
||||
build/sa2/src/multiplayer_communication_outcome.o(.text);
|
||||
build/sa2/src/multiplayer_results.o(.text);
|
||||
build/sa2/src/multiplayer_team_play.o(.text);
|
||||
build/sa2/src/interactable_decoration.o(.text);
|
||||
build/sa2/src/interactable_booster.o(.text);
|
||||
build/sa2/src/interactable_incline_ramp.o(.text);
|
||||
build/sa2/src/interactable_spring_bouncy.o(.text);
|
||||
build/sa2/src/interactable_019.o(.text);
|
||||
build/sa2/src/interactable_toggle_player_layer.o(.text);
|
||||
build/sa2/src/game/multiplayer/mode_select.o(.text);
|
||||
build/sa2/src/game/multiplayer/multipak_connection.o(.text);
|
||||
build/sa2/src/game/multiplayer/communication_outcome.o(.text);
|
||||
build/sa2/src/game/multiplayer/results.o(.text);
|
||||
build/sa2/src/game/multiplayer/team_play.o(.text);
|
||||
build/sa2/src/game/interactables_1/decoration.o(.text);
|
||||
build/sa2/src/game/interactables_1/booster.o(.text);
|
||||
build/sa2/src/game/interactables_1/incline_ramp.o(.text);
|
||||
build/sa2/src/game/interactables_1/spring_bouncy.o(.text);
|
||||
build/sa2/src/game/interactables_1/019.o(.text);
|
||||
build/sa2/src/game/interactables_1/toggle_player_layer.o(.text);
|
||||
build/sa2/asm/interactable_rotating_handle.o(.text);
|
||||
build/sa2/src/interactable_gapped_loop.o(.text);
|
||||
build/sa2/src/interactable_spikes.o(.text);
|
||||
build/sa2/src/game/interactables_1/gapped_loop.o(.text);
|
||||
build/sa2/src/game/interactables_1/spikes.o(.text);
|
||||
build/sa2/asm/interactable_corkscrew.o(.text);
|
||||
build/sa2/src/interactable_bouncy_bar.o(.text);
|
||||
build/sa2/src/game/interactables_1/bouncy_bar.o(.text);
|
||||
build/sa2/asm/interactable_corkscrew_3D.o(.text);
|
||||
build/sa2/asm/interactable_stage_goal.o(.text);
|
||||
build/sa2/src/interactable_checkpoint.o(.text);
|
||||
build/sa2/src/interactable_windmill.o(.text);
|
||||
build/sa2/src/profile.o(.text);
|
||||
build/sa2/src/special_stage.o(.text);
|
||||
build/sa2/src/special_stage_utils.o(.text);
|
||||
build/sa2/src/special_stage_player.o(.text);
|
||||
build/sa2/src/special_stage_collectables.o(.text);
|
||||
build/sa2/src/special_stage_world.o(.text);
|
||||
build/sa2/src/special_stage_physics.o(.text);
|
||||
build/sa2/src/special_stage_ui.o(.text);
|
||||
build/sa2/src/special_stage_guard_robo.o(.text);
|
||||
build/sa2/src/save.o(.text);
|
||||
build/sa2/src/interactable_wind_up_stick.o(.text);
|
||||
build/sa2/src/game/interactables_1/checkpoint.o(.text);
|
||||
build/sa2/src/game/interactables_1/windmill.o(.text);
|
||||
build/sa2/src/game/options_screen.o(.text);
|
||||
build/sa2/src/game/special_stage/main.o(.text);
|
||||
build/sa2/src/game/special_stage/utils.o(.text);
|
||||
build/sa2/src/game/special_stage/player.o(.text);
|
||||
build/sa2/src/game/special_stage/collectables.o(.text);
|
||||
build/sa2/src/game/special_stage/world.o(.text);
|
||||
build/sa2/src/game/special_stage/physics.o(.text);
|
||||
build/sa2/src/game/special_stage/ui.o(.text);
|
||||
build/sa2/src/game/special_stage/guard_robo.o(.text);
|
||||
build/sa2/src/game/save.o(.text);
|
||||
build/sa2/src/game/interactables_2/hot_crater/wind_up_stick.o(.text);
|
||||
build/sa2/asm/interactable_hook_rail.o(.text);
|
||||
build/sa2/src/interactable_turn_around_bar.o(.text);
|
||||
build/sa2/src/interactable_hot_crater_crane.o(.text);
|
||||
build/sa2/src/interactable_dash_ring.o(.text);
|
||||
build/sa2/src/game/interactables_2/hot_crater/turn_around_bar.o(.text);
|
||||
build/sa2/src/game/interactables_2/hot_crater/crane.o(.text);
|
||||
build/sa2/src/game/interactables_2/dash_ring.o(.text);
|
||||
build/sa2/asm/interactable_floating_spring.o(.text);
|
||||
build/sa2/src/interactable_music_plant_note_sphere.o(.text);
|
||||
build/sa2/src/interactable_music_plant_note_block.o(.text);
|
||||
build/sa2/src/interactable_music_plant_guitar_string.o(.text);
|
||||
build/sa2/src/interactable_music_plant_keyboard.o(.text);
|
||||
build/sa2/src/interactable_music_plant_german_flute.o(.text);
|
||||
build/sa2/src/handlers_ia_pipe_horn.o(.text);
|
||||
build/sa2/src/interactable_music_plant_pipe_horn.o(.text);
|
||||
build/sa2/src/interactable_ice_paradise_slowing_snow.o(.text);
|
||||
build/sa2/src/game/interactables_2/music_plant/note_sphere.o(.text);
|
||||
build/sa2/src/game/interactables_2/music_plant/note_block.o(.text);
|
||||
build/sa2/src/game/interactables_2/music_plant/guitar_string.o(.text);
|
||||
build/sa2/src/game/interactables_2/music_plant/keyboard.o(.text);
|
||||
build/sa2/src/game/interactables_2/music_plant/german_flute.o(.text);
|
||||
build/sa2/src/game/interactables_2/music_plant/handlers_ia_pipe_horn.o(.text);
|
||||
build/sa2/src/game/interactables_2/music_plant/pipe_horn.o(.text);
|
||||
build/sa2/src/game/interactables_2/ice_paradise/slowing_snow.o(.text);
|
||||
build/sa2/asm/interactable_ice_paradise_funnel_sphere.o(.text);
|
||||
build/sa2/src/interactable_ice_paradise_half_pipe.o(.text);
|
||||
build/sa2/src/game/interactables_2/ice_paradise/half_pipe.o(.text);
|
||||
build/sa2/asm/interactable_069.o(.text);
|
||||
build/sa2/src/interactable_tec_base_note_block.o(.text);
|
||||
build/sa2/src/interactable_tec_base_light_bridge.o(.text);
|
||||
build/sa2/src/game/interactables_2/tec_base/note_block.o(.text);
|
||||
build/sa2/src/game/interactables_2/tec_base/light_bridge.o(.text);
|
||||
build/sa2/asm/interactable_075.o(.text);
|
||||
build/sa2/asm/interactable_078.o(.text);
|
||||
build/sa2/src/interactable_080.o(.text);
|
||||
build/sa2/src/game/interactables_2/080.o(.text);
|
||||
build/sa2/asm/interactable_sky_canyon_giant_propeller.o(.text);
|
||||
build/sa2/asm/interactable_sky_canyon_small_windmill.o(.text);
|
||||
build/sa2/src/interactable_085.o(.text);
|
||||
build/sa2/src/game/interactables_2/085.o(.text);
|
||||
build/sa2/asm/interactable_086.o(.text);
|
||||
build/sa2/asm/interactable_087.o(.text);
|
||||
build/sa2/asm/interactable_091.o(.text);
|
||||
build/sa2/asm/interactable_093.o(.text);
|
||||
build/sa2/src/interactable_094.o(.text);
|
||||
build/sa2/src/interactable_095.o(.text);
|
||||
build/sa2/src/game/interactables_2/094.o(.text);
|
||||
build/sa2/src/game/interactables_2/095.o(.text);
|
||||
build/sa2/asm/interactable_sky_canyon_flying_handle.o(.text);
|
||||
build/sa2/asm/interactable_097.o(.text);
|
||||
build/sa2/src/interactable_gravity_toggle.o(.text);
|
||||
build/sa2/src/interactable_notification_ring_bonus.o(.text);
|
||||
build/sa2/src/sub_80807CC.o(.text);
|
||||
build/sa2/src/interactable_105.o(.text);
|
||||
build/sa2/src/interactable_music_plant_note_particle.o(.text);
|
||||
build/sa2/src/interactable_special_ring.o(.text);
|
||||
build/sa2/src/multiplayer_singlepak_connection.o(.text);
|
||||
build/sa2/src/multiplayer_singlepak_results.o(.text);
|
||||
build/sa2/src/collect_rings_time_display.o(.text);
|
||||
build/sa2/src/game/interactables_2/gravity_toggle.o(.text);
|
||||
build/sa2/src/game/interactables_2/notification_ring_bonus.o(.text);
|
||||
build/sa2/src/game/interactables_2/sky_canyon_init.o(.text);
|
||||
build/sa2/src/game/interactables_2/105.o(.text);
|
||||
build/sa2/src/game/interactables_2/note_particle.o(.text);
|
||||
build/sa2/src/game/interactables_2/special_ring.o(.text);
|
||||
build/sa2/src/game/multiboot/connection.o(.text);
|
||||
build/sa2/src/game/multiboot/collect_rings/results.o(.text);
|
||||
build/sa2/src/game/multiboot/collect_rings/time_display.o(.text);
|
||||
build/sa2/asm/math_0.o(.text);
|
||||
build/sa2/src/random.o(.text);
|
||||
build/sa2/src/math_0.o(.text);
|
||||
build/sa2/src/game/math_0.o(.text);
|
||||
build/sa2/asm/math_1.o(.text);
|
||||
build/sa2/src/math_1.o(.text);
|
||||
build/sa2/src/game/math_1.o(.text);
|
||||
build/sa2/asm/unused_task_5F1C.o(.text);
|
||||
build/sa2/src/unknown_object_6998.o(.text);
|
||||
build/sa2/src/race_progress.o(.text);
|
||||
build/sa2/src/unknown_effect.o(.text);
|
||||
build/sa2/src/multiplayer_lobby.o(.text);
|
||||
build/sa2/src/time_attack_mode_select.o(.text);
|
||||
build/sa2/src/time_attack_lobby.o(.text);
|
||||
build/sa2/src/time_attack_results.o(.text);
|
||||
build/sa2/src/boost_effect.o(.text);
|
||||
build/sa2/src/sound_test.o(.text);
|
||||
build/sa2/src/title_screen.o(.text);
|
||||
build/sa2/src/backgrounds.o(.text);
|
||||
build/sa2/src/cut_scenes_level_endings.o(.text);
|
||||
build/sa2/src/cut_scenes_endings.o(.text);
|
||||
build/sa2/src/cut_scenes_credits.o(.text);
|
||||
build/sa2/src/cut_scenes_credits_slides.o(.text);
|
||||
build/sa2/src/cut_scenes_credits_end.o(.text);
|
||||
build/sa2/src/cut_scenes_extra_ending_fall.o(.text);
|
||||
build/sa2/src/cut_scenes_extra_ending_slides.o(.text);
|
||||
build/sa2/src/cut_scenes_final_ending_fall.o(.text);
|
||||
build/sa2/src/cut_scenes_final_ending_land.o(.text);
|
||||
build/sa2/src/cut_scenes_missing_emeralds.o(.text);
|
||||
build/sa2/src/game/unknown_object_6998.o(.text);
|
||||
build/sa2/src/game/race_progress.o(.text);
|
||||
build/sa2/src/game/unknown_effect.o(.text);
|
||||
build/sa2/src/game/multiplayer_lobby.o(.text);
|
||||
build/sa2/src/game/time_attack/mode_select.o(.text);
|
||||
build/sa2/src/game/time_attack/lobby.o(.text);
|
||||
build/sa2/src/game/time_attack/results.o(.text);
|
||||
build/sa2/src/game/boost_effect.o(.text);
|
||||
build/sa2/src/game/sound_test.o(.text);
|
||||
build/sa2/src/game/title_screen.o(.text);
|
||||
build/sa2/src/game/backgrounds.o(.text);
|
||||
build/sa2/src/game/cutscenes/level_endings.o(.text);
|
||||
build/sa2/src/game/cutscenes/endings.o(.text);
|
||||
build/sa2/src/game/cutscenes/credits.o(.text);
|
||||
build/sa2/src/game/cutscenes/credits_slides.o(.text);
|
||||
build/sa2/src/game/cutscenes/credits_end.o(.text);
|
||||
build/sa2/src/game/cutscenes/extra_ending_fall.o(.text);
|
||||
build/sa2/src/game/cutscenes/extra_ending_slides.o(.text);
|
||||
build/sa2/src/game/cutscenes/final_ending_fall.o(.text);
|
||||
build/sa2/src/game/cutscenes/final_ending_land.o(.text);
|
||||
build/sa2/src/game/cutscenes/missing_emeralds.o(.text);
|
||||
build/sa2/asm/m4a0.o(.text);
|
||||
build/sa2/src/m4a.o(.text);
|
||||
build/sa2/src/agb_flash.o(.text);
|
||||
build/sa2/src/agb_flash_512k.o(.text);
|
||||
build/sa2/src/agb_flash_le_512k.o(.text);
|
||||
build/sa2/src/agb_flash_mx_512k.o(.text);
|
||||
build/sa2/src/lib/m4a.o(.text);
|
||||
build/sa2/src/lib/agb_flash.o(.text);
|
||||
build/sa2/src/lib/agb_flash_512k.o(.text);
|
||||
build/sa2/src/lib/agb_flash_le_512k.o(.text);
|
||||
build/sa2/src/lib/agb_flash_mx_512k.o(.text);
|
||||
build/sa2/asm/libagbsyscall.o(.text);
|
||||
*libgcc.a:_ashrdi3.o(.text);
|
||||
*libgcc.a:_call_via_rX.o(.text);
|
||||
@@ -185,94 +185,94 @@ SECTIONS
|
||||
*libc.a:memset.o(.text);
|
||||
|
||||
/* Data */
|
||||
build/sa2/src/multi_sio.o(.rodata);
|
||||
build/sa2/src/sio32_multi_load.o(.rodata);
|
||||
build/sa2/src/main.o(.rodata);
|
||||
build/sa2/src/sprite_1.o(.rodata);
|
||||
build/sa2/src/trig.o(.rodata);
|
||||
build/sa2/src/lib/multi_sio.o(.rodata);
|
||||
build/sa2/src/lib/sio32_multi_load.o(.rodata);
|
||||
build/sa2/src/core.o(.rodata);
|
||||
build/sa2/src/engine/sprite_1.o(.rodata);
|
||||
build/sa2/src/engine/trig.o(.rodata);
|
||||
build/sa2/asm/sprite_3.o(.rodata);
|
||||
build/sa2/src/animation_commands_extra.o(.rodata);
|
||||
build/sa2/src/animation_commands.o(.rodata);
|
||||
build/sa2/src/engine/animation_commands_extra.o(.rodata);
|
||||
build/sa2/src/engine/animation_commands.o(.rodata);
|
||||
build/sa2/asm/sprite_4.o(.rodata);
|
||||
build/sa2/data/multiboot_chao_garden.o(.rodata);
|
||||
build/sa2/asm/entities_0.o(.rodata);
|
||||
build/sa2/src/interactable_spring.o(.rodata);
|
||||
build/sa2/src/interactable_platform.o(.rodata);
|
||||
build/sa2/src/game/interactables_0/spring.o(.rodata);
|
||||
build/sa2/src/game/interactables_0/platform.o(.rodata);
|
||||
build/sa2/asm/interactable_081.o(.rodata);
|
||||
build/sa2/asm/interactable_platform_thin.o(.rodata);
|
||||
build/sa2/asm/entities_1.o(.rodata);
|
||||
build/sa2/src/game.o(.rodata);
|
||||
build/sa2/src/stage.o(.rodata);
|
||||
build/sa2/src/game/game.o(.rodata);
|
||||
build/sa2/src/game/stage.o(.rodata);
|
||||
build/sa2/asm/game.o(.rodata);
|
||||
build/sa2/data/time_data.o(.rodata);
|
||||
build/sa2/src/time.o(.rodata);
|
||||
build/sa2/src/game/time.o(.rodata);
|
||||
build/sa2/data/data1_1_2.o(.rodata);
|
||||
build/sa2/src/character_select.o(.rodata);
|
||||
build/sa2/src/course_select.o(.rodata);
|
||||
build/sa2/src/countdown.o(.rodata);
|
||||
build/sa2/src/true_area_53_intro.o(.rodata);
|
||||
build/sa2/src/game/character_select.o(.rodata);
|
||||
build/sa2/src/game/course_select.o(.rodata);
|
||||
build/sa2/src/game/countdown.o(.rodata);
|
||||
build/sa2/src/game/true_area_53/intro.o(.rodata);
|
||||
build/sa2/data/true_area_53_data.o(.rodata);
|
||||
build/sa2/data/data1_1_3.o(.rodata);
|
||||
build/sa2/src/multiplayer_mode_select.o(.rodata);
|
||||
build/sa2/src/multiplayer_multipak_connection.o(.rodata);
|
||||
build/sa2/src/multiplayer_communication_outcome.o(.rodata);
|
||||
build/sa2/src/multiplayer_results.o(.rodata);
|
||||
build/sa2/src/multiplayer_team_play.o(.rodata);
|
||||
build/sa2/src/interactable_decoration.o(.rodata);
|
||||
build/sa2/src/interactable_booster.o(.rodata);
|
||||
build/sa2/src/interactable_spring_bouncy.o(.rodata);
|
||||
build/sa2/src/interactable_019.o(.rodata);
|
||||
build/sa2/src/interactable_spikes.o(.rodata);
|
||||
build/sa2/src/interactable_bouncy_bar.o(.rodata);
|
||||
build/sa2/src/interactable_checkpoint.o(.rodata);
|
||||
build/sa2/src/interactable_windmill.o(.rodata);
|
||||
build/sa2/src/profile.o(.rodata);
|
||||
build/sa2/src/special_stage_data.o(.rodata);
|
||||
build/sa2/src/special_stage_player.o(.rodata);
|
||||
build/sa2/src/special_stage_collectables.o(.rodata);
|
||||
build/sa2/src/special_stage_world.o(.rodata);
|
||||
build/sa2/src/special_stage_physics.o(.rodata);
|
||||
build/sa2/src/special_stage_ui.o(.rodata);
|
||||
build/sa2/src/special_stage_guard_robo.o(.rodata);
|
||||
build/sa2/src/special_stage_tables.o(.rodata);
|
||||
build/sa2/src/interactable_dash_ring.o(.rodata);
|
||||
build/sa2/src/interactable_music_plant_note_sphere.o(.rodata);
|
||||
build/sa2/src/interactable_music_plant_note_block.o(.rodata);
|
||||
build/sa2/src/interactable_music_plant_keyboard.o(.rodata);
|
||||
build/sa2/src/interactable_music_plant_german_flute.o(.rodata);
|
||||
build/sa2/src/handlers_ia_pipe_horn.o(.rodata);
|
||||
build/sa2/src/game/multiplayer/mode_select.o(.rodata);
|
||||
build/sa2/src/game/multiplayer/multipak_connection.o(.rodata);
|
||||
build/sa2/src/game/multiplayer/communication_outcome.o(.rodata);
|
||||
build/sa2/src/game/multiplayer/results.o(.rodata);
|
||||
build/sa2/src/game/multiplayer/team_play.o(.rodata);
|
||||
build/sa2/src/game/interactables_1/decoration.o(.rodata);
|
||||
build/sa2/src/game/interactables_1/booster.o(.rodata);
|
||||
build/sa2/src/game/interactables_1/spring_bouncy.o(.rodata);
|
||||
build/sa2/src/game/interactables_1/019.o(.rodata);
|
||||
build/sa2/src/game/interactables_1/spikes.o(.rodata);
|
||||
build/sa2/src/game/interactables_1/bouncy_bar.o(.rodata);
|
||||
build/sa2/src/game/interactables_1/checkpoint.o(.rodata);
|
||||
build/sa2/src/game/interactables_1/windmill.o(.rodata);
|
||||
build/sa2/src/game/options_screen.o(.rodata);
|
||||
build/sa2/src/game/special_stage/data.o(.rodata);
|
||||
build/sa2/src/game/special_stage/player.o(.rodata);
|
||||
build/sa2/src/game/special_stage/collectables.o(.rodata);
|
||||
build/sa2/src/game/special_stage/world.o(.rodata);
|
||||
build/sa2/src/game/special_stage/physics.o(.rodata);
|
||||
build/sa2/src/game/special_stage/ui.o(.rodata);
|
||||
build/sa2/src/game/special_stage/guard_robo.o(.rodata);
|
||||
build/sa2/src/game/special_stage/tables.o(.rodata);
|
||||
build/sa2/src/game/interactables_2/dash_ring.o(.rodata);
|
||||
build/sa2/src/game/interactables_2/music_plant/note_sphere.o(.rodata);
|
||||
build/sa2/src/game/interactables_2/music_plant/note_block.o(.rodata);
|
||||
build/sa2/src/game/interactables_2/music_plant/keyboard.o(.rodata);
|
||||
build/sa2/src/game/interactables_2/music_plant/german_flute.o(.rodata);
|
||||
build/sa2/src/game/interactables_2/music_plant/handlers_ia_pipe_horn.o(.rodata);
|
||||
build/sa2/data/data1_2_2.o(.rodata);
|
||||
build/sa2/src/interactable_music_plant_pipe_horn.o(.rodata);
|
||||
build/sa2/src/interactable_tec_base_note_block.o(.rodata);
|
||||
build/sa2/src/interactable_tec_base_light_bridge.o(.rodata);
|
||||
build/sa2/src/game/interactables_2/music_plant/pipe_horn.o(.rodata);
|
||||
build/sa2/src/game/interactables_2/tec_base/note_block.o(.rodata);
|
||||
build/sa2/src/game/interactables_2/tec_base/light_bridge.o(.rodata);
|
||||
build/sa2/data/data1_2_3.o(.rodata);
|
||||
build/sa2/src/interactable_music_plant_note_particle.o(.rodata);
|
||||
build/sa2/src/multiplayer_singlepak_connection.o(.rodata);
|
||||
build/sa2/src/collect_rings_time_display.o(.rodata);
|
||||
build/sa2/src/game/interactables_2/note_particle.o(.rodata);
|
||||
build/sa2/src/game/multiboot/connection.o(.rodata);
|
||||
build/sa2/src/game/multiboot/collect_rings/time_display.o(.rodata);
|
||||
build/sa2/data/math_data.o(.rodata);
|
||||
build/sa2/data/data1_3.o(.rodata);
|
||||
build/sa2/src/race_progress.o(.rodata);
|
||||
build/sa2/src/unknown_effect.o(.rodata);
|
||||
build/sa2/src/multiplayer_lobby.o(.rodata);
|
||||
build/sa2/src/time_attack_mode_select.o(.rodata);
|
||||
build/sa2/src/time_attack_lobby.o(.rodata);
|
||||
build/sa2/src/time_attack_results.o(.rodata);
|
||||
build/sa2/src/sound_test.o(.rodata);
|
||||
build/sa2/src/title_screen.o(.rodata);
|
||||
build/sa2/src/cut_scenes_level_endings.o(.rodata);
|
||||
build/sa2/src/cut_scenes_credits.o(.rodata);
|
||||
build/sa2/src/cut_scenes_credits_slides.o(.rodata);
|
||||
build/sa2/src/cut_scenes_credits_end.o(.rodata);
|
||||
build/sa2/src/cut_scenes_extra_ending_fall.o(.rodata);
|
||||
build/sa2/src/cut_scenes_final_ending_fall.o(.rodata);
|
||||
build/sa2/src/cut_scenes_final_ending_land.o(.rodata);
|
||||
build/sa2/src/cut_scenes_missing_emeralds.o(.rodata);
|
||||
build/sa2/src/game/race_progress.o(.rodata);
|
||||
build/sa2/src/game/unknown_effect.o(.rodata);
|
||||
build/sa2/src/game/multiplayer_lobby.o(.rodata);
|
||||
build/sa2/src/game/time_attack/mode_select.o(.rodata);
|
||||
build/sa2/src/game/time_attack/lobby.o(.rodata);
|
||||
build/sa2/src/game/time_attack/results.o(.rodata);
|
||||
build/sa2/src/game/sound_test.o(.rodata);
|
||||
build/sa2/src/game/title_screen.o(.rodata);
|
||||
build/sa2/src/game/cutscenes/level_endings.o(.rodata);
|
||||
build/sa2/src/game/cutscenes/credits.o(.rodata);
|
||||
build/sa2/src/game/cutscenes/credits_slides.o(.rodata);
|
||||
build/sa2/src/game/cutscenes/credits_end.o(.rodata);
|
||||
build/sa2/src/game/cutscenes/extra_ending_fall.o(.rodata);
|
||||
build/sa2/src/game/cutscenes/final_ending_fall.o(.rodata);
|
||||
build/sa2/src/game/cutscenes/final_ending_land.o(.rodata);
|
||||
build/sa2/src/game/cutscenes/missing_emeralds.o(.rodata);
|
||||
|
||||
build/sa2/data/data5.o(.rodata);
|
||||
build/sa2/data/sprite_data.o(.rodata);
|
||||
build/sa2/data/map_data.o(.rodata);
|
||||
|
||||
build/sa2/src/m4a_tables.o(.rodata);
|
||||
build/sa2/src/lib/m4a_tables.o(.rodata);
|
||||
build/sa2/data/sound_data.o(.rodata);
|
||||
|
||||
/* Songs */
|
||||
@@ -536,16 +536,16 @@ SECTIONS
|
||||
build/sa2/sound/songs/midi/mus_506.o(.rodata);
|
||||
|
||||
/* Lib data */
|
||||
build/sa2/src/agb_flash.o(.rodata);
|
||||
build/sa2/src/agb_flash_512k.o(.rodata);
|
||||
build/sa2/src/agb_flash_le_512k.o(.rodata);
|
||||
build/sa2/src/agb_flash_mx_512k.o(.rodata);
|
||||
build/sa2/src/lib/agb_flash.o(.rodata);
|
||||
build/sa2/src/lib/agb_flash_512k.o(.rodata);
|
||||
build/sa2/src/lib/agb_flash_le_512k.o(.rodata);
|
||||
build/sa2/src/lib/agb_flash_mx_512k.o(.rodata);
|
||||
*libgcc.a:_divdi3.o(.rodata);
|
||||
|
||||
/* Asset data */
|
||||
build/sa2/data/data3.o(.rodata);
|
||||
build/sa2/data/special_stage_levels.o(.rodata);
|
||||
build/sa2/src/handlers_ia_pipe_horn.o(.data);
|
||||
build/sa2/data/handlers_ia_pipe_horn_sequences.o(.rodata);
|
||||
build/sa2/src/palettes.o(.rodata);
|
||||
build/sa2/src/recordings.o(.rodata);
|
||||
build/sa2/data/data4.o(.rodata);
|
||||
|
||||
+748
@@ -0,0 +1,748 @@
|
||||
#include "core.h"
|
||||
#include "global.h"
|
||||
#include "data.h"
|
||||
#include "lib/m4a.h"
|
||||
#include "engine/malloc_ewram.h"
|
||||
#include "lib/multi_sio.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "engine/task.h"
|
||||
#include "lib/agb_flash.h"
|
||||
#include "flags.h"
|
||||
#include "engine/input_recorder.h"
|
||||
#include "engine/malloc_vram.h"
|
||||
|
||||
// TODO: the order of these vars has
|
||||
// been shuffled due to compilation losses.
|
||||
// It's possible to use `ramscrgen` to reorder
|
||||
// these variables in here and provide
|
||||
// the matching order separately
|
||||
IntrFunc gIntrTable[] = {};
|
||||
u32 gIntrMainBuf[] = {};
|
||||
struct Task gTasks[] = {};
|
||||
u16 gUnknown_030017F0 ALIGNED(4) = 0;
|
||||
s16 gUnknown_030017F4[2] ALIGNED(4) = {};
|
||||
Background *gUnknown_03001800[] ALIGNED(16) = {};
|
||||
u32 gFlags = 0;
|
||||
u8 gUnknown_03001850[] ALIGNED(16) = {};
|
||||
FuncType_030053A0 gUnknown_03001870[] = {};
|
||||
u16 gPhysicalInput = 0;
|
||||
|
||||
// gComputedBgBuffer
|
||||
void *gUnknown_03001884 = NULL;
|
||||
|
||||
u16 gVramHeapMaxTileSlots = 0;
|
||||
u8 gNumHBlankCallbacks ALIGNED(4) = 0;
|
||||
union MultiSioData gMultiSioRecv[4] = {};
|
||||
u8 gNumHBlankIntrs = 0;
|
||||
struct BlendRegs gBldRegs ALIGNED(8) = {};
|
||||
u8 gUnknown_030018F0 = 0;
|
||||
struct Task gEmptyTask ALIGNED(16) = {};
|
||||
struct BgAffineRegs gBgAffineRegs ALIGNED(8) = {};
|
||||
u32 gVramHeapStartAddr = 0;
|
||||
u16 gUnknown_03001944 ALIGNED(4) = 0;
|
||||
u8 gUnknown_03001948 ALIGNED(4) = 0;
|
||||
u16 gUnknown_0300194C ALIGNED(4) = 0;
|
||||
|
||||
u32 gMultiSioStatusFlags = 0;
|
||||
bool8 gMultiSioEnabled = FALSE;
|
||||
|
||||
struct Task *gTaskPtrs[] ALIGNED(16) = {};
|
||||
u32 gUnknown_03001B60[][160] = {};
|
||||
u16 gObjPalette[] = {};
|
||||
union Unk_03002E60 *gUnknown_03002260 = NULL;
|
||||
u32 gFrameCount = 0;
|
||||
u16 gWinRegs[6] ALIGNED(16) = {};
|
||||
s32 gNumTasks = 0;
|
||||
u8 gUnknown_03002280[4][4] = {};
|
||||
u16 gInput = 0;
|
||||
u8 gRepeatedKeysTestCounter[] ALIGNED(16) = {};
|
||||
void *gUnknown_030022AC = NULL;
|
||||
u16 gBgCntRegs[] = {};
|
||||
u16 gRepeatedKeys ALIGNED(4) = 0;
|
||||
struct Task *gNextTask = NULL;
|
||||
void *gUnknown_030022C0 = NULL;
|
||||
|
||||
OamData gUnknown_030022C8 ALIGNED(8) = {};
|
||||
OamData gUnknown_030022D0[] = {};
|
||||
s16 gUnknown_030026D0 = 0;
|
||||
|
||||
HBlankFunc gHBlankCallbacks[4] ALIGNED(16) = {};
|
||||
struct Task *gCurTask = NULL;
|
||||
u8 gUnknown_030026F4 = 0;
|
||||
u8 gKeysFirstRepeatIntervals[10] ALIGNED(16) = {};
|
||||
|
||||
u16 gReleasedKeys ALIGNED(4) = 0;
|
||||
u8 gUnknown_03002710[] ALIGNED(16) = {};
|
||||
u32 gFlagsPreVBlank = 0;
|
||||
/* 0x03002794 */ const struct SpriteTables *gUnknown_03002794 = NULL;
|
||||
struct GraphicsData *gVramGraphicsCopyQueue[] ALIGNED(16) = {};
|
||||
u16 gUnknown_03002820 = 0;
|
||||
s16 gBgScrollRegs[][2] ALIGNED(16) = {};
|
||||
u16 gDispCnt = 0;
|
||||
u8 gKeysContinuedRepeatIntervals[10] ALIGNED(16) = {};
|
||||
union MultiSioData gMultiSioSend ALIGNED(8) = {};
|
||||
u8 gUnknown_03002874 = 0;
|
||||
|
||||
// gComputedBgTarget
|
||||
void *gUnknown_03002878 ALIGNED(4) = NULL;
|
||||
|
||||
u8 gUnknown_0300287C = 0;
|
||||
u16 gBgPalette[] ALIGNED(16) = {};
|
||||
|
||||
// gComputedBgSectorSize
|
||||
u8 gUnknown_03002A80 ALIGNED(4) = 0;
|
||||
|
||||
u8 gVramGraphicsCopyQueueIndex ALIGNED(4) = 0;
|
||||
u16 gPrevInput ALIGNED(4) = 0;
|
||||
u16 gUnknown_03002A8C ALIGNED(4) = 0;
|
||||
|
||||
struct MultiBootParam gMultiBootParam ALIGNED(8) = {};
|
||||
|
||||
u16 gPressedKeys ALIGNED(4) = 0;
|
||||
u8 gUnknown_03002AE0 ALIGNED(4) = 0;
|
||||
u8 gUnknown_03002AE4 ALIGNED(4) = 0;
|
||||
HBlankFunc gHBlankIntrs[4] ALIGNED(16) = {};
|
||||
|
||||
u8 gIwramHeap[] = {};
|
||||
EWRAM_DATA u8 gEwramHeap[] = {};
|
||||
|
||||
Sprite *gUnknown_03004D10[] ALIGNED(16) = {};
|
||||
u8 gUnknown_03004D50 ALIGNED(4) = 0;
|
||||
void *gUnknown_03004D54 = NULL;
|
||||
u16 gUnknown_03004D58 ALIGNED(4) = 0;
|
||||
u8 gVramGraphicsCopyCursor ALIGNED(4) = 0;
|
||||
u8 gUnknown_03004D60[] ALIGNED(16) = {};
|
||||
u8 gUnknown_03004D80[] = {};
|
||||
OamData gOamBuffer[] ALIGNED(16) = {};
|
||||
u16 gVramHeapState[] = {};
|
||||
u8 gUnknown_03005390 ALIGNED(4) = 0;
|
||||
u16 gUnknown_03005394 ALIGNED(4) = 0;
|
||||
u16 gUnknown_03005398 ALIGNED(4) = 0;
|
||||
FuncType_030053A0 gUnknown_030053A0[] ALIGNED(16) = {};
|
||||
const u8 *gInputPlaybackData = NULL;
|
||||
bool8 gExecSoundMain ALIGNED(4) = FALSE;
|
||||
s32 gPseudoRandom = 0;
|
||||
struct InputRecorder gInputRecorder ALIGNED(8) = {};
|
||||
u16 *gInputRecorderTapeBuffer = NULL;
|
||||
|
||||
static void UpdateScreenDma(void);
|
||||
static void UpdateScreenCpuSet(void);
|
||||
static void ClearOamBufferCpuSet(void);
|
||||
static void ClearOamBufferDma(void);
|
||||
static void GetInput(void);
|
||||
static u32 ProcessVramGraphicsCopyQueue(void);
|
||||
|
||||
static void VBlankIntr(void);
|
||||
static void HBlankIntr(void);
|
||||
static void VCountIntr(void);
|
||||
static void Timer0Intr(void);
|
||||
static void Timer1Intr(void);
|
||||
static void Timer2Intr(void);
|
||||
static void Dma0Intr(void);
|
||||
static void Dma1Intr(void);
|
||||
static void Dma2Intr(void);
|
||||
static void Dma3Intr(void);
|
||||
static void KeypadIntr(void);
|
||||
static void GamepakIntr(void);
|
||||
|
||||
// Warning: array contains an empty slot which would have
|
||||
// been used for a Timer3Intr function
|
||||
IntrFunc const gIntrTableTemplate[] = {
|
||||
(void *)gMultiSioIntrFuncBuf,
|
||||
VBlankIntr,
|
||||
HBlankIntr,
|
||||
VCountIntr,
|
||||
Timer0Intr,
|
||||
Timer1Intr,
|
||||
Timer2Intr,
|
||||
Dma0Intr,
|
||||
Dma1Intr,
|
||||
Dma2Intr,
|
||||
Dma3Intr,
|
||||
KeypadIntr,
|
||||
GamepakIntr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static SpriteUpdateFunc const spriteUpdateFuncs[] = {
|
||||
ProcessVramGraphicsCopyQueue,
|
||||
sub_8004010,
|
||||
sub_80039E4,
|
||||
sub_8002B20,
|
||||
};
|
||||
|
||||
void GameInit(void)
|
||||
{
|
||||
s16 i;
|
||||
u16 errorIdentifying;
|
||||
|
||||
REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3;
|
||||
gFlags = 0;
|
||||
gFlagsPreVBlank = 0;
|
||||
|
||||
if ((REG_RCNT & 0xc000) != 0x8000) {
|
||||
gFlags = 0x200;
|
||||
DmaSet(3, (void *)OBJ_VRAM0, EWRAM_START + 0x3B000, 0x80002800);
|
||||
}
|
||||
|
||||
// Skip the intro if these
|
||||
// 4 buttons are pressed
|
||||
if (gInput == (START_BUTTON | SELECT_BUTTON | B_BUTTON | A_BUTTON)) {
|
||||
gFlags |= FLAGS_SKIP_INTRO;
|
||||
} else {
|
||||
gFlags &= ~FLAGS_SKIP_INTRO;
|
||||
}
|
||||
|
||||
DmaFill32(3, 0, (void *)VRAM, VRAM_SIZE);
|
||||
DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
|
||||
DmaFill32(3, 0, (void *)PLTT, PLTT_SIZE);
|
||||
|
||||
gUnknown_030026F4 = 0xff;
|
||||
gUnknown_03002AE4 = 0;
|
||||
gUnknown_0300287C = 0;
|
||||
gUnknown_03005390 = 0;
|
||||
gVramGraphicsCopyCursor = 0;
|
||||
gVramGraphicsCopyQueueIndex = 0;
|
||||
|
||||
DmaFill32(3, 0, gUnknown_03002280, sizeof(gUnknown_03002280));
|
||||
|
||||
// TODO: sort out this type
|
||||
*(u32 *)gUnknown_03004D80 = 0;
|
||||
|
||||
DmaFill32(3, 0, gBgScrollRegs, sizeof(gBgScrollRegs));
|
||||
|
||||
gUnknown_030017F4[0] = 0;
|
||||
gUnknown_030017F4[1] = 0;
|
||||
|
||||
gDispCnt = DISPCNT_FORCED_BLANK;
|
||||
|
||||
DmaFill32(3, 0, gVramGraphicsCopyQueue, sizeof(gVramGraphicsCopyQueue));
|
||||
|
||||
gUnknown_030018F0 = 0;
|
||||
gUnknown_03002AE0 = 0;
|
||||
|
||||
DmaFill16(3, 0x200, gOamBuffer, sizeof(gOamBuffer));
|
||||
DmaFill16(3, 0x200, gUnknown_030022D0, sizeof(gUnknown_030022D0));
|
||||
DmaFill32(3, ~0, gUnknown_03001850, sizeof(gUnknown_03001850));
|
||||
DmaFill32(3, ~0, gUnknown_03004D60, sizeof(gUnknown_03004D60));
|
||||
DmaFill32(3, 0, gObjPalette, sizeof(gObjPalette));
|
||||
DmaFill32(3, 0, gBgPalette, sizeof(gBgPalette));
|
||||
|
||||
gBgAffineRegs.bg2pa = 0x100;
|
||||
gBgAffineRegs.bg2pb = 0;
|
||||
gBgAffineRegs.bg2pc = 0;
|
||||
gBgAffineRegs.bg2pd = 0x100;
|
||||
gBgAffineRegs.bg2x = 0;
|
||||
gBgAffineRegs.bg2y = 0;
|
||||
gBgAffineRegs.bg3pa = 0x100;
|
||||
gBgAffineRegs.bg3pb = 0;
|
||||
gBgAffineRegs.bg3pc = 0;
|
||||
gBgAffineRegs.bg3pd = 0x100;
|
||||
gBgAffineRegs.bg3x = 0;
|
||||
gBgAffineRegs.bg3y = 0;
|
||||
|
||||
gUnknown_03001944 = 0;
|
||||
gUnknown_030017F0 = 0x100;
|
||||
gUnknown_03005394 = 0x100;
|
||||
gUnknown_03002A8C = 0;
|
||||
gUnknown_03004D58 = 0;
|
||||
gUnknown_0300194C = 0;
|
||||
gUnknown_03002820 = 0;
|
||||
gUnknown_03005398 = 0x100;
|
||||
|
||||
gWinRegs[0] = 0;
|
||||
gWinRegs[1] = 0;
|
||||
gWinRegs[2] = 0;
|
||||
gWinRegs[3] = 0;
|
||||
gWinRegs[4] = 0;
|
||||
gWinRegs[5] = 0;
|
||||
|
||||
gBldRegs.bldCnt = 0;
|
||||
gBldRegs.bldAlpha = 0;
|
||||
gBldRegs.bldY = 0;
|
||||
|
||||
gUnknown_030026D0 = 0;
|
||||
gPseudoRandom = 0;
|
||||
|
||||
for (i = 0; i < 10; i++) {
|
||||
gKeysFirstRepeatIntervals[i] = 20;
|
||||
gKeysContinuedRepeatIntervals[i] = 8;
|
||||
}
|
||||
|
||||
gInputRecorder.mode = RECORDER_DISABLED;
|
||||
gPhysicalInput = 0;
|
||||
gInputPlaybackData = NULL;
|
||||
gFrameCount = 0;
|
||||
|
||||
for (i = 0; i < 15; i++) {
|
||||
gIntrTable[i] = gIntrTableTemplate[i];
|
||||
}
|
||||
|
||||
DmaFill32(3, 0, &gUnknown_03001B60, sizeof(gUnknown_03001B60));
|
||||
|
||||
gUnknown_03001884 = gUnknown_03001B60[0];
|
||||
gUnknown_030022AC = gUnknown_03001B60[1];
|
||||
gUnknown_03002878 = NULL;
|
||||
gUnknown_03002A80 = 0;
|
||||
gNumHBlankCallbacks = 0;
|
||||
gNumHBlankIntrs = 0;
|
||||
|
||||
DmaFill32(3, 0, gHBlankCallbacks, sizeof(gHBlankCallbacks));
|
||||
DmaFill32(3, 0, gHBlankIntrs, sizeof(gHBlankCallbacks));
|
||||
|
||||
gUnknown_03004D50 = 0;
|
||||
gUnknown_03001948 = 0;
|
||||
|
||||
DmaFill32(3, 0, gUnknown_03001870, sizeof(gUnknown_03001870));
|
||||
DmaFill32(3, 0, gUnknown_030053A0, sizeof(gUnknown_030053A0));
|
||||
|
||||
m4aSoundInit();
|
||||
m4aSoundMode(DEFAULT_SOUND_MODE);
|
||||
|
||||
gExecSoundMain = TRUE;
|
||||
|
||||
TasksInit();
|
||||
EwramInitHeap();
|
||||
|
||||
// 140 / 256 max useable segments
|
||||
gVramHeapMaxTileSlots = 140 * VRAM_TILE_SLOTS_PER_SEGMENT;
|
||||
// Would be good to know where this number comes from
|
||||
gVramHeapStartAddr = OBJ_VRAM1 - (TILE_SIZE_4BPP * 48);
|
||||
|
||||
VramResetHeapState();
|
||||
|
||||
errorIdentifying = IdentifyFlash();
|
||||
if (errorIdentifying) {
|
||||
gFlags |= FLAGS_NO_FLASH_MEMORY;
|
||||
} else {
|
||||
SetFlashTimerIntr(1, &gIntrTable[5]);
|
||||
}
|
||||
|
||||
// Setup interrupt table
|
||||
DmaCopy32(3, IntrMain, gIntrMainBuf, sizeof(gIntrMainBuf));
|
||||
INTR_VECTOR = gIntrMainBuf;
|
||||
|
||||
REG_IME = INTR_FLAG_VBLANK;
|
||||
REG_IE = INTR_FLAG_VBLANK;
|
||||
REG_DISPSTAT = DISPSTAT_HBLANK_INTR | DISPSTAT_VBLANK_INTR;
|
||||
|
||||
// Setup multi sio
|
||||
DmaFill32(3, 0, &gMultiSioSend, sizeof(gMultiSioSend));
|
||||
DmaFill32(3, 0, gMultiSioRecv, sizeof(gMultiSioRecv));
|
||||
gMultiSioStatusFlags = 0;
|
||||
gMultiSioEnabled = FALSE;
|
||||
|
||||
MultiSioInit(0);
|
||||
}
|
||||
|
||||
void GameLoop(void)
|
||||
{
|
||||
while (TRUE) {
|
||||
gExecSoundMain = FALSE;
|
||||
if (!(gFlags & 0x4000)) {
|
||||
m4aSoundMain();
|
||||
}
|
||||
|
||||
if (gUnknown_030026F4 == 0xff) {
|
||||
GetInput();
|
||||
if (gMultiSioEnabled) {
|
||||
gMultiSioStatusFlags = MultiSioMain(&gMultiSioSend, gMultiSioRecv, 0);
|
||||
}
|
||||
TasksExec();
|
||||
}
|
||||
|
||||
gFlagsPreVBlank = gFlags;
|
||||
VBlankIntrWait();
|
||||
if (gFlags & 0x4000) {
|
||||
UpdateScreenCpuSet();
|
||||
if (!(gFlags & 0x400)) {
|
||||
ClearOamBufferCpuSet();
|
||||
}
|
||||
} else {
|
||||
UpdateScreenDma();
|
||||
if (!(gFlags & 0x400)) {
|
||||
ClearOamBufferDma();
|
||||
}
|
||||
}
|
||||
if ((gFlags & 0x400)) {
|
||||
gFlags |= 0x800;
|
||||
} else {
|
||||
gFlags &= ~0x800;
|
||||
}
|
||||
|
||||
// Wait for vblank to finish
|
||||
while (REG_DISPSTAT & DISPSTAT_VBLANK)
|
||||
;
|
||||
};
|
||||
}
|
||||
|
||||
static void UpdateScreenDma(void)
|
||||
{
|
||||
u8 i, j = 0;
|
||||
REG_DISPCNT = gDispCnt;
|
||||
DmaCopy32(3, gBgCntRegs, (void *)REG_ADDR_BG0CNT, 8);
|
||||
|
||||
if (gFlags & 1) {
|
||||
DmaCopy32(3, gBgPalette, (void *)BG_PLTT, BG_PLTT_SIZE);
|
||||
gFlags ^= 1;
|
||||
}
|
||||
|
||||
if (gFlags & 2) {
|
||||
DmaCopy32(3, gObjPalette, (void *)OBJ_PLTT, OBJ_PLTT_SIZE);
|
||||
gFlags ^= 2;
|
||||
}
|
||||
|
||||
DmaCopy32(3, gWinRegs, (void *)REG_ADDR_WIN0H, sizeof(gWinRegs));
|
||||
DmaCopy16(3, &gBldRegs, (void *)REG_ADDR_BLDCNT, 6);
|
||||
DmaCopy16(3, &gUnknown_030026D0, (void *)REG_ADDR_MOSAIC, 4);
|
||||
DmaCopy16(3, gBgScrollRegs, (void *)REG_ADDR_BG0HOFS, sizeof(gBgScrollRegs));
|
||||
DmaCopy32(3, &gBgAffineRegs, (void *)REG_ADDR_BG2PA, sizeof(gBgAffineRegs));
|
||||
|
||||
if (gFlags & FLAGS_EXECUTE_HBLANK_CALLBACKS) {
|
||||
REG_IE |= INTR_FLAG_HBLANK;
|
||||
DmaFill32(3, 0, gHBlankIntrs, sizeof(gHBlankIntrs));
|
||||
if (gNumHBlankCallbacks != 0) {
|
||||
DmaCopy32(3, gHBlankCallbacks, gHBlankIntrs,
|
||||
gNumHBlankCallbacks * sizeof(HBlankFunc));
|
||||
}
|
||||
gNumHBlankIntrs = gNumHBlankCallbacks;
|
||||
} else {
|
||||
REG_IE &= ~INTR_FLAG_HBLANK;
|
||||
gNumHBlankIntrs = 0;
|
||||
}
|
||||
|
||||
if (gFlags & 0x4) {
|
||||
DmaCopy16(3, gUnknown_03001884, gUnknown_03002878, gUnknown_03002A80);
|
||||
}
|
||||
|
||||
if (gUnknown_030026F4 == 0xff) {
|
||||
DrawToOamBuffer();
|
||||
DmaCopy16(3, gOamBuffer, (void *)OAM, 0x100);
|
||||
DmaCopy16(3, gOamBuffer + 0x20, (void *)OAM + 0x100, 0x100);
|
||||
DmaCopy16(3, gOamBuffer + 0x40, (void *)OAM + 0x200, 0x100);
|
||||
DmaCopy16(3, gOamBuffer + 0x60, (void *)OAM + 0x300, 0x100);
|
||||
}
|
||||
|
||||
for (i = 0; i < gUnknown_03001948; i++) {
|
||||
gUnknown_030053A0[i]();
|
||||
}
|
||||
|
||||
if (gFlags & 0x10) {
|
||||
DmaFill32(3, 0, gUnknown_030053A0, sizeof(gUnknown_030053A0));
|
||||
if (gUnknown_03004D50 != 0) {
|
||||
DmaCopy32(3, gUnknown_03001870, gUnknown_030053A0,
|
||||
gUnknown_03004D50 * sizeof(FuncType_030053A0));
|
||||
}
|
||||
gUnknown_03001948 = gUnknown_03004D50;
|
||||
} else {
|
||||
gUnknown_03001948 = 0;
|
||||
}
|
||||
|
||||
j = gUnknown_030026F4;
|
||||
if (j == 0xff) {
|
||||
j = 0;
|
||||
}
|
||||
|
||||
gUnknown_030026F4 = 0xff;
|
||||
for (; j <= 3; j++) {
|
||||
if (spriteUpdateFuncs[j]() == 0) {
|
||||
gUnknown_030026F4 = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ClearOamBufferDma(void)
|
||||
{
|
||||
gNumHBlankCallbacks = 0;
|
||||
|
||||
gFlags &= ~FLAGS_EXECUTE_HBLANK_CALLBACKS;
|
||||
if (!(gFlags & 0x20)) {
|
||||
if (gUnknown_03001884 == gUnknown_03004D54) {
|
||||
gUnknown_03001884 = gUnknown_030022C0;
|
||||
gUnknown_030022AC = gUnknown_03004D54;
|
||||
} else {
|
||||
gUnknown_03001884 = gUnknown_03004D54;
|
||||
gUnknown_030022AC = gUnknown_030022C0;
|
||||
}
|
||||
}
|
||||
gFlags &= ~4;
|
||||
DmaFill16(3, 0x200, gOamBuffer, 0x100);
|
||||
DmaFill16(3, 0x200, gOamBuffer + 0x20, 0x100);
|
||||
DmaFill16(3, 0x200, gOamBuffer + 0x40, 0x100);
|
||||
DmaFill16(3, 0x200, gOamBuffer + 0x60, 0x100);
|
||||
|
||||
gUnknown_03004D50 = 0;
|
||||
gFlags &= ~16;
|
||||
}
|
||||
|
||||
static void UpdateScreenCpuSet(void)
|
||||
{
|
||||
u8 i, j = 0;
|
||||
REG_DISPCNT = gDispCnt;
|
||||
CpuCopy32(gBgCntRegs, (void *)REG_ADDR_BG0CNT, sizeof(gBgCntRegs));
|
||||
|
||||
if (gFlags & 1) {
|
||||
CpuFastCopy(gBgPalette, (void *)BG_PLTT, BG_PLTT_SIZE);
|
||||
gFlags ^= 1;
|
||||
}
|
||||
|
||||
if (gFlags & 2) {
|
||||
CpuFastCopy(gObjPalette, (void *)OBJ_PLTT, OBJ_PLTT_SIZE);
|
||||
gFlags ^= 2;
|
||||
}
|
||||
|
||||
CpuCopy32(gWinRegs, (void *)REG_ADDR_WIN0H, sizeof(gWinRegs));
|
||||
CpuCopy16(&gBldRegs, (void *)REG_ADDR_BLDCNT, 6);
|
||||
CpuCopy16(&gUnknown_030026D0, (void *)REG_ADDR_MOSAIC, 4);
|
||||
CpuCopy16(gBgScrollRegs, (void *)REG_ADDR_BG0HOFS, sizeof(gBgScrollRegs));
|
||||
CpuCopy32(&gBgAffineRegs, (void *)REG_ADDR_BG2PA, sizeof(gBgAffineRegs));
|
||||
|
||||
if (gFlags & FLAGS_EXECUTE_HBLANK_CALLBACKS) {
|
||||
REG_IE |= INTR_FLAG_HBLANK;
|
||||
CpuFastFill(0, gHBlankIntrs, sizeof(gHBlankIntrs));
|
||||
if (gNumHBlankCallbacks != 0) {
|
||||
CpuFastSet(gHBlankCallbacks, gHBlankIntrs, gNumHBlankCallbacks);
|
||||
}
|
||||
gNumHBlankIntrs = gNumHBlankCallbacks;
|
||||
} else {
|
||||
REG_IE &= ~INTR_FLAG_HBLANK;
|
||||
gNumHBlankIntrs = 0;
|
||||
}
|
||||
|
||||
if (gUnknown_030026F4 == 0xff) {
|
||||
DrawToOamBuffer();
|
||||
CpuFastCopy(gOamBuffer, (void *)OAM, OAM_SIZE);
|
||||
}
|
||||
|
||||
for (i = 0; i < gUnknown_03001948; i++) {
|
||||
gUnknown_030053A0[i]();
|
||||
}
|
||||
|
||||
if (gFlags & 0x10) {
|
||||
CpuFastFill(0, gUnknown_030053A0, 0x10);
|
||||
if (gUnknown_03004D50 != 0) {
|
||||
CpuFastSet(gUnknown_03001870, gUnknown_030053A0, gUnknown_03004D50);
|
||||
}
|
||||
gUnknown_03001948 = gUnknown_03004D50;
|
||||
} else {
|
||||
gUnknown_03001948 = 0;
|
||||
}
|
||||
|
||||
j = gUnknown_030026F4;
|
||||
if (j == 0xff) {
|
||||
j = 0;
|
||||
}
|
||||
|
||||
gUnknown_030026F4 = 0xff;
|
||||
for (; j <= 3; j++) {
|
||||
if (spriteUpdateFuncs[j]() == 0) {
|
||||
gUnknown_030026F4 = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void VBlankIntr(void)
|
||||
{
|
||||
u16 keys;
|
||||
DmaStop(0);
|
||||
m4aSoundVSync();
|
||||
INTR_CHECK |= 1;
|
||||
gExecSoundMain = TRUE;
|
||||
|
||||
if (gFlagsPreVBlank & 4) {
|
||||
REG_IE |= INTR_FLAG_HBLANK;
|
||||
DmaWait(0);
|
||||
DmaCopy16(0, gUnknown_03001884, gUnknown_03002878, gUnknown_03002A80);
|
||||
DmaSet(0, gUnknown_03001884 + gUnknown_03002A80, gUnknown_03002878,
|
||||
((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16)
|
||||
| (gUnknown_03002A80 >> 1));
|
||||
} else if (gUnknown_03002878) {
|
||||
REG_IE &= ~INTR_FLAG_HBLANK;
|
||||
gUnknown_03002878 = NULL;
|
||||
}
|
||||
|
||||
if (gFlagsPreVBlank & 0x40) {
|
||||
REG_DISPSTAT |= DISPSTAT_VCOUNT_INTR;
|
||||
REG_DISPSTAT &= 0xff;
|
||||
REG_DISPSTAT |= gUnknown_03002874 << 8;
|
||||
REG_DISPSTAT &= ~DISPSTAT_VCOUNT;
|
||||
REG_DISPSTAT |= DISPSTAT_VCOUNT_INTR;
|
||||
REG_IE |= INTR_FLAG_VCOUNT;
|
||||
} else {
|
||||
REG_DISPSTAT &= ~DISPSTAT_VCOUNT;
|
||||
REG_DISPSTAT &= ~DISPSTAT_VCOUNT_INTR;
|
||||
REG_IE &= ~INTR_FLAG_VCOUNT;
|
||||
}
|
||||
|
||||
if (!(gFlagsPreVBlank & 0x8000)) {
|
||||
keys = ~REG_KEYINPUT & (START_BUTTON | SELECT_BUTTON | B_BUTTON | A_BUTTON);
|
||||
if (keys == (START_BUTTON | SELECT_BUTTON | B_BUTTON | A_BUTTON)) {
|
||||
gFlags |= 0x8000;
|
||||
REG_IE = 0;
|
||||
REG_IME = 0;
|
||||
REG_DISPSTAT = DISPCNT_MODE_0;
|
||||
m4aMPlayAllStop();
|
||||
m4aSoundVSyncOff();
|
||||
gFlags &= ~4;
|
||||
DmaStop(0);
|
||||
DmaStop(1);
|
||||
DmaStop(2);
|
||||
DmaStop(3);
|
||||
gInput = keys;
|
||||
SoftReset(0x20);
|
||||
}
|
||||
}
|
||||
|
||||
gFrameCount++;
|
||||
REG_IF = INTR_FLAG_VBLANK;
|
||||
}
|
||||
|
||||
// TODO: Fix ProcessVramGraphicsCopyQueue so no need to cast
|
||||
struct GraphicsData_Hack {
|
||||
u32 src;
|
||||
u32 dest;
|
||||
u16 remainingBytes;
|
||||
};
|
||||
|
||||
#define COPY_CHUNK_SIZE 1024
|
||||
|
||||
static u32 ProcessVramGraphicsCopyQueue(void)
|
||||
{
|
||||
u32 offset;
|
||||
struct GraphicsData_Hack *graphics;
|
||||
|
||||
while (gVramGraphicsCopyCursor != gVramGraphicsCopyQueueIndex) {
|
||||
graphics = (struct GraphicsData_Hack *)
|
||||
gVramGraphicsCopyQueue[gVramGraphicsCopyCursor];
|
||||
|
||||
if (graphics->remainingBytes != 0) {
|
||||
for (offset = 0; graphics->remainingBytes > 0; offset += COPY_CHUNK_SIZE) {
|
||||
if (graphics->remainingBytes > COPY_CHUNK_SIZE) {
|
||||
DmaCopy16(3, graphics->src + offset, graphics->dest + offset,
|
||||
COPY_CHUNK_SIZE);
|
||||
graphics->remainingBytes -= COPY_CHUNK_SIZE;
|
||||
} else {
|
||||
DmaCopy16(3, graphics->src + offset, graphics->dest + offset,
|
||||
graphics->remainingBytes);
|
||||
graphics->remainingBytes = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gVramGraphicsCopyCursor++;
|
||||
gVramGraphicsCopyCursor &= ARRAY_COUNT(gVramGraphicsCopyQueue) - 1;
|
||||
|
||||
if (!(REG_DISPSTAT & DISPSTAT_VBLANK)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void GetInput(void)
|
||||
{
|
||||
s8 i;
|
||||
u8 *repeatKeyCounters = gRepeatedKeysTestCounter,
|
||||
*firstIntervals = gKeysFirstRepeatIntervals,
|
||||
*continuedHoldIntervals = gKeysContinuedRepeatIntervals;
|
||||
|
||||
gInput = (~REG_KEYINPUT & KEYS_MASK);
|
||||
|
||||
// My guess is that whilst the input recorder
|
||||
// is running we still want to know the actual
|
||||
// input. For example; to be able to know when
|
||||
// to exit the demo
|
||||
gPhysicalInput = gInput;
|
||||
|
||||
if (gInputRecorder.mode == RECORDER_RECORD) {
|
||||
InputRecorderWrite(gInput);
|
||||
} else if (gInputRecorder.mode == RECORDER_PLAYBACK) {
|
||||
gInput = InputRecorderRead();
|
||||
}
|
||||
|
||||
gPressedKeys = (gInput ^ gPrevInput) & gInput;
|
||||
gReleasedKeys = (gInput ^ gPrevInput) & gPrevInput;
|
||||
gPrevInput = gInput;
|
||||
|
||||
// Repeated keys will be the currently pressed keys
|
||||
gRepeatedKeys = gPressedKeys;
|
||||
|
||||
// Calculate the next repeated state for every key
|
||||
for (i = 0; i < 10; i++) {
|
||||
if (!GetBit(gInput, i)) {
|
||||
// If a key is not pressed, reset its counter
|
||||
// to the settings for that key's
|
||||
// first repeat interval
|
||||
repeatKeyCounters[i] = firstIntervals[i];
|
||||
} else if (repeatKeyCounters[i] > 0) {
|
||||
// If the key is not yet ready to be repeated
|
||||
// continue to wait
|
||||
repeatKeyCounters[i]--;
|
||||
} else {
|
||||
// If the key is ready to be repeated,
|
||||
// add the key to the repeated keys
|
||||
gRepeatedKeys |= 1 << i;
|
||||
// And reset its counter to the settings
|
||||
// for continued hold interval
|
||||
repeatKeyCounters[i] = continuedHoldIntervals[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void HBlankIntr(void)
|
||||
{
|
||||
u8 i;
|
||||
u8 vcount = *(vu8 *)REG_ADDR_VCOUNT;
|
||||
|
||||
if (vcount < DISPLAY_HEIGHT) {
|
||||
for (i = 0; i < gNumHBlankIntrs; i++) {
|
||||
gHBlankIntrs[i](vcount);
|
||||
}
|
||||
}
|
||||
|
||||
REG_IF = INTR_FLAG_HBLANK;
|
||||
}
|
||||
|
||||
static void VCountIntr(void) { REG_IF = INTR_FLAG_VCOUNT; }
|
||||
|
||||
static void Dma0Intr(void) { REG_IF = INTR_FLAG_DMA0; }
|
||||
|
||||
static void Dma1Intr(void) { REG_IF = INTR_FLAG_DMA1; }
|
||||
|
||||
static void Dma2Intr(void) { REG_IF = INTR_FLAG_DMA2; }
|
||||
|
||||
static void Dma3Intr(void) { REG_IF = INTR_FLAG_DMA3; }
|
||||
|
||||
static void Timer0Intr(void) { REG_IF = INTR_FLAG_TIMER0; }
|
||||
|
||||
static void Timer1Intr(void) { REG_IF = INTR_FLAG_TIMER1; }
|
||||
|
||||
static void Timer2Intr(void) { REG_IF = INTR_FLAG_TIMER2; }
|
||||
|
||||
static void KeypadIntr(void) { REG_IF = INTR_FLAG_KEYPAD; }
|
||||
|
||||
static void GamepakIntr(void) { REG_IF = INTR_FLAG_GAMEPAK; }
|
||||
|
||||
void DummyFunc(void) { }
|
||||
|
||||
static void ClearOamBufferCpuSet(void)
|
||||
{
|
||||
gNumHBlankCallbacks = 0;
|
||||
|
||||
gFlags &= ~FLAGS_EXECUTE_HBLANK_CALLBACKS;
|
||||
if (!(gFlags & 0x20)) {
|
||||
if (gUnknown_03001884 == gUnknown_03004D54) {
|
||||
gUnknown_03001884 = gUnknown_030022C0;
|
||||
gUnknown_030022AC = gUnknown_03004D54;
|
||||
} else {
|
||||
gUnknown_03001884 = gUnknown_03004D54;
|
||||
gUnknown_030022AC = gUnknown_030022C0;
|
||||
}
|
||||
}
|
||||
gFlags &= ~4;
|
||||
CpuFastFill(0x200, gOamBuffer, sizeof(gOamBuffer));
|
||||
gUnknown_03004D50 = 0;
|
||||
gFlags &= ~16;
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
#include "global.h"
|
||||
#include "m4a.h"
|
||||
#include "lib/m4a.h"
|
||||
|
||||
#include "data.h"
|
||||
#include "flags.h"
|
||||
#include "sprite.h"
|
||||
#include "engine/sprite.h"
|
||||
|
||||
#include "animation_commands.h"
|
||||
#include "engine/animation_commands.h"
|
||||
|
||||
extern s32 animCmd_GetTiles(void *cursor, Sprite *sprite);
|
||||
static s32 animCmd_GetPalette(void *cursor, Sprite *sprite);
|
||||
@@ -1,14 +1,14 @@
|
||||
#include "global.h"
|
||||
#include "gba/syscall.h"
|
||||
#include "main.h"
|
||||
#include "m4a.h"
|
||||
#include "trig.h"
|
||||
#include "core.h"
|
||||
#include "lib/m4a.h"
|
||||
#include "engine/trig.h"
|
||||
|
||||
#include "data.h"
|
||||
#include "flags.h"
|
||||
#include "sprite.h"
|
||||
#include "engine/sprite.h"
|
||||
|
||||
#include "animation_commands.h"
|
||||
#include "engine/animation_commands.h"
|
||||
|
||||
extern const struct SpriteTables *gUnknown_03002794;
|
||||
extern u8 gVramGraphicsCopyQueueIndex;
|
||||
@@ -1,5 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "core.h"
|
||||
|
||||
#define CastPointer(ptr, index) (void *)&(((u8 *)(ptr))[(index)])
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "task.h"
|
||||
#include "malloc_ewram.h"
|
||||
#include "input_recorder.h"
|
||||
#include "core.h"
|
||||
#include "engine/task.h"
|
||||
#include "engine/malloc_ewram.h"
|
||||
#include "engine/input_recorder.h"
|
||||
|
||||
#define TAPE_LENGTH 0x800
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "malloc_ewram.h"
|
||||
#include "core.h"
|
||||
#include "engine/malloc_ewram.h"
|
||||
|
||||
/* At the very beginning, there's only one node. */
|
||||
void EwramInitHeap(void)
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "malloc_vram.h"
|
||||
#include "core.h"
|
||||
#include "engine/malloc_vram.h"
|
||||
|
||||
void *VramMalloc(u32 numTiles)
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "sprite.h"
|
||||
#include "core.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "flags.h"
|
||||
|
||||
extern s32 animCmd_GetTiles_COPY(void *, Sprite *);
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "sprite.h"
|
||||
#include "core.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "flags.h"
|
||||
|
||||
// TODO: Fill
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "sprite.h"
|
||||
#include "core.h"
|
||||
#include "engine/sprite.h"
|
||||
#include "flags.h"
|
||||
|
||||
extern const u8 gUnknown_080984DC[][2];
|
||||
Loaded 100 of 210 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user