From 4c25ed9a98d0ba508744ef62b825ffdaaa10f878 Mon Sep 17 00:00:00 2001 From: fate6 Date: Sun, 29 Dec 2024 15:33:21 -0800 Subject: [PATCH] Tsuchinoko Real? --- Slightlys Midnight Adventure.gbc | Bin 0 -> 262144 bytes src/.gitignore | 29 + src/Makefile | 35 + src/Makefile.build | 1 + src/Makefile.common | 174 ++ src/engine.json | 249 +++ src/include/actor.h | 81 + src/include/bankdata.h | 147 ++ src/include/camera.h | 32 + src/include/collision.h | 71 + src/include/compat.h | 47 + src/include/core.h | 9 + src/include/data/actor_0_interact.h | 11 + src/include/data/actor_10_interact.h | 11 + src/include/data/actor_11_interact.h | 11 + src/include/data/actor_12_interact.h | 11 + src/include/data/actor_13_interact.h | 11 + src/include/data/actor_14_interact.h | 11 + src/include/data/actor_15_interact.h | 11 + src/include/data/actor_1_interact.h | 11 + src/include/data/actor_2_interact.h | 11 + src/include/data/actor_3_interact.h | 11 + src/include/data/actor_4_interact.h | 11 + src/include/data/actor_5_interact.h | 11 + src/include/data/actor_6_interact.h | 11 + src/include/data/actor_7_interact.h | 11 + src/include/data/actor_8_interact.h | 11 + src/include/data/actor_9_interact.h | 11 + src/include/data/bg_cave.h | 11 + src/include/data/bg_cave_tilemap.h | 11 + src/include/data/bg_cave_tilemap_attr.h | 11 + src/include/data/bg_cave_tileset.h | 11 + src/include/data/bg_endscreen.h | 11 + src/include/data/bg_endscreen_cgb_tileset.h | 11 + src/include/data/bg_endscreen_tilemap.h | 11 + src/include/data/bg_endscreen_tilemap_attr.h | 11 + src/include/data/bg_endscreen_tileset.h | 11 + src/include/data/bg_fate6housef2.h | 11 + src/include/data/bg_fate6housef2_tilemap.h | 11 + .../data/bg_fate6housef2_tilemap_attr.h | 11 + src/include/data/bg_fate6housef2_tileset.h | 11 + src/include/data/bg_house.h | 11 + src/include/data/bg_house_tilemap.h | 11 + src/include/data/bg_house_tilemap_attr.h | 11 + src/include/data/bg_house_tileset.h | 11 + src/include/data/bg_house_wide.h | 11 + src/include/data/bg_house_wide_tilemap.h | 11 + src/include/data/bg_house_wide_tilemap_attr.h | 11 + src/include/data/bg_house_wide_tileset.h | 11 + src/include/data/bg_housef2.h | 11 + src/include/data/bg_housef2_tilemap.h | 11 + src/include/data/bg_housef2_tilemap_attr.h | 11 + src/include/data/bg_housef2_tileset.h | 11 + src/include/data/bg_lab1.h | 11 + src/include/data/bg_lab1_tilemap.h | 11 + src/include/data/bg_lab1_tilemap_attr.h | 11 + src/include/data/bg_lab1_tileset.h | 11 + src/include/data/bg_logoscreen.h | 11 + src/include/data/bg_logoscreen_tilemap.h | 11 + src/include/data/bg_logoscreen_tilemap_attr.h | 11 + src/include/data/bg_logoscreen_tileset.h | 11 + src/include/data/bg_outside.h | 11 + src/include/data/bg_outside_cgb_tileset.h | 11 + src/include/data/bg_outside_tilemap.h | 11 + src/include/data/bg_outside_tilemap_attr.h | 11 + src/include/data/bg_outside_tileset.h | 11 + src/include/data/bg_overworld_test_1.h | 11 + .../data/bg_overworld_test_1_tilemap.h | 11 + .../data/bg_overworld_test_1_tilemap_attr.h | 11 + .../data/bg_overworld_test_1_tileset.h | 11 + src/include/data/bg_questscreen.h | 11 + src/include/data/bg_questscreen_tilemap.h | 11 + .../data/bg_questscreen_tilemap_attr.h | 11 + src/include/data/bg_questscreen_tileset.h | 11 + src/include/data/bg_slighhousef2.h | 11 + src/include/data/bg_slighhousef2_tilemap.h | 11 + .../data/bg_slighhousef2_tilemap_attr.h | 11 + src/include/data/bg_slighhousef2_tileset.h | 11 + src/include/data/bg_titlescreen.h | 11 + src/include/data/bg_titlescreen_tilemap.h | 11 + .../data/bg_titlescreen_tilemap_attr.h | 11 + src/include/data/bg_titlescreen_tileset.h | 11 + src/include/data/border.h | 16 + src/include/data/cursor_image.h | 11 + src/include/data/data_bootstrap.h | 18 + src/include/data/emote_love.h | 11 + src/include/data/font_gbs_mono.h | 11 + src/include/data/frame_image.h | 11 + src/include/data/game_globals.h | 17 + src/include/data/game_globals.i | 13 + src/include/data/music_data.h | 13 + src/include/data/palette_0.h | 11 + src/include/data/palette_1.h | 11 + src/include/data/palette_10.h | 11 + src/include/data/palette_11.h | 11 + src/include/data/palette_12.h | 11 + src/include/data/palette_13.h | 11 + src/include/data/palette_2.h | 11 + src/include/data/palette_3.h | 11 + src/include/data/palette_4.h | 11 + src/include/data/palette_5.h | 11 + src/include/data/palette_6.h | 11 + src/include/data/palette_7.h | 11 + src/include/data/palette_8.h | 11 + src/include/data/palette_9.h | 11 + src/include/data/scene_1.h | 11 + src/include/data/scene_10.h | 11 + src/include/data/scene_10_collisions.h | 12 + src/include/data/scene_10_init.h | 11 + src/include/data/scene_11.h | 11 + src/include/data/scene_11_collisions.h | 12 + src/include/data/scene_11_init.h | 11 + src/include/data/scene_11_triggers.h | 12 + src/include/data/scene_12.h | 11 + src/include/data/scene_12_collisions.h | 12 + src/include/data/scene_12_init.h | 11 + src/include/data/scene_13.h | 11 + src/include/data/scene_13_collisions.h | 12 + src/include/data/scene_13_init.h | 11 + src/include/data/scene_14.h | 11 + src/include/data/scene_14_actors.h | 12 + src/include/data/scene_14_collisions.h | 12 + src/include/data/scene_14_init.h | 11 + src/include/data/scene_14_sprites.h | 12 + src/include/data/scene_14_triggers.h | 12 + src/include/data/scene_15.h | 11 + src/include/data/scene_15_actors.h | 12 + src/include/data/scene_15_collisions.h | 12 + src/include/data/scene_15_init.h | 11 + src/include/data/scene_15_sprites.h | 12 + src/include/data/scene_16.h | 11 + src/include/data/scene_16_collisions.h | 12 + src/include/data/scene_16_init.h | 11 + src/include/data/scene_17.h | 11 + src/include/data/scene_17_actors.h | 12 + src/include/data/scene_17_collisions.h | 12 + src/include/data/scene_17_init.h | 11 + src/include/data/scene_17_sprites.h | 12 + src/include/data/scene_17_triggers.h | 12 + src/include/data/scene_1_actors.h | 12 + src/include/data/scene_1_collisions.h | 12 + src/include/data/scene_1_init.h | 11 + src/include/data/scene_1_sprites.h | 12 + src/include/data/scene_1_triggers.h | 12 + src/include/data/scene_2.h | 11 + src/include/data/scene_2_actors.h | 12 + src/include/data/scene_2_collisions.h | 12 + src/include/data/scene_2_init.h | 11 + src/include/data/scene_2_sprites.h | 12 + src/include/data/scene_2_triggers.h | 12 + src/include/data/scene_3.h | 11 + src/include/data/scene_3_actors.h | 12 + src/include/data/scene_3_collisions.h | 12 + src/include/data/scene_3_init.h | 11 + src/include/data/scene_3_sprites.h | 12 + src/include/data/scene_3_triggers.h | 12 + src/include/data/scene_4.h | 11 + src/include/data/scene_4_collisions.h | 12 + src/include/data/scene_4_init.h | 11 + src/include/data/scene_4_triggers.h | 12 + src/include/data/scene_5.h | 11 + src/include/data/scene_5_actors.h | 12 + src/include/data/scene_5_collisions.h | 12 + src/include/data/scene_5_init.h | 11 + src/include/data/scene_5_sprites.h | 12 + src/include/data/scene_5_triggers.h | 12 + src/include/data/scene_6.h | 11 + src/include/data/scene_6_actors.h | 12 + src/include/data/scene_6_collisions.h | 12 + src/include/data/scene_6_init.h | 11 + src/include/data/scene_6_sprites.h | 12 + src/include/data/scene_6_triggers.h | 12 + src/include/data/scene_7.h | 11 + src/include/data/scene_7_actors.h | 12 + src/include/data/scene_7_collisions.h | 12 + src/include/data/scene_7_init.h | 11 + src/include/data/scene_7_sprites.h | 12 + src/include/data/scene_7_triggers.h | 12 + src/include/data/scene_8.h | 11 + src/include/data/scene_8_actors.h | 12 + src/include/data/scene_8_collisions.h | 12 + src/include/data/scene_8_init.h | 11 + src/include/data/scene_8_sprites.h | 12 + src/include/data/scene_8_triggers.h | 12 + src/include/data/scene_9.h | 11 + src/include/data/scene_9_collisions.h | 12 + src/include/data/scene_9_init.h | 11 + src/include/data/scene_9_triggers.h | 12 + src/include/data/scene_types.h | 8 + src/include/data/script_1.h | 11 + src/include/data/script_input.h | 11 + src/include/data/script_input_4.h | 11 + src/include/data/script_input_5.h | 11 + src/include/data/script_input_6.h | 11 + src/include/data/sprite_actor_animated.h | 11 + .../sprite_actor_animated_bank2_tileset.h | 11 + .../data/sprite_actor_animated_tileset.h | 11 + src/include/data/sprite_cat.h | 11 + src/include/data/sprite_cat_bank2_tileset.h | 11 + src/include/data/sprite_cat_tileset.h | 11 + src/include/data/sprite_charanimatedsprite.h | 11 + .../sprite_charanimatedsprite_bank2_tileset.h | 11 + .../data/sprite_charanimatedsprite_tileset.h | 11 + src/include/data/sprite_checkbox.h | 11 + .../data/sprite_checkbox_bank2_tileset.h | 11 + src/include/data/sprite_checkbox_tileset.h | 11 + src/include/data/sprite_dog.h | 11 + src/include/data/sprite_dog_bank2_tileset.h | 11 + src/include/data/sprite_dog_tileset.h | 11 + src/include/data/sprite_npc001.h | 11 + .../data/sprite_npc001_bank2_tileset.h | 11 + src/include/data/sprite_npc001_tileset.h | 11 + src/include/data/sprite_npc002.h | 11 + .../data/sprite_npc002_bank2_tileset.h | 11 + src/include/data/sprite_npc002_tileset.h | 11 + src/include/data/sprite_npc005.h | 11 + .../data/sprite_npc005_bank2_tileset.h | 11 + src/include/data/sprite_npc005_tileset.h | 11 + src/include/data/sprite_player.h | 11 + .../data/sprite_player_bank2_tileset.h | 11 + src/include/data/sprite_player_tileset.h | 11 + src/include/data/sprite_sign.h | 11 + src/include/data/sprite_sign_bank2_tileset.h | 11 + src/include/data/sprite_sign_tileset.h | 11 + src/include/data/spritesheet_none.h | 11 + src/include/data/states_defines.h | 6 + src/include/data/trigger_0_interact.h | 11 + src/include/data/trigger_10_interact.h | 11 + src/include/data/trigger_11_interact.h | 11 + src/include/data/trigger_12_interact.h | 11 + src/include/data/trigger_13_interact.h | 11 + src/include/data/trigger_14_interact.h | 11 + src/include/data/trigger_15_interact.h | 11 + src/include/data/trigger_16_interact.h | 11 + src/include/data/trigger_17_interact.h | 11 + src/include/data/trigger_18_interact.h | 11 + src/include/data/trigger_19_interact.h | 11 + src/include/data/trigger_1_interact.h | 11 + src/include/data/trigger_20_interact.h | 11 + src/include/data/trigger_21_interact.h | 11 + src/include/data/trigger_22_interact.h | 11 + src/include/data/trigger_23_interact.h | 11 + src/include/data/trigger_24_interact.h | 11 + src/include/data/trigger_2_interact.h | 11 + src/include/data/trigger_3_interact.h | 11 + src/include/data/trigger_4_interact.h | 11 + src/include/data/trigger_5_interact.h | 11 + src/include/data/trigger_6_interact.h | 11 + src/include/data/trigger_7_interact.h | 11 + src/include/data/trigger_8_interact.h | 11 + src/include/data/trigger_9_interact.h | 11 + src/include/data_manager.h | 40 + src/include/events.h | 30 + src/include/fade_manager.h | 73 + src/include/flasher.h | 11 + src/include/game_time.h | 19 + src/include/gbprinter.h | 136 ++ src/include/gbs_types.h | 191 ++ src/include/gbt_player.h | 51 + src/include/hUGEDriver.h | 142 ++ src/include/hUGEDriverRoutines.h | 15 + src/include/input.h | 104 + src/include/interrupts.h | 14 + src/include/linked_list.h | 94 + src/include/load_save.h | 26 + src/include/macro.h | 10 + src/include/macro.i | 17 + src/include/math.h | 121 ++ src/include/music_manager.h | 126 ++ src/include/palette.h | 26 + src/include/parallax.h | 26 + src/include/projectiles.h | 24 + src/include/rtc.h | 51 + src/include/scroll.h | 80 + src/include/sfx_player.h | 51 + src/include/sgb_border.h | 14 + src/include/shadow.h | 21 + src/include/sio.h | 48 + src/include/states/logo.h | 9 + src/include/states/topdown.h | 11 + src/include/states_caller.h | 9 + src/include/system.h | 18 + src/include/trigger.h | 51 + src/include/ui.h | 116 ++ src/include/vm.h | 183 ++ src/include/vm.i | 1667 +++++++++++++++++ src/include/vm_actor.h | 47 + src/include/vm_camera.h | 16 + src/include/vm_exceptions.h | 10 + src/include/vm_gameboy.h | 45 + src/include/vm_gbprinter.h | 13 + src/include/vm_load_save.h | 17 + src/include/vm_math.h | 13 + src/include/vm_music.h | 21 + src/include/vm_palette.h | 17 + src/include/vm_projectiles.h | 12 + src/include/vm_rtc.h | 15 + src/include/vm_scene.h | 15 + src/include/vm_sgb.h | 12 + src/include/vm_sio.h | 13 + src/include/vm_ui.h | 32 + src/lib/gbt_player.lib | Bin 0 -> 28026 bytes src/lib/hUGEDriver.lib | Bin 0 -> 52616 bytes src/ph/gbz80.rul | 10 + src/readme.md | 15 + src/src/core/absolute.c | 21 + src/src/core/actor.c | 459 +++++ src/src/core/bankdata.c | 179 ++ src/src/core/bootstrap.s | 16 + src/src/core/camera.c | 45 + src/src/core/core.c | 237 +++ src/src/core/crash_handler.s | 548 ++++++ src/src/core/data_manager.c | 355 ++++ src/src/core/events.c | 66 + src/src/core/fade_manager.c | 349 ++++ src/src/core/flasher.c | 31 + src/src/core/flasher_s.s | 223 +++ src/src/core/game_time.c | 3 + src/src/core/gbprinter.c | 139 ++ src/src/core/input.c | 33 + src/src/core/interrupt_sio.s | 151 ++ src/src/core/interrupt_timer.s | 30 + src/src/core/interrupts.c | 70 + src/src/core/load_save.c | 145 ++ src/src/core/math.c | 50 + src/src/core/math_atan2.c | 41 + src/src/core/music_manager.c | 115 ++ src/src/core/palette.c | 77 + src/src/core/parallax.c | 66 + src/src/core/projectiles.c | 201 ++ src/src/core/scroll.c | 307 +++ src/src/core/scroll_a.s | 87 + src/src/core/set_tile_submap.s | 189 ++ src/src/core/sfx_player.c | 147 ++ src/src/core/sgb_border.c | 71 + src/src/core/sio.c | 73 + src/src/core/states_caller.s | 41 + src/src/core/system.c | 5 + src/src/core/trigger.c | 123 ++ src/src/core/ui.c | 574 ++++++ src/src/core/ui_a.s | 229 +++ src/src/core/vm.c | 757 ++++++++ src/src/core/vm_actor.c | 443 +++++ src/src/core/vm_camera.c | 103 + src/src/core/vm_gameboy.c | 202 ++ src/src/core/vm_gbprinter.c | 25 + src/src/core/vm_instructions.c | 192 ++ src/src/core/vm_load_save.c | 19 + src/src/core/vm_math.c | 21 + src/src/core/vm_music.c | 45 + src/src/core/vm_palette.c | 71 + src/src/core/vm_projectiles.c | 30 + src/src/core/vm_rtc.c | 28 + src/src/core/vm_scene.c | 42 + src/src/core/vm_sgb.c | 16 + src/src/core/vm_sio.c | 92 + src/src/core/vm_ui.c | 296 +++ src/src/core/vm_ui_a.s | 208 ++ src/src/data/actor_0_interact.s | 148 ++ src/src/data/actor_10_interact.s | 30 + src/src/data/actor_11_interact.s | 30 + src/src/data/actor_12_interact.s | 30 + src/src/data/actor_13_interact.s | 30 + src/src/data/actor_14_interact.s | 30 + src/src/data/actor_15_interact.s | 35 + src/src/data/actor_1_interact.s | 44 + src/src/data/actor_2_interact.s | 75 + src/src/data/actor_3_interact.s | 39 + src/src/data/actor_4_interact.s | 30 + src/src/data/actor_5_interact.s | 65 + src/src/data/actor_6_interact.s | 30 + src/src/data/actor_7_interact.s | 44 + src/src/data/actor_8_interact.s | 35 + src/src/data/actor_9_interact.s | 30 + src/src/data/bg_cave.c | 19 + src/src/data/bg_cave_tilemap.c | 33 + src/src/data/bg_cave_tilemap_attr.c | 33 + src/src/data/bg_cave_tileset.c | 37 + src/src/data/bg_endscreen.c | 20 + src/src/data/bg_endscreen_cgb_tileset.c | 41 + src/src/data/bg_endscreen_tilemap.c | 33 + src/src/data/bg_endscreen_tilemap_attr.c | 33 + src/src/data/bg_endscreen_tileset.c | 141 ++ src/src/data/bg_fate6housef2.c | 19 + src/src/data/bg_fate6housef2_tilemap.c | 33 + src/src/data/bg_fate6housef2_tilemap_attr.c | 33 + src/src/data/bg_fate6housef2_tileset.c | 77 + src/src/data/bg_house.c | 19 + src/src/data/bg_house_tilemap.c | 33 + src/src/data/bg_house_tilemap_attr.c | 33 + src/src/data/bg_house_tileset.c | 58 + src/src/data/bg_house_wide.c | 19 + src/src/data/bg_house_wide_tilemap.c | 46 + src/src/data/bg_house_wide_tilemap_attr.c | 46 + src/src/data/bg_house_wide_tileset.c | 66 + src/src/data/bg_housef2.c | 19 + src/src/data/bg_housef2_tilemap.c | 33 + src/src/data/bg_housef2_tilemap_attr.c | 33 + src/src/data/bg_housef2_tileset.c | 77 + src/src/data/bg_lab1.c | 19 + src/src/data/bg_lab1_tilemap.c | 40 + src/src/data/bg_lab1_tilemap_attr.c | 40 + src/src/data/bg_lab1_tileset.c | 86 + src/src/data/bg_logoscreen.c | 19 + src/src/data/bg_logoscreen_tilemap.c | 33 + src/src/data/bg_logoscreen_tilemap_attr.c | 33 + src/src/data/bg_logoscreen_tileset.c | 373 ++++ src/src/data/bg_outside.c | 20 + src/src/data/bg_outside_cgb_tileset.c | 262 +++ src/src/data/bg_outside_tilemap.c | 74 + src/src/data/bg_outside_tilemap_attr.c | 74 + src/src/data/bg_outside_tileset.c | 262 +++ src/src/data/bg_overworld_test_1.c | 19 + src/src/data/bg_overworld_test_1_tilemap.c | 370 ++++ .../data/bg_overworld_test_1_tilemap_attr.c | 370 ++++ src/src/data/bg_overworld_test_1_tileset.c | 124 ++ src/src/data/bg_questscreen.c | 19 + src/src/data/bg_questscreen_tilemap.c | 33 + src/src/data/bg_questscreen_tilemap_attr.c | 33 + src/src/data/bg_questscreen_tileset.c | 133 ++ src/src/data/bg_slighhousef2.c | 19 + src/src/data/bg_slighhousef2_tilemap.c | 33 + src/src/data/bg_slighhousef2_tilemap_attr.c | 33 + src/src/data/bg_slighhousef2_tileset.c | 77 + src/src/data/bg_titlescreen.c | 19 + src/src/data/bg_titlescreen_tilemap.c | 33 + src/src/data/bg_titlescreen_tilemap_attr.c | 33 + src/src/data/bg_titlescreen_tileset.c | 373 ++++ src/src/data/cursor_image.c | 11 + src/src/data/emote_love.c | 14 + src/src/data/font_gbs_mono.c | 239 +++ src/src/data/frame_image.c | 19 + src/src/data/game_signature.c | 1 + src/src/data/music/.gitkeep | 0 src/src/data/music/song_rulz_lightmood_Data.c | 1524 +++++++++++++++ src/src/data/music/song_rulz_outside_0_Data.c | 864 +++++++++ .../music/song_rulz_spaceemergency_0_Data.c | 864 +++++++++ .../music/song_rulz_undergroundcave_Data.c | 996 ++++++++++ src/src/data/palette_0.c | 24 + src/src/data/palette_1.c | 24 + src/src/data/palette_10.c | 24 + src/src/data/palette_11.c | 24 + src/src/data/palette_12.c | 24 + src/src/data/palette_13.c | 25 + src/src/data/palette_2.c | 24 + src/src/data/palette_3.c | 24 + src/src/data/palette_4.c | 24 + src/src/data/palette_5.c | 24 + src/src/data/palette_6.c | 24 + src/src/data/palette_7.c | 24 + src/src/data/palette_8.c | 24 + src/src/data/palette_9.c | 24 + src/src/data/scene_1.c | 39 + src/src/data/scene_10.c | 33 + src/src/data/scene_10_collisions.c | 29 + src/src/data/scene_10_init.s | 27 + src/src/data/scene_11.c | 35 + src/src/data/scene_11_collisions.c | 29 + src/src/data/scene_11_init.s | 37 + src/src/data/scene_11_triggers.c | 21 + src/src/data/scene_12.c | 33 + src/src/data/scene_12_collisions.c | 29 + src/src/data/scene_12_init.s | 35 + src/src/data/scene_13.c | 33 + src/src/data/scene_13_collisions.c | 29 + src/src/data/scene_13_init.s | 35 + src/src/data/scene_14.c | 39 + src/src/data/scene_14_actors.c | 36 + src/src/data/scene_14_collisions.c | 29 + src/src/data/scene_14_init.s | 37 + src/src/data/scene_14_sprites.c | 13 + src/src/data/scene_14_triggers.c | 21 + src/src/data/scene_15.c | 37 + src/src/data/scene_15_actors.c | 126 ++ src/src/data/scene_15_collisions.c | 29 + src/src/data/scene_15_init.s | 161 ++ src/src/data/scene_15_sprites.c | 13 + src/src/data/scene_16.c | 33 + src/src/data/scene_16_collisions.c | 29 + src/src/data/scene_16_init.s | 41 + src/src/data/scene_17.c | 39 + src/src/data/scene_17_actors.c | 34 + src/src/data/scene_17_collisions.c | 43 + src/src/data/scene_17_init.s | 35 + src/src/data/scene_17_sprites.c | 13 + src/src/data/scene_17_triggers.c | 21 + src/src/data/scene_1_actors.c | 211 +++ src/src/data/scene_1_collisions.c | 83 + src/src/data/scene_1_init.s | 37 + src/src/data/scene_1_sprites.c | 15 + src/src/data/scene_1_triggers.c | 111 ++ src/src/data/scene_2.c | 39 + src/src/data/scene_2_actors.c | 36 + src/src/data/scene_2_collisions.c | 29 + src/src/data/scene_2_init.s | 37 + src/src/data/scene_2_sprites.c | 13 + src/src/data/scene_2_triggers.c | 31 + src/src/data/scene_3.c | 39 + src/src/data/scene_3_actors.c | 36 + src/src/data/scene_3_collisions.c | 29 + src/src/data/scene_3_init.s | 37 + src/src/data/scene_3_sprites.c | 13 + src/src/data/scene_3_triggers.c | 21 + src/src/data/scene_4.c | 35 + src/src/data/scene_4_collisions.c | 29 + src/src/data/scene_4_init.s | 37 + src/src/data/scene_4_triggers.c | 41 + src/src/data/scene_5.c | 39 + src/src/data/scene_5_actors.c | 36 + src/src/data/scene_5_collisions.c | 29 + src/src/data/scene_5_init.s | 37 + src/src/data/scene_5_sprites.c | 13 + src/src/data/scene_5_triggers.c | 21 + src/src/data/scene_6.c | 39 + src/src/data/scene_6_actors.c | 36 + src/src/data/scene_6_collisions.c | 35 + src/src/data/scene_6_init.s | 37 + src/src/data/scene_6_sprites.c | 13 + src/src/data/scene_6_triggers.c | 21 + src/src/data/scene_7.c | 39 + src/src/data/scene_7_actors.c | 36 + src/src/data/scene_7_collisions.c | 29 + src/src/data/scene_7_init.s | 37 + src/src/data/scene_7_sprites.c | 13 + src/src/data/scene_7_triggers.c | 21 + src/src/data/scene_8.c | 39 + src/src/data/scene_8_actors.c | 61 + src/src/data/scene_8_collisions.c | 29 + src/src/data/scene_8_init.s | 37 + src/src/data/scene_8_sprites.c | 15 + src/src/data/scene_8_triggers.c | 31 + src/src/data/scene_9.c | 35 + src/src/data/scene_9_collisions.c | 29 + src/src/data/scene_9_init.s | 37 + src/src/data/scene_9_triggers.c | 21 + src/src/data/script_1.s | 21 + src/src/data/script_engine_init.s | 38 + src/src/data/script_input.s | 44 + src/src/data/script_input_4.s | 47 + src/src/data/script_input_5.s | 14 + src/src/data/script_input_6.s | 39 + src/src/data/sounds/.gitkeep | 0 src/src/data/sprite_actor_animated.c | 123 ++ .../sprite_actor_animated_bank2_tileset.c | 23 + src/src/data/sprite_actor_animated_tileset.c | 23 + src/src/data/sprite_cat.c | 77 + src/src/data/sprite_cat_bank2_tileset.c | 15 + src/src/data/sprite_cat_tileset.c | 15 + src/src/data/sprite_charanimatedsprite.c | 123 ++ .../sprite_charanimatedsprite_bank2_tileset.c | 25 + .../data/sprite_charanimatedsprite_tileset.c | 25 + src/src/data/sprite_checkbox.c | 83 + src/src/data/sprite_checkbox_bank2_tileset.c | 15 + src/src/data/sprite_checkbox_tileset.c | 15 + src/src/data/sprite_dog.c | 77 + src/src/data/sprite_dog_bank2_tileset.c | 15 + src/src/data/sprite_dog_tileset.c | 15 + src/src/data/sprite_npc001.c | 95 + src/src/data/sprite_npc001_bank2_tileset.c | 19 + src/src/data/sprite_npc001_tileset.c | 19 + src/src/data/sprite_npc002.c | 95 + src/src/data/sprite_npc002_bank2_tileset.c | 19 + src/src/data/sprite_npc002_tileset.c | 19 + src/src/data/sprite_npc005.c | 123 ++ src/src/data/sprite_npc005_bank2_tileset.c | 25 + src/src/data/sprite_npc005_tileset.c | 25 + src/src/data/sprite_player.c | 123 ++ src/src/data/sprite_player_bank2_tileset.c | 25 + src/src/data/sprite_player_tileset.c | 25 + src/src/data/sprite_sign.c | 77 + src/src/data/sprite_sign_bank2_tileset.c | 15 + src/src/data/sprite_sign_tileset.c | 15 + src/src/data/spritesheet_none.c | 20 + src/src/data/tileset_default_frame.c | 22 + src/src/data/trigger_0_interact.s | 41 + src/src/data/trigger_10_interact.s | 41 + src/src/data/trigger_11_interact.s | 41 + src/src/data/trigger_12_interact.s | 41 + src/src/data/trigger_13_interact.s | 41 + src/src/data/trigger_14_interact.s | 41 + src/src/data/trigger_15_interact.s | 41 + src/src/data/trigger_16_interact.s | 81 + src/src/data/trigger_17_interact.s | 41 + src/src/data/trigger_18_interact.s | 41 + src/src/data/trigger_19_interact.s | 41 + src/src/data/trigger_1_interact.s | 41 + src/src/data/trigger_20_interact.s | 41 + src/src/data/trigger_21_interact.s | 41 + src/src/data/trigger_22_interact.s | 41 + src/src/data/trigger_23_interact.s | 56 + src/src/data/trigger_24_interact.s | 41 + src/src/data/trigger_2_interact.s | 41 + src/src/data/trigger_3_interact.s | 41 + src/src/data/trigger_4_interact.s | 41 + src/src/data/trigger_5_interact.s | 41 + src/src/data/trigger_6_interact.s | 41 + src/src/data/trigger_7_interact.s | 41 + src/src/data/trigger_8_interact.s | 41 + src/src/data/trigger_9_interact.s | 120 ++ src/src/main.c | 9 + src/src/states/logo.c | 18 + src/src/states/states_ptrs.s | 11 + src/src/states/topdown.c | 157 ++ 603 files changed, 31369 insertions(+) create mode 100644 Slightlys Midnight Adventure.gbc create mode 100644 src/.gitignore create mode 100644 src/Makefile create mode 100644 src/Makefile.build create mode 100644 src/Makefile.common create mode 100644 src/engine.json create mode 100644 src/include/actor.h create mode 100644 src/include/bankdata.h create mode 100644 src/include/camera.h create mode 100644 src/include/collision.h create mode 100644 src/include/compat.h create mode 100644 src/include/core.h create mode 100644 src/include/data/actor_0_interact.h create mode 100644 src/include/data/actor_10_interact.h create mode 100644 src/include/data/actor_11_interact.h create mode 100644 src/include/data/actor_12_interact.h create mode 100644 src/include/data/actor_13_interact.h create mode 100644 src/include/data/actor_14_interact.h create mode 100644 src/include/data/actor_15_interact.h create mode 100644 src/include/data/actor_1_interact.h create mode 100644 src/include/data/actor_2_interact.h create mode 100644 src/include/data/actor_3_interact.h create mode 100644 src/include/data/actor_4_interact.h create mode 100644 src/include/data/actor_5_interact.h create mode 100644 src/include/data/actor_6_interact.h create mode 100644 src/include/data/actor_7_interact.h create mode 100644 src/include/data/actor_8_interact.h create mode 100644 src/include/data/actor_9_interact.h create mode 100644 src/include/data/bg_cave.h create mode 100644 src/include/data/bg_cave_tilemap.h create mode 100644 src/include/data/bg_cave_tilemap_attr.h create mode 100644 src/include/data/bg_cave_tileset.h create mode 100644 src/include/data/bg_endscreen.h create mode 100644 src/include/data/bg_endscreen_cgb_tileset.h create mode 100644 src/include/data/bg_endscreen_tilemap.h create mode 100644 src/include/data/bg_endscreen_tilemap_attr.h create mode 100644 src/include/data/bg_endscreen_tileset.h create mode 100644 src/include/data/bg_fate6housef2.h create mode 100644 src/include/data/bg_fate6housef2_tilemap.h create mode 100644 src/include/data/bg_fate6housef2_tilemap_attr.h create mode 100644 src/include/data/bg_fate6housef2_tileset.h create mode 100644 src/include/data/bg_house.h create mode 100644 src/include/data/bg_house_tilemap.h create mode 100644 src/include/data/bg_house_tilemap_attr.h create mode 100644 src/include/data/bg_house_tileset.h create mode 100644 src/include/data/bg_house_wide.h create mode 100644 src/include/data/bg_house_wide_tilemap.h create mode 100644 src/include/data/bg_house_wide_tilemap_attr.h create mode 100644 src/include/data/bg_house_wide_tileset.h create mode 100644 src/include/data/bg_housef2.h create mode 100644 src/include/data/bg_housef2_tilemap.h create mode 100644 src/include/data/bg_housef2_tilemap_attr.h create mode 100644 src/include/data/bg_housef2_tileset.h create mode 100644 src/include/data/bg_lab1.h create mode 100644 src/include/data/bg_lab1_tilemap.h create mode 100644 src/include/data/bg_lab1_tilemap_attr.h create mode 100644 src/include/data/bg_lab1_tileset.h create mode 100644 src/include/data/bg_logoscreen.h create mode 100644 src/include/data/bg_logoscreen_tilemap.h create mode 100644 src/include/data/bg_logoscreen_tilemap_attr.h create mode 100644 src/include/data/bg_logoscreen_tileset.h create mode 100644 src/include/data/bg_outside.h create mode 100644 src/include/data/bg_outside_cgb_tileset.h create mode 100644 src/include/data/bg_outside_tilemap.h create mode 100644 src/include/data/bg_outside_tilemap_attr.h create mode 100644 src/include/data/bg_outside_tileset.h create mode 100644 src/include/data/bg_overworld_test_1.h create mode 100644 src/include/data/bg_overworld_test_1_tilemap.h create mode 100644 src/include/data/bg_overworld_test_1_tilemap_attr.h create mode 100644 src/include/data/bg_overworld_test_1_tileset.h create mode 100644 src/include/data/bg_questscreen.h create mode 100644 src/include/data/bg_questscreen_tilemap.h create mode 100644 src/include/data/bg_questscreen_tilemap_attr.h create mode 100644 src/include/data/bg_questscreen_tileset.h create mode 100644 src/include/data/bg_slighhousef2.h create mode 100644 src/include/data/bg_slighhousef2_tilemap.h create mode 100644 src/include/data/bg_slighhousef2_tilemap_attr.h create mode 100644 src/include/data/bg_slighhousef2_tileset.h create mode 100644 src/include/data/bg_titlescreen.h create mode 100644 src/include/data/bg_titlescreen_tilemap.h create mode 100644 src/include/data/bg_titlescreen_tilemap_attr.h create mode 100644 src/include/data/bg_titlescreen_tileset.h create mode 100644 src/include/data/border.h create mode 100644 src/include/data/cursor_image.h create mode 100644 src/include/data/data_bootstrap.h create mode 100644 src/include/data/emote_love.h create mode 100644 src/include/data/font_gbs_mono.h create mode 100644 src/include/data/frame_image.h create mode 100644 src/include/data/game_globals.h create mode 100644 src/include/data/game_globals.i create mode 100644 src/include/data/music_data.h create mode 100644 src/include/data/palette_0.h create mode 100644 src/include/data/palette_1.h create mode 100644 src/include/data/palette_10.h create mode 100644 src/include/data/palette_11.h create mode 100644 src/include/data/palette_12.h create mode 100644 src/include/data/palette_13.h create mode 100644 src/include/data/palette_2.h create mode 100644 src/include/data/palette_3.h create mode 100644 src/include/data/palette_4.h create mode 100644 src/include/data/palette_5.h create mode 100644 src/include/data/palette_6.h create mode 100644 src/include/data/palette_7.h create mode 100644 src/include/data/palette_8.h create mode 100644 src/include/data/palette_9.h create mode 100644 src/include/data/scene_1.h create mode 100644 src/include/data/scene_10.h create mode 100644 src/include/data/scene_10_collisions.h create mode 100644 src/include/data/scene_10_init.h create mode 100644 src/include/data/scene_11.h create mode 100644 src/include/data/scene_11_collisions.h create mode 100644 src/include/data/scene_11_init.h create mode 100644 src/include/data/scene_11_triggers.h create mode 100644 src/include/data/scene_12.h create mode 100644 src/include/data/scene_12_collisions.h create mode 100644 src/include/data/scene_12_init.h create mode 100644 src/include/data/scene_13.h create mode 100644 src/include/data/scene_13_collisions.h create mode 100644 src/include/data/scene_13_init.h create mode 100644 src/include/data/scene_14.h create mode 100644 src/include/data/scene_14_actors.h create mode 100644 src/include/data/scene_14_collisions.h create mode 100644 src/include/data/scene_14_init.h create mode 100644 src/include/data/scene_14_sprites.h create mode 100644 src/include/data/scene_14_triggers.h create mode 100644 src/include/data/scene_15.h create mode 100644 src/include/data/scene_15_actors.h create mode 100644 src/include/data/scene_15_collisions.h create mode 100644 src/include/data/scene_15_init.h create mode 100644 src/include/data/scene_15_sprites.h create mode 100644 src/include/data/scene_16.h create mode 100644 src/include/data/scene_16_collisions.h create mode 100644 src/include/data/scene_16_init.h create mode 100644 src/include/data/scene_17.h create mode 100644 src/include/data/scene_17_actors.h create mode 100644 src/include/data/scene_17_collisions.h create mode 100644 src/include/data/scene_17_init.h create mode 100644 src/include/data/scene_17_sprites.h create mode 100644 src/include/data/scene_17_triggers.h create mode 100644 src/include/data/scene_1_actors.h create mode 100644 src/include/data/scene_1_collisions.h create mode 100644 src/include/data/scene_1_init.h create mode 100644 src/include/data/scene_1_sprites.h create mode 100644 src/include/data/scene_1_triggers.h create mode 100644 src/include/data/scene_2.h create mode 100644 src/include/data/scene_2_actors.h create mode 100644 src/include/data/scene_2_collisions.h create mode 100644 src/include/data/scene_2_init.h create mode 100644 src/include/data/scene_2_sprites.h create mode 100644 src/include/data/scene_2_triggers.h create mode 100644 src/include/data/scene_3.h create mode 100644 src/include/data/scene_3_actors.h create mode 100644 src/include/data/scene_3_collisions.h create mode 100644 src/include/data/scene_3_init.h create mode 100644 src/include/data/scene_3_sprites.h create mode 100644 src/include/data/scene_3_triggers.h create mode 100644 src/include/data/scene_4.h create mode 100644 src/include/data/scene_4_collisions.h create mode 100644 src/include/data/scene_4_init.h create mode 100644 src/include/data/scene_4_triggers.h create mode 100644 src/include/data/scene_5.h create mode 100644 src/include/data/scene_5_actors.h create mode 100644 src/include/data/scene_5_collisions.h create mode 100644 src/include/data/scene_5_init.h create mode 100644 src/include/data/scene_5_sprites.h create mode 100644 src/include/data/scene_5_triggers.h create mode 100644 src/include/data/scene_6.h create mode 100644 src/include/data/scene_6_actors.h create mode 100644 src/include/data/scene_6_collisions.h create mode 100644 src/include/data/scene_6_init.h create mode 100644 src/include/data/scene_6_sprites.h create mode 100644 src/include/data/scene_6_triggers.h create mode 100644 src/include/data/scene_7.h create mode 100644 src/include/data/scene_7_actors.h create mode 100644 src/include/data/scene_7_collisions.h create mode 100644 src/include/data/scene_7_init.h create mode 100644 src/include/data/scene_7_sprites.h create mode 100644 src/include/data/scene_7_triggers.h create mode 100644 src/include/data/scene_8.h create mode 100644 src/include/data/scene_8_actors.h create mode 100644 src/include/data/scene_8_collisions.h create mode 100644 src/include/data/scene_8_init.h create mode 100644 src/include/data/scene_8_sprites.h create mode 100644 src/include/data/scene_8_triggers.h create mode 100644 src/include/data/scene_9.h create mode 100644 src/include/data/scene_9_collisions.h create mode 100644 src/include/data/scene_9_init.h create mode 100644 src/include/data/scene_9_triggers.h create mode 100644 src/include/data/scene_types.h create mode 100644 src/include/data/script_1.h create mode 100644 src/include/data/script_input.h create mode 100644 src/include/data/script_input_4.h create mode 100644 src/include/data/script_input_5.h create mode 100644 src/include/data/script_input_6.h create mode 100644 src/include/data/sprite_actor_animated.h create mode 100644 src/include/data/sprite_actor_animated_bank2_tileset.h create mode 100644 src/include/data/sprite_actor_animated_tileset.h create mode 100644 src/include/data/sprite_cat.h create mode 100644 src/include/data/sprite_cat_bank2_tileset.h create mode 100644 src/include/data/sprite_cat_tileset.h create mode 100644 src/include/data/sprite_charanimatedsprite.h create mode 100644 src/include/data/sprite_charanimatedsprite_bank2_tileset.h create mode 100644 src/include/data/sprite_charanimatedsprite_tileset.h create mode 100644 src/include/data/sprite_checkbox.h create mode 100644 src/include/data/sprite_checkbox_bank2_tileset.h create mode 100644 src/include/data/sprite_checkbox_tileset.h create mode 100644 src/include/data/sprite_dog.h create mode 100644 src/include/data/sprite_dog_bank2_tileset.h create mode 100644 src/include/data/sprite_dog_tileset.h create mode 100644 src/include/data/sprite_npc001.h create mode 100644 src/include/data/sprite_npc001_bank2_tileset.h create mode 100644 src/include/data/sprite_npc001_tileset.h create mode 100644 src/include/data/sprite_npc002.h create mode 100644 src/include/data/sprite_npc002_bank2_tileset.h create mode 100644 src/include/data/sprite_npc002_tileset.h create mode 100644 src/include/data/sprite_npc005.h create mode 100644 src/include/data/sprite_npc005_bank2_tileset.h create mode 100644 src/include/data/sprite_npc005_tileset.h create mode 100644 src/include/data/sprite_player.h create mode 100644 src/include/data/sprite_player_bank2_tileset.h create mode 100644 src/include/data/sprite_player_tileset.h create mode 100644 src/include/data/sprite_sign.h create mode 100644 src/include/data/sprite_sign_bank2_tileset.h create mode 100644 src/include/data/sprite_sign_tileset.h create mode 100644 src/include/data/spritesheet_none.h create mode 100644 src/include/data/states_defines.h create mode 100644 src/include/data/trigger_0_interact.h create mode 100644 src/include/data/trigger_10_interact.h create mode 100644 src/include/data/trigger_11_interact.h create mode 100644 src/include/data/trigger_12_interact.h create mode 100644 src/include/data/trigger_13_interact.h create mode 100644 src/include/data/trigger_14_interact.h create mode 100644 src/include/data/trigger_15_interact.h create mode 100644 src/include/data/trigger_16_interact.h create mode 100644 src/include/data/trigger_17_interact.h create mode 100644 src/include/data/trigger_18_interact.h create mode 100644 src/include/data/trigger_19_interact.h create mode 100644 src/include/data/trigger_1_interact.h create mode 100644 src/include/data/trigger_20_interact.h create mode 100644 src/include/data/trigger_21_interact.h create mode 100644 src/include/data/trigger_22_interact.h create mode 100644 src/include/data/trigger_23_interact.h create mode 100644 src/include/data/trigger_24_interact.h create mode 100644 src/include/data/trigger_2_interact.h create mode 100644 src/include/data/trigger_3_interact.h create mode 100644 src/include/data/trigger_4_interact.h create mode 100644 src/include/data/trigger_5_interact.h create mode 100644 src/include/data/trigger_6_interact.h create mode 100644 src/include/data/trigger_7_interact.h create mode 100644 src/include/data/trigger_8_interact.h create mode 100644 src/include/data/trigger_9_interact.h create mode 100644 src/include/data_manager.h create mode 100644 src/include/events.h create mode 100644 src/include/fade_manager.h create mode 100644 src/include/flasher.h create mode 100644 src/include/game_time.h create mode 100644 src/include/gbprinter.h create mode 100644 src/include/gbs_types.h create mode 100644 src/include/gbt_player.h create mode 100644 src/include/hUGEDriver.h create mode 100644 src/include/hUGEDriverRoutines.h create mode 100644 src/include/input.h create mode 100644 src/include/interrupts.h create mode 100644 src/include/linked_list.h create mode 100644 src/include/load_save.h create mode 100644 src/include/macro.h create mode 100644 src/include/macro.i create mode 100644 src/include/math.h create mode 100644 src/include/music_manager.h create mode 100644 src/include/palette.h create mode 100644 src/include/parallax.h create mode 100644 src/include/projectiles.h create mode 100644 src/include/rtc.h create mode 100644 src/include/scroll.h create mode 100644 src/include/sfx_player.h create mode 100644 src/include/sgb_border.h create mode 100644 src/include/shadow.h create mode 100644 src/include/sio.h create mode 100644 src/include/states/logo.h create mode 100644 src/include/states/topdown.h create mode 100644 src/include/states_caller.h create mode 100644 src/include/system.h create mode 100644 src/include/trigger.h create mode 100644 src/include/ui.h create mode 100644 src/include/vm.h create mode 100644 src/include/vm.i create mode 100644 src/include/vm_actor.h create mode 100644 src/include/vm_camera.h create mode 100644 src/include/vm_exceptions.h create mode 100644 src/include/vm_gameboy.h create mode 100644 src/include/vm_gbprinter.h create mode 100644 src/include/vm_load_save.h create mode 100644 src/include/vm_math.h create mode 100644 src/include/vm_music.h create mode 100644 src/include/vm_palette.h create mode 100644 src/include/vm_projectiles.h create mode 100644 src/include/vm_rtc.h create mode 100644 src/include/vm_scene.h create mode 100644 src/include/vm_sgb.h create mode 100644 src/include/vm_sio.h create mode 100644 src/include/vm_ui.h create mode 100644 src/lib/gbt_player.lib create mode 100644 src/lib/hUGEDriver.lib create mode 100644 src/ph/gbz80.rul create mode 100644 src/readme.md create mode 100644 src/src/core/absolute.c create mode 100644 src/src/core/actor.c create mode 100644 src/src/core/bankdata.c create mode 100644 src/src/core/bootstrap.s create mode 100644 src/src/core/camera.c create mode 100644 src/src/core/core.c create mode 100644 src/src/core/crash_handler.s create mode 100644 src/src/core/data_manager.c create mode 100644 src/src/core/events.c create mode 100644 src/src/core/fade_manager.c create mode 100644 src/src/core/flasher.c create mode 100644 src/src/core/flasher_s.s create mode 100644 src/src/core/game_time.c create mode 100644 src/src/core/gbprinter.c create mode 100644 src/src/core/input.c create mode 100644 src/src/core/interrupt_sio.s create mode 100644 src/src/core/interrupt_timer.s create mode 100644 src/src/core/interrupts.c create mode 100644 src/src/core/load_save.c create mode 100644 src/src/core/math.c create mode 100644 src/src/core/math_atan2.c create mode 100644 src/src/core/music_manager.c create mode 100644 src/src/core/palette.c create mode 100644 src/src/core/parallax.c create mode 100644 src/src/core/projectiles.c create mode 100644 src/src/core/scroll.c create mode 100644 src/src/core/scroll_a.s create mode 100644 src/src/core/set_tile_submap.s create mode 100644 src/src/core/sfx_player.c create mode 100644 src/src/core/sgb_border.c create mode 100644 src/src/core/sio.c create mode 100644 src/src/core/states_caller.s create mode 100644 src/src/core/system.c create mode 100644 src/src/core/trigger.c create mode 100644 src/src/core/ui.c create mode 100644 src/src/core/ui_a.s create mode 100644 src/src/core/vm.c create mode 100644 src/src/core/vm_actor.c create mode 100644 src/src/core/vm_camera.c create mode 100644 src/src/core/vm_gameboy.c create mode 100644 src/src/core/vm_gbprinter.c create mode 100644 src/src/core/vm_instructions.c create mode 100644 src/src/core/vm_load_save.c create mode 100644 src/src/core/vm_math.c create mode 100644 src/src/core/vm_music.c create mode 100644 src/src/core/vm_palette.c create mode 100644 src/src/core/vm_projectiles.c create mode 100644 src/src/core/vm_rtc.c create mode 100644 src/src/core/vm_scene.c create mode 100644 src/src/core/vm_sgb.c create mode 100644 src/src/core/vm_sio.c create mode 100644 src/src/core/vm_ui.c create mode 100644 src/src/core/vm_ui_a.s create mode 100644 src/src/data/actor_0_interact.s create mode 100644 src/src/data/actor_10_interact.s create mode 100644 src/src/data/actor_11_interact.s create mode 100644 src/src/data/actor_12_interact.s create mode 100644 src/src/data/actor_13_interact.s create mode 100644 src/src/data/actor_14_interact.s create mode 100644 src/src/data/actor_15_interact.s create mode 100644 src/src/data/actor_1_interact.s create mode 100644 src/src/data/actor_2_interact.s create mode 100644 src/src/data/actor_3_interact.s create mode 100644 src/src/data/actor_4_interact.s create mode 100644 src/src/data/actor_5_interact.s create mode 100644 src/src/data/actor_6_interact.s create mode 100644 src/src/data/actor_7_interact.s create mode 100644 src/src/data/actor_8_interact.s create mode 100644 src/src/data/actor_9_interact.s create mode 100644 src/src/data/bg_cave.c create mode 100644 src/src/data/bg_cave_tilemap.c create mode 100644 src/src/data/bg_cave_tilemap_attr.c create mode 100644 src/src/data/bg_cave_tileset.c create mode 100644 src/src/data/bg_endscreen.c create mode 100644 src/src/data/bg_endscreen_cgb_tileset.c create mode 100644 src/src/data/bg_endscreen_tilemap.c create mode 100644 src/src/data/bg_endscreen_tilemap_attr.c create mode 100644 src/src/data/bg_endscreen_tileset.c create mode 100644 src/src/data/bg_fate6housef2.c create mode 100644 src/src/data/bg_fate6housef2_tilemap.c create mode 100644 src/src/data/bg_fate6housef2_tilemap_attr.c create mode 100644 src/src/data/bg_fate6housef2_tileset.c create mode 100644 src/src/data/bg_house.c create mode 100644 src/src/data/bg_house_tilemap.c create mode 100644 src/src/data/bg_house_tilemap_attr.c create mode 100644 src/src/data/bg_house_tileset.c create mode 100644 src/src/data/bg_house_wide.c create mode 100644 src/src/data/bg_house_wide_tilemap.c create mode 100644 src/src/data/bg_house_wide_tilemap_attr.c create mode 100644 src/src/data/bg_house_wide_tileset.c create mode 100644 src/src/data/bg_housef2.c create mode 100644 src/src/data/bg_housef2_tilemap.c create mode 100644 src/src/data/bg_housef2_tilemap_attr.c create mode 100644 src/src/data/bg_housef2_tileset.c create mode 100644 src/src/data/bg_lab1.c create mode 100644 src/src/data/bg_lab1_tilemap.c create mode 100644 src/src/data/bg_lab1_tilemap_attr.c create mode 100644 src/src/data/bg_lab1_tileset.c create mode 100644 src/src/data/bg_logoscreen.c create mode 100644 src/src/data/bg_logoscreen_tilemap.c create mode 100644 src/src/data/bg_logoscreen_tilemap_attr.c create mode 100644 src/src/data/bg_logoscreen_tileset.c create mode 100644 src/src/data/bg_outside.c create mode 100644 src/src/data/bg_outside_cgb_tileset.c create mode 100644 src/src/data/bg_outside_tilemap.c create mode 100644 src/src/data/bg_outside_tilemap_attr.c create mode 100644 src/src/data/bg_outside_tileset.c create mode 100644 src/src/data/bg_overworld_test_1.c create mode 100644 src/src/data/bg_overworld_test_1_tilemap.c create mode 100644 src/src/data/bg_overworld_test_1_tilemap_attr.c create mode 100644 src/src/data/bg_overworld_test_1_tileset.c create mode 100644 src/src/data/bg_questscreen.c create mode 100644 src/src/data/bg_questscreen_tilemap.c create mode 100644 src/src/data/bg_questscreen_tilemap_attr.c create mode 100644 src/src/data/bg_questscreen_tileset.c create mode 100644 src/src/data/bg_slighhousef2.c create mode 100644 src/src/data/bg_slighhousef2_tilemap.c create mode 100644 src/src/data/bg_slighhousef2_tilemap_attr.c create mode 100644 src/src/data/bg_slighhousef2_tileset.c create mode 100644 src/src/data/bg_titlescreen.c create mode 100644 src/src/data/bg_titlescreen_tilemap.c create mode 100644 src/src/data/bg_titlescreen_tilemap_attr.c create mode 100644 src/src/data/bg_titlescreen_tileset.c create mode 100644 src/src/data/cursor_image.c create mode 100644 src/src/data/emote_love.c create mode 100644 src/src/data/font_gbs_mono.c create mode 100644 src/src/data/frame_image.c create mode 100644 src/src/data/game_signature.c create mode 100644 src/src/data/music/.gitkeep create mode 100644 src/src/data/music/song_rulz_lightmood_Data.c create mode 100644 src/src/data/music/song_rulz_outside_0_Data.c create mode 100644 src/src/data/music/song_rulz_spaceemergency_0_Data.c create mode 100644 src/src/data/music/song_rulz_undergroundcave_Data.c create mode 100644 src/src/data/palette_0.c create mode 100644 src/src/data/palette_1.c create mode 100644 src/src/data/palette_10.c create mode 100644 src/src/data/palette_11.c create mode 100644 src/src/data/palette_12.c create mode 100644 src/src/data/palette_13.c create mode 100644 src/src/data/palette_2.c create mode 100644 src/src/data/palette_3.c create mode 100644 src/src/data/palette_4.c create mode 100644 src/src/data/palette_5.c create mode 100644 src/src/data/palette_6.c create mode 100644 src/src/data/palette_7.c create mode 100644 src/src/data/palette_8.c create mode 100644 src/src/data/palette_9.c create mode 100644 src/src/data/scene_1.c create mode 100644 src/src/data/scene_10.c create mode 100644 src/src/data/scene_10_collisions.c create mode 100644 src/src/data/scene_10_init.s create mode 100644 src/src/data/scene_11.c create mode 100644 src/src/data/scene_11_collisions.c create mode 100644 src/src/data/scene_11_init.s create mode 100644 src/src/data/scene_11_triggers.c create mode 100644 src/src/data/scene_12.c create mode 100644 src/src/data/scene_12_collisions.c create mode 100644 src/src/data/scene_12_init.s create mode 100644 src/src/data/scene_13.c create mode 100644 src/src/data/scene_13_collisions.c create mode 100644 src/src/data/scene_13_init.s create mode 100644 src/src/data/scene_14.c create mode 100644 src/src/data/scene_14_actors.c create mode 100644 src/src/data/scene_14_collisions.c create mode 100644 src/src/data/scene_14_init.s create mode 100644 src/src/data/scene_14_sprites.c create mode 100644 src/src/data/scene_14_triggers.c create mode 100644 src/src/data/scene_15.c create mode 100644 src/src/data/scene_15_actors.c create mode 100644 src/src/data/scene_15_collisions.c create mode 100644 src/src/data/scene_15_init.s create mode 100644 src/src/data/scene_15_sprites.c create mode 100644 src/src/data/scene_16.c create mode 100644 src/src/data/scene_16_collisions.c create mode 100644 src/src/data/scene_16_init.s create mode 100644 src/src/data/scene_17.c create mode 100644 src/src/data/scene_17_actors.c create mode 100644 src/src/data/scene_17_collisions.c create mode 100644 src/src/data/scene_17_init.s create mode 100644 src/src/data/scene_17_sprites.c create mode 100644 src/src/data/scene_17_triggers.c create mode 100644 src/src/data/scene_1_actors.c create mode 100644 src/src/data/scene_1_collisions.c create mode 100644 src/src/data/scene_1_init.s create mode 100644 src/src/data/scene_1_sprites.c create mode 100644 src/src/data/scene_1_triggers.c create mode 100644 src/src/data/scene_2.c create mode 100644 src/src/data/scene_2_actors.c create mode 100644 src/src/data/scene_2_collisions.c create mode 100644 src/src/data/scene_2_init.s create mode 100644 src/src/data/scene_2_sprites.c create mode 100644 src/src/data/scene_2_triggers.c create mode 100644 src/src/data/scene_3.c create mode 100644 src/src/data/scene_3_actors.c create mode 100644 src/src/data/scene_3_collisions.c create mode 100644 src/src/data/scene_3_init.s create mode 100644 src/src/data/scene_3_sprites.c create mode 100644 src/src/data/scene_3_triggers.c create mode 100644 src/src/data/scene_4.c create mode 100644 src/src/data/scene_4_collisions.c create mode 100644 src/src/data/scene_4_init.s create mode 100644 src/src/data/scene_4_triggers.c create mode 100644 src/src/data/scene_5.c create mode 100644 src/src/data/scene_5_actors.c create mode 100644 src/src/data/scene_5_collisions.c create mode 100644 src/src/data/scene_5_init.s create mode 100644 src/src/data/scene_5_sprites.c create mode 100644 src/src/data/scene_5_triggers.c create mode 100644 src/src/data/scene_6.c create mode 100644 src/src/data/scene_6_actors.c create mode 100644 src/src/data/scene_6_collisions.c create mode 100644 src/src/data/scene_6_init.s create mode 100644 src/src/data/scene_6_sprites.c create mode 100644 src/src/data/scene_6_triggers.c create mode 100644 src/src/data/scene_7.c create mode 100644 src/src/data/scene_7_actors.c create mode 100644 src/src/data/scene_7_collisions.c create mode 100644 src/src/data/scene_7_init.s create mode 100644 src/src/data/scene_7_sprites.c create mode 100644 src/src/data/scene_7_triggers.c create mode 100644 src/src/data/scene_8.c create mode 100644 src/src/data/scene_8_actors.c create mode 100644 src/src/data/scene_8_collisions.c create mode 100644 src/src/data/scene_8_init.s create mode 100644 src/src/data/scene_8_sprites.c create mode 100644 src/src/data/scene_8_triggers.c create mode 100644 src/src/data/scene_9.c create mode 100644 src/src/data/scene_9_collisions.c create mode 100644 src/src/data/scene_9_init.s create mode 100644 src/src/data/scene_9_triggers.c create mode 100644 src/src/data/script_1.s create mode 100644 src/src/data/script_engine_init.s create mode 100644 src/src/data/script_input.s create mode 100644 src/src/data/script_input_4.s create mode 100644 src/src/data/script_input_5.s create mode 100644 src/src/data/script_input_6.s create mode 100644 src/src/data/sounds/.gitkeep create mode 100644 src/src/data/sprite_actor_animated.c create mode 100644 src/src/data/sprite_actor_animated_bank2_tileset.c create mode 100644 src/src/data/sprite_actor_animated_tileset.c create mode 100644 src/src/data/sprite_cat.c create mode 100644 src/src/data/sprite_cat_bank2_tileset.c create mode 100644 src/src/data/sprite_cat_tileset.c create mode 100644 src/src/data/sprite_charanimatedsprite.c create mode 100644 src/src/data/sprite_charanimatedsprite_bank2_tileset.c create mode 100644 src/src/data/sprite_charanimatedsprite_tileset.c create mode 100644 src/src/data/sprite_checkbox.c create mode 100644 src/src/data/sprite_checkbox_bank2_tileset.c create mode 100644 src/src/data/sprite_checkbox_tileset.c create mode 100644 src/src/data/sprite_dog.c create mode 100644 src/src/data/sprite_dog_bank2_tileset.c create mode 100644 src/src/data/sprite_dog_tileset.c create mode 100644 src/src/data/sprite_npc001.c create mode 100644 src/src/data/sprite_npc001_bank2_tileset.c create mode 100644 src/src/data/sprite_npc001_tileset.c create mode 100644 src/src/data/sprite_npc002.c create mode 100644 src/src/data/sprite_npc002_bank2_tileset.c create mode 100644 src/src/data/sprite_npc002_tileset.c create mode 100644 src/src/data/sprite_npc005.c create mode 100644 src/src/data/sprite_npc005_bank2_tileset.c create mode 100644 src/src/data/sprite_npc005_tileset.c create mode 100644 src/src/data/sprite_player.c create mode 100644 src/src/data/sprite_player_bank2_tileset.c create mode 100644 src/src/data/sprite_player_tileset.c create mode 100644 src/src/data/sprite_sign.c create mode 100644 src/src/data/sprite_sign_bank2_tileset.c create mode 100644 src/src/data/sprite_sign_tileset.c create mode 100644 src/src/data/spritesheet_none.c create mode 100644 src/src/data/tileset_default_frame.c create mode 100644 src/src/data/trigger_0_interact.s create mode 100644 src/src/data/trigger_10_interact.s create mode 100644 src/src/data/trigger_11_interact.s create mode 100644 src/src/data/trigger_12_interact.s create mode 100644 src/src/data/trigger_13_interact.s create mode 100644 src/src/data/trigger_14_interact.s create mode 100644 src/src/data/trigger_15_interact.s create mode 100644 src/src/data/trigger_16_interact.s create mode 100644 src/src/data/trigger_17_interact.s create mode 100644 src/src/data/trigger_18_interact.s create mode 100644 src/src/data/trigger_19_interact.s create mode 100644 src/src/data/trigger_1_interact.s create mode 100644 src/src/data/trigger_20_interact.s create mode 100644 src/src/data/trigger_21_interact.s create mode 100644 src/src/data/trigger_22_interact.s create mode 100644 src/src/data/trigger_23_interact.s create mode 100644 src/src/data/trigger_24_interact.s create mode 100644 src/src/data/trigger_2_interact.s create mode 100644 src/src/data/trigger_3_interact.s create mode 100644 src/src/data/trigger_4_interact.s create mode 100644 src/src/data/trigger_5_interact.s create mode 100644 src/src/data/trigger_6_interact.s create mode 100644 src/src/data/trigger_7_interact.s create mode 100644 src/src/data/trigger_8_interact.s create mode 100644 src/src/data/trigger_9_interact.s create mode 100644 src/src/main.c create mode 100644 src/src/states/logo.c create mode 100644 src/src/states/states_ptrs.s create mode 100644 src/src/states/topdown.c diff --git a/Slightlys Midnight Adventure.gbc b/Slightlys Midnight Adventure.gbc new file mode 100644 index 0000000000000000000000000000000000000000..6fb8b44eea009a6a43095f728f67840e3b1bcd49 GIT binary patch literal 262144 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 BB>n&Z literal 0 HcmV?d00001 diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..d4ed318 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,29 @@ +/obj +*.bak +*.dof +*.dsk +*.cfg +*.map +*.sym +*.o +__pycache__ +/profile/*.txt +@usage.bat +*.ihx +*.noi +/.vscode +/*.cdb +/build +/test/*.noi +/test/*.sna +/test/*.bmp +/test/*.o +/test/*.asm +/test/*.lst +*.gb +/examples/*/obj +/examples/*/build +/test/*/obj +/test/*/build +/test/*/*.bmp +/third-party/*/build diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..7fc1d9d --- /dev/null +++ b/src/Makefile @@ -0,0 +1,35 @@ +include ./Makefile.common +include ./Makefile.build + +GBSTOOLS_DIR = /tmp/_gbstools +GBDK = $(GBSTOOLS_DIR)/gbdk +GBSPACK = $(GBSTOOLS_DIR)/gbspack/gbspack + +ROM_BUILD_DIR = build +OBJDIR = obj +REL_OBJDIR = obj/_rel + +ADATA = $(foreach dir,src/data,$(notdir $(wildcard $(dir)/*.s))) +CDATA = $(foreach dir,src/data,$(notdir $(wildcard $(dir)/*.c))) +MDATA = $(foreach dir,src/data/music,$(notdir $(wildcard $(dir)/*.c))) + +OBJS = $(ENGINE_OBJS) \ + $(ADATA:%.s=$(OBJDIR)/%.o) \ + $(CDATA:%.c=$(OBJDIR)/%.o) \ + $(MDATA:%.c=$(OBJDIR)/%.o) + +REL_OBJS_LOCAL = $(OBJS:$(OBJDIR)/%.o=$(REL_OBJDIR)/%.rel) +REL_OBJS = $(REL_OBJS_LOCAL:$(TOP)$(OBJDIR)/%.o=$(REL_OBJDIR)/%.rel) + +CFLAGS += -Idata/include -Wa-Idata/include + +all: settings directories $(TARGET) + +$(OBJDIR)/%.o: src/data/music/%.c + $(CC) $(CFLAGS) -c -o $@ $< + +$(OBJDIR)/%.o: src/data/%.c + $(CC) $(CFLAGS) -c -o $@ $< + +$(OBJDIR)/%.o: src/data/%.s + $(CC) $(CFLAGS) -c -o $@ $< diff --git a/src/Makefile.build b/src/Makefile.build new file mode 100644 index 0000000..f3883b6 --- /dev/null +++ b/src/Makefile.build @@ -0,0 +1 @@ +settings: CGB hUGE MBC5 \ No newline at end of file diff --git a/src/Makefile.common b/src/Makefile.common new file mode 100644 index 0000000..c1646f8 --- /dev/null +++ b/src/Makefile.common @@ -0,0 +1,174 @@ +TOP := $(dir $(lastword $(MAKEFILE_LIST))) + +GBDK = $(TOP)../gbdk +CC = $(GBDK)/bin/lcc +TEST_DIR = $(TOP)test +TEST_FW = $(TEST_DIR)/framework +EXAMPLES_DIR = ./examples +EMU = $(TOP)../bgb/bgb +GBSPACK = $(TOP)../gbspack/gbspack +TEST_CHK = python $(CURDIR)/$(TEST_FW)/unit_checker.py +GBS_CLI = node $(TOP)../gb-studio/out/cli/gb-studio-cli.js +PLATFORM = + +ROMTITLE = "GBSTUDIO" + +ROM_BUILD_DIR = build +OBJDIR = obj +REL_OBJDIR = obj/_rel + +CFLAGS = $(PLATFORM) -I$(TOP)include -Wa-I$(TOP)include + +LFLAGS_NBANKS += -Wm-yoA -Wm-ya4 +LFLAGS_SYMBOLS = -Wl-j -Wl-m -Wl-w -Wm-yS + +LFLAGS = $(PLATFORM) -Wm-yt$(CART_MBC) $(LFLAGS_NBANKS) $(LFLAGS_SYMBOLS) -Wl-klib -Wl-g.STACK=0xDF00 -Wi-e + +PACKFLAGS = -b 1 -f 255 -e rel -c + +EMUFLAGS = \ + -set "Color0=E8E8E8" \ + -set "Color1=A0A0A0" \ + -set "Color2=585858" \ + -set "Color3=101010" \ + -set "DebugWRAMbreak=0" \ + -set "DebugSrcBrk=1" \ + -hf -stateonexit \ + -screenonexit ./capture.bmp + +EMU_FORCE_DMG = -set "SystemMode=0" + +TARGET = $(ROM_BUILD_DIR)/rom.gb + +ASRC = $(foreach dir,$(TOP)src,$(notdir $(wildcard $(dir)/*.s))) +CSRC = $(foreach dir,$(TOP)src,$(notdir $(wildcard $(dir)/*.c))) +ACORE = $(foreach dir,$(TOP)src/core,$(notdir $(wildcard $(dir)/*.s))) +CCORE = $(foreach dir,$(TOP)src/core,$(notdir $(wildcard $(dir)/*.c))) +CSTATES = $(foreach dir,$(TOP)src/states,$(notdir $(wildcard $(dir)/*.c))) +ASTATES = $(foreach dir,$(TOP)src/states,$(notdir $(wildcard $(dir)/*.s))) + +ENGINE_OBJS = $(CSRC:%.c=$(TOP)$(OBJDIR)/%.o) \ + $(ASRC:%.s=$(TOP)$(OBJDIR)/%.o) \ + $(ACORE:%.s=$(TOP)$(OBJDIR)/%.o) \ + $(CCORE:%.c=$(TOP)$(OBJDIR)/%.o) \ + $(CSTATES:%.c=$(TOP)$(OBJDIR)/%.o) \ + $(ASTATES:%.s=$(TOP)$(OBJDIR)/%.o) + +OBJS = $(ENGINE_OBJS) +REL_OBJS = $(OBJS:$(OBJDIR)/%.o=$(REL_OBJDIR)/%.rel) + +all: settings directories BUILD + +.PHONY: directories clean release debug profile AP DMG CGB SGB MBC3 MBC5 hUGE GBT test rom BUILD +.SECONDARY: $(OBJS) + +AP: + $(eval PLATFORM = -msm83:ap) + $(eval TARGET = $(patsubst %.gb,%.pocket,$(TARGET))) + @echo "Analogue pocket build" + +release: + $(eval CFLAGS += -Wf'--max-allocs-per-node 50000') + @echo "RELEASE mode ON" + +debug: + $(eval CFLAGS += -Wf--fverbose-asm -Wf--debug -Wl-m -Wl-w -Wl-y -DVM_DEBUG_OUTPUT) + $(eval CFLAGS += -Wf--nolospre -Wf--nogcse) + $(eval LFLAGS += -Wf--debug -Wl-m -Wl-w -Wl-y) + @echo "DEBUG mode ON" + +profile: + $(eval CFLAGS += -Wf--profile) + @echo "PROFILE mode ON" + +DMG: + @echo "DMG mode ON" + +CGB: + $(eval CFLAGS += -DCGB) + $(eval LFLAGS += -Wm-yC) + @echo "CGB mode ON" + +SGB: + $(eval CFLAGS += -DSGB) + $(eval LFLAGS += -Wm-ys) + @echo "SGB mode ON" + +batteryless: + $(eval PACKFLAGS += -a 4) + $(eval BATTERYLESS = 1) + $(eval CFLAGS += -DBATTERYLESS) + @echo "BETTERYLESS SAVE ON" + +MBC3: + $(eval CART_MBC = 0x10) + @echo "Using MBC3" +MBC5: + $(eval CART_MBC = 0x1B) + @echo "Using MBC5" + +hUGE: + $(eval CFLAGS += -DHUGE_TRACKER) + $(eval LFLAGS += -Wl-l$(TOP)lib/hUGEDriver.lib) + @echo "Enable hUGETracker" +GBT: + $(eval CFLAGS += -DGBT_PLAYER) + $(eval LFLAGS += -Wl-l$(TOP)lib/gbt_player.lib) + $(eval PACKFLAGS += -s 1:800) + @echo "Enable GBTPlayer" + +directories: $(ROM_BUILD_DIR) $(OBJDIR) $(REL_OBJDIR) + +$(ROM_BUILD_DIR): + mkdir -p $(ROM_BUILD_DIR) + +$(OBJDIR): + mkdir -p $(OBJDIR) + mkdir -p $(TOP)$(OBJDIR) + +$(REL_OBJDIR): + mkdir -p $(REL_OBJDIR) + +$(TOP)$(OBJDIR)/%.o: $(TOP)src/core/%.c + $(CC) $(CFLAGS) -Wf-MMD $(filter -Wf-ba%, $(subst .d,-Wf-ba,$(suffix $(<:%.c=%)))) -c -o $@ $< + +$(TOP)$(OBJDIR)/%.o: $(TOP)src/core/%.s + $(CC) $(CFLAGS) -c -o $@ $< + +$(TOP)$(OBJDIR)/%.o: $(TOP)src/states/%.c + $(CC) $(CFLAGS) -Wf-MMD -c -o $@ $< + +$(TOP)$(OBJDIR)/%.o: $(TOP)src/states/%.s + $(CC) $(CFLAGS) -c -o $@ $< + +$(TOP)$(OBJDIR)/%.o: $(TOP)src/%.c + $(CC) $(CFLAGS) -Wf-MMD -c -o $@ $< + +$(TOP)$(OBJDIR)/%.o: $(TOP)src/%.s + $(CC) $(CFLAGS) -c -o $@ $< + +$(REL_OBJDIR)/linkfile.lk: $(OBJS) + mkdir -p $(REL_OBJDIR) + + $(shell rm -f $(REL_OBJDIR)/packfile.pk) + $(foreach O,$(OBJS),$(shell echo $O >>$(REL_OBJDIR)/packfile.pk)) + $(eval CART_SIZE=$(shell $(GBSPACK) $(PACKFLAGS) -o $(REL_OBJDIR) -i $(REL_OBJDIR)/packfile.pk)) + + $(shell echo -g __start_save=$(shell expr $(CART_SIZE) - 4 ) >$@) + $(foreach O,$(REL_OBJS),$(shell echo $O >>$@)) + +BUILD: $(REL_OBJDIR)/linkfile.lk + $(CC) $(LFLAGS) -Wm-yn$(ROMTITLE) -o $(TARGET) -Wl-f$< + +clean: + @echo "CLEANUP..." + rm -rf $(TOP)$(OBJDIR) + rm -rf $(OBJDIR) + rm -rf $(ROM_BUILD_DIR) + rm -f $(TEST_DIR)/*/capture.bmp + rm -rf $(TEST_DIR)/*/obj + rm -rf $(TEST_DIR)/*/build + rm -rf $(EXAMPLES_DIR)/*/obj + rm -rf $(EXAMPLES_DIR)/*/build + +rom: directories BUILD diff --git a/src/engine.json b/src/engine.json new file mode 100644 index 0000000..fe4208a --- /dev/null +++ b/src/engine.json @@ -0,0 +1,249 @@ +{ + "version": "4.2.0-e1", + "fields": [ + { + "key": "INPUT_PLATFORM_JUMP", + "sceneType": "PLATFORM", + "label": "FIELD_INPUT_JUMP", + "group": "GAMETYPE_PLATFORMER", + "type": "select", + "options": [ + ["INPUT_A", "A"], + ["INPUT_B", "B"], + ["INPUT_UP", "FIELD_DIRECTION_UP"] + ], + "cType": "define", + "defaultValue": "INPUT_A" + }, + { + "key": "INPUT_PLATFORM_RUN", + "sceneType": "PLATFORM", + "label": "FIELD_INPUT_RUN", + "group": "GAMETYPE_PLATFORMER", + "type": "select", + "options": [ + ["INPUT_A", "A"], + ["INPUT_B", "B"] + ], + "cType": "define", + "defaultValue": "INPUT_B" + }, + { + "key": "INPUT_PLATFORM_INTERACT", + "sceneType": "PLATFORM", + "label": "FIELD_INPUT_INTERACT", + "group": "GAMETYPE_PLATFORMER", + "type": "select", + "options": [ + ["INPUT_A", "A"], + ["INPUT_B", "B"], + ["INPUT_UP", "FIELD_DIRECTION_UP"], + ["INPUT_DOWN", "FIELD_DIRECTION_DOWN"] + ], + "cType": "define", + "defaultValue": "INPUT_A" + }, + { + "key": "plat_min_vel", + "sceneType": "PLATFORM", + "label": "FIELD_MIN_VEL", + "group": "GAMETYPE_PLATFORMER", + "type": "slider", + "cType": "WORD", + "defaultValue": 304, + "min": 0, + "max": 16384 + }, + { + "key": "plat_walk_vel", + "sceneType": "PLATFORM", + "label": "FIELD_WALK_VEL", + "group": "GAMETYPE_PLATFORMER", + "type": "slider", + "cType": "WORD", + "defaultValue": 6400, + "min": 0, + "max": 16384 + }, + { + "key": "plat_run_vel", + "sceneType": "PLATFORM", + "label": "FIELD_RUN_VEL", + "group": "GAMETYPE_PLATFORMER", + "type": "slider", + "cType": "WORD", + "defaultValue": 10496, + "min": 0, + "max": 16384 + }, + { + "key": "plat_climb_vel", + "sceneType": "PLATFORM", + "label": "FIELD_CLIMB_VEL", + "group": "GAMETYPE_PLATFORMER", + "type": "slider", + "cType": "WORD", + "defaultValue": 4000, + "min": 0, + "max": 16384 + }, + { + "key": "plat_walk_acc", + "sceneType": "PLATFORM", + "label": "FIELD_WALK_ACC", + "group": "GAMETYPE_PLATFORMER", + "type": "slider", + "cType": "WORD", + "defaultValue": 152, + "min": 0, + "max": 768 + }, + { + "key": "plat_run_acc", + "sceneType": "PLATFORM", + "label": "FIELD_RUN_ACC", + "group": "GAMETYPE_PLATFORMER", + "type": "slider", + "cType": "WORD", + "defaultValue": 228, + "min": 0, + "max": 768 + }, + { + "key": "plat_dec", + "sceneType": "PLATFORM", + "label": "FIELD_DECELERATION", + "group": "GAMETYPE_PLATFORMER", + "type": "slider", + "cType": "WORD", + "defaultValue": 208, + "min": 0, + "max": 768 + }, + { + "key": "plat_jump_vel", + "sceneType": "PLATFORM", + "label": "FIELD_JUMP_VEL", + "group": "GAMETYPE_PLATFORMER", + "type": "slider", + "cType": "WORD", + "defaultValue": 16384, + "min": 0, + "max": 32768 + }, + { + "key": "plat_grav", + "sceneType": "PLATFORM", + "label": "FIELD_GRAVITY", + "group": "GAMETYPE_PLATFORMER", + "type": "slider", + "cType": "WORD", + "defaultValue": 1792, + "min": 0, + "max": 8192 + }, + { + "key": "plat_hold_grav", + "sceneType": "PLATFORM", + "label": "FIELD_GRAVITY_JUMP", + "group": "GAMETYPE_PLATFORMER", + "type": "slider", + "cType": "WORD", + "defaultValue": 512, + "min": 0, + "max": 8192 + }, + { + "key": "plat_max_fall_vel", + "sceneType": "PLATFORM", + "label": "FIELD_MAX_FALL_VEL", + "group": "GAMETYPE_PLATFORMER", + "type": "slider", + "cType": "WORD", + "defaultValue": 20000, + "min": 0, + "max": 24560 + }, + { + "key": "shooter_scroll_speed", + "sceneType": "SHMUP", + "label": "FIELD_SCROLL_SPEED", + "group": "GAMETYPE_SHMUP", + "type": "slider", + "cType": "UBYTE", + "defaultValue": 16, + "min": 0, + "max": 64 + }, + { + "key": "INPUT_TOPDOWN_INTERACT", + "sceneType": "TOPDOWN", + "label": "FIELD_INPUT_INTERACT", + "group": "GAMETYPE_TOP_DOWN", + "type": "select", + "options": [ + ["INPUT_A", "A"], + ["INPUT_B", "B"] + ], + "cType": "define", + "defaultValue": "INPUT_A" + }, + { + "key": "topdown_grid", + "sceneType": "TOPDOWN", + "label": "FIELD_GRID_SIZE", + "group": "GAMETYPE_TOP_DOWN", + "type": "select", + "options": [ + [8, "FIELD_GRID_8PX"], + [16, "FIELD_GRID_16PX"] + ], + "cType": "UBYTE", + "defaultValue": 8 + }, + { + "key": "fade_style", + "label": "FIELD_FADE_STYLE", + "group": "SETTINGS_FADE", + "type": "select", + "options": [ + [0, "FIELD_FADE_WHITE"], + [1, "FIELD_FADE_BLACK"] + ], + "cType": "UBYTE", + "defaultValue": 0 + } + ], + "sceneTypes": [ + { + "key": "TOPDOWN", + "label": "GAMETYPE_TOP_DOWN", + "files": ["include/states/topdown.h", "src/states/topdown.c"] + }, + { + "key": "PLATFORM", + "label": "GAMETYPE_PLATFORMER", + "files": ["include/states/platform.h", "src/states/platform.c"] + }, + { + "key": "ADVENTURE", + "label": "GAMETYPE_ADVENTURE", + "files": ["include/states/adventure.h", "src/states/adventure.c"] + }, + { + "key": "SHMUP", + "label": "GAMETYPE_SHMUP", + "files": ["include/states/shmup.h", "src/states/shmup.c"] + }, + { + "key": "POINTNCLICK", + "label": "GAMETYPE_POINT_N_CLICK", + "files": ["include/states/pointnclick.h", "src/states/pointnclick.c"] + }, + { + "key": "LOGO", + "label": "GAMETYPE_LOGO", + "files": ["include/states/logo.h", "src/states/logo.c"] + } + ] +} diff --git a/src/include/actor.h b/src/include/actor.h new file mode 100644 index 0000000..8b43e1e --- /dev/null +++ b/src/include/actor.h @@ -0,0 +1,81 @@ +#ifndef ACTOR_H +#define ACTOR_H + +#include +#include "bankdata.h" +#include "gbs_types.h" + +#define MAX_ACTORS 21 +#define MAX_ACTORS_ACTIVE 12 + +#define PLAYER actors[0] +#define ON_8PX_GRID(A) ( MOD_8((A).x >> 4) == 0 && MOD_8((A).y >> 4) == 0) +#define ON_16PX_GRID(A) (MOD_16((A).x >> 4) == 0 && MOD_16((A).y >> 4) == 8) + +#define PLAYER_HURT_IFRAMES 20 + +#define ANIM_JUMP_LEFT 0 +#define ANIM_JUMP_RIGHT 2 +#define ANIM_CLIMB 6 + +#define ANIM_CURSOR 0 +#define ANIM_CURSOR_HOVER 1 + +#define ANIM_SET_DEFAULT 0 + +BANKREF_EXTERN(ACTOR) + +typedef enum { + CHECK_DIR_LEFT = 1, + CHECK_DIR_RIGHT, + CHECK_DIR_UP, + CHECK_DIR_DOWN, +} col_check_dir_e; + +extern actor_t actors[MAX_ACTORS]; +extern actor_t * actors_active_head; +extern actor_t * actors_active_tail; +extern actor_t * actors_inactive_head; +extern UBYTE player_moving; +extern actor_t * player_collision_actor; +extern actor_t * emote_actor; +extern UBYTE emote_timer; + +extern UBYTE allocated_sprite_tiles; +extern UBYTE allocated_hardware_sprites; + +void actors_init(void) BANKED; +void actors_update(void) NONBANKED; +void deactivate_actor(actor_t *actor) BANKED; +void activate_actor(actor_t *actor) BANKED; +void actor_set_frames(actor_t *actor, UBYTE frame_start, UBYTE frame_end) BANKED; +void actor_set_frame_offset(actor_t *actor, UBYTE frame_offset) BANKED; +UBYTE actor_get_frame_offset(actor_t *actor) BANKED; +actor_t *actor_at_tile(UBYTE tx, UBYTE ty, UBYTE inc_noclip) BANKED; +actor_t *actor_in_front_of_player(UBYTE grid_size, UBYTE inc_noclip) BANKED; +actor_t *actor_overlapping_player(UBYTE inc_noclip) BANKED; +actor_t *actor_overlapping_bb(bounding_box_t *bb, point16_t *offset, actor_t *ignore, UBYTE inc_noclip) BANKED; +void actor_set_anim_idle(actor_t *actor) BANKED; +void actor_set_anim_moving(actor_t *actor) BANKED; +void actor_set_dir(actor_t *actor, direction_e dir, UBYTE moving) BANKED; +inline void actor_set_anim(actor_t *actor, UBYTE anim) { + actor->animation = anim; + actor_set_frames(actor, actor->animations[anim].start, actor->animations[anim].end + 1); +} +inline void actor_reset_anim(actor_t *actor) { + actor_set_frames(actor, actor->animations[actor->animation].start, actor->animations[actor->animation].end + 1); +} +inline void actor_stop_anim(actor_t *actor) { + actor->frame_start = actor->frame; + actor->frame_end = actor->frame + 1; +} +inline void player_register_collision_with(actor_t *actor) { + player_collision_actor = actor; +} +void actors_handle_player_collision(void) BANKED; +UWORD check_collision_in_direction(UWORD start_x, UWORD start_y, bounding_box_t *bounds, UWORD end_pos, col_check_dir_e check_dir) BANKED; +void activate_actors_in_row(UBYTE x, UBYTE y) BANKED; +void activate_actors_in_col(UBYTE x, UBYTE y) BANKED; +void player_init(void) BANKED; + +#endif diff --git a/src/include/bankdata.h b/src/include/bankdata.h new file mode 100644 index 0000000..568420c --- /dev/null +++ b/src/include/bankdata.h @@ -0,0 +1,147 @@ +#ifndef BANK_DATA_H +#define BANK_DATA_H + +#include + +#include "compat.h" + +#define TO_FAR_PTR_T(A) {.bank = (UBYTE)&(__bank_ ## A), .ptr = (void *)&(A)} +#define TO_FAR_ARGS(T, A) (T)(A).ptr, (A).bank + +#ifndef BANK +#define BANK(VARNAME) ( (UBYTE) & __bank_ ## VARNAME ) +#endif +#ifndef BANKREF +#define BANKREF(VARNAME) void __func_ ## VARNAME(void) BANKED NAKED { \ +__asm \ + .local b___func_ ## VARNAME \ + ___bank_ ## VARNAME = b___func_ ## VARNAME \ + .globl ___bank_ ## VARNAME \ +__endasm; \ +} +#endif +#ifndef BANKREF_EXTERN +#define BANKREF_EXTERN(VARNAME) extern const void __bank_ ## VARNAME; +#endif + +#ifndef SIZE +#define SIZE(VARNAME) ((UWORD)&( __size_ ## VARNAME )) +#endif +#ifndef SIZEREF +#define SIZEREF(VARNAME) const void AT(sizeof(VARNAME)) __size_ ## VARNAME; +#endif +#ifndef SIZEREF_EXTERN +#define SIZEREF_EXTERN(VARNAME) extern const void __size_ ## VARNAME; +#endif + +typedef struct far_ptr_t { + UBYTE bank; + void * ptr; +} far_ptr_t; + +/** + * Call set_bkg_data with data stored in banked memory (non-reentrant!) + * + * @param i first tile to write to + * @param l number of tiles to write + * @param ptr memory address of tile data within bank + * @param bank bank to read from + */ +void SetBankedBkgData(UBYTE i, UBYTE l, const unsigned char *ptr, UBYTE bank) OLDCALL; + +/** + * Call set_sprite_data with data stored in banked memory (non-reentrant!) + * + * @param i first tile to write to + * @param l number of tiles to write + * @param ptr memory address of tile data within bank + * @param bank bank to read from + */ +void SetBankedSpriteData(UBYTE i, UBYTE l, const unsigned char *ptr, UBYTE bank) OLDCALL; + +/** + * Sets a rectangular region of Tile Map entries for the Background layer (non-reentrant!) + * + * @param x X Start position in Background Map tile coordinates. Range 0 - 31 + * @param y Y Start position in Background Map tile coordinates. Range 0 - 31 + * @param w Width of area to set in tiles. Range 0 - 31 + * @param h Height of area to set in tiles. Range 0 - 31 + * @param tiles Pointer to source Tile Map data + * @param bank bank to read from + */ +void SetBankedBkgTiles(UINT8 x, UINT8 y, UINT8 w, UINT8 h, const unsigned char *tiles, UBYTE bank) OLDCALL; + +/** + * Sets a rectangular region of Tile Map entries for the Window layer (non-reentrant!) + * + * @param x X Start position in Window Map tile coordinates. Range 0 - 31 + * @param y Y Start position in Window Map tile coordinates. Range 0 - 31 + * @param w Width of area to set in tiles. Range 0 - 31 + * @param h Height of area to set in tiles. Range 0 - 31 + * @param tiles Pointer to source Tile Map data + * @param bank bank to read from + */ +void SetBankedWinTiles(UINT8 x, UINT8 y, UINT8 w, UINT8 h, const unsigned char *tiles, UBYTE bank) OLDCALL; + + +/** + * Read far pointer from banked memory location into dest (non-reentrant!) + * + * @param dest pointer to far_ptr_t struct + * @param ptr memory address of data within bank + * @param bank bank to read from + */ +void ReadBankedFarPtr(far_ptr_t * dest, const unsigned char *ptr, UBYTE bank); + +/** + * Read UWORD from banked memory location (non-reentrant!) + * + * @param ptr memory address of data within bank + * @param bank bank to read from + * @return value stored in banked location + */ +UWORD ReadBankedUWORD(const unsigned char *ptr, UBYTE bank); + +/** + * Read UBYTE from banked memory location (non-reentrant!) + * + * @param ptr memory address of data within bank + * @param bank bank to read from + * @return value stored in banked location + */ +inline UBYTE ReadBankedUBYTE(const unsigned char *ptr, UBYTE bank) { + return (UBYTE)ReadBankedUWORD(ptr, bank); +} + +/** + * memcpy data from banked memory location (non-reentrant!) + * + * @param to destination to write fetched data + * @param from memory address of data within bank + * @param n number of bytes to fetch from bank + * @param bank bank to read from + */ +void MemcpyBanked(void* to, const void* from, size_t n, UBYTE bank); + +/** + * memcpy data from banked memory location (non-reentrant!) to VRAM + * + * @param to destination to write fetched data + * @param from memory address of data within bank + * @param n number of bytes to fetch from bank + * @param bank bank to read from + */ +void MemcpyVRAMBanked(void* to, const void* from, size_t n, UBYTE bank); + +/** + * returns the index of pointer from the list + * + * @param list pointer to the farptr array + * @param bank bank number of the list + * @param count number of items in the farptr array + * @param item pointer the the item in WRAM being searched + * @return index in the array or count if not found + */ +UBYTE IndexOfFarPtr(const far_ptr_t * list, UBYTE bank, UBYTE count, const far_ptr_t * item); + +#endif diff --git a/src/include/camera.h b/src/include/camera.h new file mode 100644 index 0000000..4cacbd5 --- /dev/null +++ b/src/include/camera.h @@ -0,0 +1,32 @@ +#ifndef CAMERA_H +#define CAMERA_H + +#include + +#define SCREEN_WIDTH 160 +#define SCREEN_HEIGHT 144 +#define SCREEN_WIDTH_HALF 80 +#define SCREEN_HEIGHT_HALF 72 + +#define CAMERA_UNLOCKED 0x00 +#define CAMERA_LOCK_X_FLAG 0x01 +#define CAMERA_LOCK_Y_FLAG 0x02 +#define CAMERA_LOCK_FLAG (CAMERA_LOCK_X_FLAG | CAMERA_LOCK_Y_FLAG) + +extern INT16 camera_x; +extern INT16 camera_y; +extern BYTE camera_offset_x; +extern BYTE camera_offset_y; +extern BYTE camera_deadzone_x; +extern BYTE camera_deadzone_y; +extern UBYTE camera_settings; + +void camera_init(void) BANKED; + +inline void camera_reset(void) { + camera_deadzone_x = camera_deadzone_y = 0; +} + +void camera_update(void) NONBANKED; + +#endif \ No newline at end of file diff --git a/src/include/collision.h b/src/include/collision.h new file mode 100644 index 0000000..b0d1bfe --- /dev/null +++ b/src/include/collision.h @@ -0,0 +1,71 @@ +#ifndef COLLISIONS_H +#define COLLISIONS_H + +#include + +#include "math.h" +#include "bankdata.h" + +#define COLLISION_TOP 0x1 +#define COLLISION_BOTTOM 0x2 +#define COLLISION_LEFT 0x4 +#define COLLISION_RIGHT 0x8 +#define COLLISION_ALL 0xF +#define TILE_PROP_LADDER 0x10 + +typedef struct bounding_box_t { + BYTE left, right, top, bottom; +} bounding_box_t; + +extern UBYTE collision_bank; +extern unsigned char *collision_ptr; +extern UBYTE image_tile_width; +extern UBYTE image_tile_height; + +/** + * Check if point is within positioned bounding box. + * + * @param bb Pointer to bounding box + * @param offset Pointer to position offset for bounding box (e.g Actor position) + * @param point Pointer to position to look for within bounding box + * @return Point is within bounding box + */ +inline UBYTE bb_contains(bounding_box_t *bb, point16_t *offset, point16_t *point) { + if ((point->x < (offset->x >> 4) + bb->left) || + (point->x > (offset->x >> 4) + bb->right)) return FALSE; + if ((point->y < (offset->y >> 4) + bb->top) || + (point->y > (offset->y >> 4) + bb->bottom)) return FALSE; + return TRUE; +} + +/** + * Check if two positioned bounding boxes intersect. + * + * @param bb_a Pointer to bounding box A + * @param offset_a Pointer to position offset for bounding box A + * @param bb_b Pointer to bounding box B + * @param offset_b Pointer to position offset for bounding box B + * @return Positioned bounding boxes intersect + */ +inline UBYTE bb_intersects(bounding_box_t *bb_a, point16_t *offset_a, bounding_box_t *bb_b, point16_t *offset_b) { + if (((offset_b->x >> 4) + bb_b->left > (offset_a->x >> 4) + bb_a->right) || + ((offset_b->x >> 4) + bb_b->right < (offset_a->x >> 4) + bb_a->left)) return FALSE; + if (((offset_b->y >> 4) + bb_b->top > (offset_a->y >> 4) + bb_a->bottom) || + ((offset_b->y >> 4) + bb_b->bottom < (offset_a->y >> 4) + bb_a->top)) return FALSE; + return TRUE; +} + +/** + * Return collision tile value at given tile x,y coordinate. + * + * @param tx Left tile + * @param ty Top tile + * @return Tile value, 0 if no collisions, COLLISION_ALL if out of bounds + */ +inline UBYTE tile_at(UBYTE tx, UBYTE ty) { + if ((tx < image_tile_width) && (ty < image_tile_height)) + return ReadBankedUBYTE(collision_ptr + (ty * (UINT16)image_tile_width) + tx, collision_bank); + return COLLISION_ALL; +} + +#endif diff --git a/src/include/compat.h b/src/include/compat.h new file mode 100644 index 0000000..2eca7cc --- /dev/null +++ b/src/include/compat.h @@ -0,0 +1,47 @@ +#ifndef _COMPAT_H_INCLUDE +#define _COMPAT_H_INCLUDE + +#include + +#ifndef OLDCALL +#if __SDCC_REVISION >= 12608 +#define OLDCALL __sdcccall(0) +#else +#define OLDCALL +#endif +#endif + +#ifndef PRESERVES_REGS +#ifdef __SDCC +#define PRESERVES_REGS(...) __preserves_regs(__VA_ARGS__) +#else +#define PRESERVES_REGS(...) +#endif +#endif + +#ifndef NAKED +#ifdef __SDCC +#define NAKED __naked +#else +#define NAKED +#endif +#endif + +#ifndef SFR +#ifdef __SDCC +#define SFR __sfr +#else +#define SFR +#endif +#endif + +#ifndef AT +#ifdef __SDCC +#define AT(A) __at(A) +#else +#define AT(A) +#endif +#endif + + +#endif \ No newline at end of file diff --git a/src/include/core.h b/src/include/core.h new file mode 100644 index 0000000..23e6a26 --- /dev/null +++ b/src/include/core.h @@ -0,0 +1,9 @@ +#ifndef _CORE_H_INCLUDE +#define _CORE_H_INCLUDE + +#include + +void core_reset(void) BANKED; +void core_run(void) BANKED; + +#endif \ No newline at end of file diff --git a/src/include/data/actor_0_interact.h b/src/include/data/actor_0_interact.h new file mode 100644 index 0000000..008868c --- /dev/null +++ b/src/include/data/actor_0_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_0_INTERACT_H +#define ACTOR_0_INTERACT_H + +// Script actor_0_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_0_interact) +extern const unsigned char actor_0_interact[]; + +#endif diff --git a/src/include/data/actor_10_interact.h b/src/include/data/actor_10_interact.h new file mode 100644 index 0000000..64f741d --- /dev/null +++ b/src/include/data/actor_10_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_10_INTERACT_H +#define ACTOR_10_INTERACT_H + +// Script actor_10_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_10_interact) +extern const unsigned char actor_10_interact[]; + +#endif diff --git a/src/include/data/actor_11_interact.h b/src/include/data/actor_11_interact.h new file mode 100644 index 0000000..dd16462 --- /dev/null +++ b/src/include/data/actor_11_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_11_INTERACT_H +#define ACTOR_11_INTERACT_H + +// Script actor_11_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_11_interact) +extern const unsigned char actor_11_interact[]; + +#endif diff --git a/src/include/data/actor_12_interact.h b/src/include/data/actor_12_interact.h new file mode 100644 index 0000000..28879d9 --- /dev/null +++ b/src/include/data/actor_12_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_12_INTERACT_H +#define ACTOR_12_INTERACT_H + +// Script actor_12_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_12_interact) +extern const unsigned char actor_12_interact[]; + +#endif diff --git a/src/include/data/actor_13_interact.h b/src/include/data/actor_13_interact.h new file mode 100644 index 0000000..9b1cba6 --- /dev/null +++ b/src/include/data/actor_13_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_13_INTERACT_H +#define ACTOR_13_INTERACT_H + +// Script actor_13_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_13_interact) +extern const unsigned char actor_13_interact[]; + +#endif diff --git a/src/include/data/actor_14_interact.h b/src/include/data/actor_14_interact.h new file mode 100644 index 0000000..bedc400 --- /dev/null +++ b/src/include/data/actor_14_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_14_INTERACT_H +#define ACTOR_14_INTERACT_H + +// Script actor_14_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_14_interact) +extern const unsigned char actor_14_interact[]; + +#endif diff --git a/src/include/data/actor_15_interact.h b/src/include/data/actor_15_interact.h new file mode 100644 index 0000000..eec71ad --- /dev/null +++ b/src/include/data/actor_15_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_15_INTERACT_H +#define ACTOR_15_INTERACT_H + +// Script actor_15_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_15_interact) +extern const unsigned char actor_15_interact[]; + +#endif diff --git a/src/include/data/actor_1_interact.h b/src/include/data/actor_1_interact.h new file mode 100644 index 0000000..24e69d4 --- /dev/null +++ b/src/include/data/actor_1_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_1_INTERACT_H +#define ACTOR_1_INTERACT_H + +// Script actor_1_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_1_interact) +extern const unsigned char actor_1_interact[]; + +#endif diff --git a/src/include/data/actor_2_interact.h b/src/include/data/actor_2_interact.h new file mode 100644 index 0000000..40a05c4 --- /dev/null +++ b/src/include/data/actor_2_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_2_INTERACT_H +#define ACTOR_2_INTERACT_H + +// Script actor_2_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_2_interact) +extern const unsigned char actor_2_interact[]; + +#endif diff --git a/src/include/data/actor_3_interact.h b/src/include/data/actor_3_interact.h new file mode 100644 index 0000000..b934746 --- /dev/null +++ b/src/include/data/actor_3_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_3_INTERACT_H +#define ACTOR_3_INTERACT_H + +// Script actor_3_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_3_interact) +extern const unsigned char actor_3_interact[]; + +#endif diff --git a/src/include/data/actor_4_interact.h b/src/include/data/actor_4_interact.h new file mode 100644 index 0000000..64084b1 --- /dev/null +++ b/src/include/data/actor_4_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_4_INTERACT_H +#define ACTOR_4_INTERACT_H + +// Script actor_4_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_4_interact) +extern const unsigned char actor_4_interact[]; + +#endif diff --git a/src/include/data/actor_5_interact.h b/src/include/data/actor_5_interact.h new file mode 100644 index 0000000..a33438e --- /dev/null +++ b/src/include/data/actor_5_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_5_INTERACT_H +#define ACTOR_5_INTERACT_H + +// Script actor_5_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_5_interact) +extern const unsigned char actor_5_interact[]; + +#endif diff --git a/src/include/data/actor_6_interact.h b/src/include/data/actor_6_interact.h new file mode 100644 index 0000000..10c2bfa --- /dev/null +++ b/src/include/data/actor_6_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_6_INTERACT_H +#define ACTOR_6_INTERACT_H + +// Script actor_6_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_6_interact) +extern const unsigned char actor_6_interact[]; + +#endif diff --git a/src/include/data/actor_7_interact.h b/src/include/data/actor_7_interact.h new file mode 100644 index 0000000..45fdd65 --- /dev/null +++ b/src/include/data/actor_7_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_7_INTERACT_H +#define ACTOR_7_INTERACT_H + +// Script actor_7_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_7_interact) +extern const unsigned char actor_7_interact[]; + +#endif diff --git a/src/include/data/actor_8_interact.h b/src/include/data/actor_8_interact.h new file mode 100644 index 0000000..1d12a71 --- /dev/null +++ b/src/include/data/actor_8_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_8_INTERACT_H +#define ACTOR_8_INTERACT_H + +// Script actor_8_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_8_interact) +extern const unsigned char actor_8_interact[]; + +#endif diff --git a/src/include/data/actor_9_interact.h b/src/include/data/actor_9_interact.h new file mode 100644 index 0000000..19e7743 --- /dev/null +++ b/src/include/data/actor_9_interact.h @@ -0,0 +1,11 @@ +#ifndef ACTOR_9_INTERACT_H +#define ACTOR_9_INTERACT_H + +// Script actor_9_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(actor_9_interact) +extern const unsigned char actor_9_interact[]; + +#endif diff --git a/src/include/data/bg_cave.h b/src/include/data/bg_cave.h new file mode 100644 index 0000000..9b5b0ed --- /dev/null +++ b/src/include/data/bg_cave.h @@ -0,0 +1,11 @@ +#ifndef BG_CAVE_H +#define BG_CAVE_H + +// Background: cave + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_cave) +extern const struct background_t bg_cave; + +#endif diff --git a/src/include/data/bg_cave_tilemap.h b/src/include/data/bg_cave_tilemap.h new file mode 100644 index 0000000..3872ff2 --- /dev/null +++ b/src/include/data/bg_cave_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_CAVE_TILEMAP_H +#define BG_CAVE_TILEMAP_H + +// Tilemap bg_cave_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_cave_tilemap) +extern const unsigned char bg_cave_tilemap[]; + +#endif diff --git a/src/include/data/bg_cave_tilemap_attr.h b/src/include/data/bg_cave_tilemap_attr.h new file mode 100644 index 0000000..3a87a10 --- /dev/null +++ b/src/include/data/bg_cave_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_CAVE_TILEMAP_ATTR_H +#define BG_CAVE_TILEMAP_ATTR_H + +// Tilemap Attr bg_cave_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_cave_tilemap_attr) +extern const unsigned char bg_cave_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_cave_tileset.h b/src/include/data/bg_cave_tileset.h new file mode 100644 index 0000000..e549138 --- /dev/null +++ b/src/include/data/bg_cave_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_CAVE_TILESET_H +#define BG_CAVE_TILESET_H + +// Tileset: bg_cave_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_cave_tileset) +extern const struct tileset_t bg_cave_tileset; + +#endif diff --git a/src/include/data/bg_endscreen.h b/src/include/data/bg_endscreen.h new file mode 100644 index 0000000..d7efe6a --- /dev/null +++ b/src/include/data/bg_endscreen.h @@ -0,0 +1,11 @@ +#ifndef BG_ENDSCREEN_H +#define BG_ENDSCREEN_H + +// Background: endScreen + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_endscreen) +extern const struct background_t bg_endscreen; + +#endif diff --git a/src/include/data/bg_endscreen_cgb_tileset.h b/src/include/data/bg_endscreen_cgb_tileset.h new file mode 100644 index 0000000..76794f6 --- /dev/null +++ b/src/include/data/bg_endscreen_cgb_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_ENDSCREEN_CGB_TILESET_H +#define BG_ENDSCREEN_CGB_TILESET_H + +// Tileset: bg_endscreen_cgb_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_endscreen_cgb_tileset) +extern const struct tileset_t bg_endscreen_cgb_tileset; + +#endif diff --git a/src/include/data/bg_endscreen_tilemap.h b/src/include/data/bg_endscreen_tilemap.h new file mode 100644 index 0000000..3d4af55 --- /dev/null +++ b/src/include/data/bg_endscreen_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_ENDSCREEN_TILEMAP_H +#define BG_ENDSCREEN_TILEMAP_H + +// Tilemap bg_endscreen_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_endscreen_tilemap) +extern const unsigned char bg_endscreen_tilemap[]; + +#endif diff --git a/src/include/data/bg_endscreen_tilemap_attr.h b/src/include/data/bg_endscreen_tilemap_attr.h new file mode 100644 index 0000000..4db2766 --- /dev/null +++ b/src/include/data/bg_endscreen_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_ENDSCREEN_TILEMAP_ATTR_H +#define BG_ENDSCREEN_TILEMAP_ATTR_H + +// Tilemap Attr bg_endscreen_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_endscreen_tilemap_attr) +extern const unsigned char bg_endscreen_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_endscreen_tileset.h b/src/include/data/bg_endscreen_tileset.h new file mode 100644 index 0000000..1d0bd04 --- /dev/null +++ b/src/include/data/bg_endscreen_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_ENDSCREEN_TILESET_H +#define BG_ENDSCREEN_TILESET_H + +// Tileset: bg_endscreen_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_endscreen_tileset) +extern const struct tileset_t bg_endscreen_tileset; + +#endif diff --git a/src/include/data/bg_fate6housef2.h b/src/include/data/bg_fate6housef2.h new file mode 100644 index 0000000..b1d9a8b --- /dev/null +++ b/src/include/data/bg_fate6housef2.h @@ -0,0 +1,11 @@ +#ifndef BG_FATE6HOUSEF2_H +#define BG_FATE6HOUSEF2_H + +// Background: Fate6Housef2 + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_fate6housef2) +extern const struct background_t bg_fate6housef2; + +#endif diff --git a/src/include/data/bg_fate6housef2_tilemap.h b/src/include/data/bg_fate6housef2_tilemap.h new file mode 100644 index 0000000..aa47aa4 --- /dev/null +++ b/src/include/data/bg_fate6housef2_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_FATE6HOUSEF2_TILEMAP_H +#define BG_FATE6HOUSEF2_TILEMAP_H + +// Tilemap bg_fate6housef2_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_fate6housef2_tilemap) +extern const unsigned char bg_fate6housef2_tilemap[]; + +#endif diff --git a/src/include/data/bg_fate6housef2_tilemap_attr.h b/src/include/data/bg_fate6housef2_tilemap_attr.h new file mode 100644 index 0000000..0bb9e08 --- /dev/null +++ b/src/include/data/bg_fate6housef2_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_FATE6HOUSEF2_TILEMAP_ATTR_H +#define BG_FATE6HOUSEF2_TILEMAP_ATTR_H + +// Tilemap Attr bg_fate6housef2_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_fate6housef2_tilemap_attr) +extern const unsigned char bg_fate6housef2_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_fate6housef2_tileset.h b/src/include/data/bg_fate6housef2_tileset.h new file mode 100644 index 0000000..7a65836 --- /dev/null +++ b/src/include/data/bg_fate6housef2_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_FATE6HOUSEF2_TILESET_H +#define BG_FATE6HOUSEF2_TILESET_H + +// Tileset: bg_fate6housef2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_fate6housef2_tileset) +extern const struct tileset_t bg_fate6housef2_tileset; + +#endif diff --git a/src/include/data/bg_house.h b/src/include/data/bg_house.h new file mode 100644 index 0000000..cad55c1 --- /dev/null +++ b/src/include/data/bg_house.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSE_H +#define BG_HOUSE_H + +// Background: house + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_house) +extern const struct background_t bg_house; + +#endif diff --git a/src/include/data/bg_house_tilemap.h b/src/include/data/bg_house_tilemap.h new file mode 100644 index 0000000..451855e --- /dev/null +++ b/src/include/data/bg_house_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSE_TILEMAP_H +#define BG_HOUSE_TILEMAP_H + +// Tilemap bg_house_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_house_tilemap) +extern const unsigned char bg_house_tilemap[]; + +#endif diff --git a/src/include/data/bg_house_tilemap_attr.h b/src/include/data/bg_house_tilemap_attr.h new file mode 100644 index 0000000..6e1af66 --- /dev/null +++ b/src/include/data/bg_house_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSE_TILEMAP_ATTR_H +#define BG_HOUSE_TILEMAP_ATTR_H + +// Tilemap Attr bg_house_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_house_tilemap_attr) +extern const unsigned char bg_house_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_house_tileset.h b/src/include/data/bg_house_tileset.h new file mode 100644 index 0000000..dfe556b --- /dev/null +++ b/src/include/data/bg_house_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSE_TILESET_H +#define BG_HOUSE_TILESET_H + +// Tileset: bg_house_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_house_tileset) +extern const struct tileset_t bg_house_tileset; + +#endif diff --git a/src/include/data/bg_house_wide.h b/src/include/data/bg_house_wide.h new file mode 100644 index 0000000..89e516d --- /dev/null +++ b/src/include/data/bg_house_wide.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSE_WIDE_H +#define BG_HOUSE_WIDE_H + +// Background: house-wide + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_house_wide) +extern const struct background_t bg_house_wide; + +#endif diff --git a/src/include/data/bg_house_wide_tilemap.h b/src/include/data/bg_house_wide_tilemap.h new file mode 100644 index 0000000..cbee13f --- /dev/null +++ b/src/include/data/bg_house_wide_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSE_WIDE_TILEMAP_H +#define BG_HOUSE_WIDE_TILEMAP_H + +// Tilemap bg_house_wide_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_house_wide_tilemap) +extern const unsigned char bg_house_wide_tilemap[]; + +#endif diff --git a/src/include/data/bg_house_wide_tilemap_attr.h b/src/include/data/bg_house_wide_tilemap_attr.h new file mode 100644 index 0000000..e3fa651 --- /dev/null +++ b/src/include/data/bg_house_wide_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSE_WIDE_TILEMAP_ATTR_H +#define BG_HOUSE_WIDE_TILEMAP_ATTR_H + +// Tilemap Attr bg_house_wide_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_house_wide_tilemap_attr) +extern const unsigned char bg_house_wide_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_house_wide_tileset.h b/src/include/data/bg_house_wide_tileset.h new file mode 100644 index 0000000..525567c --- /dev/null +++ b/src/include/data/bg_house_wide_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSE_WIDE_TILESET_H +#define BG_HOUSE_WIDE_TILESET_H + +// Tileset: bg_house_wide_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_house_wide_tileset) +extern const struct tileset_t bg_house_wide_tileset; + +#endif diff --git a/src/include/data/bg_housef2.h b/src/include/data/bg_housef2.h new file mode 100644 index 0000000..edaf291 --- /dev/null +++ b/src/include/data/bg_housef2.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSEF2_H +#define BG_HOUSEF2_H + +// Background: Housef2 + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_housef2) +extern const struct background_t bg_housef2; + +#endif diff --git a/src/include/data/bg_housef2_tilemap.h b/src/include/data/bg_housef2_tilemap.h new file mode 100644 index 0000000..47bdb21 --- /dev/null +++ b/src/include/data/bg_housef2_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSEF2_TILEMAP_H +#define BG_HOUSEF2_TILEMAP_H + +// Tilemap bg_housef2_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_housef2_tilemap) +extern const unsigned char bg_housef2_tilemap[]; + +#endif diff --git a/src/include/data/bg_housef2_tilemap_attr.h b/src/include/data/bg_housef2_tilemap_attr.h new file mode 100644 index 0000000..64167f5 --- /dev/null +++ b/src/include/data/bg_housef2_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSEF2_TILEMAP_ATTR_H +#define BG_HOUSEF2_TILEMAP_ATTR_H + +// Tilemap Attr bg_housef2_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_housef2_tilemap_attr) +extern const unsigned char bg_housef2_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_housef2_tileset.h b/src/include/data/bg_housef2_tileset.h new file mode 100644 index 0000000..9483e75 --- /dev/null +++ b/src/include/data/bg_housef2_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_HOUSEF2_TILESET_H +#define BG_HOUSEF2_TILESET_H + +// Tileset: bg_housef2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_housef2_tileset) +extern const struct tileset_t bg_housef2_tileset; + +#endif diff --git a/src/include/data/bg_lab1.h b/src/include/data/bg_lab1.h new file mode 100644 index 0000000..7bc978a --- /dev/null +++ b/src/include/data/bg_lab1.h @@ -0,0 +1,11 @@ +#ifndef BG_LAB1_H +#define BG_LAB1_H + +// Background: Lab1 + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_lab1) +extern const struct background_t bg_lab1; + +#endif diff --git a/src/include/data/bg_lab1_tilemap.h b/src/include/data/bg_lab1_tilemap.h new file mode 100644 index 0000000..8a263e3 --- /dev/null +++ b/src/include/data/bg_lab1_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_LAB1_TILEMAP_H +#define BG_LAB1_TILEMAP_H + +// Tilemap bg_lab1_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_lab1_tilemap) +extern const unsigned char bg_lab1_tilemap[]; + +#endif diff --git a/src/include/data/bg_lab1_tilemap_attr.h b/src/include/data/bg_lab1_tilemap_attr.h new file mode 100644 index 0000000..7f3ac41 --- /dev/null +++ b/src/include/data/bg_lab1_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_LAB1_TILEMAP_ATTR_H +#define BG_LAB1_TILEMAP_ATTR_H + +// Tilemap Attr bg_lab1_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_lab1_tilemap_attr) +extern const unsigned char bg_lab1_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_lab1_tileset.h b/src/include/data/bg_lab1_tileset.h new file mode 100644 index 0000000..7712bd5 --- /dev/null +++ b/src/include/data/bg_lab1_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_LAB1_TILESET_H +#define BG_LAB1_TILESET_H + +// Tileset: bg_lab1_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_lab1_tileset) +extern const struct tileset_t bg_lab1_tileset; + +#endif diff --git a/src/include/data/bg_logoscreen.h b/src/include/data/bg_logoscreen.h new file mode 100644 index 0000000..05d5a41 --- /dev/null +++ b/src/include/data/bg_logoscreen.h @@ -0,0 +1,11 @@ +#ifndef BG_LOGOSCREEN_H +#define BG_LOGOSCREEN_H + +// Background: LogoScreen + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_logoscreen) +extern const struct background_t bg_logoscreen; + +#endif diff --git a/src/include/data/bg_logoscreen_tilemap.h b/src/include/data/bg_logoscreen_tilemap.h new file mode 100644 index 0000000..b20accd --- /dev/null +++ b/src/include/data/bg_logoscreen_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_LOGOSCREEN_TILEMAP_H +#define BG_LOGOSCREEN_TILEMAP_H + +// Tilemap bg_logoscreen_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_logoscreen_tilemap) +extern const unsigned char bg_logoscreen_tilemap[]; + +#endif diff --git a/src/include/data/bg_logoscreen_tilemap_attr.h b/src/include/data/bg_logoscreen_tilemap_attr.h new file mode 100644 index 0000000..a177f81 --- /dev/null +++ b/src/include/data/bg_logoscreen_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_LOGOSCREEN_TILEMAP_ATTR_H +#define BG_LOGOSCREEN_TILEMAP_ATTR_H + +// Tilemap Attr bg_logoscreen_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_logoscreen_tilemap_attr) +extern const unsigned char bg_logoscreen_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_logoscreen_tileset.h b/src/include/data/bg_logoscreen_tileset.h new file mode 100644 index 0000000..7ef4346 --- /dev/null +++ b/src/include/data/bg_logoscreen_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_LOGOSCREEN_TILESET_H +#define BG_LOGOSCREEN_TILESET_H + +// Tileset: bg_logoscreen_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_logoscreen_tileset) +extern const struct tileset_t bg_logoscreen_tileset; + +#endif diff --git a/src/include/data/bg_outside.h b/src/include/data/bg_outside.h new file mode 100644 index 0000000..1b1b677 --- /dev/null +++ b/src/include/data/bg_outside.h @@ -0,0 +1,11 @@ +#ifndef BG_OUTSIDE_H +#define BG_OUTSIDE_H + +// Background: outside + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_outside) +extern const struct background_t bg_outside; + +#endif diff --git a/src/include/data/bg_outside_cgb_tileset.h b/src/include/data/bg_outside_cgb_tileset.h new file mode 100644 index 0000000..bc58347 --- /dev/null +++ b/src/include/data/bg_outside_cgb_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_OUTSIDE_CGB_TILESET_H +#define BG_OUTSIDE_CGB_TILESET_H + +// Tileset: bg_outside_cgb_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_outside_cgb_tileset) +extern const struct tileset_t bg_outside_cgb_tileset; + +#endif diff --git a/src/include/data/bg_outside_tilemap.h b/src/include/data/bg_outside_tilemap.h new file mode 100644 index 0000000..f2494a3 --- /dev/null +++ b/src/include/data/bg_outside_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_OUTSIDE_TILEMAP_H +#define BG_OUTSIDE_TILEMAP_H + +// Tilemap bg_outside_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_outside_tilemap) +extern const unsigned char bg_outside_tilemap[]; + +#endif diff --git a/src/include/data/bg_outside_tilemap_attr.h b/src/include/data/bg_outside_tilemap_attr.h new file mode 100644 index 0000000..18233a3 --- /dev/null +++ b/src/include/data/bg_outside_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_OUTSIDE_TILEMAP_ATTR_H +#define BG_OUTSIDE_TILEMAP_ATTR_H + +// Tilemap Attr bg_outside_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_outside_tilemap_attr) +extern const unsigned char bg_outside_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_outside_tileset.h b/src/include/data/bg_outside_tileset.h new file mode 100644 index 0000000..707d4ce --- /dev/null +++ b/src/include/data/bg_outside_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_OUTSIDE_TILESET_H +#define BG_OUTSIDE_TILESET_H + +// Tileset: bg_outside_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_outside_tileset) +extern const struct tileset_t bg_outside_tileset; + +#endif diff --git a/src/include/data/bg_overworld_test_1.h b/src/include/data/bg_overworld_test_1.h new file mode 100644 index 0000000..19a47b1 --- /dev/null +++ b/src/include/data/bg_overworld_test_1.h @@ -0,0 +1,11 @@ +#ifndef BG_OVERWORLD_TEST_1_H +#define BG_OVERWORLD_TEST_1_H + +// Background: Overworld_-_Test_1 + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_overworld_test_1) +extern const struct background_t bg_overworld_test_1; + +#endif diff --git a/src/include/data/bg_overworld_test_1_tilemap.h b/src/include/data/bg_overworld_test_1_tilemap.h new file mode 100644 index 0000000..b56f7e4 --- /dev/null +++ b/src/include/data/bg_overworld_test_1_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_OVERWORLD_TEST_1_TILEMAP_H +#define BG_OVERWORLD_TEST_1_TILEMAP_H + +// Tilemap bg_overworld_test_1_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_overworld_test_1_tilemap) +extern const unsigned char bg_overworld_test_1_tilemap[]; + +#endif diff --git a/src/include/data/bg_overworld_test_1_tilemap_attr.h b/src/include/data/bg_overworld_test_1_tilemap_attr.h new file mode 100644 index 0000000..c5b2127 --- /dev/null +++ b/src/include/data/bg_overworld_test_1_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_OVERWORLD_TEST_1_TILEMAP_ATTR_H +#define BG_OVERWORLD_TEST_1_TILEMAP_ATTR_H + +// Tilemap Attr bg_overworld_test_1_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_overworld_test_1_tilemap_attr) +extern const unsigned char bg_overworld_test_1_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_overworld_test_1_tileset.h b/src/include/data/bg_overworld_test_1_tileset.h new file mode 100644 index 0000000..03ad84a --- /dev/null +++ b/src/include/data/bg_overworld_test_1_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_OVERWORLD_TEST_1_TILESET_H +#define BG_OVERWORLD_TEST_1_TILESET_H + +// Tileset: bg_overworld_test_1_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_overworld_test_1_tileset) +extern const struct tileset_t bg_overworld_test_1_tileset; + +#endif diff --git a/src/include/data/bg_questscreen.h b/src/include/data/bg_questscreen.h new file mode 100644 index 0000000..b17d275 --- /dev/null +++ b/src/include/data/bg_questscreen.h @@ -0,0 +1,11 @@ +#ifndef BG_QUESTSCREEN_H +#define BG_QUESTSCREEN_H + +// Background: QuestScreen + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_questscreen) +extern const struct background_t bg_questscreen; + +#endif diff --git a/src/include/data/bg_questscreen_tilemap.h b/src/include/data/bg_questscreen_tilemap.h new file mode 100644 index 0000000..b44ad11 --- /dev/null +++ b/src/include/data/bg_questscreen_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_QUESTSCREEN_TILEMAP_H +#define BG_QUESTSCREEN_TILEMAP_H + +// Tilemap bg_questscreen_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_questscreen_tilemap) +extern const unsigned char bg_questscreen_tilemap[]; + +#endif diff --git a/src/include/data/bg_questscreen_tilemap_attr.h b/src/include/data/bg_questscreen_tilemap_attr.h new file mode 100644 index 0000000..37aa77f --- /dev/null +++ b/src/include/data/bg_questscreen_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_QUESTSCREEN_TILEMAP_ATTR_H +#define BG_QUESTSCREEN_TILEMAP_ATTR_H + +// Tilemap Attr bg_questscreen_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_questscreen_tilemap_attr) +extern const unsigned char bg_questscreen_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_questscreen_tileset.h b/src/include/data/bg_questscreen_tileset.h new file mode 100644 index 0000000..c878c69 --- /dev/null +++ b/src/include/data/bg_questscreen_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_QUESTSCREEN_TILESET_H +#define BG_QUESTSCREEN_TILESET_H + +// Tileset: bg_questscreen_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_questscreen_tileset) +extern const struct tileset_t bg_questscreen_tileset; + +#endif diff --git a/src/include/data/bg_slighhousef2.h b/src/include/data/bg_slighhousef2.h new file mode 100644 index 0000000..73734d4 --- /dev/null +++ b/src/include/data/bg_slighhousef2.h @@ -0,0 +1,11 @@ +#ifndef BG_SLIGHHOUSEF2_H +#define BG_SLIGHHOUSEF2_H + +// Background: SlighHousef2 + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_slighhousef2) +extern const struct background_t bg_slighhousef2; + +#endif diff --git a/src/include/data/bg_slighhousef2_tilemap.h b/src/include/data/bg_slighhousef2_tilemap.h new file mode 100644 index 0000000..2c07817 --- /dev/null +++ b/src/include/data/bg_slighhousef2_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_SLIGHHOUSEF2_TILEMAP_H +#define BG_SLIGHHOUSEF2_TILEMAP_H + +// Tilemap bg_slighhousef2_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_slighhousef2_tilemap) +extern const unsigned char bg_slighhousef2_tilemap[]; + +#endif diff --git a/src/include/data/bg_slighhousef2_tilemap_attr.h b/src/include/data/bg_slighhousef2_tilemap_attr.h new file mode 100644 index 0000000..1e5eaad --- /dev/null +++ b/src/include/data/bg_slighhousef2_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_SLIGHHOUSEF2_TILEMAP_ATTR_H +#define BG_SLIGHHOUSEF2_TILEMAP_ATTR_H + +// Tilemap Attr bg_slighhousef2_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_slighhousef2_tilemap_attr) +extern const unsigned char bg_slighhousef2_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_slighhousef2_tileset.h b/src/include/data/bg_slighhousef2_tileset.h new file mode 100644 index 0000000..25f7e17 --- /dev/null +++ b/src/include/data/bg_slighhousef2_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_SLIGHHOUSEF2_TILESET_H +#define BG_SLIGHHOUSEF2_TILESET_H + +// Tileset: bg_slighhousef2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_slighhousef2_tileset) +extern const struct tileset_t bg_slighhousef2_tileset; + +#endif diff --git a/src/include/data/bg_titlescreen.h b/src/include/data/bg_titlescreen.h new file mode 100644 index 0000000..0792ebd --- /dev/null +++ b/src/include/data/bg_titlescreen.h @@ -0,0 +1,11 @@ +#ifndef BG_TITLESCREEN_H +#define BG_TITLESCREEN_H + +// Background: titlescreen + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_titlescreen) +extern const struct background_t bg_titlescreen; + +#endif diff --git a/src/include/data/bg_titlescreen_tilemap.h b/src/include/data/bg_titlescreen_tilemap.h new file mode 100644 index 0000000..bf24487 --- /dev/null +++ b/src/include/data/bg_titlescreen_tilemap.h @@ -0,0 +1,11 @@ +#ifndef BG_TITLESCREEN_TILEMAP_H +#define BG_TITLESCREEN_TILEMAP_H + +// Tilemap bg_titlescreen_tilemap + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_titlescreen_tilemap) +extern const unsigned char bg_titlescreen_tilemap[]; + +#endif diff --git a/src/include/data/bg_titlescreen_tilemap_attr.h b/src/include/data/bg_titlescreen_tilemap_attr.h new file mode 100644 index 0000000..70b06b6 --- /dev/null +++ b/src/include/data/bg_titlescreen_tilemap_attr.h @@ -0,0 +1,11 @@ +#ifndef BG_TITLESCREEN_TILEMAP_ATTR_H +#define BG_TITLESCREEN_TILEMAP_ATTR_H + +// Tilemap Attr bg_titlescreen_tilemap_attr + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_titlescreen_tilemap_attr) +extern const unsigned char bg_titlescreen_tilemap_attr[]; + +#endif diff --git a/src/include/data/bg_titlescreen_tileset.h b/src/include/data/bg_titlescreen_tileset.h new file mode 100644 index 0000000..aaacb2c --- /dev/null +++ b/src/include/data/bg_titlescreen_tileset.h @@ -0,0 +1,11 @@ +#ifndef BG_TITLESCREEN_TILESET_H +#define BG_TITLESCREEN_TILESET_H + +// Tileset: bg_titlescreen_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(bg_titlescreen_tileset) +extern const struct tileset_t bg_titlescreen_tileset; + +#endif diff --git a/src/include/data/border.h b/src/include/data/border.h new file mode 100644 index 0000000..9dd6543 --- /dev/null +++ b/src/include/data/border.h @@ -0,0 +1,16 @@ +#ifndef __BORDER_H_INCLUDE +#define __BORDER_H_INCLUDE + +BANKREF_EXTERN(SGB_border_chr) +BANKREF_EXTERN(SGB_border_map) +BANKREF_EXTERN(SGB_border_pal) + +SIZEREF_EXTERN(SGB_border_chr) +SIZEREF_EXTERN(SGB_border_map) +SIZEREF_EXTERN(SGB_border_pal) + +extern const unsigned char SGB_border_chr[]; +extern const unsigned char SGB_border_map[]; +extern const unsigned char SGB_border_pal[]; + +#endif \ No newline at end of file diff --git a/src/include/data/cursor_image.h b/src/include/data/cursor_image.h new file mode 100644 index 0000000..e5dbd73 --- /dev/null +++ b/src/include/data/cursor_image.h @@ -0,0 +1,11 @@ +#ifndef CURSOR_IMAGE_H +#define CURSOR_IMAGE_H + +// Cursor + +#include "gbs_types.h" + +BANKREF_EXTERN(cursor_image) +extern const unsigned char cursor_image[]; + +#endif diff --git a/src/include/data/data_bootstrap.h b/src/include/data/data_bootstrap.h new file mode 100644 index 0000000..19fb6ce --- /dev/null +++ b/src/include/data/data_bootstrap.h @@ -0,0 +1,18 @@ +#ifndef DATA_PTRS_H +#define DATA_PTRS_H + +#include "bankdata.h" +#include "gbs_types.h" + +extern const INT16 start_scene_x; +extern const INT16 start_scene_y; +extern const direction_e start_scene_dir; +extern const far_ptr_t start_scene; +extern const UBYTE start_player_move_speed; +extern const UBYTE start_player_anim_tick; + +extern const far_ptr_t ui_fonts[]; + +void bootstrap_init(void) BANKED; + +#endif diff --git a/src/include/data/emote_love.h b/src/include/data/emote_love.h new file mode 100644 index 0000000..fc5f7c9 --- /dev/null +++ b/src/include/data/emote_love.h @@ -0,0 +1,11 @@ +#ifndef EMOTE_LOVE_H +#define EMOTE_LOVE_H + +// Emote love + +#include "gbs_types.h" + +BANKREF_EXTERN(emote_love) +extern const unsigned char emote_love[]; + +#endif diff --git a/src/include/data/font_gbs_mono.h b/src/include/data/font_gbs_mono.h new file mode 100644 index 0000000..4590ec2 --- /dev/null +++ b/src/include/data/font_gbs_mono.h @@ -0,0 +1,11 @@ +#ifndef FONT_GBS_MONO_H +#define FONT_GBS_MONO_H + +// Font gbs-mono.png + +#include "gbs_types.h" + +BANKREF_EXTERN(font_gbs_mono) +extern const unsigned char font_gbs_mono[]; + +#endif diff --git a/src/include/data/frame_image.h b/src/include/data/frame_image.h new file mode 100644 index 0000000..6b5afe6 --- /dev/null +++ b/src/include/data/frame_image.h @@ -0,0 +1,11 @@ +#ifndef FRAME_IMAGE_H +#define FRAME_IMAGE_H + +// Frame + +#include "gbs_types.h" + +BANKREF_EXTERN(frame_image) +extern const unsigned char frame_image[]; + +#endif diff --git a/src/include/data/game_globals.h b/src/include/data/game_globals.h new file mode 100644 index 0000000..b04747f --- /dev/null +++ b/src/include/data/game_globals.h @@ -0,0 +1,17 @@ +#ifndef GAME_GLOBALS_H +#define GAME_GLOBALS_H + +#define VAR_QUEST1 0 +#define VAR_QUEST2_0 1 +#define VAR_QUEST3_0 2 +#define VAR_QUEST4_0 3 +#define VAR_QUEST5 4 +#define VAR_EEVEECHAT_0 5 +#define VAR_KUMACHAT 6 +#define VAR_KUMATEXTFIX 7 +#define VAR_S0A0_LOCAL_0 8 +#define VAR_S0T4_POSTKEYGET 9 +#define VAR_S3T2_STARTTEXT 10 +#define MAX_GLOBAL_VARS 11 + +#endif diff --git a/src/include/data/game_globals.i b/src/include/data/game_globals.i new file mode 100644 index 0000000..3c21cc4 --- /dev/null +++ b/src/include/data/game_globals.i @@ -0,0 +1,13 @@ +VAR_QUEST1 = 0 +VAR_QUEST2_0 = 1 +VAR_QUEST3_0 = 2 +VAR_QUEST4_0 = 3 +VAR_QUEST5 = 4 +VAR_EEVEECHAT_0 = 5 +VAR_KUMACHAT = 6 +VAR_KUMATEXTFIX = 7 +VAR_S0A0_LOCAL_0 = 8 +VAR_S0T4_POSTKEYGET = 9 +VAR_S3T2_STARTTEXT = 10 +MAX_GLOBAL_VARS = 11 +STATE_DEFAULT = 0 diff --git a/src/include/data/music_data.h b/src/include/data/music_data.h new file mode 100644 index 0000000..2ee2661 --- /dev/null +++ b/src/include/data/music_data.h @@ -0,0 +1,13 @@ +#ifndef MUSIC_DATA_H +#define MUSIC_DATA_H + +extern const void __bank_song_rulz_lightmood_Data; +extern const void song_rulz_lightmood_Data; +extern const void __bank_song_rulz_outside_0_Data; +extern const void song_rulz_outside_0_Data; +extern const void __bank_song_rulz_spaceemergency_0_Data; +extern const void song_rulz_spaceemergency_0_Data; +extern const void __bank_song_rulz_undergroundcave_Data; +extern const void song_rulz_undergroundcave_Data; + +#endif diff --git a/src/include/data/palette_0.h b/src/include/data/palette_0.h new file mode 100644 index 0000000..f14831d --- /dev/null +++ b/src/include/data/palette_0.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_0_H +#define PALETTE_0_H + +// Palette: 0 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_0) +extern const struct palette_t palette_0; + +#endif diff --git a/src/include/data/palette_1.h b/src/include/data/palette_1.h new file mode 100644 index 0000000..142d3ff --- /dev/null +++ b/src/include/data/palette_1.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_1_H +#define PALETTE_1_H + +// Palette: 1 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_1) +extern const struct palette_t palette_1; + +#endif diff --git a/src/include/data/palette_10.h b/src/include/data/palette_10.h new file mode 100644 index 0000000..11eaae3 --- /dev/null +++ b/src/include/data/palette_10.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_10_H +#define PALETTE_10_H + +// Palette: 10 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_10) +extern const struct palette_t palette_10; + +#endif diff --git a/src/include/data/palette_11.h b/src/include/data/palette_11.h new file mode 100644 index 0000000..46c44ea --- /dev/null +++ b/src/include/data/palette_11.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_11_H +#define PALETTE_11_H + +// Palette: 11 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_11) +extern const struct palette_t palette_11; + +#endif diff --git a/src/include/data/palette_12.h b/src/include/data/palette_12.h new file mode 100644 index 0000000..1f5bad1 --- /dev/null +++ b/src/include/data/palette_12.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_12_H +#define PALETTE_12_H + +// Palette: 12 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_12) +extern const struct palette_t palette_12; + +#endif diff --git a/src/include/data/palette_13.h b/src/include/data/palette_13.h new file mode 100644 index 0000000..30090d0 --- /dev/null +++ b/src/include/data/palette_13.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_13_H +#define PALETTE_13_H + +// Palette: 13 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_13) +extern const struct palette_t palette_13; + +#endif diff --git a/src/include/data/palette_2.h b/src/include/data/palette_2.h new file mode 100644 index 0000000..99b00a6 --- /dev/null +++ b/src/include/data/palette_2.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_2_H +#define PALETTE_2_H + +// Palette: 2 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_2) +extern const struct palette_t palette_2; + +#endif diff --git a/src/include/data/palette_3.h b/src/include/data/palette_3.h new file mode 100644 index 0000000..38dceb0 --- /dev/null +++ b/src/include/data/palette_3.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_3_H +#define PALETTE_3_H + +// Palette: 3 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_3) +extern const struct palette_t palette_3; + +#endif diff --git a/src/include/data/palette_4.h b/src/include/data/palette_4.h new file mode 100644 index 0000000..92ce44a --- /dev/null +++ b/src/include/data/palette_4.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_4_H +#define PALETTE_4_H + +// Palette: 4 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_4) +extern const struct palette_t palette_4; + +#endif diff --git a/src/include/data/palette_5.h b/src/include/data/palette_5.h new file mode 100644 index 0000000..81b5ed7 --- /dev/null +++ b/src/include/data/palette_5.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_5_H +#define PALETTE_5_H + +// Palette: 5 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_5) +extern const struct palette_t palette_5; + +#endif diff --git a/src/include/data/palette_6.h b/src/include/data/palette_6.h new file mode 100644 index 0000000..0025d04 --- /dev/null +++ b/src/include/data/palette_6.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_6_H +#define PALETTE_6_H + +// Palette: 6 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_6) +extern const struct palette_t palette_6; + +#endif diff --git a/src/include/data/palette_7.h b/src/include/data/palette_7.h new file mode 100644 index 0000000..408ccde --- /dev/null +++ b/src/include/data/palette_7.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_7_H +#define PALETTE_7_H + +// Palette: 7 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_7) +extern const struct palette_t palette_7; + +#endif diff --git a/src/include/data/palette_8.h b/src/include/data/palette_8.h new file mode 100644 index 0000000..8df7dc7 --- /dev/null +++ b/src/include/data/palette_8.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_8_H +#define PALETTE_8_H + +// Palette: 8 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_8) +extern const struct palette_t palette_8; + +#endif diff --git a/src/include/data/palette_9.h b/src/include/data/palette_9.h new file mode 100644 index 0000000..41ec8b1 --- /dev/null +++ b/src/include/data/palette_9.h @@ -0,0 +1,11 @@ +#ifndef PALETTE_9_H +#define PALETTE_9_H + +// Palette: 9 + +#include "gbs_types.h" + +BANKREF_EXTERN(palette_9) +extern const struct palette_t palette_9; + +#endif diff --git a/src/include/data/scene_1.h b/src/include/data/scene_1.h new file mode 100644 index 0000000..d8d5f56 --- /dev/null +++ b/src/include/data/scene_1.h @@ -0,0 +1,11 @@ +#ifndef SCENE_1_H +#define SCENE_1_H + +// Scene: Overworld + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_1) +extern const struct scene_t scene_1; + +#endif diff --git a/src/include/data/scene_10.h b/src/include/data/scene_10.h new file mode 100644 index 0000000..cafa2da --- /dev/null +++ b/src/include/data/scene_10.h @@ -0,0 +1,11 @@ +#ifndef SCENE_10_H +#define SCENE_10_H + +// Scene: NPCJail + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_10) +extern const struct scene_t scene_10; + +#endif diff --git a/src/include/data/scene_10_collisions.h b/src/include/data/scene_10_collisions.h new file mode 100644 index 0000000..e39bb01 --- /dev/null +++ b/src/include/data/scene_10_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_10_COLLISIONS_H +#define SCENE_10_COLLISIONS_H + +// Scene: NPCJail +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_10_collisions) +extern const unsigned char scene_10_collisions[]; + +#endif diff --git a/src/include/data/scene_10_init.h b/src/include/data/scene_10_init.h new file mode 100644 index 0000000..c977318 --- /dev/null +++ b/src/include/data/scene_10_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_10_INIT_H +#define SCENE_10_INIT_H + +// Script scene_10_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_10_init) +extern const unsigned char scene_10_init[]; + +#endif diff --git a/src/include/data/scene_11.h b/src/include/data/scene_11.h new file mode 100644 index 0000000..1117143 --- /dev/null +++ b/src/include/data/scene_11.h @@ -0,0 +1,11 @@ +#ifndef SCENE_11_H +#define SCENE_11_H + +// Scene: SlighHousef2 + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_11) +extern const struct scene_t scene_11; + +#endif diff --git a/src/include/data/scene_11_collisions.h b/src/include/data/scene_11_collisions.h new file mode 100644 index 0000000..0ae487b --- /dev/null +++ b/src/include/data/scene_11_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_11_COLLISIONS_H +#define SCENE_11_COLLISIONS_H + +// Scene: SlighHousef2 +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_11_collisions) +extern const unsigned char scene_11_collisions[]; + +#endif diff --git a/src/include/data/scene_11_init.h b/src/include/data/scene_11_init.h new file mode 100644 index 0000000..9c572ac --- /dev/null +++ b/src/include/data/scene_11_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_11_INIT_H +#define SCENE_11_INIT_H + +// Script scene_11_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_11_init) +extern const unsigned char scene_11_init[]; + +#endif diff --git a/src/include/data/scene_11_triggers.h b/src/include/data/scene_11_triggers.h new file mode 100644 index 0000000..08aa111 --- /dev/null +++ b/src/include/data/scene_11_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_11_TRIGGERS_H +#define SCENE_11_TRIGGERS_H + +// Scene: SlighHousef2 +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_11_triggers) +extern const struct trigger_t scene_11_triggers[]; + +#endif diff --git a/src/include/data/scene_12.h b/src/include/data/scene_12.h new file mode 100644 index 0000000..7f37549 --- /dev/null +++ b/src/include/data/scene_12.h @@ -0,0 +1,11 @@ +#ifndef SCENE_12_H +#define SCENE_12_H + +// Scene: NyaaLogo + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_12) +extern const struct scene_t scene_12; + +#endif diff --git a/src/include/data/scene_12_collisions.h b/src/include/data/scene_12_collisions.h new file mode 100644 index 0000000..3cd3c7e --- /dev/null +++ b/src/include/data/scene_12_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_12_COLLISIONS_H +#define SCENE_12_COLLISIONS_H + +// Scene: NyaaLogo +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_12_collisions) +extern const unsigned char scene_12_collisions[]; + +#endif diff --git a/src/include/data/scene_12_init.h b/src/include/data/scene_12_init.h new file mode 100644 index 0000000..e6f7664 --- /dev/null +++ b/src/include/data/scene_12_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_12_INIT_H +#define SCENE_12_INIT_H + +// Script scene_12_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_12_init) +extern const unsigned char scene_12_init[]; + +#endif diff --git a/src/include/data/scene_13.h b/src/include/data/scene_13.h new file mode 100644 index 0000000..92860af --- /dev/null +++ b/src/include/data/scene_13.h @@ -0,0 +1,11 @@ +#ifndef SCENE_13_H +#define SCENE_13_H + +// Scene: StartScreen + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_13) +extern const struct scene_t scene_13; + +#endif diff --git a/src/include/data/scene_13_collisions.h b/src/include/data/scene_13_collisions.h new file mode 100644 index 0000000..703111f --- /dev/null +++ b/src/include/data/scene_13_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_13_COLLISIONS_H +#define SCENE_13_COLLISIONS_H + +// Scene: StartScreen +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_13_collisions) +extern const unsigned char scene_13_collisions[]; + +#endif diff --git a/src/include/data/scene_13_init.h b/src/include/data/scene_13_init.h new file mode 100644 index 0000000..17ee80e --- /dev/null +++ b/src/include/data/scene_13_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_13_INIT_H +#define SCENE_13_INIT_H + +// Script scene_13_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_13_init) +extern const unsigned char scene_13_init[]; + +#endif diff --git a/src/include/data/scene_14.h b/src/include/data/scene_14.h new file mode 100644 index 0000000..5e15f82 --- /dev/null +++ b/src/include/data/scene_14.h @@ -0,0 +1,11 @@ +#ifndef SCENE_14_H +#define SCENE_14_H + +// Scene: MidnightClubHousef2 + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_14) +extern const struct scene_t scene_14; + +#endif diff --git a/src/include/data/scene_14_actors.h b/src/include/data/scene_14_actors.h new file mode 100644 index 0000000..ee34d7f --- /dev/null +++ b/src/include/data/scene_14_actors.h @@ -0,0 +1,12 @@ +#ifndef SCENE_14_ACTORS_H +#define SCENE_14_ACTORS_H + +// Scene: MidnightClubHousef2 +// Actors + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_14_actors) +extern const struct actor_t scene_14_actors[]; + +#endif diff --git a/src/include/data/scene_14_collisions.h b/src/include/data/scene_14_collisions.h new file mode 100644 index 0000000..acf7edd --- /dev/null +++ b/src/include/data/scene_14_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_14_COLLISIONS_H +#define SCENE_14_COLLISIONS_H + +// Scene: MidnightClubHousef2 +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_14_collisions) +extern const unsigned char scene_14_collisions[]; + +#endif diff --git a/src/include/data/scene_14_init.h b/src/include/data/scene_14_init.h new file mode 100644 index 0000000..537894c --- /dev/null +++ b/src/include/data/scene_14_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_14_INIT_H +#define SCENE_14_INIT_H + +// Script scene_14_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_14_init) +extern const unsigned char scene_14_init[]; + +#endif diff --git a/src/include/data/scene_14_sprites.h b/src/include/data/scene_14_sprites.h new file mode 100644 index 0000000..67f06e8 --- /dev/null +++ b/src/include/data/scene_14_sprites.h @@ -0,0 +1,12 @@ +#ifndef SCENE_14_SPRITES_H +#define SCENE_14_SPRITES_H + +// Scene: MidnightClubHousef2 +// Sprites + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_14_sprites) +extern const far_ptr_t scene_14_sprites[]; + +#endif diff --git a/src/include/data/scene_14_triggers.h b/src/include/data/scene_14_triggers.h new file mode 100644 index 0000000..05205fd --- /dev/null +++ b/src/include/data/scene_14_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_14_TRIGGERS_H +#define SCENE_14_TRIGGERS_H + +// Scene: MidnightClubHousef2 +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_14_triggers) +extern const struct trigger_t scene_14_triggers[]; + +#endif diff --git a/src/include/data/scene_15.h b/src/include/data/scene_15.h new file mode 100644 index 0000000..cb72a44 --- /dev/null +++ b/src/include/data/scene_15.h @@ -0,0 +1,11 @@ +#ifndef SCENE_15_H +#define SCENE_15_H + +// Scene: Quest Menu + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_15) +extern const struct scene_t scene_15; + +#endif diff --git a/src/include/data/scene_15_actors.h b/src/include/data/scene_15_actors.h new file mode 100644 index 0000000..7e4b8f6 --- /dev/null +++ b/src/include/data/scene_15_actors.h @@ -0,0 +1,12 @@ +#ifndef SCENE_15_ACTORS_H +#define SCENE_15_ACTORS_H + +// Scene: Quest Menu +// Actors + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_15_actors) +extern const struct actor_t scene_15_actors[]; + +#endif diff --git a/src/include/data/scene_15_collisions.h b/src/include/data/scene_15_collisions.h new file mode 100644 index 0000000..2ed1c61 --- /dev/null +++ b/src/include/data/scene_15_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_15_COLLISIONS_H +#define SCENE_15_COLLISIONS_H + +// Scene: Quest Menu +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_15_collisions) +extern const unsigned char scene_15_collisions[]; + +#endif diff --git a/src/include/data/scene_15_init.h b/src/include/data/scene_15_init.h new file mode 100644 index 0000000..617eea2 --- /dev/null +++ b/src/include/data/scene_15_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_15_INIT_H +#define SCENE_15_INIT_H + +// Script scene_15_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_15_init) +extern const unsigned char scene_15_init[]; + +#endif diff --git a/src/include/data/scene_15_sprites.h b/src/include/data/scene_15_sprites.h new file mode 100644 index 0000000..d64ef6f --- /dev/null +++ b/src/include/data/scene_15_sprites.h @@ -0,0 +1,12 @@ +#ifndef SCENE_15_SPRITES_H +#define SCENE_15_SPRITES_H + +// Scene: Quest Menu +// Sprites + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_15_sprites) +extern const far_ptr_t scene_15_sprites[]; + +#endif diff --git a/src/include/data/scene_16.h b/src/include/data/scene_16.h new file mode 100644 index 0000000..74e7deb --- /dev/null +++ b/src/include/data/scene_16.h @@ -0,0 +1,11 @@ +#ifndef SCENE_16_H +#define SCENE_16_H + +// Scene: EndScreen + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_16) +extern const struct scene_t scene_16; + +#endif diff --git a/src/include/data/scene_16_collisions.h b/src/include/data/scene_16_collisions.h new file mode 100644 index 0000000..6b1bb74 --- /dev/null +++ b/src/include/data/scene_16_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_16_COLLISIONS_H +#define SCENE_16_COLLISIONS_H + +// Scene: EndScreen +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_16_collisions) +extern const unsigned char scene_16_collisions[]; + +#endif diff --git a/src/include/data/scene_16_init.h b/src/include/data/scene_16_init.h new file mode 100644 index 0000000..d44ad71 --- /dev/null +++ b/src/include/data/scene_16_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_16_INIT_H +#define SCENE_16_INIT_H + +// Script scene_16_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_16_init) +extern const unsigned char scene_16_init[]; + +#endif diff --git a/src/include/data/scene_17.h b/src/include/data/scene_17.h new file mode 100644 index 0000000..47d80a0 --- /dev/null +++ b/src/include/data/scene_17.h @@ -0,0 +1,11 @@ +#ifndef SCENE_17_H +#define SCENE_17_H + +// Scene: Field + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_17) +extern const struct scene_t scene_17; + +#endif diff --git a/src/include/data/scene_17_actors.h b/src/include/data/scene_17_actors.h new file mode 100644 index 0000000..f9f6050 --- /dev/null +++ b/src/include/data/scene_17_actors.h @@ -0,0 +1,12 @@ +#ifndef SCENE_17_ACTORS_H +#define SCENE_17_ACTORS_H + +// Scene: Field +// Actors + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_17_actors) +extern const struct actor_t scene_17_actors[]; + +#endif diff --git a/src/include/data/scene_17_collisions.h b/src/include/data/scene_17_collisions.h new file mode 100644 index 0000000..d125394 --- /dev/null +++ b/src/include/data/scene_17_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_17_COLLISIONS_H +#define SCENE_17_COLLISIONS_H + +// Scene: Field +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_17_collisions) +extern const unsigned char scene_17_collisions[]; + +#endif diff --git a/src/include/data/scene_17_init.h b/src/include/data/scene_17_init.h new file mode 100644 index 0000000..f588d71 --- /dev/null +++ b/src/include/data/scene_17_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_17_INIT_H +#define SCENE_17_INIT_H + +// Script scene_17_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_17_init) +extern const unsigned char scene_17_init[]; + +#endif diff --git a/src/include/data/scene_17_sprites.h b/src/include/data/scene_17_sprites.h new file mode 100644 index 0000000..e709711 --- /dev/null +++ b/src/include/data/scene_17_sprites.h @@ -0,0 +1,12 @@ +#ifndef SCENE_17_SPRITES_H +#define SCENE_17_SPRITES_H + +// Scene: Field +// Sprites + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_17_sprites) +extern const far_ptr_t scene_17_sprites[]; + +#endif diff --git a/src/include/data/scene_17_triggers.h b/src/include/data/scene_17_triggers.h new file mode 100644 index 0000000..4f3cd6a --- /dev/null +++ b/src/include/data/scene_17_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_17_TRIGGERS_H +#define SCENE_17_TRIGGERS_H + +// Scene: Field +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_17_triggers) +extern const struct trigger_t scene_17_triggers[]; + +#endif diff --git a/src/include/data/scene_1_actors.h b/src/include/data/scene_1_actors.h new file mode 100644 index 0000000..dd406eb --- /dev/null +++ b/src/include/data/scene_1_actors.h @@ -0,0 +1,12 @@ +#ifndef SCENE_1_ACTORS_H +#define SCENE_1_ACTORS_H + +// Scene: Overworld +// Actors + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_1_actors) +extern const struct actor_t scene_1_actors[]; + +#endif diff --git a/src/include/data/scene_1_collisions.h b/src/include/data/scene_1_collisions.h new file mode 100644 index 0000000..8bf88e8 --- /dev/null +++ b/src/include/data/scene_1_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_1_COLLISIONS_H +#define SCENE_1_COLLISIONS_H + +// Scene: Overworld +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_1_collisions) +extern const unsigned char scene_1_collisions[]; + +#endif diff --git a/src/include/data/scene_1_init.h b/src/include/data/scene_1_init.h new file mode 100644 index 0000000..d16b9be --- /dev/null +++ b/src/include/data/scene_1_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_1_INIT_H +#define SCENE_1_INIT_H + +// Script scene_1_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_1_init) +extern const unsigned char scene_1_init[]; + +#endif diff --git a/src/include/data/scene_1_sprites.h b/src/include/data/scene_1_sprites.h new file mode 100644 index 0000000..19a0606 --- /dev/null +++ b/src/include/data/scene_1_sprites.h @@ -0,0 +1,12 @@ +#ifndef SCENE_1_SPRITES_H +#define SCENE_1_SPRITES_H + +// Scene: Overworld +// Sprites + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_1_sprites) +extern const far_ptr_t scene_1_sprites[]; + +#endif diff --git a/src/include/data/scene_1_triggers.h b/src/include/data/scene_1_triggers.h new file mode 100644 index 0000000..49d88c3 --- /dev/null +++ b/src/include/data/scene_1_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_1_TRIGGERS_H +#define SCENE_1_TRIGGERS_H + +// Scene: Overworld +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_1_triggers) +extern const struct trigger_t scene_1_triggers[]; + +#endif diff --git a/src/include/data/scene_2.h b/src/include/data/scene_2.h new file mode 100644 index 0000000..17fbc3f --- /dev/null +++ b/src/include/data/scene_2.h @@ -0,0 +1,11 @@ +#ifndef SCENE_2_H +#define SCENE_2_H + +// Scene: fate6House + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_2) +extern const struct scene_t scene_2; + +#endif diff --git a/src/include/data/scene_2_actors.h b/src/include/data/scene_2_actors.h new file mode 100644 index 0000000..21beb20 --- /dev/null +++ b/src/include/data/scene_2_actors.h @@ -0,0 +1,12 @@ +#ifndef SCENE_2_ACTORS_H +#define SCENE_2_ACTORS_H + +// Scene: fate6House +// Actors + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_2_actors) +extern const struct actor_t scene_2_actors[]; + +#endif diff --git a/src/include/data/scene_2_collisions.h b/src/include/data/scene_2_collisions.h new file mode 100644 index 0000000..0764a4d --- /dev/null +++ b/src/include/data/scene_2_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_2_COLLISIONS_H +#define SCENE_2_COLLISIONS_H + +// Scene: fate6House +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_2_collisions) +extern const unsigned char scene_2_collisions[]; + +#endif diff --git a/src/include/data/scene_2_init.h b/src/include/data/scene_2_init.h new file mode 100644 index 0000000..cdaf362 --- /dev/null +++ b/src/include/data/scene_2_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_2_INIT_H +#define SCENE_2_INIT_H + +// Script scene_2_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_2_init) +extern const unsigned char scene_2_init[]; + +#endif diff --git a/src/include/data/scene_2_sprites.h b/src/include/data/scene_2_sprites.h new file mode 100644 index 0000000..f6e3067 --- /dev/null +++ b/src/include/data/scene_2_sprites.h @@ -0,0 +1,12 @@ +#ifndef SCENE_2_SPRITES_H +#define SCENE_2_SPRITES_H + +// Scene: fate6House +// Sprites + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_2_sprites) +extern const far_ptr_t scene_2_sprites[]; + +#endif diff --git a/src/include/data/scene_2_triggers.h b/src/include/data/scene_2_triggers.h new file mode 100644 index 0000000..33e48a2 --- /dev/null +++ b/src/include/data/scene_2_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_2_TRIGGERS_H +#define SCENE_2_TRIGGERS_H + +// Scene: fate6House +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_2_triggers) +extern const struct trigger_t scene_2_triggers[]; + +#endif diff --git a/src/include/data/scene_3.h b/src/include/data/scene_3.h new file mode 100644 index 0000000..d1dcaa3 --- /dev/null +++ b/src/include/data/scene_3.h @@ -0,0 +1,11 @@ +#ifndef SCENE_3_H +#define SCENE_3_H + +// Scene: TappyHouse + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_3) +extern const struct scene_t scene_3; + +#endif diff --git a/src/include/data/scene_3_actors.h b/src/include/data/scene_3_actors.h new file mode 100644 index 0000000..6a4a97e --- /dev/null +++ b/src/include/data/scene_3_actors.h @@ -0,0 +1,12 @@ +#ifndef SCENE_3_ACTORS_H +#define SCENE_3_ACTORS_H + +// Scene: TappyHouse +// Actors + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_3_actors) +extern const struct actor_t scene_3_actors[]; + +#endif diff --git a/src/include/data/scene_3_collisions.h b/src/include/data/scene_3_collisions.h new file mode 100644 index 0000000..6953c60 --- /dev/null +++ b/src/include/data/scene_3_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_3_COLLISIONS_H +#define SCENE_3_COLLISIONS_H + +// Scene: TappyHouse +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_3_collisions) +extern const unsigned char scene_3_collisions[]; + +#endif diff --git a/src/include/data/scene_3_init.h b/src/include/data/scene_3_init.h new file mode 100644 index 0000000..629506c --- /dev/null +++ b/src/include/data/scene_3_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_3_INIT_H +#define SCENE_3_INIT_H + +// Script scene_3_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_3_init) +extern const unsigned char scene_3_init[]; + +#endif diff --git a/src/include/data/scene_3_sprites.h b/src/include/data/scene_3_sprites.h new file mode 100644 index 0000000..f4335ce --- /dev/null +++ b/src/include/data/scene_3_sprites.h @@ -0,0 +1,12 @@ +#ifndef SCENE_3_SPRITES_H +#define SCENE_3_SPRITES_H + +// Scene: TappyHouse +// Sprites + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_3_sprites) +extern const far_ptr_t scene_3_sprites[]; + +#endif diff --git a/src/include/data/scene_3_triggers.h b/src/include/data/scene_3_triggers.h new file mode 100644 index 0000000..42b95c1 --- /dev/null +++ b/src/include/data/scene_3_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_3_TRIGGERS_H +#define SCENE_3_TRIGGERS_H + +// Scene: TappyHouse +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_3_triggers) +extern const struct trigger_t scene_3_triggers[]; + +#endif diff --git a/src/include/data/scene_4.h b/src/include/data/scene_4.h new file mode 100644 index 0000000..dbf4d73 --- /dev/null +++ b/src/include/data/scene_4.h @@ -0,0 +1,11 @@ +#ifndef SCENE_4_H +#define SCENE_4_H + +// Scene: SlighsHouse + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_4) +extern const struct scene_t scene_4; + +#endif diff --git a/src/include/data/scene_4_collisions.h b/src/include/data/scene_4_collisions.h new file mode 100644 index 0000000..936a273 --- /dev/null +++ b/src/include/data/scene_4_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_4_COLLISIONS_H +#define SCENE_4_COLLISIONS_H + +// Scene: SlighsHouse +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_4_collisions) +extern const unsigned char scene_4_collisions[]; + +#endif diff --git a/src/include/data/scene_4_init.h b/src/include/data/scene_4_init.h new file mode 100644 index 0000000..b8db342 --- /dev/null +++ b/src/include/data/scene_4_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_4_INIT_H +#define SCENE_4_INIT_H + +// Script scene_4_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_4_init) +extern const unsigned char scene_4_init[]; + +#endif diff --git a/src/include/data/scene_4_triggers.h b/src/include/data/scene_4_triggers.h new file mode 100644 index 0000000..0c48fb3 --- /dev/null +++ b/src/include/data/scene_4_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_4_TRIGGERS_H +#define SCENE_4_TRIGGERS_H + +// Scene: SlighsHouse +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_4_triggers) +extern const struct trigger_t scene_4_triggers[]; + +#endif diff --git a/src/include/data/scene_5.h b/src/include/data/scene_5.h new file mode 100644 index 0000000..05359ad --- /dev/null +++ b/src/include/data/scene_5.h @@ -0,0 +1,11 @@ +#ifndef SCENE_5_H +#define SCENE_5_H + +// Scene: Basement + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_5) +extern const struct scene_t scene_5; + +#endif diff --git a/src/include/data/scene_5_actors.h b/src/include/data/scene_5_actors.h new file mode 100644 index 0000000..0099836 --- /dev/null +++ b/src/include/data/scene_5_actors.h @@ -0,0 +1,12 @@ +#ifndef SCENE_5_ACTORS_H +#define SCENE_5_ACTORS_H + +// Scene: Basement +// Actors + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_5_actors) +extern const struct actor_t scene_5_actors[]; + +#endif diff --git a/src/include/data/scene_5_collisions.h b/src/include/data/scene_5_collisions.h new file mode 100644 index 0000000..9dfc214 --- /dev/null +++ b/src/include/data/scene_5_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_5_COLLISIONS_H +#define SCENE_5_COLLISIONS_H + +// Scene: Basement +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_5_collisions) +extern const unsigned char scene_5_collisions[]; + +#endif diff --git a/src/include/data/scene_5_init.h b/src/include/data/scene_5_init.h new file mode 100644 index 0000000..05f53ff --- /dev/null +++ b/src/include/data/scene_5_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_5_INIT_H +#define SCENE_5_INIT_H + +// Script scene_5_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_5_init) +extern const unsigned char scene_5_init[]; + +#endif diff --git a/src/include/data/scene_5_sprites.h b/src/include/data/scene_5_sprites.h new file mode 100644 index 0000000..0385e6b --- /dev/null +++ b/src/include/data/scene_5_sprites.h @@ -0,0 +1,12 @@ +#ifndef SCENE_5_SPRITES_H +#define SCENE_5_SPRITES_H + +// Scene: Basement +// Sprites + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_5_sprites) +extern const far_ptr_t scene_5_sprites[]; + +#endif diff --git a/src/include/data/scene_5_triggers.h b/src/include/data/scene_5_triggers.h new file mode 100644 index 0000000..08b2a8f --- /dev/null +++ b/src/include/data/scene_5_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_5_TRIGGERS_H +#define SCENE_5_TRIGGERS_H + +// Scene: Basement +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_5_triggers) +extern const struct trigger_t scene_5_triggers[]; + +#endif diff --git a/src/include/data/scene_6.h b/src/include/data/scene_6.h new file mode 100644 index 0000000..ebe34bd --- /dev/null +++ b/src/include/data/scene_6.h @@ -0,0 +1,11 @@ +#ifndef SCENE_6_H +#define SCENE_6_H + +// Scene: MidnightLibrary + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_6) +extern const struct scene_t scene_6; + +#endif diff --git a/src/include/data/scene_6_actors.h b/src/include/data/scene_6_actors.h new file mode 100644 index 0000000..89ac997 --- /dev/null +++ b/src/include/data/scene_6_actors.h @@ -0,0 +1,12 @@ +#ifndef SCENE_6_ACTORS_H +#define SCENE_6_ACTORS_H + +// Scene: MidnightLibrary +// Actors + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_6_actors) +extern const struct actor_t scene_6_actors[]; + +#endif diff --git a/src/include/data/scene_6_collisions.h b/src/include/data/scene_6_collisions.h new file mode 100644 index 0000000..1cc94cb --- /dev/null +++ b/src/include/data/scene_6_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_6_COLLISIONS_H +#define SCENE_6_COLLISIONS_H + +// Scene: MidnightLibrary +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_6_collisions) +extern const unsigned char scene_6_collisions[]; + +#endif diff --git a/src/include/data/scene_6_init.h b/src/include/data/scene_6_init.h new file mode 100644 index 0000000..847b491 --- /dev/null +++ b/src/include/data/scene_6_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_6_INIT_H +#define SCENE_6_INIT_H + +// Script scene_6_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_6_init) +extern const unsigned char scene_6_init[]; + +#endif diff --git a/src/include/data/scene_6_sprites.h b/src/include/data/scene_6_sprites.h new file mode 100644 index 0000000..6e3299b --- /dev/null +++ b/src/include/data/scene_6_sprites.h @@ -0,0 +1,12 @@ +#ifndef SCENE_6_SPRITES_H +#define SCENE_6_SPRITES_H + +// Scene: MidnightLibrary +// Sprites + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_6_sprites) +extern const far_ptr_t scene_6_sprites[]; + +#endif diff --git a/src/include/data/scene_6_triggers.h b/src/include/data/scene_6_triggers.h new file mode 100644 index 0000000..1725168 --- /dev/null +++ b/src/include/data/scene_6_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_6_TRIGGERS_H +#define SCENE_6_TRIGGERS_H + +// Scene: MidnightLibrary +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_6_triggers) +extern const struct trigger_t scene_6_triggers[]; + +#endif diff --git a/src/include/data/scene_7.h b/src/include/data/scene_7.h new file mode 100644 index 0000000..0a57bfa --- /dev/null +++ b/src/include/data/scene_7.h @@ -0,0 +1,11 @@ +#ifndef SCENE_7_H +#define SCENE_7_H + +// Scene: melonHouse + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_7) +extern const struct scene_t scene_7; + +#endif diff --git a/src/include/data/scene_7_actors.h b/src/include/data/scene_7_actors.h new file mode 100644 index 0000000..6fc0d0b --- /dev/null +++ b/src/include/data/scene_7_actors.h @@ -0,0 +1,12 @@ +#ifndef SCENE_7_ACTORS_H +#define SCENE_7_ACTORS_H + +// Scene: melonHouse +// Actors + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_7_actors) +extern const struct actor_t scene_7_actors[]; + +#endif diff --git a/src/include/data/scene_7_collisions.h b/src/include/data/scene_7_collisions.h new file mode 100644 index 0000000..fff7e61 --- /dev/null +++ b/src/include/data/scene_7_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_7_COLLISIONS_H +#define SCENE_7_COLLISIONS_H + +// Scene: melonHouse +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_7_collisions) +extern const unsigned char scene_7_collisions[]; + +#endif diff --git a/src/include/data/scene_7_init.h b/src/include/data/scene_7_init.h new file mode 100644 index 0000000..dd29cc4 --- /dev/null +++ b/src/include/data/scene_7_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_7_INIT_H +#define SCENE_7_INIT_H + +// Script scene_7_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_7_init) +extern const unsigned char scene_7_init[]; + +#endif diff --git a/src/include/data/scene_7_sprites.h b/src/include/data/scene_7_sprites.h new file mode 100644 index 0000000..e18b2db --- /dev/null +++ b/src/include/data/scene_7_sprites.h @@ -0,0 +1,12 @@ +#ifndef SCENE_7_SPRITES_H +#define SCENE_7_SPRITES_H + +// Scene: melonHouse +// Sprites + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_7_sprites) +extern const far_ptr_t scene_7_sprites[]; + +#endif diff --git a/src/include/data/scene_7_triggers.h b/src/include/data/scene_7_triggers.h new file mode 100644 index 0000000..a14ed85 --- /dev/null +++ b/src/include/data/scene_7_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_7_TRIGGERS_H +#define SCENE_7_TRIGGERS_H + +// Scene: melonHouse +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_7_triggers) +extern const struct trigger_t scene_7_triggers[]; + +#endif diff --git a/src/include/data/scene_8.h b/src/include/data/scene_8.h new file mode 100644 index 0000000..64f8c20 --- /dev/null +++ b/src/include/data/scene_8.h @@ -0,0 +1,11 @@ +#ifndef SCENE_8_H +#define SCENE_8_H + +// Scene: MidnightClubHouse + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_8) +extern const struct scene_t scene_8; + +#endif diff --git a/src/include/data/scene_8_actors.h b/src/include/data/scene_8_actors.h new file mode 100644 index 0000000..1d5f75b --- /dev/null +++ b/src/include/data/scene_8_actors.h @@ -0,0 +1,12 @@ +#ifndef SCENE_8_ACTORS_H +#define SCENE_8_ACTORS_H + +// Scene: MidnightClubHouse +// Actors + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_8_actors) +extern const struct actor_t scene_8_actors[]; + +#endif diff --git a/src/include/data/scene_8_collisions.h b/src/include/data/scene_8_collisions.h new file mode 100644 index 0000000..e7300cf --- /dev/null +++ b/src/include/data/scene_8_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_8_COLLISIONS_H +#define SCENE_8_COLLISIONS_H + +// Scene: MidnightClubHouse +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_8_collisions) +extern const unsigned char scene_8_collisions[]; + +#endif diff --git a/src/include/data/scene_8_init.h b/src/include/data/scene_8_init.h new file mode 100644 index 0000000..f59442e --- /dev/null +++ b/src/include/data/scene_8_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_8_INIT_H +#define SCENE_8_INIT_H + +// Script scene_8_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_8_init) +extern const unsigned char scene_8_init[]; + +#endif diff --git a/src/include/data/scene_8_sprites.h b/src/include/data/scene_8_sprites.h new file mode 100644 index 0000000..9254278 --- /dev/null +++ b/src/include/data/scene_8_sprites.h @@ -0,0 +1,12 @@ +#ifndef SCENE_8_SPRITES_H +#define SCENE_8_SPRITES_H + +// Scene: MidnightClubHouse +// Sprites + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_8_sprites) +extern const far_ptr_t scene_8_sprites[]; + +#endif diff --git a/src/include/data/scene_8_triggers.h b/src/include/data/scene_8_triggers.h new file mode 100644 index 0000000..7fb68e9 --- /dev/null +++ b/src/include/data/scene_8_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_8_TRIGGERS_H +#define SCENE_8_TRIGGERS_H + +// Scene: MidnightClubHouse +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_8_triggers) +extern const struct trigger_t scene_8_triggers[]; + +#endif diff --git a/src/include/data/scene_9.h b/src/include/data/scene_9.h new file mode 100644 index 0000000..8240fe7 --- /dev/null +++ b/src/include/data/scene_9.h @@ -0,0 +1,11 @@ +#ifndef SCENE_9_H +#define SCENE_9_H + +// Scene: fate6HouseF2 + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_9) +extern const struct scene_t scene_9; + +#endif diff --git a/src/include/data/scene_9_collisions.h b/src/include/data/scene_9_collisions.h new file mode 100644 index 0000000..d38fbac --- /dev/null +++ b/src/include/data/scene_9_collisions.h @@ -0,0 +1,12 @@ +#ifndef SCENE_9_COLLISIONS_H +#define SCENE_9_COLLISIONS_H + +// Scene: fate6HouseF2 +// Collisions + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_9_collisions) +extern const unsigned char scene_9_collisions[]; + +#endif diff --git a/src/include/data/scene_9_init.h b/src/include/data/scene_9_init.h new file mode 100644 index 0000000..386744f --- /dev/null +++ b/src/include/data/scene_9_init.h @@ -0,0 +1,11 @@ +#ifndef SCENE_9_INIT_H +#define SCENE_9_INIT_H + +// Script scene_9_init + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_9_init) +extern const unsigned char scene_9_init[]; + +#endif diff --git a/src/include/data/scene_9_triggers.h b/src/include/data/scene_9_triggers.h new file mode 100644 index 0000000..cdf1726 --- /dev/null +++ b/src/include/data/scene_9_triggers.h @@ -0,0 +1,12 @@ +#ifndef SCENE_9_TRIGGERS_H +#define SCENE_9_TRIGGERS_H + +// Scene: fate6HouseF2 +// Triggers + +#include "gbs_types.h" + +BANKREF_EXTERN(scene_9_triggers) +extern const struct trigger_t scene_9_triggers[]; + +#endif diff --git a/src/include/data/scene_types.h b/src/include/data/scene_types.h new file mode 100644 index 0000000..a8fae35 --- /dev/null +++ b/src/include/data/scene_types.h @@ -0,0 +1,8 @@ +#ifndef SCENE_TYPES_H +#define SCENE_TYPES_H + +typedef enum { + SCENE_TYPE_TOPDOWN = 0, + SCENE_TYPE_LOGO +} scene_type_e; +#endif diff --git a/src/include/data/script_1.h b/src/include/data/script_1.h new file mode 100644 index 0000000..9eb9f6e --- /dev/null +++ b/src/include/data/script_1.h @@ -0,0 +1,11 @@ +#ifndef SCRIPT_1_H +#define SCRIPT_1_H + +// Script script_1 + +#include "gbs_types.h" + +BANKREF_EXTERN(script_1) +extern const unsigned char script_1[]; + +#endif diff --git a/src/include/data/script_input.h b/src/include/data/script_input.h new file mode 100644 index 0000000..0515b80 --- /dev/null +++ b/src/include/data/script_input.h @@ -0,0 +1,11 @@ +#ifndef SCRIPT_INPUT_H +#define SCRIPT_INPUT_H + +// Script script_input + +#include "gbs_types.h" + +BANKREF_EXTERN(script_input) +extern const unsigned char script_input[]; + +#endif diff --git a/src/include/data/script_input_4.h b/src/include/data/script_input_4.h new file mode 100644 index 0000000..46146cf --- /dev/null +++ b/src/include/data/script_input_4.h @@ -0,0 +1,11 @@ +#ifndef SCRIPT_INPUT_4_H +#define SCRIPT_INPUT_4_H + +// Script script_input_4 + +#include "gbs_types.h" + +BANKREF_EXTERN(script_input_4) +extern const unsigned char script_input_4[]; + +#endif diff --git a/src/include/data/script_input_5.h b/src/include/data/script_input_5.h new file mode 100644 index 0000000..9ad129a --- /dev/null +++ b/src/include/data/script_input_5.h @@ -0,0 +1,11 @@ +#ifndef SCRIPT_INPUT_5_H +#define SCRIPT_INPUT_5_H + +// Script script_input_5 + +#include "gbs_types.h" + +BANKREF_EXTERN(script_input_5) +extern const unsigned char script_input_5[]; + +#endif diff --git a/src/include/data/script_input_6.h b/src/include/data/script_input_6.h new file mode 100644 index 0000000..072ce35 --- /dev/null +++ b/src/include/data/script_input_6.h @@ -0,0 +1,11 @@ +#ifndef SCRIPT_INPUT_6_H +#define SCRIPT_INPUT_6_H + +// Script script_input_6 + +#include "gbs_types.h" + +BANKREF_EXTERN(script_input_6) +extern const unsigned char script_input_6[]; + +#endif diff --git a/src/include/data/sprite_actor_animated.h b/src/include/data/sprite_actor_animated.h new file mode 100644 index 0000000..f26bc52 --- /dev/null +++ b/src/include/data/sprite_actor_animated.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_ACTOR_ANIMATED_H +#define SPRITE_ACTOR_ANIMATED_H + +// SpriteSheet: actor_animated + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_actor_animated) +extern const struct spritesheet_t sprite_actor_animated; + +#endif diff --git a/src/include/data/sprite_actor_animated_bank2_tileset.h b/src/include/data/sprite_actor_animated_bank2_tileset.h new file mode 100644 index 0000000..e0dd1c0 --- /dev/null +++ b/src/include/data/sprite_actor_animated_bank2_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_ACTOR_ANIMATED_BANK2_TILESET_H +#define SPRITE_ACTOR_ANIMATED_BANK2_TILESET_H + +// Tileset: sprite_actor_animated_bank2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_actor_animated_bank2_tileset) +extern const struct tileset_t sprite_actor_animated_bank2_tileset; + +#endif diff --git a/src/include/data/sprite_actor_animated_tileset.h b/src/include/data/sprite_actor_animated_tileset.h new file mode 100644 index 0000000..5603627 --- /dev/null +++ b/src/include/data/sprite_actor_animated_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_ACTOR_ANIMATED_TILESET_H +#define SPRITE_ACTOR_ANIMATED_TILESET_H + +// Tileset: sprite_actor_animated_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_actor_animated_tileset) +extern const struct tileset_t sprite_actor_animated_tileset; + +#endif diff --git a/src/include/data/sprite_cat.h b/src/include/data/sprite_cat.h new file mode 100644 index 0000000..c879a93 --- /dev/null +++ b/src/include/data/sprite_cat.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_CAT_H +#define SPRITE_CAT_H + +// SpriteSheet: cat + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_cat) +extern const struct spritesheet_t sprite_cat; + +#endif diff --git a/src/include/data/sprite_cat_bank2_tileset.h b/src/include/data/sprite_cat_bank2_tileset.h new file mode 100644 index 0000000..a954c67 --- /dev/null +++ b/src/include/data/sprite_cat_bank2_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_CAT_BANK2_TILESET_H +#define SPRITE_CAT_BANK2_TILESET_H + +// Tileset: sprite_cat_bank2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_cat_bank2_tileset) +extern const struct tileset_t sprite_cat_bank2_tileset; + +#endif diff --git a/src/include/data/sprite_cat_tileset.h b/src/include/data/sprite_cat_tileset.h new file mode 100644 index 0000000..0244f0f --- /dev/null +++ b/src/include/data/sprite_cat_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_CAT_TILESET_H +#define SPRITE_CAT_TILESET_H + +// Tileset: sprite_cat_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_cat_tileset) +extern const struct tileset_t sprite_cat_tileset; + +#endif diff --git a/src/include/data/sprite_charanimatedsprite.h b/src/include/data/sprite_charanimatedsprite.h new file mode 100644 index 0000000..00afc4d --- /dev/null +++ b/src/include/data/sprite_charanimatedsprite.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_CHARANIMATEDSPRITE_H +#define SPRITE_CHARANIMATEDSPRITE_H + +// SpriteSheet: CharAnimatedSprite + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_charanimatedsprite) +extern const struct spritesheet_t sprite_charanimatedsprite; + +#endif diff --git a/src/include/data/sprite_charanimatedsprite_bank2_tileset.h b/src/include/data/sprite_charanimatedsprite_bank2_tileset.h new file mode 100644 index 0000000..9e8d90a --- /dev/null +++ b/src/include/data/sprite_charanimatedsprite_bank2_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_CHARANIMATEDSPRITE_BANK2_TILESET_H +#define SPRITE_CHARANIMATEDSPRITE_BANK2_TILESET_H + +// Tileset: sprite_charanimatedsprite_bank2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_charanimatedsprite_bank2_tileset) +extern const struct tileset_t sprite_charanimatedsprite_bank2_tileset; + +#endif diff --git a/src/include/data/sprite_charanimatedsprite_tileset.h b/src/include/data/sprite_charanimatedsprite_tileset.h new file mode 100644 index 0000000..0ae4758 --- /dev/null +++ b/src/include/data/sprite_charanimatedsprite_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_CHARANIMATEDSPRITE_TILESET_H +#define SPRITE_CHARANIMATEDSPRITE_TILESET_H + +// Tileset: sprite_charanimatedsprite_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_charanimatedsprite_tileset) +extern const struct tileset_t sprite_charanimatedsprite_tileset; + +#endif diff --git a/src/include/data/sprite_checkbox.h b/src/include/data/sprite_checkbox.h new file mode 100644 index 0000000..faaee76 --- /dev/null +++ b/src/include/data/sprite_checkbox.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_CHECKBOX_H +#define SPRITE_CHECKBOX_H + +// SpriteSheet: checkbox + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_checkbox) +extern const struct spritesheet_t sprite_checkbox; + +#endif diff --git a/src/include/data/sprite_checkbox_bank2_tileset.h b/src/include/data/sprite_checkbox_bank2_tileset.h new file mode 100644 index 0000000..c354e8c --- /dev/null +++ b/src/include/data/sprite_checkbox_bank2_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_CHECKBOX_BANK2_TILESET_H +#define SPRITE_CHECKBOX_BANK2_TILESET_H + +// Tileset: sprite_checkbox_bank2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_checkbox_bank2_tileset) +extern const struct tileset_t sprite_checkbox_bank2_tileset; + +#endif diff --git a/src/include/data/sprite_checkbox_tileset.h b/src/include/data/sprite_checkbox_tileset.h new file mode 100644 index 0000000..5ee1e3d --- /dev/null +++ b/src/include/data/sprite_checkbox_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_CHECKBOX_TILESET_H +#define SPRITE_CHECKBOX_TILESET_H + +// Tileset: sprite_checkbox_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_checkbox_tileset) +extern const struct tileset_t sprite_checkbox_tileset; + +#endif diff --git a/src/include/data/sprite_dog.h b/src/include/data/sprite_dog.h new file mode 100644 index 0000000..ba997ba --- /dev/null +++ b/src/include/data/sprite_dog.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_DOG_H +#define SPRITE_DOG_H + +// SpriteSheet: dog + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_dog) +extern const struct spritesheet_t sprite_dog; + +#endif diff --git a/src/include/data/sprite_dog_bank2_tileset.h b/src/include/data/sprite_dog_bank2_tileset.h new file mode 100644 index 0000000..a219314 --- /dev/null +++ b/src/include/data/sprite_dog_bank2_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_DOG_BANK2_TILESET_H +#define SPRITE_DOG_BANK2_TILESET_H + +// Tileset: sprite_dog_bank2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_dog_bank2_tileset) +extern const struct tileset_t sprite_dog_bank2_tileset; + +#endif diff --git a/src/include/data/sprite_dog_tileset.h b/src/include/data/sprite_dog_tileset.h new file mode 100644 index 0000000..d9caa4f --- /dev/null +++ b/src/include/data/sprite_dog_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_DOG_TILESET_H +#define SPRITE_DOG_TILESET_H + +// Tileset: sprite_dog_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_dog_tileset) +extern const struct tileset_t sprite_dog_tileset; + +#endif diff --git a/src/include/data/sprite_npc001.h b/src/include/data/sprite_npc001.h new file mode 100644 index 0000000..f0f8506 --- /dev/null +++ b/src/include/data/sprite_npc001.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_NPC001_H +#define SPRITE_NPC001_H + +// SpriteSheet: npc001 + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_npc001) +extern const struct spritesheet_t sprite_npc001; + +#endif diff --git a/src/include/data/sprite_npc001_bank2_tileset.h b/src/include/data/sprite_npc001_bank2_tileset.h new file mode 100644 index 0000000..aa6a883 --- /dev/null +++ b/src/include/data/sprite_npc001_bank2_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_NPC001_BANK2_TILESET_H +#define SPRITE_NPC001_BANK2_TILESET_H + +// Tileset: sprite_npc001_bank2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_npc001_bank2_tileset) +extern const struct tileset_t sprite_npc001_bank2_tileset; + +#endif diff --git a/src/include/data/sprite_npc001_tileset.h b/src/include/data/sprite_npc001_tileset.h new file mode 100644 index 0000000..2b77ff4 --- /dev/null +++ b/src/include/data/sprite_npc001_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_NPC001_TILESET_H +#define SPRITE_NPC001_TILESET_H + +// Tileset: sprite_npc001_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_npc001_tileset) +extern const struct tileset_t sprite_npc001_tileset; + +#endif diff --git a/src/include/data/sprite_npc002.h b/src/include/data/sprite_npc002.h new file mode 100644 index 0000000..ff32d18 --- /dev/null +++ b/src/include/data/sprite_npc002.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_NPC002_H +#define SPRITE_NPC002_H + +// SpriteSheet: npc002 + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_npc002) +extern const struct spritesheet_t sprite_npc002; + +#endif diff --git a/src/include/data/sprite_npc002_bank2_tileset.h b/src/include/data/sprite_npc002_bank2_tileset.h new file mode 100644 index 0000000..1b43edd --- /dev/null +++ b/src/include/data/sprite_npc002_bank2_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_NPC002_BANK2_TILESET_H +#define SPRITE_NPC002_BANK2_TILESET_H + +// Tileset: sprite_npc002_bank2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_npc002_bank2_tileset) +extern const struct tileset_t sprite_npc002_bank2_tileset; + +#endif diff --git a/src/include/data/sprite_npc002_tileset.h b/src/include/data/sprite_npc002_tileset.h new file mode 100644 index 0000000..1d8a0e4 --- /dev/null +++ b/src/include/data/sprite_npc002_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_NPC002_TILESET_H +#define SPRITE_NPC002_TILESET_H + +// Tileset: sprite_npc002_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_npc002_tileset) +extern const struct tileset_t sprite_npc002_tileset; + +#endif diff --git a/src/include/data/sprite_npc005.h b/src/include/data/sprite_npc005.h new file mode 100644 index 0000000..3162828 --- /dev/null +++ b/src/include/data/sprite_npc005.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_NPC005_H +#define SPRITE_NPC005_H + +// SpriteSheet: npc005 + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_npc005) +extern const struct spritesheet_t sprite_npc005; + +#endif diff --git a/src/include/data/sprite_npc005_bank2_tileset.h b/src/include/data/sprite_npc005_bank2_tileset.h new file mode 100644 index 0000000..0fd8716 --- /dev/null +++ b/src/include/data/sprite_npc005_bank2_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_NPC005_BANK2_TILESET_H +#define SPRITE_NPC005_BANK2_TILESET_H + +// Tileset: sprite_npc005_bank2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_npc005_bank2_tileset) +extern const struct tileset_t sprite_npc005_bank2_tileset; + +#endif diff --git a/src/include/data/sprite_npc005_tileset.h b/src/include/data/sprite_npc005_tileset.h new file mode 100644 index 0000000..b8c241f --- /dev/null +++ b/src/include/data/sprite_npc005_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_NPC005_TILESET_H +#define SPRITE_NPC005_TILESET_H + +// Tileset: sprite_npc005_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_npc005_tileset) +extern const struct tileset_t sprite_npc005_tileset; + +#endif diff --git a/src/include/data/sprite_player.h b/src/include/data/sprite_player.h new file mode 100644 index 0000000..fe06e35 --- /dev/null +++ b/src/include/data/sprite_player.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_PLAYER_H +#define SPRITE_PLAYER_H + +// SpriteSheet: player + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_player) +extern const struct spritesheet_t sprite_player; + +#endif diff --git a/src/include/data/sprite_player_bank2_tileset.h b/src/include/data/sprite_player_bank2_tileset.h new file mode 100644 index 0000000..02adc7f --- /dev/null +++ b/src/include/data/sprite_player_bank2_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_PLAYER_BANK2_TILESET_H +#define SPRITE_PLAYER_BANK2_TILESET_H + +// Tileset: sprite_player_bank2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_player_bank2_tileset) +extern const struct tileset_t sprite_player_bank2_tileset; + +#endif diff --git a/src/include/data/sprite_player_tileset.h b/src/include/data/sprite_player_tileset.h new file mode 100644 index 0000000..6ff18e4 --- /dev/null +++ b/src/include/data/sprite_player_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_PLAYER_TILESET_H +#define SPRITE_PLAYER_TILESET_H + +// Tileset: sprite_player_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_player_tileset) +extern const struct tileset_t sprite_player_tileset; + +#endif diff --git a/src/include/data/sprite_sign.h b/src/include/data/sprite_sign.h new file mode 100644 index 0000000..0b634eb --- /dev/null +++ b/src/include/data/sprite_sign.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_SIGN_H +#define SPRITE_SIGN_H + +// SpriteSheet: sign + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_sign) +extern const struct spritesheet_t sprite_sign; + +#endif diff --git a/src/include/data/sprite_sign_bank2_tileset.h b/src/include/data/sprite_sign_bank2_tileset.h new file mode 100644 index 0000000..21f017b --- /dev/null +++ b/src/include/data/sprite_sign_bank2_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_SIGN_BANK2_TILESET_H +#define SPRITE_SIGN_BANK2_TILESET_H + +// Tileset: sprite_sign_bank2_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_sign_bank2_tileset) +extern const struct tileset_t sprite_sign_bank2_tileset; + +#endif diff --git a/src/include/data/sprite_sign_tileset.h b/src/include/data/sprite_sign_tileset.h new file mode 100644 index 0000000..475ecf7 --- /dev/null +++ b/src/include/data/sprite_sign_tileset.h @@ -0,0 +1,11 @@ +#ifndef SPRITE_SIGN_TILESET_H +#define SPRITE_SIGN_TILESET_H + +// Tileset: sprite_sign_tileset + +#include "gbs_types.h" + +BANKREF_EXTERN(sprite_sign_tileset) +extern const struct tileset_t sprite_sign_tileset; + +#endif diff --git a/src/include/data/spritesheet_none.h b/src/include/data/spritesheet_none.h new file mode 100644 index 0000000..abbbed2 --- /dev/null +++ b/src/include/data/spritesheet_none.h @@ -0,0 +1,11 @@ +#ifndef SPRITESHEET_NONE_H +#define SPRITESHEET_NONE_H + +// SpriteSheet: None + +#include "gbs_types.h" + +extern const void __bank_spritesheet_none; +extern const struct spritesheet_t spritesheet_none; + +#endif diff --git a/src/include/data/states_defines.h b/src/include/data/states_defines.h new file mode 100644 index 0000000..d9f16ce --- /dev/null +++ b/src/include/data/states_defines.h @@ -0,0 +1,6 @@ +#ifndef STATES_DEFINES_H +#define STATES_DEFINES_H + +#define INPUT_TOPDOWN_INTERACT INPUT_A + +#endif diff --git a/src/include/data/trigger_0_interact.h b/src/include/data/trigger_0_interact.h new file mode 100644 index 0000000..ecc1c69 --- /dev/null +++ b/src/include/data/trigger_0_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_0_INTERACT_H +#define TRIGGER_0_INTERACT_H + +// Script trigger_0_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_0_interact) +extern const unsigned char trigger_0_interact[]; + +#endif diff --git a/src/include/data/trigger_10_interact.h b/src/include/data/trigger_10_interact.h new file mode 100644 index 0000000..29c740a --- /dev/null +++ b/src/include/data/trigger_10_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_10_INTERACT_H +#define TRIGGER_10_INTERACT_H + +// Script trigger_10_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_10_interact) +extern const unsigned char trigger_10_interact[]; + +#endif diff --git a/src/include/data/trigger_11_interact.h b/src/include/data/trigger_11_interact.h new file mode 100644 index 0000000..0ff67ee --- /dev/null +++ b/src/include/data/trigger_11_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_11_INTERACT_H +#define TRIGGER_11_INTERACT_H + +// Script trigger_11_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_11_interact) +extern const unsigned char trigger_11_interact[]; + +#endif diff --git a/src/include/data/trigger_12_interact.h b/src/include/data/trigger_12_interact.h new file mode 100644 index 0000000..352f7f7 --- /dev/null +++ b/src/include/data/trigger_12_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_12_INTERACT_H +#define TRIGGER_12_INTERACT_H + +// Script trigger_12_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_12_interact) +extern const unsigned char trigger_12_interact[]; + +#endif diff --git a/src/include/data/trigger_13_interact.h b/src/include/data/trigger_13_interact.h new file mode 100644 index 0000000..018a227 --- /dev/null +++ b/src/include/data/trigger_13_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_13_INTERACT_H +#define TRIGGER_13_INTERACT_H + +// Script trigger_13_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_13_interact) +extern const unsigned char trigger_13_interact[]; + +#endif diff --git a/src/include/data/trigger_14_interact.h b/src/include/data/trigger_14_interact.h new file mode 100644 index 0000000..a026b48 --- /dev/null +++ b/src/include/data/trigger_14_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_14_INTERACT_H +#define TRIGGER_14_INTERACT_H + +// Script trigger_14_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_14_interact) +extern const unsigned char trigger_14_interact[]; + +#endif diff --git a/src/include/data/trigger_15_interact.h b/src/include/data/trigger_15_interact.h new file mode 100644 index 0000000..523e6c2 --- /dev/null +++ b/src/include/data/trigger_15_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_15_INTERACT_H +#define TRIGGER_15_INTERACT_H + +// Script trigger_15_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_15_interact) +extern const unsigned char trigger_15_interact[]; + +#endif diff --git a/src/include/data/trigger_16_interact.h b/src/include/data/trigger_16_interact.h new file mode 100644 index 0000000..e142015 --- /dev/null +++ b/src/include/data/trigger_16_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_16_INTERACT_H +#define TRIGGER_16_INTERACT_H + +// Script trigger_16_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_16_interact) +extern const unsigned char trigger_16_interact[]; + +#endif diff --git a/src/include/data/trigger_17_interact.h b/src/include/data/trigger_17_interact.h new file mode 100644 index 0000000..57a631c --- /dev/null +++ b/src/include/data/trigger_17_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_17_INTERACT_H +#define TRIGGER_17_INTERACT_H + +// Script trigger_17_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_17_interact) +extern const unsigned char trigger_17_interact[]; + +#endif diff --git a/src/include/data/trigger_18_interact.h b/src/include/data/trigger_18_interact.h new file mode 100644 index 0000000..4ef4cf6 --- /dev/null +++ b/src/include/data/trigger_18_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_18_INTERACT_H +#define TRIGGER_18_INTERACT_H + +// Script trigger_18_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_18_interact) +extern const unsigned char trigger_18_interact[]; + +#endif diff --git a/src/include/data/trigger_19_interact.h b/src/include/data/trigger_19_interact.h new file mode 100644 index 0000000..692d65c --- /dev/null +++ b/src/include/data/trigger_19_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_19_INTERACT_H +#define TRIGGER_19_INTERACT_H + +// Script trigger_19_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_19_interact) +extern const unsigned char trigger_19_interact[]; + +#endif diff --git a/src/include/data/trigger_1_interact.h b/src/include/data/trigger_1_interact.h new file mode 100644 index 0000000..775919c --- /dev/null +++ b/src/include/data/trigger_1_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_1_INTERACT_H +#define TRIGGER_1_INTERACT_H + +// Script trigger_1_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_1_interact) +extern const unsigned char trigger_1_interact[]; + +#endif diff --git a/src/include/data/trigger_20_interact.h b/src/include/data/trigger_20_interact.h new file mode 100644 index 0000000..af5bae7 --- /dev/null +++ b/src/include/data/trigger_20_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_20_INTERACT_H +#define TRIGGER_20_INTERACT_H + +// Script trigger_20_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_20_interact) +extern const unsigned char trigger_20_interact[]; + +#endif diff --git a/src/include/data/trigger_21_interact.h b/src/include/data/trigger_21_interact.h new file mode 100644 index 0000000..4365ace --- /dev/null +++ b/src/include/data/trigger_21_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_21_INTERACT_H +#define TRIGGER_21_INTERACT_H + +// Script trigger_21_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_21_interact) +extern const unsigned char trigger_21_interact[]; + +#endif diff --git a/src/include/data/trigger_22_interact.h b/src/include/data/trigger_22_interact.h new file mode 100644 index 0000000..5d6fb4e --- /dev/null +++ b/src/include/data/trigger_22_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_22_INTERACT_H +#define TRIGGER_22_INTERACT_H + +// Script trigger_22_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_22_interact) +extern const unsigned char trigger_22_interact[]; + +#endif diff --git a/src/include/data/trigger_23_interact.h b/src/include/data/trigger_23_interact.h new file mode 100644 index 0000000..3a1114d --- /dev/null +++ b/src/include/data/trigger_23_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_23_INTERACT_H +#define TRIGGER_23_INTERACT_H + +// Script trigger_23_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_23_interact) +extern const unsigned char trigger_23_interact[]; + +#endif diff --git a/src/include/data/trigger_24_interact.h b/src/include/data/trigger_24_interact.h new file mode 100644 index 0000000..cb8afcd --- /dev/null +++ b/src/include/data/trigger_24_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_24_INTERACT_H +#define TRIGGER_24_INTERACT_H + +// Script trigger_24_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_24_interact) +extern const unsigned char trigger_24_interact[]; + +#endif diff --git a/src/include/data/trigger_2_interact.h b/src/include/data/trigger_2_interact.h new file mode 100644 index 0000000..c437750 --- /dev/null +++ b/src/include/data/trigger_2_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_2_INTERACT_H +#define TRIGGER_2_INTERACT_H + +// Script trigger_2_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_2_interact) +extern const unsigned char trigger_2_interact[]; + +#endif diff --git a/src/include/data/trigger_3_interact.h b/src/include/data/trigger_3_interact.h new file mode 100644 index 0000000..500b1f7 --- /dev/null +++ b/src/include/data/trigger_3_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_3_INTERACT_H +#define TRIGGER_3_INTERACT_H + +// Script trigger_3_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_3_interact) +extern const unsigned char trigger_3_interact[]; + +#endif diff --git a/src/include/data/trigger_4_interact.h b/src/include/data/trigger_4_interact.h new file mode 100644 index 0000000..b580619 --- /dev/null +++ b/src/include/data/trigger_4_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_4_INTERACT_H +#define TRIGGER_4_INTERACT_H + +// Script trigger_4_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_4_interact) +extern const unsigned char trigger_4_interact[]; + +#endif diff --git a/src/include/data/trigger_5_interact.h b/src/include/data/trigger_5_interact.h new file mode 100644 index 0000000..e483588 --- /dev/null +++ b/src/include/data/trigger_5_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_5_INTERACT_H +#define TRIGGER_5_INTERACT_H + +// Script trigger_5_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_5_interact) +extern const unsigned char trigger_5_interact[]; + +#endif diff --git a/src/include/data/trigger_6_interact.h b/src/include/data/trigger_6_interact.h new file mode 100644 index 0000000..be99f11 --- /dev/null +++ b/src/include/data/trigger_6_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_6_INTERACT_H +#define TRIGGER_6_INTERACT_H + +// Script trigger_6_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_6_interact) +extern const unsigned char trigger_6_interact[]; + +#endif diff --git a/src/include/data/trigger_7_interact.h b/src/include/data/trigger_7_interact.h new file mode 100644 index 0000000..40606da --- /dev/null +++ b/src/include/data/trigger_7_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_7_INTERACT_H +#define TRIGGER_7_INTERACT_H + +// Script trigger_7_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_7_interact) +extern const unsigned char trigger_7_interact[]; + +#endif diff --git a/src/include/data/trigger_8_interact.h b/src/include/data/trigger_8_interact.h new file mode 100644 index 0000000..9dc2332 --- /dev/null +++ b/src/include/data/trigger_8_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_8_INTERACT_H +#define TRIGGER_8_INTERACT_H + +// Script trigger_8_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_8_interact) +extern const unsigned char trigger_8_interact[]; + +#endif diff --git a/src/include/data/trigger_9_interact.h b/src/include/data/trigger_9_interact.h new file mode 100644 index 0000000..ebeeaff --- /dev/null +++ b/src/include/data/trigger_9_interact.h @@ -0,0 +1,11 @@ +#ifndef TRIGGER_9_INTERACT_H +#define TRIGGER_9_INTERACT_H + +// Script trigger_9_interact + +#include "gbs_types.h" + +BANKREF_EXTERN(trigger_9_interact) +extern const unsigned char trigger_9_interact[]; + +#endif diff --git a/src/include/data_manager.h b/src/include/data_manager.h new file mode 100644 index 0000000..33dbfd3 --- /dev/null +++ b/src/include/data_manager.h @@ -0,0 +1,40 @@ +#ifndef SCENE_H +#define SCENE_H + +#include +#include "gbs_types.h" + +extern far_ptr_t current_scene; +extern UBYTE image_bank; +extern UBYTE image_attr_bank; +extern UBYTE collision_bank; +extern unsigned char *image_ptr; +extern unsigned char *image_attr_ptr; +extern unsigned char *collision_ptr; +extern UBYTE image_tile_width; +extern UBYTE image_tile_height; +extern UINT16 image_width; +extern UINT16 image_height; +extern scene_type_e scene_type; +extern UBYTE actors_len; +extern UBYTE sprites_len; +extern UBYTE actors_len; +extern LCD_isr_e scene_LCD_type; + +#define SCENE_STACK_SIZE 8 +extern scene_stack_item_t scene_stack[SCENE_STACK_SIZE]; +extern scene_stack_item_t * scene_stack_ptr; + +#define MAX_SCENE_SPRITES 64 +extern UBYTE scene_sprites_base_tiles[MAX_SCENE_SPRITES]; + +void load_init(void) BANKED; +UBYTE load_scene(const scene_t * scene, UBYTE bank, UBYTE init_data) BANKED; + +UBYTE load_sprite(UBYTE sprite_offset, const spritesheet_t * sprite, UBYTE bank) BANKED; +void load_player(void) BANKED; +void load_emote(const unsigned char * tiles, UBYTE bank) BANKED; +void load_animations(const spritesheet_t *sprite, UBYTE bank, UWORD animation_set, animation_t * res_animations) NONBANKED; +void load_bounds(const spritesheet_t * sprite, UBYTE bank, bounding_box_t * res_bounds) BANKED; + +#endif diff --git a/src/include/events.h b/src/include/events.h new file mode 100644 index 0000000..1882995 --- /dev/null +++ b/src/include/events.h @@ -0,0 +1,30 @@ +#ifndef _EVENTS_H_INCLUDE +#define _EVENTS_H_INCLUDE + +#include "vm.h" + +typedef struct script_event_t { + UWORD handle; + UBYTE script_bank; + void * script_addr; +} script_event_t; + +extern script_event_t input_events[8]; +extern UBYTE input_slots[8]; + +typedef struct timer_time_t { + UBYTE value, remains; +} timer_time_t; + +#define MAX_CONCURRENT_TIMERS 4 + +extern script_event_t timer_events[MAX_CONCURRENT_TIMERS]; +extern timer_time_t timer_values[MAX_CONCURRENT_TIMERS]; + +void events_init(UBYTE preserve) BANKED; +void events_update(void) NONBANKED; + +void timers_init(UBYTE preserve) BANKED; +void timers_update(void) NONBANKED; + +#endif \ No newline at end of file diff --git a/src/include/fade_manager.h b/src/include/fade_manager.h new file mode 100644 index 0000000..c94da1f --- /dev/null +++ b/src/include/fade_manager.h @@ -0,0 +1,73 @@ +#ifndef FADE_MANAGER_H +#define FADE_MANAGER_H + +#include + +#define FADE_SPEED_MASK 0x3F +#define FADE_IN_FLAG 0x40 +#define FADE_ENABLED_FLAG 0x80 + +typedef enum { FADE_IN, FADE_OUT } FADE_DIRECTION; + +extern UBYTE fade_running; +extern UBYTE fade_frames_per_step; +extern UBYTE fade_black; +extern UBYTE fade_timer; +extern UBYTE fade_style; + +#define BCPS_REG_ADDR 0x68 +#define OCPS_REG_ADDR 0x6A + +/** + * Initialise fade variables + */ +void fade_init(void) BANKED; + +/** + * Start Fade In + */ +void fade_in(void) BANKED; + +/** + * Start Fade Out + */ +void fade_out(void) BANKED; + +/** + * Update current fade + */ +void fade_update(void) BANKED; + +/** + * Refresh tile coloring to reflect changes in palette + * Call after LoadPalette etc. + */ +void fade_applypalettechange(void) BANKED; + +/** + * Change current fade speed + * + * @param speed new fade speed + */ +void fade_setspeed(UBYTE speed) BANKED; + +/** + * Check if fade is currently running + * + * @return TRUE if fade is currently running + */ +inline UBYTE fade_isfading(void) { + return fade_running; +} + +/** + * Fade in and wait until complete + */ +void fade_in_modal(void) BANKED; + +/** + * Fade out and wait until complete + */ +void fade_out_modal(void) BANKED; + +#endif diff --git a/src/include/flasher.h b/src/include/flasher.h new file mode 100644 index 0000000..845f61d --- /dev/null +++ b/src/include/flasher.h @@ -0,0 +1,11 @@ +#ifndef __FLASHER_H_INCLUDE +#define __FLASHER_H_INCLUDE + +#include + +void restore_sram_bank(UINT8 bank) BANKED; +void restore_sram(void) BANKED; + +UINT8 save_sram(UINT8 count) BANKED; + +#endif \ No newline at end of file diff --git a/src/include/game_time.h b/src/include/game_time.h new file mode 100644 index 0000000..1fea57c --- /dev/null +++ b/src/include/game_time.h @@ -0,0 +1,19 @@ +#ifndef GAME_TIME_H +#define GAME_TIME_H + +#include + +#define IS_FRAME_256 ((game_time & 0xFF) == 0) +#define IS_FRAME_128 ((game_time & 0x7F) == 0) +#define IS_FRAME_64 ((game_time & 0x3F) == 0) +#define IS_FRAME_32 ((game_time & 0x1F) == 0) +#define IS_FRAME_16 ((game_time & 0xF) == 0) +#define IS_FRAME_8 ((game_time & 0x7) == 0) +#define IS_FRAME_4 ((game_time & 0x3) == 0) +#define IS_FRAME_2 ((game_time & 0x1) == 0) +#define IS_FRAME_ODD ((game_time & 0x1) == 1) +#define IS_FRAME_EVEN ((game_time & 0x1) == 0) + +extern UINT8 game_time; + +#endif \ No newline at end of file diff --git a/src/include/gbprinter.h b/src/include/gbprinter.h new file mode 100644 index 0000000..cd0ad2b --- /dev/null +++ b/src/include/gbprinter.h @@ -0,0 +1,136 @@ +#ifndef __GBPRINTER_H_INCLUDE__ +#define __GBPRINTER_H_INCLUDE__ + +#include +#include + +/** Width of the printed image in tiles +*/ +#define PRN_TILE_WIDTH 20 + +#define PRN_LOW(A) ((A) & 0xFF) +#define PRN_HIGH(A) ((A) >> 8) + +/** 0x88,0x33 are mandatory first bytes to initialise a communication with printer + Any command sequence begins by these +*/ +#define PRN_MAGIC 0x3388 +#define PRN_LE(A) PRN_LOW(A),PRN_HIGH(A) + +/** INIT command is mandatory to initialize communication protocol with the printer + Two consecutive linked commands must never be more than 150 ms apart except the INIT command which is valid at least 10 seconds +*/ +#define PRN_CMD_INIT 0x01 + +/** PRINT command + Contains the palette, margins, number of prints and printing intensity +*/ +#define PRN_CMD_PRINT 0x02 + +/** DATA command + Can be any length between 0 and 640 bytes. + DATA command with lenght 0 triggers PRN_STATUS_FULL and is mandatory before print command +*/ +#define PRN_CMD_DATA 0x04 + +/** BREAK command + Not very usefull but exists (see Game Boy Programming Manual) +*/ +#define PRN_CMD_BREAK 0x08 + +/** STATUS command + Used to check status bits + Maybe be used alone before an INIT command to check physical connection with printer + Resets PRN_STATUS_UNTRAN +*/ +#define PRN_CMD_STATUS 0x0F + +/** Palette format: the bits, grouped two by two, give the printing color of the encoded pixel value + for the default palette 0xE4 = 0b11100100 = [3 2 1 0] + Any value is valid, which means that 1 to 4 color images are possible + 0x00 acts the same as 0xE4 for the printer +*/ +#define PRN_PALETTE_NORMAL 0b11100100u +#define PRN_PALETTE_INV 0b00011011u + +/** Don't use margins +*/ +#define PRN_NO_MARGINS 0x00 + +/** Exposure: 0x40 is default value, values from 0x80 to 0xFF act as 0x40 + Determines the time used by the printer head to heat the thermal paper +*/ +#define PRN_EXPOSURE_LIGHT 0x00 +#define PRN_EXPOSURE_DEFAULT 0x40 +#define PRN_EXPOSURE_DARK 0x7F + +/** Battery too low +*/ +#define PRN_STATUS_LOWBAT 0x80 + +/** Error not specified according to the Game Boy Programming manual +*/ +#define PRN_STATUS_ER2 0x40 + +/** Paper jam (abnormal motor operation) +*/ +#define PRN_STATUS_ER1 0x20 + +/** Packet error (but not checksum error) +*/ +#define PRN_STATUS_ER0 0x10 + +/** Unprocessed data present in printer memory + Allows to verify that printer got some data in memory with correct checksum + is resetted by STATUS command +*/ +#define PRN_STATUS_UNTRAN 0x08 + +/** status data ready, mandatory to allow printing + is triggered by DATA command with lenght 0 +*/ +#define PRN_STATUS_FULL 0x04 + +/** Message sent by the printer while physically printing +*/ +#define PRN_STATUS_BUSY 0x02 + +/** The received packet has a ckecksum error +*/ +#define PRN_STATUS_SUM 0x01 + +/** Everything is fine, printer ready for further transmission +*/ +#define PRN_STATUS_OK 0x00 + +#define PRN_STATUS_MASK_ERRORS 0xF0 +#define PRN_STATUS_MASK_ANY 0xFF + +#define PRN_SECONDS(A) ((A)*60) + +#define PRN_MAX_PROGRESS 8 + +#define PRN_STATUS_CANCELLED PRN_STATUS_ER2 + +typedef struct start_print_pkt_t { + uint16_t magic; + uint16_t command; + uint16_t length; + uint8_t print; + uint8_t margins; + uint8_t palette; + uint8_t exposure; + uint16_t crc; + uint16_t trail; +} start_print_pkt_t; + +extern start_print_pkt_t PRN_PKT_START; + +uint8_t gbprinter_detect(uint8_t delay) BANKED; +uint8_t gbprinter_print_overlay(uint8_t start, uint8_t rows, uint8_t margins) BANKED; + +inline void gbprinter_set_print_params(uint8_t margins, uint8_t palette, uint8_t exposure) { + PRN_PKT_START.crc = ((PRN_CMD_PRINT + 0x04u + 0x01u) + (PRN_PKT_START.margins = margins) + (PRN_PKT_START.palette = palette) + (PRN_PKT_START.exposure = exposure)); +} + +#endif \ No newline at end of file diff --git a/src/include/gbs_types.h b/src/include/gbs_types.h new file mode 100644 index 0000000..9a54527 --- /dev/null +++ b/src/include/gbs_types.h @@ -0,0 +1,191 @@ +#ifndef GBS_TYPES_H +#define GBS_TYPES_H + +#include +#include + +#include +#include + +#include "data/scene_types.h" +#include "bankdata.h" +#include "parallax.h" +#include "collision.h" + +typedef enum { + LCD_simple, + LCD_parallax, + LCD_fullscreen +} LCD_isr_e; + +typedef enum { + COLLISION_GROUP_NONE = 0, + COLLISION_GROUP_PLAYER = 1, + COLLISION_GROUP_1 = 2, + COLLISION_GROUP_2 = 4, + COLLISION_GROUP_3 = 8, +} collision_group_e; + +typedef struct animation_t +{ + uint8_t start; + uint8_t end; +} animation_t; + +typedef struct actor_t +{ + bool active : 1; + bool pinned : 1; + bool hidden : 1; + bool disabled : 1; + bool anim_noloop : 1; + bool collision_enabled : 1; + bool movement_interrupt : 1; + bool persistent : 1; + point16_t pos; + direction_e dir; + bounding_box_t bounds; + uint8_t base_tile; + uint8_t frame; + uint8_t frame_start; + uint8_t frame_end; + uint8_t anim_tick; + uint8_t move_speed; + uint8_t animation; + uint8_t reserve_tiles; + animation_t animations[8]; + far_ptr_t sprite; + far_ptr_t script, script_update; + uint16_t hscript_update, hscript_hit; + + // Collisions + collision_group_e collision_group; + + // Linked list + struct actor_t *next; + struct actor_t *prev; +} actor_t; + +#define TRIGGER_HAS_ENTER_SCRIPT 1 +#define TRIGGER_HAS_LEAVE_SCRIPT 2 + +typedef struct trigger_t { + uint8_t x, y, width, height; + far_ptr_t script; + uint8_t script_flags; +} trigger_t; + +typedef struct scene_t { + uint8_t width, height; + scene_type_e type; + uint8_t n_actors, n_triggers, n_projectiles, n_sprites; + uint8_t reserve_tiles; + far_ptr_t player_sprite; + far_ptr_t background, collisions; + far_ptr_t palette, sprite_palette; + far_ptr_t script_init, script_p_hit1; + far_ptr_t sprites; + far_ptr_t actors; + far_ptr_t triggers; + far_ptr_t projectiles; + parallax_row_t parallax_rows[3]; +} scene_t; + +typedef struct background_t { + uint8_t width, height; + far_ptr_t tileset; + far_ptr_t cgb_tileset; + far_ptr_t tilemap; // far pointer to array of bytes with map + far_ptr_t cgb_tilemap_attr; // far pointer to array of bytes with CGB attributes (may be NULL) +} background_t; + +typedef struct tileset_t { + uint16_t n_tiles; // actual amount of 8x8 tiles in tiles[] array + uint8_t tiles[]; +} tileset_t; + +typedef struct spritesheet_t { + uint8_t n_metasprites; + point8_t emote_origin; + metasprite_t * const *metasprites; + animation_t *animations; + uint16_t *animations_lookup; + bounding_box_t bounds; + far_ptr_t tileset; // far pointer to sprite tileset + far_ptr_t cgb_tileset; // far pointer to additional CGB tileset (may be NULL) +} spritesheet_t; + +typedef struct projectile_def_t +{ + bounding_box_t bounds; + far_ptr_t sprite; + uint8_t life_time; + uint8_t base_tile; + animation_t animations[4]; + uint8_t anim_tick; + uint8_t move_speed; + uint16_t initial_offset; + collision_group_e collision_group; + uint8_t collision_mask; +} projectile_def_t; + +typedef struct projectile_t +{ + bool anim_noloop : 1; + bool strong : 1; + point16_t pos; + point16_t delta_pos; + uint8_t frame; + uint8_t frame_start; + uint8_t frame_end; + projectile_def_t def; + struct projectile_t *next; +} projectile_t; + +#define FONT_RECODE 1 +#define FONT_VWF 2 +#define FONT_VWF_1BIT 4 + +#define FONT_RECODE_SIZE_7BIT 0x7fu + +typedef struct font_desc_t { + uint8_t attr, mask; + const uint8_t * recode_table; + const uint8_t * widths; + const uint8_t * bitmaps; +} font_desc_t; + +typedef struct scene_stack_item_t { + far_ptr_t scene; + point16_t pos; + direction_e dir; +} scene_stack_item_t; + +typedef struct menu_item_t { + uint8_t X, Y; + uint8_t iL, iR, iU, iD; +} menu_item_t; + +#define DMG_BLACK 0x03 +#define DMG_DARK_GRAY 0x02 +#define DMG_LITE_GRAY 0x01 +#define DMG_WHITE 0x00 + +#ifndef DMG_PALETTE +#define DMG_PALETTE(C0, C1, C2, C3) ((uint8_t)((((C3) & 0x03) << 6) | (((C2) & 0x03) << 4) | (((C1) & 0x03) << 2) | ((C0) & 0x03))) +#endif + +#define CGB_PALETTE(C0, C1, C2, C3) {C0, C1, C2, C3} +#define CGB_COLOR(R, G, B) ((uint16_t)(((R) & 0x1f) | (((G) & 0x1f) << 5) | (((B) & 0x1f) << 10))) + +typedef struct palette_entry_t { + uint16_t c0, c1, c2, c3; +} palette_entry_t; + +typedef struct palette_t { + uint8_t mask; + uint8_t palette[2]; + palette_entry_t cgb_palette[]; +} palette_t; + +#endif diff --git a/src/include/gbt_player.h b/src/include/gbt_player.h new file mode 100644 index 0000000..791e2e5 --- /dev/null +++ b/src/include/gbt_player.h @@ -0,0 +1,51 @@ +/* + * GBT Player v2.1.3 + * + * SPDX-License-Identifier: MIT + * + * Copyright (c) 2009-2020, Antonio Niño Díaz + */ + +#ifndef _GBT_PLAYER_ +#define _GBT_PLAYER_ + +#include + +// Plays the song pointed by data (pointer array to patterns) in given bank at +// given initial speed. +void gbt_play(void *data, UINT8 bank, UINT8 speed) OLDCALL; + +// Pauses or unpauses music. +// Parameter: 1 = un-pause/resume, 0 = pause +void gbt_pause(UINT8 pause) OLDCALL; + +// Stops music and turns off sound system. Called automatically when the last +// pattern ends and autoloop isn't activated. +void gbt_stop(void) OLDCALL; + +// Enables or disables autoloop +void gbt_loop(UINT8 loop) OLDCALL; + +// Updates player, should be called every frame. +// NOTE: This will change the active ROM bank to 1. +void gbt_update(void) OLDCALL; + +// Set enabled channels to prevent the player from using that channel. +// NOTE: If a channel is re-enabled, it can take some time to sound OK (until +// pan and volume are modified in the song). You should only disable unused +// channels or channels that don't change pan or volume. +void gbt_enable_channels(UINT8 channel_flags) OLDCALL; + +#define GBT_CHAN_1 (1<<0) +#define GBT_CHAN_2 (1<<1) +#define GBT_CHAN_3 (1<<2) +#define GBT_CHAN_4 (1<<3) + +extern volatile UINT8 _gbt_channel3_loaded_instrument; + +// resets channel3 instrument; forces reloading of waveform +inline void gbt_reset_ch3_instrument(void) { + _gbt_channel3_loaded_instrument = 0xffu; +} + +#endif //_GBT_PLAYER_ diff --git a/src/include/hUGEDriver.h b/src/include/hUGEDriver.h new file mode 100644 index 0000000..f3453c8 --- /dev/null +++ b/src/include/hUGEDriver.h @@ -0,0 +1,142 @@ +#ifndef HUGEDRIVER_H_INCLUDE +#define HUGEDRIVER_H_INCLUDE + +#include + +#define DN(A, B, C) (unsigned char)(A | ((B & 0x10) << 3)),(unsigned char)(((B << 4) & 0xFF) | (C >> 8)),(unsigned char)(C & 0xFF) + +#define C_3 0 +#define Cs3 1 +#define D_3 2 +#define Ds3 3 +#define E_3 4 +#define F_3 5 +#define Fs3 6 +#define G_3 7 +#define Gs3 8 +#define A_3 9 +#define As3 10 +#define B_3 11 +#define C_4 12 +#define Cs4 13 +#define D_4 14 +#define Ds4 15 +#define E_4 16 +#define F_4 17 +#define Fs4 18 +#define G_4 19 +#define Gs4 20 +#define A_4 21 +#define As4 22 +#define B_4 23 +#define C_5 24 +#define Cs5 25 +#define D_5 26 +#define Ds5 27 +#define E_5 28 +#define F_5 29 +#define Fs5 30 +#define G_5 31 +#define Gs5 32 +#define A_5 33 +#define As5 34 +#define B_5 35 +#define C_6 36 +#define Cs6 37 +#define D_6 38 +#define Ds6 39 +#define E_6 40 +#define F_6 41 +#define Fs6 42 +#define G_6 43 +#define Gs6 44 +#define A_6 45 +#define As6 46 +#define B_6 47 +#define C_7 48 +#define Cs7 49 +#define D_7 50 +#define Ds7 51 +#define E_7 52 +#define F_7 53 +#define Fs7 54 +#define G_7 55 +#define Gs7 56 +#define A_7 57 +#define As7 58 +#define B_7 59 +#define C_8 60 +#define Cs8 61 +#define D_8 62 +#define Ds8 63 +#define E_8 64 +#define F_8 65 +#define Fs8 66 +#define G_8 67 +#define Gs8 68 +#define A_8 69 +#define As8 70 +#define B_8 71 +#define LAST_NOTE 72 +#define ___ 90 + +// tick is a tick number; the high byte of param is channel and the low byte of param is routine id +typedef void (*hUGERoutine_t)(unsigned char tick, unsigned int param); + +typedef struct hUGEDutyInstr_t { + const unsigned char sweep; + const unsigned char len_duty; + const unsigned char envelope; + const unsigned char * subpattern; + const unsigned char highmask; +} hUGEDutyInstr_t; + +typedef struct hUGEWaveInstr_t { + const unsigned char length; + const unsigned char volume; + const unsigned char waveform; + const unsigned char * subpattern; + const unsigned char highmask; +} hUGEWaveInstr_t; + +typedef struct hUGENoiseInstr_t { + const unsigned char envelope; + const unsigned char * subpattern; + const unsigned char highmask; + const unsigned char unused1; + const unsigned char unused2; +} hUGENoiseInstr_t; + +typedef struct hUGESong_t { + unsigned char tempo; + const unsigned char * order_cnt; + const unsigned char ** order1, ** order2, ** order3, ** order4; + const hUGEDutyInstr_t * duty_instruments; + const hUGEWaveInstr_t * wave_instruments; + const hUGENoiseInstr_t * noise_instruments; + const hUGERoutine_t ** routines; + const unsigned char * waves; +} hUGESong_t; + +// initialize the driver with song data +void hUGE_init(const hUGESong_t * song); + +// driver routine +void hUGE_dosound(void); + +enum hUGE_channel_t {HT_CH1 = 0, HT_CH2, HT_CH3, HT_CH4}; +enum hUGE_mute_t {HT_CH_PLAY = 0, HT_CH_MUTE}; + +void hUGE_mute_channel(enum hUGE_channel_t ch, enum hUGE_mute_t mute); + +void hUGE_set_position(unsigned char pattern); + +extern volatile unsigned char hUGE_current_wave; + +extern volatile unsigned char hUGE_mute_mask; + +inline void hUGE_reset_wave(void) { + hUGE_current_wave = 100; +} + +#endif diff --git a/src/include/hUGEDriverRoutines.h b/src/include/hUGEDriverRoutines.h new file mode 100644 index 0000000..fa8da7f --- /dev/null +++ b/src/include/hUGEDriverRoutines.h @@ -0,0 +1,15 @@ +#ifndef HUGEDRIVER_ROUTINES_H_INCLUDE +#define HUGEDRIVER_ROUTINES_H_INCLUDE + +#include "hUGEDriver.h" + +void hUGETrackerRoutine(unsigned char tick, unsigned int param) NONBANKED; + +static const hUGERoutine_t routines[] = { + hUGETrackerRoutine, hUGETrackerRoutine, hUGETrackerRoutine, hUGETrackerRoutine, + hUGETrackerRoutine, hUGETrackerRoutine, hUGETrackerRoutine, hUGETrackerRoutine, + hUGETrackerRoutine, hUGETrackerRoutine, hUGETrackerRoutine, hUGETrackerRoutine, + hUGETrackerRoutine, hUGETrackerRoutine, hUGETrackerRoutine, hUGETrackerRoutine +}; + +#endif \ No newline at end of file diff --git a/src/include/input.h b/src/include/input.h new file mode 100644 index 0000000..83649d3 --- /dev/null +++ b/src/include/input.h @@ -0,0 +1,104 @@ +#ifndef INPUT_H +#define INPUT_H + +#include + +#ifdef SGB + #define MAX_JOYPADS 2 +#endif +#define joy (frame_joy) + +/* TRUE if any button is being held */ +#define INPUT_ANY (joy) + +/* TRUE if left is being held on dpad */ +#define INPUT_LEFT (joy & J_LEFT) + +/* TRUE if right is being held on dpad */ +#define INPUT_RIGHT (joy & J_RIGHT) + +/* TRUE if up is being held on dpad */ +#define INPUT_UP (joy & J_UP) + +/* TRUE if down is being held on dpad */ +#define INPUT_DOWN (joy & J_DOWN) + +/* TRUE if left is most recent direction being held on dpad */ +#define INPUT_RECENT_LEFT ((recent_joy & J_LEFT) || (!recent_joy && (joy & J_LEFT))) + +/* TRUE if right is most recent direction being held on dpad */ +#define INPUT_RECENT_RIGHT ((recent_joy & J_RIGHT) || (!recent_joy && (joy & J_RIGHT))) + +/* TRUE if up is most recent direction being held on dpad */ +#define INPUT_RECENT_UP ((recent_joy & J_UP) || (!recent_joy && (joy & J_UP))) + +/* TRUE if down is most recent direction being held on dpad */ +#define INPUT_RECENT_DOWN ((recent_joy & J_DOWN) || (!recent_joy && (joy & J_DOWN))) + +/* TRUE if A button is being held */ +#define INPUT_A (joy & J_A) + +/* TRUE if B button is being held */ +#define INPUT_B (joy & J_B) + +/* TRUE if A OR B button is being held */ +#define INPUT_A_OR_B (joy & (J_A | J_B)) + +/* TRUE if Start button is being held */ +#define INPUT_START (joy & J_START) + +/* TRUE if Select button is being held */ +#define INPUT_SELECT (joy & J_SELECT) + +/* TRUE on first frame that any button is pressed */ +#define INPUT_ANY_PRESSED (joy & ~last_joy) + +/* TRUE on first frame that left is pressed on dpad */ +#define INPUT_LEFT_PRESSED ((joy & ~last_joy) & J_LEFT) + +/* TRUE on first frame that right is pressed on dpad */ +#define INPUT_RIGHT_PRESSED ((joy & ~last_joy) & J_RIGHT) + +/* TRUE on first frame that up is pressed on dpad */ +#define INPUT_UP_PRESSED ((joy & ~last_joy) & J_UP) + +/* TRUE on first frame that down is pressed on dpad */ +#define INPUT_DOWN_PRESSED ((joy & ~last_joy) & J_DOWN) + +/* TRUE on first frame that button is pressed */ +#define INPUT_PRESSED(btn) ((joy & ~last_joy) & (btn)) + +/* TRUE on first frame that A button is pressed */ +#define INPUT_A_PRESSED ((joy & ~last_joy) & J_A) + +/* TRUE on first frame that B button is pressed */ +#define INPUT_B_PRESSED ((joy & ~last_joy) & J_B) + +/* TRUE on first frame that A OR B button is pressed */ +#define INPUT_A_OR_B_PRESSED ((joy & ~last_joy) & (J_A | J_B)) + +/* TRUE on first frame that Start button is pressed */ +#define INPUT_START_PRESSED ((joy & ~last_joy) & J_START) + +/* TRUE on first frame that Select button is pressed */ +#define INPUT_SELECT_PRESSED ((joy & ~last_joy) & J_SELECT) + +#define INPUT_SOFT_RESTART (joy == (J_A | J_B | J_START | J_SELECT)) + +/* resets the input */ +#define INPUT_RESET (last_joy = joy) + +#define NUM_INPUTS 8 + +#define INPUT_DPAD (J_UP | J_DOWN | J_LEFT | J_RIGHT) + + +extern joypads_t joypads; +extern UBYTE frame_joy; +extern UBYTE last_joy; +extern UBYTE recent_joy; + +void input_init(void) BANKED; +void input_update(void) NONBANKED; + +#endif diff --git a/src/include/interrupts.h b/src/include/interrupts.h new file mode 100644 index 0000000..68095e6 --- /dev/null +++ b/src/include/interrupts.h @@ -0,0 +1,14 @@ +#ifndef INTERRUPTS_H_INCLUDE +#define INTERRUPTS_H_INCLUDE + +extern UINT8 hide_sprites; +extern UBYTE show_actors_on_overlay; + +void simple_LCD_isr(void); +void fullscreen_LCD_isr(void); + +void VBL_isr(void); + +void remove_LCD_ISRs(void) BANKED; + +#endif \ No newline at end of file diff --git a/src/include/linked_list.h b/src/include/linked_list.h new file mode 100644 index 0000000..177e628 --- /dev/null +++ b/src/include/linked_list.h @@ -0,0 +1,94 @@ +#ifndef LINKED_LIST_H +#define LINKED_LIST_H + +// #define STRICT_LINKED_LIST + +#define LL_PUSH_HEAD(head, item) \ + (item)->next = (head); \ + (head) = (item) + +#define LL_REMOVE_ITEM(head, item, prev) \ + if (prev) { \ + (prev)->next = (item)->next; \ + } else { \ + (head) = (item)->next; \ + } + +#define LL_REMOVE_HEAD(head) \ + if (head) { \ + (head) = (head)->next; \ + } + +#define DL_PUSH_HEAD(head, item) \ + (item)->prev = 0; \ + (item)->next = (head); \ + if (head) { \ + (head)->prev = (item); \ + } \ + (head) = (item) + +#ifdef STRICT_LINKED_LIST +#define DL_REMOVE_ITEM(head, item) \ + if (head) { \ + /* Hook next to prev */ \ + if ((item)->next && (item)->prev) \ + { \ + /* Middle of list */ \ + (item)->prev->next = (item)->next; \ + (item)->next->prev = (item)->prev; \ + } \ + else if ((item)->next) \ + { \ + /* Start of list */ \ + (item)->next->prev = 0; \ + (head) = (item)->next; \ + } \ + else if ((item)->prev) \ + { \ + /* End of list */ \ + (item)->prev->next = 0; \ + } \ + else \ + { \ + (head) = 0; \ + } \ + (item)->next = (item)->prev = 0; \ + } +#else +#define DL_REMOVE_ITEM(head, item) \ + /* Hook next to prev */ \ + if ((item)->next && (item)->prev) \ + { \ + /* Middle of list */ \ + (item)->prev->next = (item)->next; \ + (item)->next->prev = (item)->prev; \ + } \ + else if ((item)->next) \ + { \ + /* Start of list */ \ + (item)->next->prev = 0; \ + (head) = (item)->next; \ + } \ + else if ((item)->prev) \ + { \ + /* End of list */ \ + (item)->prev->next = 0; \ + } \ + else \ + { \ + (head) = 0; \ + } +#endif + +#define DL_CONTAINS(head_mut, item, found) \ + (found) = 0; \ + while (head_mut) { \ + if ((head_mut) == (item)) \ + { \ + (found) = 1; \ + break; \ + } \ + (head_mut) = (head_mut)->next; \ + } + +#endif diff --git a/src/include/load_save.h b/src/include/load_save.h new file mode 100644 index 0000000..caebdb0 --- /dev/null +++ b/src/include/load_save.h @@ -0,0 +1,26 @@ +#ifndef _LOADSAVE_H_INCLUDE +#define _LOADSAVE_H_INCLUDE + +#include + +#define SRAM_BANKS_TO_SAVE 3 +#define SRAM_BANK_SIZE 0x2000 + +BANKREF_EXTERN(VM_LOAD_SAVE) + +// initializes saving capabilities +void data_init(void) BANKED; + +// save state to SRAM +void data_save(UBYTE slot) BANKED; + +// load state from SRAM +UBYTE data_load(UBYTE slot) BANKED; + +// clear state in SRAM +void data_clear(UBYTE slot) BANKED; + +// peek count VM variables from idx into dest +UBYTE data_peek(UBYTE slot, UINT16 idx, UWORD count, UINT16 * dest) BANKED; + +#endif \ No newline at end of file diff --git a/src/include/macro.h b/src/include/macro.h new file mode 100644 index 0000000..43c79e8 --- /dev/null +++ b/src/include/macro.h @@ -0,0 +1,10 @@ +#ifndef MACRO_H +#define MACRO_H + +// Bit Flags Helpers +#define SET_FLAG(n, f) ((n) |= (f)) +#define CLR_FLAG(n, f) ((n) &= ~(f)) +#define TGL_FLAG(n, f) ((n) ^= (f)) +#define CHK_FLAG(n, f) ((n) & (f)) + +#endif diff --git a/src/include/macro.i b/src/include/macro.i new file mode 100644 index 0000000..52c40e1 --- /dev/null +++ b/src/include/macro.i @@ -0,0 +1,17 @@ +.macro FAR_PTR SYM + .db b'SYM + .dw SYM +.endm +.macro IMPORT_FAR_PTR SYM + .globl SYM, b'SYM + FAR_PTR SYM +.endm + +.macro FAR_PTR_DATA SYM + .db ___bank'SYM + .dw SYM +.endm +.macro IMPORT_FAR_PTR_DATA SYM + .globl SYM, ___bank'SYM + FAR_PTR_DATA SYM +.endm diff --git a/src/include/math.h b/src/include/math.h new file mode 100644 index 0000000..7c64e25 --- /dev/null +++ b/src/include/math.h @@ -0,0 +1,121 @@ +#ifndef MATH_H +#define MATH_H + +#include + +#include +#include + +#include "asm/types.h" + +#define IS_NEG(a) ((uint8_t)(a)&0x80) + +#define U_LESS_THAN(A, B) ((A) - (B)&0x8000u) +#define UBYTE_LESS_THAN(A, B) ((A) - (B)&0x80u) + +#define U_GT_THAN(A, B) ((B) - (A)&0x8000u) +#define UBYTE_GT_THAN(A, B) ((B) - (A)&0x80u) + +#define DISTANCE(A, B) (U_LESS_THAN(A, B) ? (B - A) : (A - B)) + +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#define CLAMP(a, min, max) (((a) < (min)) ? (min) : (((a) > (max)) ? (max) : (a))) + +#define SET_BIT(N, POS) N |= 1 << POS +#define UNSET_BIT(N, POS) N &= ~(1 << POS) +#define GET_BIT(N, POS) ((N & (1 << POS)) != 0) + +#define SET_BIT_MASK(N, MASK) N |= MASK +#define UNSET_BIT_MASK(N, MASK) N &= ~MASK +#define GET_BIT_MASK(N, MASK) (N & MASK) + +#define MOD_2(a) ((a)&1) +#define MOD_4(a) ((a)&3) +#define MOD_8(a) ((a)&7) +#define MOD_16(a) ((a)&15) +#define MOD_32(a) ((a)&31) +#define MOD_64(a) ((a)&63) +#define MOD_128(a) ((a)&127) + +#define MUL_16(a) ((a) << 4) +#define MUL_8(a) ((a) << 3) +#define MUL_4(a) ((a) << 2) +#define MUL_2(a) ((a) << 1) + +#define DIV_16(a) ((a) >> 4) +#define DIV_8(a) ((a) >> 3) +#define DIV_4(a) ((a) >> 2) +#define DIV_2(a) ((a) >> 1) + +#define SIN(a) (sine_wave[(uint8_t)(a)]) +#define COS(a) (sine_wave[(uint8_t)((uint8_t)(a) + 64u)]) + +#define ANGLE_UP 0 +#define ANGLE_RIGHT 64 +#define ANGLE_DOWN 128 +#define ANGLE_LEFT 192 + +#define ANGLE_0DEG 0 +#define ANGLE_45DEG 32 +#define ANGLE_90DEG 64 +#define ANGLE_135DEG 96 +#define ANGLE_180DEG 128 +#define ANGLE_225DEG 160 +#define ANGLE_270DEG 192 +#define ANGLE_315DEG 224 + +#define FLIPPED_DIR(dir) MOD_4((dir) + 2) +#define IS_DIR_HORIZONTAL(dir) ((dir)&01) +#define IS_DIR_VERTICAL(dir) (!((dir)&01)) + +#define N_DIRECTIONS 4 + +typedef struct upoint16_t { + uint16_t x, y; +} upoint16_t; + +typedef struct point16_t { + int16_t x, y; +} point16_t; + +typedef struct point8_t { + int8_t x, y; +} point8_t; + +typedef enum { + DIR_DOWN = 0, + DIR_RIGHT, + DIR_UP, + DIR_LEFT, + DIR_NONE +} direction_e; + +extern const int8_t sine_wave[256]; +extern const point8_t dir_lookup[4]; +extern const uint8_t dir_angle_lookup[4]; + +inline void point_translate_dir(point16_t *point, direction_e dir, uint8_t speed) { + point->x += (int16_t)(dir_lookup[dir].x * speed); + point->y += (int16_t)(dir_lookup[dir].y * speed); +} + +inline void point_translate_dir_word(point16_t *point, direction_e dir, uint16_t speed) { + point->x += (int16_t)(dir_lookup[dir].x * speed); + point->y += (int16_t)(dir_lookup[dir].y * speed); +} + +inline void point_translate_angle(point16_t *point, uint8_t angle, uint8_t speed) { + point->x += ((SIN(angle) * (speed)) >> 7); + point->y -= ((COS(angle) * (speed)) >> 7); +} + +inline void point_translate_angle_to_delta(point16_t *point, uint8_t angle, uint8_t speed) { + point->x = ((SIN(angle) * (speed)) >> 7); + point->y = ((COS(angle) * (speed)) >> 7); +} + +uint8_t isqrt(uint16_t x) NONBANKED; +uint8_t atan2(int16_t y, int16_t x) BANKED; + +#endif diff --git a/src/include/music_manager.h b/src/include/music_manager.h new file mode 100644 index 0000000..97bd32f --- /dev/null +++ b/src/include/music_manager.h @@ -0,0 +1,126 @@ +#ifndef __MUSIC_MANAGER_H_INCLUDE__ +#define __MUSIC_MANAGER_H_INCLUDE__ + +#include "events.h" +#include "sfx_player.h" + +#ifdef GBT_PLAYER +#undef HUGE_TRACKER +#define TRACK_T uint8_t +#include "gbt_player.h" + +#define driver_reset_wave gbt_reset_ch3_instrument +#define driver_update gbt_update + +inline void driver_init(uint8_t bank, const TRACK_T * track, uint8_t loop) { + gbt_play(track, bank, 7); + gbt_loop(loop); +} + +inline uint8_t driver_set_mute_mask(uint8_t mute_mask) { + gbt_enable_channels(~mute_mask & 0x0f); + return mute_mask; +} + +inline void music_setpos(UBYTE pattern, UBYTE row) { + pattern, row; +} +#endif + +#ifdef HUGE_TRACKER +#undef GBT_PLAYER +#define TRACK_T hUGESong_t +#include "hUGEDriver.h" + +#define driver_reset_wave hUGE_reset_wave +#define driver_update hUGE_dosound + +inline void driver_init(uint8_t bank, const TRACK_T * track, uint8_t loop) { + bank; loop; + hUGE_init(track); +} + +inline uint8_t driver_set_mute_mask(uint8_t mute_mask) { + return (hUGE_mute_mask = mute_mask); +} + +inline void music_setpos(UBYTE pattern, UBYTE row) { + row; + hUGE_set_position(pattern); +} +#endif + +extern script_event_t music_events[4]; + +#define MUSIC_SFX_PRIORITY_MINIMAL 0 +#define MUSIC_SFX_PRIORITY_NORMAL 4 +#define MUSIC_SFX_PRIORITY_HIGH 8 + +#define MUSIC_STOP_BANK SFX_STOP_BANK +//#define FORCE_CUT_SFX // don't cut by default + +extern volatile uint8_t music_current_track_bank; +extern uint8_t music_mute_mask; +extern uint8_t music_effective_mute; +extern const TRACK_T * music_next_track; +extern const TRACK_T * music_current_track; +extern uint8_t music_global_mute_mask; +extern uint8_t music_sfx_priority; + +void music_init_driver(void) BANKED; + +void music_init_events(uint8_t preserve) BANKED; +void music_events_update(void) NONBANKED; +uint8_t music_events_poll(void) BANKED; + +inline void music_sound_cut(void) { + sfx_sound_cut(); +} + +#define MUSIC_CH_1 SFX_CH_1 +#define MUSIC_CH_2 SFX_CH_2 +#define MUSIC_CH_3 SFX_CH_3 +#define MUSIC_CH_4 SFX_CH_4 + +inline uint8_t music_sound_cut_mask(uint8_t mask) { + return sfx_sound_cut_mask(mask); +} + +void music_play_isr(void); + +inline void music_load(uint8_t bank, const TRACK_T * data) { + if ((bank == music_current_track_bank) && (data == music_current_track)) return; + music_current_track_bank = MUSIC_STOP_BANK, music_current_track = data, music_next_track = data; music_current_track_bank = bank; +} + +void music_pause(uint8_t pause); + +inline void music_stop(void) { + music_current_track_bank = MUSIC_STOP_BANK, music_sound_cut(); +} + +inline void music_setup_timer(void) { + TMA_REG = ((_cpu == CGB_TYPE) && (*(uint8_t *)0x0143 & 0x80)) ? 0x80u : 0xC0u; + TAC_REG = 0x07u; +} + +inline void music_init(void) { + music_current_track_bank = MUSIC_STOP_BANK; + sfx_reset_sample(); + sfx_sound_init(); + music_sound_cut(); +} + +#define MUTE_MASK_NONE 0 +#define MUTE_MASK_WAVE MUSIC_CH_3 + +inline void music_play_sfx(uint8_t bank, const uint8_t * sample, uint8_t mute_mask, uint8_t priority) { + if (priority < music_sfx_priority) return; + sfx_play_bank = SFX_STOP_BANK; + music_sfx_priority = priority; + music_sound_cut_mask(music_mute_mask); + music_mute_mask = mute_mask; + sfx_set_sample(bank, sample); +} + +#endif \ No newline at end of file diff --git a/src/include/palette.h b/src/include/palette.h new file mode 100644 index 0000000..0860d6a --- /dev/null +++ b/src/include/palette.h @@ -0,0 +1,26 @@ +#ifndef PALETTE_H +#define PALETTE_H + +#include + +#include "compat.h" +#include "gbs_types.h" + +extern UBYTE DMG_palette[3]; +extern palette_entry_t SprPalette[8]; +extern palette_entry_t BkgPalette[8]; + +void palette_init(void) BANKED; + +#ifdef CGB +void CGBZeroPalette(UBYTE reg) OLDCALL BANKED; +#endif + +#ifdef SGB +#define SGB_PALETTES_NONE 0 +#define SGB_PALETTES_01 1 +#define SGB_PALETTES_23 2 +void SGBTransferPalettes(UBYTE palettes) BANKED; +#endif + +#endif diff --git a/src/include/parallax.h b/src/include/parallax.h new file mode 100644 index 0000000..3901595 --- /dev/null +++ b/src/include/parallax.h @@ -0,0 +1,26 @@ +#ifndef PARALLAX_H_INCLUDE +#define PARALLAX_H_INCLUDE + +#include + +#include "compat.h" + +#define PARALLAX_MAX_HEIGHT 20 +#define PARALLAX_STEP(start, end, shift) {0, (end)?(((end) << 3) - 1):0, (shift), (start), (end)?((end)-(start)):(PARALLAX_MAX_HEIGHT-(start)), 0} + +typedef struct parallax_row_t { + UBYTE scx; // x scroll position for current slice + UBYTE next_y; // y position of next LYC + INT8 shift; // shift of scroll position within the world + UBYTE start_tile; + UBYTE tile_height; + UBYTE shadow_scx; +} parallax_row_t; + +extern parallax_row_t parallax_rows[3]; +extern parallax_row_t * parallax_row; + +void parallax_init(void) BANKED; +void parallax_LCD_isr(void) NONBANKED; + +#endif \ No newline at end of file diff --git a/src/include/projectiles.h b/src/include/projectiles.h new file mode 100644 index 0000000..036cdca --- /dev/null +++ b/src/include/projectiles.h @@ -0,0 +1,24 @@ +#ifndef PROJECTILES_H +#define PROJECTILES_H + +#include + +#include "math.h" +#include "collision.h" +#include "gbs_types.h" + +#define MAX_PROJECTILES 5 +#define MAX_PROJECTILE_DEFS 5 + +extern projectile_def_t projectile_defs[MAX_PROJECTILES]; + +void projectiles_init(void) BANKED; +void projectiles_update(void) NONBANKED; +void projectiles_render(void) NONBANKED; + +#define PROJECTILE_ANIM_NOLOOP 0x01 +#define PROJECTILE_STRONG 0x02 + +void projectile_launch(UBYTE index, point16_t *pos, UBYTE angle, UBYTE flags) BANKED; + +#endif diff --git a/src/include/rtc.h b/src/include/rtc.h new file mode 100644 index 0000000..7f104a9 --- /dev/null +++ b/src/include/rtc.h @@ -0,0 +1,51 @@ +#ifndef _RTC_H_INCLUDE +#define _RTC_H_INCLUDE + +#include + +#include "system.h" + +volatile UBYTE AT(0x4000) RTC_SELECT_REG; +volatile UBYTE AT(0x6000) RTC_LATCH_REG; +volatile UBYTE AT(0xA000) RTC_VALUE_REG; + +#define RTC_TIMER_STOP 0b01000000 + +typedef enum { + RTC_VALUE_SEC = 0x08, + RTC_VALUE_MIN, + RTC_VALUE_HOUR, + RTC_VALUE_DAY +} rtc_dateparts_e; + +#define RTC_VALUE_FLAGS 0x0c + +inline void RTC_SELECT(UBYTE what) { SWITCH_RAM_BANK(what, RAM_BANKS_ONLY); } +inline void RTC_LATCH(void) { RTC_LATCH_REG = 0; RTC_LATCH_REG = 1; } + +inline UWORD RTC_GET(const rtc_dateparts_e part) { + UWORD v; + RTC_SELECT(part); + v = RTC_VALUE_REG; + if (part == RTC_VALUE_DAY) { + RTC_SELECT(RTC_VALUE_FLAGS); + if (RTC_VALUE_REG & 0x01) v |= 0x0100u; + } + return v; +} + +inline void RTC_SET(const rtc_dateparts_e part, const UWORD v) { + RTC_SELECT(part); + RTC_VALUE_REG = v; + if (part == RTC_VALUE_DAY) { + RTC_SELECT(RTC_VALUE_FLAGS); + RTC_VALUE_REG = (RTC_VALUE_REG & 0x0e) | (UBYTE)((v >> 8) & 0x01); + } +} + +inline void RTC_START(const UBYTE start) { + RTC_SELECT(RTC_VALUE_FLAGS); + if (start) RTC_VALUE_REG &= ~RTC_TIMER_STOP; else RTC_VALUE_REG |= RTC_TIMER_STOP; +} + +#endif \ No newline at end of file diff --git a/src/include/scroll.h b/src/include/scroll.h new file mode 100644 index 0000000..e674b94 --- /dev/null +++ b/src/include/scroll.h @@ -0,0 +1,80 @@ +#ifndef SCROLL_H +#define SCROLL_H + +#include + +#include "compat.h" +#include "parallax.h" + +#define SCROLL_BANK 1 +#define SCREEN_TILES_W 20 // 160 >> 3 = 20 +#define SCREEN_TILES_H 18 // 144 >> 3 = 18 +#define SCREEN_PAD_LEFT 1 +#define SCREEN_PAD_RIGHT 2 +#define SCREEN_PAD_TOP 1 +#define SCREEN_PAD_BOTTOM 2 +#define SCREEN_TILE_REFRES_W (SCREEN_TILES_W + SCREEN_PAD_LEFT + SCREEN_PAD_RIGHT) +#define SCREEN_TILE_REFRES_H (SCREEN_TILES_H + SCREEN_PAD_TOP + SCREEN_PAD_BOTTOM) +#define PENDING_BATCH_SIZE 7 + +extern INT16 scroll_x; +extern INT16 scroll_y; +extern INT16 draw_scroll_x; +extern INT16 draw_scroll_y; +extern UINT16 scroll_x_max; +extern UINT16 scroll_y_max; +extern BYTE scroll_offset_x; +extern BYTE scroll_offset_y; +extern UINT8 pending_w_i; +extern UINT8 pending_h_i; + +/** + * Resets scroll settings on engine start + */ +void scroll_reset(void) BANKED; + +/** + * Initialise scroll variables, call on scene load + */ +void scroll_init(void) BANKED; + +/** + * Update scroll position and load in any newly visible background tiles and actors + */ +void scroll_update(void) BANKED; + +/** + * Resets scroll and update the whole screen + */ +void scroll_repaint(void) BANKED; + +/** + * Get base address of window map + */ +UINT8 * GetWinAddr(void) OLDCALL PRESERVES_REGS(b, c, h, l); + +/** + * Get base address of background map + */ +UINT8 * GetBkgAddr(void) OLDCALL PRESERVES_REGS(b, c, h, l); + +/** + * Scrolls rectangle area of VRAM filemap by base address 1 row up + * @param base_addr address of top-left corner + * @param w width of the area + * @param h height of the area + * @param fill tile id to fill the bottom row + */ +void scroll_rect(UBYTE * base_addr, UBYTE w, UBYTE h, UBYTE fill) OLDCALL BANKED PRESERVES_REGS(b, c); + +/** + * copies scroll position variables into double buffered copies + * which are used for actual scrolling next frame + */ +inline void scroll_shadow_update(void) { + parallax_rows[0].scx = parallax_rows[0].shadow_scx; + parallax_rows[1].scx = parallax_rows[1].shadow_scx; + parallax_rows[2].scx = parallax_rows[2].shadow_scx; +} + +#endif diff --git a/src/include/sfx_player.h b/src/include/sfx_player.h new file mode 100644 index 0000000..23e1fc0 --- /dev/null +++ b/src/include/sfx_player.h @@ -0,0 +1,51 @@ +#ifndef __SFX_PLAYER_H_INCLUDE__ +#define __SFX_PLAYER_H_INCLUDE__ + +#include +#include + +#define SFX_STOP_BANK 0xffu +#define SFX_MUTE_MASK(VARNAME) ( (uint8_t) & __mute_mask_ ## VARNAME ) + +extern volatile uint8_t sfx_play_bank; +extern const uint8_t * sfx_play_sample; +extern uint8_t sfx_frame_skip; + +#define SFX_CH_RETRIGGER 0b11000000 +#define SFX_CH_ENABLE 0b10000000 + +inline void sfx_sound_init(void) { + NR52_REG = SFX_CH_ENABLE, NR51_REG = 0xFF, NR50_REG = 0x77; // enable sound +} + +inline void sfx_sound_cut(void) { + NR12_REG = NR22_REG = NR32_REG = NR42_REG = 0; + NR14_REG = NR24_REG = NR44_REG = SFX_CH_RETRIGGER; + NR51_REG = 0xFF; +} + +#define SFX_CH_1 1 +#define SFX_CH_2 2 +#define SFX_CH_3 4 +#define SFX_CH_4 8 + +inline uint8_t sfx_sound_cut_mask(uint8_t mask) { + if (mask & SFX_CH_1) NR12_REG = 0, NR14_REG = SFX_CH_RETRIGGER; + if (mask & SFX_CH_2) NR22_REG = 0, NR24_REG = SFX_CH_RETRIGGER; + if (mask & SFX_CH_3) NR32_REG = 0; + if (mask & SFX_CH_4) NR42_REG = 0, NR44_REG = SFX_CH_RETRIGGER; + NR51_REG = 0xFF; + return mask; +} + +inline void sfx_reset_sample(void) { + sfx_play_bank = SFX_STOP_BANK, sfx_play_sample = NULL; +} + +inline void sfx_set_sample(uint8_t bank, const uint8_t * sample) { + sfx_play_bank = SFX_STOP_BANK, sfx_frame_skip = 0, sfx_play_sample = sample, sfx_play_bank = bank; +} + +uint8_t sfx_play_isr(void); + +#endif \ No newline at end of file diff --git a/src/include/sgb_border.h b/src/include/sgb_border.h new file mode 100644 index 0000000..1d1595c --- /dev/null +++ b/src/include/sgb_border.h @@ -0,0 +1,14 @@ +#ifndef __SGBBORDER_H_INCLUDE +#define __SGBBORDER_H_INCLUDE + +#include + +#define SNES_RGB(R,G,B) (UINT16)((B) << 10 | (G) << 5 | (R)) + +/** sets SGB border */ + +void set_sgb_border(unsigned char * tiledata, size_t tiledata_size, UBYTE tiledata_bank, + unsigned char * tilemap, size_t tilemap_size, UBYTE tilemap_bank, + unsigned char * palette, size_t palette_size, UBYTE palette_bank) BANKED; + +#endif \ No newline at end of file diff --git a/src/include/shadow.h b/src/include/shadow.h new file mode 100644 index 0000000..05f337c --- /dev/null +++ b/src/include/shadow.h @@ -0,0 +1,21 @@ +#ifndef _SHADOW_H_INCLUDE +#define _SHADOW_H_INCLUDE + +#include "actor.h" + +extern volatile OAM_item_t shadow_OAM2[40]; + +inline void toggle_shadow_OAM(void) { + if (_shadow_OAM_base == (UBYTE)((UWORD)&shadow_OAM >> 8)) { + __render_shadow_OAM = (UBYTE)((UWORD)&shadow_OAM2 >> 8); + } else { + __render_shadow_OAM = (UBYTE)((UWORD)&shadow_OAM >> 8); + } + allocated_hardware_sprites = 0; +} +inline void activate_shadow_OAM(void) { + hide_sprites_range(allocated_hardware_sprites, MAX_HARDWARE_SPRITES); + _shadow_OAM_base = __render_shadow_OAM; +} + +#endif \ No newline at end of file diff --git a/src/include/sio.h b/src/include/sio.h new file mode 100644 index 0000000..950ab10 --- /dev/null +++ b/src/include/sio.h @@ -0,0 +1,48 @@ +#ifndef _SIO_H_INCLUDE +#define _SIO_H_INCLUDE + +#include + +#include "compat.h" + +#define LINK_MAX_PACKET_LENGTH 32 + +#define LINK_MODE_NONE 0 +#define LINK_MODE_MASTER 1 +#define LINK_MODE_SLAVE 2 + +extern volatile UBYTE SIO_status; +void SIO_send_byte(UBYTE data) OLDCALL PRESERVES_REGS(b, c, d, e, h, l); +void SIO_receive(void) PRESERVES_REGS(b, c, d, e, h, l); + +extern UBYTE link_operation_mode; + +extern UBYTE link_packet[]; +extern UBYTE link_byte_sent; + +extern UBYTE link_packet_len; +extern UBYTE * link_packet_ptr; +extern UBYTE link_packet_received; + +extern UBYTE link_packet_snd_len; +extern const UBYTE * link_packet_snd_ptr; +extern UBYTE link_packet_sent; + +void SIO_init(void) BANKED; + +inline void SIO_set_mode(UBYTE mode) { + link_operation_mode = mode; + if (mode == LINK_MODE_SLAVE) { + SIO_receive(); + } +} + +inline void SIO_send_async(UBYTE len, const UBYTE * data) { + link_packet_snd_len = len; + link_packet_snd_ptr = data; + link_byte_sent = FALSE; + SIO_send_byte(len); + link_packet_sent = (link_packet_snd_len == 0); +} + +#endif diff --git a/src/include/states/logo.h b/src/include/states/logo.h new file mode 100644 index 0000000..7cd13d4 --- /dev/null +++ b/src/include/states/logo.h @@ -0,0 +1,9 @@ +#ifndef STATE_LOGO_H +#define STATE_LOGO_H + +#include + +void logo_init(void) BANKED; +void logo_update(void) BANKED; + +#endif diff --git a/src/include/states/topdown.h b/src/include/states/topdown.h new file mode 100644 index 0000000..dce7b8a --- /dev/null +++ b/src/include/states/topdown.h @@ -0,0 +1,11 @@ +#ifndef STATE_TOP_DOWN_H +#define STATE_TOP_DOWN_H + +#include + +void topdown_init(void) BANKED; +void topdown_update(void) BANKED; + +extern UBYTE topdown_grid; + +#endif diff --git a/src/include/states_caller.h b/src/include/states_caller.h new file mode 100644 index 0000000..dd34571 --- /dev/null +++ b/src/include/states_caller.h @@ -0,0 +1,9 @@ +#ifndef __STATESCALLER_H_INCLUDE +#define __STATESCALLER_H_INCLUDE + +#include + +void state_init(void); +void state_update(void); + +#endif \ No newline at end of file diff --git a/src/include/system.h b/src/include/system.h new file mode 100644 index 0000000..c2cd704 --- /dev/null +++ b/src/include/system.h @@ -0,0 +1,18 @@ +#ifndef _SYSTEM_H_INCLUDE +#define _SYSTEM_H_INCLUDE + +#include + +// System fields +extern UBYTE _is_CGB; +extern UBYTE _is_SGB; + +// SRAM bank switching with saving of state +extern volatile UBYTE _current_ram_bank; + +#define RAM_BANKS_ONLY 0x0fu +#define RAM_BANKS_AND_FLAGS 0xffu + +inline void SWITCH_RAM_BANK(UBYTE bank, UBYTE mask) { SWITCH_RAM(_current_ram_bank = ((_current_ram_bank & ~mask) | (bank & mask))); } + +#endif \ No newline at end of file diff --git a/src/include/trigger.h b/src/include/trigger.h new file mode 100644 index 0000000..204a260 --- /dev/null +++ b/src/include/trigger.h @@ -0,0 +1,51 @@ +#ifndef TRIGGER_H +#define TRIGGER_H + +#include + +#include "gbs_types.h" +#include "math.h" + +#define MAX_TRIGGERS 31 +#define MAX_ACTIVE_TRIGGERS 11 +#define NO_TRIGGER_COLLISON 0xFF + +extern trigger_t triggers[MAX_TRIGGERS]; +extern UBYTE triggers_len; + +/** + * Resets trigger collision flags on scene start + */ +void trigger_reset(void) BANKED; + +/** + * Find trigger at tile {tx,ty} + * + * @param tx Left tile + * @param ty Top tile + * @return tile index or NO_TRIGGER_COLLISON if not found + */ +UBYTE trigger_at_tile(UBYTE tx_a, UBYTE ty_a) BANKED; + +/** + * Run script for trigger specified trigger + * + * @param i Trigger index + */ +void trigger_interact(UBYTE i) BANKED; + +/** + * Run script for trigger at tile {tx,ty} if this tile was the + * most recently activated trigger tile don't reactivate + * (i.e. player must move to another tile first) + * + * @param tx Left tile + * @param ty Top tile + * @param force Force trigger to activate without changing tile + */ +UBYTE trigger_activate_at(UBYTE tx, UBYTE ty, UBYTE force) BANKED; + +UBYTE trigger_activate_at_intersection(bounding_box_t *bb, point16_t *offset, UBYTE force) BANKED; +UBYTE trigger_at_intersection(bounding_box_t *bb, point16_t *offset) BANKED; + +#endif diff --git a/src/include/ui.h b/src/include/ui.h new file mode 100644 index 0000000..ab3ef66 --- /dev/null +++ b/src/include/ui.h @@ -0,0 +1,116 @@ +#ifndef UI_H +#define UI_H + +#include + +#include "gbs_types.h" +#include "bankdata.h" + +#define MENU_CANCEL_LAST 1 +#define MENU_CANCEL_B 2 +#define MENU_SET_START 4 + +#define TEXT_BUFFER_START 0xCCu +#define TEXT_BUFFER_START_BANK1 0xC0u +#define TEXT_BUFFER_LEN ((UBYTE)(0x100 - TEXT_BUFFER_START)) +#define TEXT_BKG_FILL_W 0x00u +#define TEXT_BKG_FILL_B 0xffu +#define TEXT_MAX_LENGTH 255 + +#define UI_DEFAULT_PALETTE 7 + +#define MENU_OPEN_Y 112 +#define WIN_LEFT_X 7 +#define MENU_CLOSED_Y (UBYTE)(MAXWNDPOSY + 1U) +#define MENU_LAYOUT_INITIAL_X 88 +#define MENU_CANCEL_ON_LAST_OPTION 0x01U +#define MENU_CANCEL_ON_B_PRESSED 0x02U + +#define ui_bkg_tile 0x07u +#define ui_white_tile 0xC9u +#define ui_black_tile 0xCAu + +#define ui_cursor_tile 0xCBu +#define ui_bg_tile 0xC4u + +extern UBYTE win_pos_x, win_dest_pos_x; +extern UBYTE win_pos_y, win_dest_pos_y; +extern UBYTE win_speed; + +extern UBYTE text_drawn; + +#define TEXT_OPT_DEFAULT 0 +#define TEXT_OPT_PRESERVE_POS 1 + +extern UBYTE text_options; +extern UBYTE text_in_speed; +extern UBYTE text_out_speed; +extern UBYTE text_draw_speed; +extern UBYTE text_ff_joypad; +extern UBYTE text_ff; +extern UBYTE text_bkg_fill; + +extern unsigned char ui_text_data[TEXT_MAX_LENGTH]; + +#define UI_PRINT_LEFTTORIGHT 0 +#define UI_PRINT_RIGHTTOLEFT 1 + +extern UBYTE vwf_direction; +extern font_desc_t vwf_current_font_desc; +extern UBYTE vwf_current_font_bank; +extern UBYTE vwf_current_font_idx; +extern UBYTE vwf_tile_data[16 * 2]; + +extern UBYTE * text_render_base_addr; + +extern UBYTE * text_scroll_addr; +extern UBYTE text_scroll_width, text_scroll_height; +extern UBYTE text_scroll_fill; + +extern UBYTE text_sound_mask; +extern UBYTE text_sound_bank; +extern const UBYTE * text_sound_data; + +extern const UBYTE ui_time_masks[]; + +#ifdef CGB +extern UBYTE overlay_priority; +extern UBYTE text_palette; +#endif + +void ui_init(void) BANKED; +void ui_update(void) NONBANKED; // critical path, NONBANKED for speed + +void ui_load_tiles(void) BANKED; + +void ui_set_start_tile(UBYTE start_tile, UBYTE start_tile_bank) BANKED; + +#define UI_WAIT_WINDOW 1 +#define UI_WAIT_TEXT 2 +#define UI_WAIT_BTN_A 4 +#define UI_WAIT_BTN_B 8 +#define UI_WAIT_BTN_ANY 16 + +#define UI_DRAW_FRAME 1 +#define UI_AUTOSCROLL 2 + +#define UI_IN_SPEED -1 +#define UI_OUT_SPEED -2 +#define UI_SPEED_INSTANT -3 + +void ui_run_modal(UBYTE wait_flags) BANKED; // process UI until closed + +inline void ui_set_pos(UBYTE x, UBYTE y) { + win_pos_y = win_dest_pos_y = y; + win_pos_x = win_dest_pos_x = x; +} + +inline void ui_move_to(UBYTE x, UBYTE y, BYTE speed) { + win_dest_pos_y = y; + win_dest_pos_x = x; + if (speed == UI_SPEED_INSTANT) win_pos_y = y, win_pos_x = x; else win_speed = speed; +} + +UBYTE ui_run_menu(menu_item_t * start_item, UBYTE bank, UBYTE options, UBYTE count, UBYTE start_index) BANKED; + +#endif diff --git a/src/include/vm.h b/src/include/vm.h new file mode 100644 index 0000000..ca9e099 --- /dev/null +++ b/src/include/vm.h @@ -0,0 +1,183 @@ +#ifndef _VM_H_INCLUDE +#define _VM_H_INCLUDE + +#include +#include + +#ifdef VM_DEBUG_OUTPUT + #include +#endif + +#include "compat.h" + +BANKREF_EXTERN(VM_MAIN) + +#define FN_ARG0 -1 +#define FN_ARG1 -2 +#define FN_ARG2 -3 +#define FN_ARG3 -4 +#define FN_ARG4 -5 +#define FN_ARG5 -6 +#define FN_ARG6 -7 +#define FN_ARG7 -8 + +#if defined(NINTENDO) +#define STEP_FUNC_ATTR +typedef UWORD DUMMY0_t; +typedef UWORD DUMMY1_t; +#elif defined(SEGA) +#define STEP_FUNC_ATTR Z88DK_FASTCALL +typedef UBYTE DUMMY0_t; +typedef UWORD DUMMY1_t; +#endif + +typedef void * SCRIPT_CMD_FN; + +typedef struct SCRIPT_CMD { + SCRIPT_CMD_FN fn; + UBYTE fn_bank; + UBYTE args_len; +} SCRIPT_CMD; + +#define FAR_CALL_EX(addr, seg, typ, ...) (__call_banked_addr=(addr),__call_banked_bank=(seg),((typ)(&__call__banked))(__VA_ARGS__)) +typedef UBYTE (*SCRIPT_UPDATE_FN)(void * THIS, UBYTE start, UWORD * stack_frame) OLDCALL BANKED; + +#define VM_REF_TO_PTR(idx) (void *)(((idx) < 0) ? THIS->stack_ptr + (idx) : script_memory + (idx)) +#define VM_GLOBAL(idx) script_memory[(idx)] + +typedef struct SCRIPT_CTX { + const UBYTE * PC; + UBYTE bank; + // linked list of contexts for the multitasking + struct SCRIPT_CTX * next; + // update function + void * update_fn; + UBYTE update_fn_bank; + // VM stack pointer + UWORD * stack_ptr; + UWORD * base_addr; + // thread control + UBYTE ID; + UWORD * hthread; + UBYTE terminated; + // waitable state + UBYTE waitable; + UBYTE lock_count; + UBYTE flags; +} SCRIPT_CTX; + +#define INSTRUCTION_SIZE 1 + +// maximum number of concurrent running VM threads +#define VM_MAX_CONTEXTS 16 +// stack size of each VM thread +#define VM_CONTEXT_STACK_SIZE 64 +// number of shared variables +#define VM_HEAP_SIZE 768 +// quant size +#define INSTRUCTIONS_PER_QUANT 0x10 +// termination flag +#define SCRIPT_TERMINATED 0x8000 + +// logical operators +#define VM_OP_EQ 1 +#define VM_OP_LT 2 +#define VM_OP_LE 3 +#define VM_OP_GT 4 +#define VM_OP_GE 5 +#define VM_OP_NE 6 +#define VM_OP_AND 7 +#define VM_OP_OR 8 +#define VM_OP_NOT 9 + +// shared context memory +extern UWORD script_memory[VM_HEAP_SIZE + (VM_MAX_CONTEXTS * VM_CONTEXT_STACK_SIZE)]; // maximum stack depth is 16 words + +// contexts for executing scripts +// ScriptRunnerInit(), ExecuteScript(), ScriptRunnerUpdate() manipulate these contexts +extern SCRIPT_CTX CTXS[VM_MAX_CONTEXTS]; +extern SCRIPT_CTX * first_ctx, * free_ctxs; +// context pointers for script_runner +extern SCRIPT_CTX * old_executing_ctx, * executing_ctx; + +// lock state +extern UBYTE vm_lock_state; +// loaded state +extern UBYTE vm_loaded_state; +// exception flag and parameters +extern UBYTE vm_exception_code; +extern UBYTE vm_exception_params_length; +extern UBYTE vm_exception_params_bank; +extern const void * vm_exception_params_offset; + +// script core functions +void vm_push(SCRIPT_CTX * THIS, UWORD value) OLDCALL BANKED; +UWORD vm_pop(SCRIPT_CTX * THIS, UBYTE n) OLDCALL BANKED; +void vm_call(SCRIPT_CTX * THIS, UBYTE * pc) OLDCALL BANKED; +void vm_ret(SCRIPT_CTX * THIS, UBYTE n) OLDCALL BANKED; +void vm_call_far(SCRIPT_CTX * THIS, UBYTE bank, UBYTE * pc) OLDCALL BANKED; +void vm_ret_far(SCRIPT_CTX * THIS, UBYTE n) OLDCALL BANKED; +void vm_loop(SCRIPT_CTX * THIS, INT16 idx, UINT8 * pc, UBYTE n) OLDCALL BANKED; +void vm_switch(DUMMY0_t dummy0, DUMMY1_t dummy1, SCRIPT_CTX * THIS, INT16 idx, UBYTE size, UBYTE n) OLDCALL NONBANKED; +void vm_jump(SCRIPT_CTX * THIS, UBYTE * pc) OLDCALL BANKED; +void vm_invoke(SCRIPT_CTX * THIS, UBYTE bank, UBYTE * fn, UBYTE nparams, INT16 idx) OLDCALL BANKED; +void vm_beginthread(DUMMY0_t dummy0, DUMMY1_t dummy1, SCRIPT_CTX * THIS, UBYTE bank, UBYTE * pc, INT16 idx, UBYTE nargs) OLDCALL NONBANKED; +void vm_if(SCRIPT_CTX * THIS, UBYTE condition, INT16 idxA, INT16 idxB, UBYTE * pc, UBYTE n) OLDCALL BANKED; +void vm_if_const(SCRIPT_CTX * THIS, UBYTE condition, INT16 idxA, INT16 B, UBYTE * pc, UBYTE n) OLDCALL BANKED; +void vm_push_value(SCRIPT_CTX * THIS, INT16 idx) OLDCALL BANKED; +void vm_push_value_ind(SCRIPT_CTX * THIS, INT16 idx) OLDCALL BANKED; +void vm_push_reference(SCRIPT_CTX * THIS, INT16 idx) OLDCALL BANKED; +void vm_reserve(SCRIPT_CTX * THIS, INT8 ofs) OLDCALL BANKED; +void vm_set(SCRIPT_CTX * THIS, INT16 idxA, INT16 idxB) OLDCALL BANKED; +void vm_set_const(SCRIPT_CTX * THIS, INT16 idx, UWORD value) OLDCALL BANKED; +void vm_rpn(DUMMY0_t dummy0, DUMMY1_t dummy1, SCRIPT_CTX * THIS) OLDCALL NONBANKED; +void vm_join(SCRIPT_CTX * THIS, INT16 idx) OLDCALL BANKED; +void vm_terminate(SCRIPT_CTX * THIS, INT16 idx) OLDCALL BANKED; +void vm_idle(SCRIPT_CTX * THIS) OLDCALL BANKED; +void vm_get_tlocal(SCRIPT_CTX * THIS, INT16 idxA, INT16 idxB) OLDCALL BANKED; +void vm_get_far(DUMMY0_t dummy0, DUMMY1_t dummy1, SCRIPT_CTX * THIS, INT16 idxA, UBYTE size, UBYTE bank, UBYTE * addr) OLDCALL NONBANKED; +void vm_init_rng(SCRIPT_CTX * THIS, INT16 idx) OLDCALL BANKED; +void vm_rand(SCRIPT_CTX * THIS, INT16 idx, UINT16 min, UINT16 limit) OLDCALL BANKED; +void vm_lock(SCRIPT_CTX * THIS) OLDCALL BANKED; +void vm_unlock(SCRIPT_CTX * THIS) OLDCALL BANKED; +void vm_raise(SCRIPT_CTX * THIS, UBYTE code, UBYTE size) OLDCALL BANKED; +void vm_set_indirect(SCRIPT_CTX * THIS, INT16 idxA, INT16 idxB) OLDCALL BANKED; +void vm_get_indirect(SCRIPT_CTX * THIS, INT16 idxA, INT16 idxB) OLDCALL BANKED; +void vm_test_terminate(SCRIPT_CTX * THIS, UBYTE flags) OLDCALL BANKED; +void vm_poll_loaded(SCRIPT_CTX * THIS, INT16 idx) OLDCALL BANKED; +void vm_call_native(DUMMY0_t dummy0, DUMMY1_t dummy1, SCRIPT_CTX * THIS, UINT8 bank, const void * ptr) OLDCALL NONBANKED; +void vm_memset(SCRIPT_CTX * THIS, INT16 idx, INT16 value, INT16 count) OLDCALL BANKED; +void vm_memcpy(SCRIPT_CTX * THIS, INT16 idxA, INT16 idxB, INT16 count) OLDCALL BANKED; + +// return zero if script end +// bank with VM code must be active +UBYTE VM_STEP(SCRIPT_CTX * CTX) NAKED NONBANKED STEP_FUNC_ATTR; + +// return TRUE if VM is in locked state +inline UBYTE VM_ISLOCKED(void) { + return (vm_lock_state != 0); +} + +// enable check for pointer in script_execute(), disabled by default +// #define SAFE_SCRIPT_EXECUTE + +// initialize script runner contexts +void script_runner_init(UBYTE reset) BANKED; +// execute a script in the new allocated context +SCRIPT_CTX * script_execute(UBYTE bank, UBYTE * pc, UWORD * handle, UBYTE nargs, ...) BANKED; +// terminate script by ID; returns non zero if no such thread is running +UBYTE script_terminate(UBYTE ID) BANKED; +// detach script from the monitoring variable +UBYTE script_detach_hthread(UBYTE ID) BANKED; + +#define RUNNER_DONE 0 +#define RUNNER_IDLE 1 +#define RUNNER_BUSY 2 +#define RUNNER_EXCEPTION 3 + +#define EXCEPTION_CODE_NONE 0 + +// process all contexts +UBYTE script_runner_update(void) NONBANKED; + +#endif \ No newline at end of file diff --git a/src/include/vm.i b/src/include/vm.i new file mode 100644 index 0000000..c18db59 --- /dev/null +++ b/src/include/vm.i @@ -0,0 +1,1667 @@ +; bytecode +; calling convention +; args: big-endian +; order: left-to-right (leftmost argument pushed first) + +; exception ID's +EXCEPTION_RESET = 1 +EXCEPTION_CHANGE_SCENE = 2 +EXCEPTION_SAVE = 3 +EXCEPTION_LOAD = 4 + +; aliases +.ARG0 = -1 +.ARG1 = -2 +.ARG2 = -3 +.ARG3 = -4 +.ARG4 = -5 +.ARG5 = -6 +.ARG6 = -7 +.ARG7 = -8 +.ARG8 = -9 +.ARG9 = -10 +.ARG10 = -11 +.ARG11 = -12 +.ARG12 = -13 +.ARG13 = -14 +.ARG14 = -15 +.ARG15 = -16 +.ARG16 = -17 + +.PARAM0 = .ARG2 +.PARAM1 = .ARG3 +.PARAM2 = .ARG4 +.PARAM3 = .ARG5 +.PARAM4 = .ARG6 +.PARAM5 = .ARG7 +.PARAM6 = .ARG8 +.PARAM7 = .ARG9 +.PARAM8 = .ARG10 +.PARAM9 = .ARG11 +.PARAM10 = .ARG12 +.PARAM11 = .ARG13 +.PARAM12 = .ARG14 +.PARAM13 = .ARG15 +.PARAM14 = .ARG16 +.PARAM15 = -18 +.PARAM16 = -19 + +; ------------------------------------------------------ +; @section Core + +OP_VM_STOP = 0x00 +;-- Stops execution of context. +.macro VM_STOP + .db OP_VM_STOP +.endm + +OP_VM_PUSH_CONST = 0x01 +;-- Pushes immediate value to the top of the VM stack. +; @param VAL Immediate value to be pushed. +.macro VM_PUSH_CONST VAL + .db OP_VM_PUSH_CONST, #>VAL, #ADDR, #ADDR, #IDX, #LABEL, #IDX, #IDX, #LABEL, #