From 4dcc074d54a7010a6ecffc510efce4f896df5689 Mon Sep 17 00:00:00 2001 From: Massena Date: Mon, 18 May 2020 16:18:30 +0200 Subject: [PATCH] =?UTF-8?q?D=C3=A9poussi=C3=A9rage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JTMM.g3a | Bin 0 -> 87144 bytes LICENSE | 324 ++++++ Makefile | 194 ++++ assets-cg/icon-cg-sel.png | Bin 0 -> 4513 bytes assets-cg/icon-cg-uns.png | Bin 0 -> 2712 bytes assets-cg/img/blue.png | Bin 0 -> 201 bytes assets-cg/img/blue_dot.png | Bin 0 -> 176 bytes assets-cg/img/bouncer.png | Bin 0 -> 169 bytes assets-cg/img/dust.png | Bin 0 -> 179 bytes assets-cg/img/elevator.png | Bin 0 -> 383 bytes assets-cg/img/elevator1.png | Bin 0 -> 209 bytes assets-cg/img/elevator10.png | Bin 0 -> 214 bytes assets-cg/img/elevator11.png | Bin 0 -> 215 bytes assets-cg/img/elevator12.png | Bin 0 -> 214 bytes assets-cg/img/elevator13.png | Bin 0 -> 224 bytes assets-cg/img/elevator14.png | Bin 0 -> 214 bytes assets-cg/img/elevator15.png | Bin 0 -> 217 bytes assets-cg/img/elevator16.png | Bin 0 -> 215 bytes assets-cg/img/elevator2.png | Bin 0 -> 214 bytes assets-cg/img/elevator3.png | Bin 0 -> 214 bytes assets-cg/img/elevator4.png | Bin 0 -> 214 bytes assets-cg/img/elevator5.png | Bin 0 -> 218 bytes assets-cg/img/elevator6.png | Bin 0 -> 213 bytes assets-cg/img/elevator7.png | Bin 0 -> 217 bytes assets-cg/img/elevator8.png | Bin 0 -> 213 bytes assets-cg/img/elevator9.png | Bin 0 -> 207 bytes assets-cg/img/exit.png | Bin 0 -> 133 bytes assets-cg/img/ground.png | Bin 0 -> 221 bytes assets-cg/img/ice.png | Bin 0 -> 181 bytes assets-cg/img/player.png | Bin 0 -> 162 bytes assets-cg/img/red.png | Bin 0 -> 184 bytes assets-cg/img/red_dot.png | Bin 0 -> 160 bytes assets-cg/img/semi_solid.png | Bin 0 -> 105 bytes assets-cg/img/solid_0.png | Bin 0 -> 152 bytes assets-cg/img/solid_1.png | Bin 0 -> 174 bytes assets-cg/img/spike.png | Bin 0 -> 189 bytes assets-cg/img/teleporter_0.png | Bin 0 -> 192 bytes assets-cg/img/teleporter_1.png | Bin 0 -> 191 bytes assets-cg/img/water.png | Bin 0 -> 103 bytes build-cg/JTMM.bin | Bin 0 -> 58468 bytes build-cg/JTMM.elf | Bin 0 -> 74324 bytes build-cg/assets/img/blue.png.o | Bin 0 -> 928 bytes build-cg/assets/img/blue_dot.png.o | Bin 0 -> 940 bytes build-cg/assets/img/bouncer.png.o | Bin 0 -> 936 bytes build-cg/assets/img/dust.png.o | Bin 0 -> 928 bytes build-cg/assets/img/elevator.png.o | Bin 0 -> 8620 bytes build-cg/assets/img/elevator1.png.o | Bin 0 -> 944 bytes build-cg/assets/img/elevator10.png.o | Bin 0 -> 948 bytes build-cg/assets/img/elevator11.png.o | Bin 0 -> 948 bytes build-cg/assets/img/elevator12.png.o | Bin 0 -> 948 bytes build-cg/assets/img/elevator13.png.o | Bin 0 -> 948 bytes build-cg/assets/img/elevator14.png.o | Bin 0 -> 948 bytes build-cg/assets/img/elevator15.png.o | Bin 0 -> 948 bytes build-cg/assets/img/elevator16.png.o | Bin 0 -> 948 bytes build-cg/assets/img/elevator2.png.o | Bin 0 -> 944 bytes build-cg/assets/img/elevator3.png.o | Bin 0 -> 944 bytes build-cg/assets/img/elevator4.png.o | Bin 0 -> 944 bytes build-cg/assets/img/elevator5.png.o | Bin 0 -> 944 bytes build-cg/assets/img/elevator6.png.o | Bin 0 -> 944 bytes build-cg/assets/img/elevator7.png.o | Bin 0 -> 944 bytes build-cg/assets/img/elevator8.png.o | Bin 0 -> 944 bytes build-cg/assets/img/elevator9.png.o | Bin 0 -> 944 bytes build-cg/assets/img/exit.png.o | Bin 0 -> 928 bytes build-cg/assets/img/ground.png.o | Bin 0 -> 936 bytes build-cg/assets/img/ice.png.o | Bin 0 -> 668 bytes build-cg/assets/img/player.png.o | Bin 0 -> 712 bytes build-cg/assets/img/red.png.o | Bin 0 -> 924 bytes build-cg/assets/img/red_dot.png.o | Bin 0 -> 936 bytes build-cg/assets/img/semi_solid.png.o | Bin 0 -> 948 bytes build-cg/assets/img/solid_0.png.o | Bin 0 -> 936 bytes build-cg/assets/img/solid_1.png.o | Bin 0 -> 936 bytes build-cg/assets/img/spike.png.o | Bin 0 -> 932 bytes build-cg/assets/img/teleporter_0.png.o | Bin 0 -> 952 bytes build-cg/assets/img/teleporter_1.png.o | Bin 0 -> 952 bytes build-cg/assets/img/water.png.o | Bin 0 -> 932 bytes build-cg/map | 983 +++++++++++++++++++ build-cg/src/collide.c.d | 8 + build-cg/src/collide.c.o | Bin 0 -> 1528 bytes build-cg/src/draw.c.d | 5 + build-cg/src/draw.c.o | Bin 0 -> 3048 bytes build-cg/src/levels.c.d | 3 + build-cg/src/levels.c.o | Bin 0 -> 7312 bytes build-cg/src/main.c.d | 14 + build-cg/src/main.c.o | Bin 0 -> 4500 bytes build-cg/src/menu.c.d | 5 + build-cg/src/menu.c.o | Bin 0 -> 2032 bytes build-cg/src/player.c.d | 3 + build-cg/src/player.c.o | Bin 0 -> 840 bytes build.sh | 7 + downloadpacks.sh | 12 + editor.sh | 4 + include/collide.h | 6 + include/draw.h | 10 + include/levels.h | 1 + include/menu.h | 3 + include/player.h | 5 + include/shared_define.h | 5 + levels.lua | 31 + project.cfg | 84 ++ setpack.sh | 6 + src/collide.c | 73 ++ src/draw.c | 159 +++ src/levels.c | 3 + src/main.c | 365 +++++++ src/menu.c | 95 ++ src/player.c | 32 + texturepacks/default/blue.png | Bin 0 -> 226 bytes texturepacks/default/blue_dot.png | Bin 0 -> 169 bytes texturepacks/default/bouncer.png | Bin 0 -> 288 bytes texturepacks/default/elevator.png | Bin 0 -> 323 bytes texturepacks/default/exit.png | Bin 0 -> 276 bytes texturepacks/default/ice.png | Bin 0 -> 181 bytes texturepacks/default/player.png | Bin 0 -> 299 bytes texturepacks/default/red.png | Bin 0 -> 226 bytes texturepacks/default/red_dot.png | Bin 0 -> 169 bytes texturepacks/default/solid_0.png | Bin 0 -> 221 bytes texturepacks/default/solid_1.png | Bin 0 -> 221 bytes texturepacks/default/spike.png | Bin 0 -> 314 bytes texturepacks/default/teleporter_0.png | Bin 0 -> 222 bytes texturepacks/default/teleporter_1.png | Bin 0 -> 222 bytes texturepacks/default/water.png | Bin 0 -> 99 bytes texturepacks/jtmm_1bittheme | 1 + texturepacks/jtmm_celestepicotheme | 1 + texturepacks/jtmm_crafttheme | 1 + texturepacks/jtmm_mariotheme | 1 + texturepacks/programmer-art/blue.png | Bin 0 -> 123 bytes texturepacks/programmer-art/blue_dot.png | Bin 0 -> 129 bytes texturepacks/programmer-art/bouncer.png | Bin 0 -> 99 bytes texturepacks/programmer-art/dust.png | Bin 0 -> 207 bytes texturepacks/programmer-art/elevator.png | Bin 0 -> 388 bytes texturepacks/programmer-art/exit.png | Bin 0 -> 154 bytes texturepacks/programmer-art/ice.png | Bin 0 -> 181 bytes texturepacks/programmer-art/player.png | Bin 0 -> 137 bytes texturepacks/programmer-art/red.png | Bin 0 -> 123 bytes texturepacks/programmer-art/red_dot.png | Bin 0 -> 129 bytes texturepacks/programmer-art/semi_solid.png | Bin 0 -> 117 bytes texturepacks/programmer-art/solid_0.png | Bin 0 -> 99 bytes texturepacks/programmer-art/solid_1.png | Bin 0 -> 99 bytes texturepacks/programmer-art/spike.png | Bin 0 -> 192 bytes texturepacks/programmer-art/teleporter_0.png | Bin 0 -> 222 bytes texturepacks/programmer-art/teleporter_1.png | Bin 0 -> 222 bytes texturepacks/programmer-art/water.png | Bin 0 -> 99 bytes transfer.sh | 3 + up-editor/JetBrainsMono-Regular.ttf | Bin 0 -> 136708 bytes up-editor/LICENSE | 626 ++++++++++++ up-editor/README.md | 14 + up-editor/conf.lua | 18 + up-editor/draw.lua | 32 + up-editor/force_img/elevator.png | Bin 0 -> 164 bytes up-editor/force_img/exit.png | Bin 0 -> 170 bytes up-editor/force_img/glue.png | Bin 0 -> 133 bytes up-editor/force_img/ice.png | Bin 0 -> 172 bytes up-editor/force_img/secret.png | Bin 0 -> 126 bytes up-editor/force_img/spawn.png | Bin 0 -> 128 bytes up-editor/img/blue.png | Bin 0 -> 201 bytes up-editor/img/blue_dot.png | Bin 0 -> 176 bytes up-editor/img/bouncer.png | Bin 0 -> 169 bytes up-editor/img/dust.png | Bin 0 -> 179 bytes up-editor/img/elevator.png | Bin 0 -> 164 bytes up-editor/img/elevator1.png | Bin 0 -> 209 bytes up-editor/img/elevator10.png | Bin 0 -> 214 bytes up-editor/img/elevator11.png | Bin 0 -> 215 bytes up-editor/img/elevator12.png | Bin 0 -> 214 bytes up-editor/img/elevator13.png | Bin 0 -> 224 bytes up-editor/img/elevator14.png | Bin 0 -> 214 bytes up-editor/img/elevator15.png | Bin 0 -> 217 bytes up-editor/img/elevator16.png | Bin 0 -> 215 bytes up-editor/img/elevator2.png | Bin 0 -> 214 bytes up-editor/img/elevator3.png | Bin 0 -> 214 bytes up-editor/img/elevator4.png | Bin 0 -> 214 bytes up-editor/img/elevator5.png | Bin 0 -> 218 bytes up-editor/img/elevator6.png | Bin 0 -> 213 bytes up-editor/img/elevator7.png | Bin 0 -> 217 bytes up-editor/img/elevator8.png | Bin 0 -> 213 bytes up-editor/img/elevator9.png | Bin 0 -> 207 bytes up-editor/img/exit.png | Bin 0 -> 170 bytes up-editor/img/glue.png | Bin 0 -> 133 bytes up-editor/img/ground.png | Bin 0 -> 221 bytes up-editor/img/ice.png | Bin 0 -> 172 bytes up-editor/img/player.png | Bin 0 -> 162 bytes up-editor/img/red.png | Bin 0 -> 184 bytes up-editor/img/red_dot.png | Bin 0 -> 160 bytes up-editor/img/secret.png | Bin 0 -> 126 bytes up-editor/img/semi_solid.png | Bin 0 -> 105 bytes up-editor/img/solid_0.png | Bin 0 -> 152 bytes up-editor/img/solid_1.png | Bin 0 -> 174 bytes up-editor/img/spawn.png | Bin 0 -> 128 bytes up-editor/img/spike.png | Bin 0 -> 189 bytes up-editor/img/teleporter_0.png | Bin 0 -> 192 bytes up-editor/img/teleporter_1.png | Bin 0 -> 191 bytes up-editor/img/water.png | Bin 0 -> 103 bytes up-editor/keyboard.lua | 79 ++ up-editor/load.lua | 13 + up-editor/main.lua | 9 + up-editor/mouse.lua | 33 + up-editor/pack.sh | 1 + up-editor/save.lua | 17 + up-editor/screens/5050.scr | 1 + up-editor/screens/5051.scr | 1 + up-editor/screens/5052.scr | 1 + up-editor/screens/5053.scr | 1 + up-editor/screens/5054.scr | 1 + up-editor/screens/5055.scr | 1 + up-editor/screens/5056.scr | 1 + up-editor/screens/5057.scr | 1 + up-editor/screens/5058.scr | 1 + up-editor/screens/5059.scr | 1 + up-editor/screens/5060.scr | 1 + up-editor/screens/5061.scr | 1 + up-editor/screens/5062.scr | 1 + up-editor/screens/recover.lua | 17 + up-editor/tiles.lua | 22 + up-editor/update.lua | 4 + up-editor/update.sh | 5 + 214 files changed, 3350 insertions(+) create mode 100644 JTMM.g3a create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 assets-cg/icon-cg-sel.png create mode 100644 assets-cg/icon-cg-uns.png create mode 100644 assets-cg/img/blue.png create mode 100644 assets-cg/img/blue_dot.png create mode 100644 assets-cg/img/bouncer.png create mode 100644 assets-cg/img/dust.png create mode 100644 assets-cg/img/elevator.png create mode 100644 assets-cg/img/elevator1.png create mode 100644 assets-cg/img/elevator10.png create mode 100644 assets-cg/img/elevator11.png create mode 100644 assets-cg/img/elevator12.png create mode 100644 assets-cg/img/elevator13.png create mode 100644 assets-cg/img/elevator14.png create mode 100644 assets-cg/img/elevator15.png create mode 100644 assets-cg/img/elevator16.png create mode 100644 assets-cg/img/elevator2.png create mode 100644 assets-cg/img/elevator3.png create mode 100644 assets-cg/img/elevator4.png create mode 100644 assets-cg/img/elevator5.png create mode 100644 assets-cg/img/elevator6.png create mode 100644 assets-cg/img/elevator7.png create mode 100644 assets-cg/img/elevator8.png create mode 100644 assets-cg/img/elevator9.png create mode 100644 assets-cg/img/exit.png create mode 100644 assets-cg/img/ground.png create mode 100644 assets-cg/img/ice.png create mode 100644 assets-cg/img/player.png create mode 100644 assets-cg/img/red.png create mode 100644 assets-cg/img/red_dot.png create mode 100644 assets-cg/img/semi_solid.png create mode 100644 assets-cg/img/solid_0.png create mode 100644 assets-cg/img/solid_1.png create mode 100644 assets-cg/img/spike.png create mode 100644 assets-cg/img/teleporter_0.png create mode 100644 assets-cg/img/teleporter_1.png create mode 100644 assets-cg/img/water.png create mode 100755 build-cg/JTMM.bin create mode 100755 build-cg/JTMM.elf create mode 100644 build-cg/assets/img/blue.png.o create mode 100644 build-cg/assets/img/blue_dot.png.o create mode 100644 build-cg/assets/img/bouncer.png.o create mode 100644 build-cg/assets/img/dust.png.o create mode 100644 build-cg/assets/img/elevator.png.o create mode 100644 build-cg/assets/img/elevator1.png.o create mode 100644 build-cg/assets/img/elevator10.png.o create mode 100644 build-cg/assets/img/elevator11.png.o create mode 100644 build-cg/assets/img/elevator12.png.o create mode 100644 build-cg/assets/img/elevator13.png.o create mode 100644 build-cg/assets/img/elevator14.png.o create mode 100644 build-cg/assets/img/elevator15.png.o create mode 100644 build-cg/assets/img/elevator16.png.o create mode 100644 build-cg/assets/img/elevator2.png.o create mode 100644 build-cg/assets/img/elevator3.png.o create mode 100644 build-cg/assets/img/elevator4.png.o create mode 100644 build-cg/assets/img/elevator5.png.o create mode 100644 build-cg/assets/img/elevator6.png.o create mode 100644 build-cg/assets/img/elevator7.png.o create mode 100644 build-cg/assets/img/elevator8.png.o create mode 100644 build-cg/assets/img/elevator9.png.o create mode 100644 build-cg/assets/img/exit.png.o create mode 100644 build-cg/assets/img/ground.png.o create mode 100644 build-cg/assets/img/ice.png.o create mode 100644 build-cg/assets/img/player.png.o create mode 100644 build-cg/assets/img/red.png.o create mode 100644 build-cg/assets/img/red_dot.png.o create mode 100644 build-cg/assets/img/semi_solid.png.o create mode 100644 build-cg/assets/img/solid_0.png.o create mode 100644 build-cg/assets/img/solid_1.png.o create mode 100644 build-cg/assets/img/spike.png.o create mode 100644 build-cg/assets/img/teleporter_0.png.o create mode 100644 build-cg/assets/img/teleporter_1.png.o create mode 100644 build-cg/assets/img/water.png.o create mode 100644 build-cg/map create mode 100644 build-cg/src/collide.c.d create mode 100644 build-cg/src/collide.c.o create mode 100644 build-cg/src/draw.c.d create mode 100644 build-cg/src/draw.c.o create mode 100644 build-cg/src/levels.c.d create mode 100644 build-cg/src/levels.c.o create mode 100644 build-cg/src/main.c.d create mode 100644 build-cg/src/main.c.o create mode 100644 build-cg/src/menu.c.d create mode 100644 build-cg/src/menu.c.o create mode 100644 build-cg/src/player.c.d create mode 100644 build-cg/src/player.c.o create mode 100755 build.sh create mode 100755 downloadpacks.sh create mode 100755 editor.sh create mode 100644 include/collide.h create mode 100644 include/draw.h create mode 100644 include/levels.h create mode 100644 include/menu.h create mode 100644 include/player.h create mode 100644 include/shared_define.h create mode 100755 levels.lua create mode 100644 project.cfg create mode 100755 setpack.sh create mode 100644 src/collide.c create mode 100644 src/draw.c create mode 100644 src/levels.c create mode 100644 src/main.c create mode 100644 src/menu.c create mode 100644 src/player.c create mode 100644 texturepacks/default/blue.png create mode 100644 texturepacks/default/blue_dot.png create mode 100644 texturepacks/default/bouncer.png create mode 100644 texturepacks/default/elevator.png create mode 100644 texturepacks/default/exit.png create mode 100644 texturepacks/default/ice.png create mode 100644 texturepacks/default/player.png create mode 100644 texturepacks/default/red.png create mode 100644 texturepacks/default/red_dot.png create mode 100644 texturepacks/default/solid_0.png create mode 100644 texturepacks/default/solid_1.png create mode 100644 texturepacks/default/spike.png create mode 100644 texturepacks/default/teleporter_0.png create mode 100644 texturepacks/default/teleporter_1.png create mode 100644 texturepacks/default/water.png create mode 160000 texturepacks/jtmm_1bittheme create mode 160000 texturepacks/jtmm_celestepicotheme create mode 160000 texturepacks/jtmm_crafttheme create mode 160000 texturepacks/jtmm_mariotheme create mode 100644 texturepacks/programmer-art/blue.png create mode 100644 texturepacks/programmer-art/blue_dot.png create mode 100644 texturepacks/programmer-art/bouncer.png create mode 100644 texturepacks/programmer-art/dust.png create mode 100644 texturepacks/programmer-art/elevator.png create mode 100644 texturepacks/programmer-art/exit.png create mode 100644 texturepacks/programmer-art/ice.png create mode 100644 texturepacks/programmer-art/player.png create mode 100644 texturepacks/programmer-art/red.png create mode 100644 texturepacks/programmer-art/red_dot.png create mode 100644 texturepacks/programmer-art/semi_solid.png create mode 100644 texturepacks/programmer-art/solid_0.png create mode 100644 texturepacks/programmer-art/solid_1.png create mode 100644 texturepacks/programmer-art/spike.png create mode 100644 texturepacks/programmer-art/teleporter_0.png create mode 100644 texturepacks/programmer-art/teleporter_1.png create mode 100644 texturepacks/programmer-art/water.png create mode 100755 transfer.sh create mode 100644 up-editor/JetBrainsMono-Regular.ttf create mode 100644 up-editor/LICENSE create mode 100644 up-editor/README.md create mode 100644 up-editor/conf.lua create mode 100644 up-editor/draw.lua create mode 100644 up-editor/force_img/elevator.png create mode 100644 up-editor/force_img/exit.png create mode 100644 up-editor/force_img/glue.png create mode 100644 up-editor/force_img/ice.png create mode 100644 up-editor/force_img/secret.png create mode 100644 up-editor/force_img/spawn.png create mode 100644 up-editor/img/blue.png create mode 100644 up-editor/img/blue_dot.png create mode 100644 up-editor/img/bouncer.png create mode 100644 up-editor/img/dust.png create mode 100644 up-editor/img/elevator.png create mode 100644 up-editor/img/elevator1.png create mode 100644 up-editor/img/elevator10.png create mode 100644 up-editor/img/elevator11.png create mode 100644 up-editor/img/elevator12.png create mode 100644 up-editor/img/elevator13.png create mode 100644 up-editor/img/elevator14.png create mode 100644 up-editor/img/elevator15.png create mode 100644 up-editor/img/elevator16.png create mode 100644 up-editor/img/elevator2.png create mode 100644 up-editor/img/elevator3.png create mode 100644 up-editor/img/elevator4.png create mode 100644 up-editor/img/elevator5.png create mode 100644 up-editor/img/elevator6.png create mode 100644 up-editor/img/elevator7.png create mode 100644 up-editor/img/elevator8.png create mode 100644 up-editor/img/elevator9.png create mode 100644 up-editor/img/exit.png create mode 100644 up-editor/img/glue.png create mode 100644 up-editor/img/ground.png create mode 100644 up-editor/img/ice.png create mode 100644 up-editor/img/player.png create mode 100644 up-editor/img/red.png create mode 100644 up-editor/img/red_dot.png create mode 100644 up-editor/img/secret.png create mode 100644 up-editor/img/semi_solid.png create mode 100644 up-editor/img/solid_0.png create mode 100644 up-editor/img/solid_1.png create mode 100644 up-editor/img/spawn.png create mode 100644 up-editor/img/spike.png create mode 100644 up-editor/img/teleporter_0.png create mode 100644 up-editor/img/teleporter_1.png create mode 100644 up-editor/img/water.png create mode 100644 up-editor/keyboard.lua create mode 100644 up-editor/load.lua create mode 100644 up-editor/main.lua create mode 100644 up-editor/mouse.lua create mode 100755 up-editor/pack.sh create mode 100644 up-editor/save.lua create mode 100644 up-editor/screens/5050.scr create mode 100644 up-editor/screens/5051.scr create mode 100644 up-editor/screens/5052.scr create mode 100644 up-editor/screens/5053.scr create mode 100644 up-editor/screens/5054.scr create mode 100644 up-editor/screens/5055.scr create mode 100644 up-editor/screens/5056.scr create mode 100644 up-editor/screens/5057.scr create mode 100644 up-editor/screens/5058.scr create mode 100644 up-editor/screens/5059.scr create mode 100644 up-editor/screens/5060.scr create mode 100644 up-editor/screens/5061.scr create mode 100644 up-editor/screens/5062.scr create mode 100644 up-editor/screens/recover.lua create mode 100644 up-editor/tiles.lua create mode 100644 up-editor/update.lua create mode 100755 up-editor/update.sh diff --git a/JTMM.g3a b/JTMM.g3a new file mode 100644 index 0000000000000000000000000000000000000000..e5937552b26a4b37470dcf998796e8fa1f34b550 GIT binary patch literal 87144 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 literal 0 HcmV?d00001 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3f92dfc --- /dev/null +++ b/LICENSE @@ -0,0 +1,324 @@ +Creative Commons Attribution 4.0 International Creative Commons Corporation +("Creative Commons") is not a law firm and does not provide legal services +or legal advice. Distribution of Creative Commons public licenses does not +create a lawyer-client or other relationship. Creative Commons makes its licenses +and related information available on an "as-is" basis. Creative Commons gives +no warranties regarding its licenses, any material licensed under their terms +and conditions, or any related information. Creative Commons disclaims all +liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions +that creators and other rights holders may use to share original works of +authorship and other material subject to copyright and certain other rights +specified in the public license below. The following considerations are for +informational purposes only, are not exhaustive, and do not form part of our +licenses. + +Considerations for licensors: Our public licenses are intended for use by +those authorized to give the public permission to use material in ways otherwise +restricted by copyright and certain other rights. Our licenses are irrevocable. +Licensors should read and understand the terms and conditions of the license +they choose before applying it. Licensors should also secure all rights necessary +before applying our licenses so that the public can reuse the material as +expected. Licensors should clearly mark any material not subject to the license. +This includes other CC-licensed material, or material used under an exception +or limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors + +Considerations for the public: By using one of our public licenses, a licensor +grants the public permission to use the licensed material under specified +terms and conditions. If the licensor's permission is not necessary for any +reason–for example, because of any applicable exception or limitation to copyright–then +that use is not regulated by the license. Our licenses grant only permissions +under copyright and certain other rights that a licensor has authority to +grant. Use of the licensed material may still be restricted for other reasons, +including because others have copyright or other rights in the material. A +licensor may make special requests, such as asking that all changes be marked +or described. Although not required by our licenses, you are encouraged to +respect those requests where reasonable. More considerations for the public +: wiki.creativecommons.org/Considerations_for_licensees Creative Commons Attribution +4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to +be bound by the terms and conditions of this Creative Commons Attribution +4.0 International Public License ("Public License"). To the extent this Public +License may be interpreted as a contract, You are granted the Licensed Rights +in consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the Licensor +receives from making the Licensed Material available under these terms and +conditions. + +Section 1 – Definitions. + +a. Adapted Material means material subject to Copyright and Similar Rights +that is derived from or based upon the Licensed Material and in which the +Licensed Material is translated, altered, arranged, transformed, or otherwise +modified in a manner requiring permission under the Copyright and Similar +Rights held by the Licensor. For purposes of this Public License, where the +Licensed Material is a musical work, performance, or sound recording, Adapted +Material is always produced where the Licensed Material is synched in timed +relation with a moving image. + +b. Adapter's License means the license You apply to Your Copyright and Similar +Rights in Your contributions to Adapted Material in accordance with the terms +and conditions of this Public License. + +c. Copyright and Similar Rights means copyright and/or similar rights closely +related to copyright including, without limitation, performance, broadcast, +sound recording, and Sui Generis Database Rights, without regard to how the +rights are labeled or categorized. For purposes of this Public License, the +rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + +d. Effective Technological Measures means those measures that, in the absence +of proper authority, may not be circumvented under laws fulfilling obligations +under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, +and/or similar international agreements. + +e. Exceptions and Limitations means fair use, fair dealing, and/or any other +exception or limitation to Copyright and Similar Rights that applies to Your +use of the Licensed Material. + +f. Licensed Material means the artistic or literary work, database, or other +material to which the Licensor applied this Public License. + +g. Licensed Rights means the rights granted to You subject to the terms and +conditions of this Public License, which are limited to all Copyright and +Similar Rights that apply to Your use of the Licensed Material and that the +Licensor has authority to license. + +h. Licensor means the individual(s) or entity(ies) granting rights under this +Public License. + +i. Share means to provide material to the public by any means or process that +requires permission under the Licensed Rights, such as reproduction, public +display, public performance, distribution, dissemination, communication, or +importation, and to make material available to the public including in ways +that members of the public may access the material from a place and at a time +individually chosen by them. + +j. Sui Generis Database Rights means rights other than copyright resulting +from Directive 96/9/EC of the European Parliament and of the Council of 11 +March 1996 on the legal protection of databases, as amended and/or succeeded, +as well as other essentially equivalent rights anywhere in the world. + +k. You means the individual or entity exercising the Licensed Rights under +this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + +1. Subject to the terms and conditions of this Public License, the Licensor +hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, +irrevocable license to exercise the Licensed Rights in the Licensed Material +to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + +2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions +and Limitations apply to Your use, this Public License does not apply, and +You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + +4. Media and formats; technical modifications allowed. The Licensor authorizes +You to exercise the Licensed Rights in all media and formats whether now known +or hereafter created, and to make technical modifications necessary to do +so. The Licensor waives and/or agrees not to assert any right or authority +to forbid You from making technical modifications necessary to exercise the +Licensed Rights, including technical modifications necessary to circumvent +Effective Technological Measures. For purposes of this Public License, simply +making modifications authorized by this Section 2(a)(4) never produces Adapted +Material. + + 5. Downstream recipients. + +A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed +Material automatically receives an offer from the Licensor to exercise the +Licensed Rights under the terms and conditions of this Public License. + +B. No downstream restrictions. You may not offer or impose any additional +or different terms or conditions on, or apply any Effective Technological +Measures to, the Licensed Material if doing so restricts exercise of the Licensed +Rights by any recipient of the Licensed Material. + +6. No endorsement. Nothing in this Public License constitutes or may be construed +as permission to assert or imply that You are, or that Your use of the Licensed +Material is, connected with, or sponsored, endorsed, or granted official status +by, the Licensor or others designated to receive attribution as provided in +Section 3(a)(1)(A)(i). + + b. Other rights. + +1. Moral rights, such as the right of integrity, are not licensed under this +Public License, nor are publicity, privacy, and/or other similar personality +rights; however, to the extent possible, the Licensor waives and/or agrees +not to assert any such rights held by the Licensor to the limited extent necessary +to allow You to exercise the Licensed Rights, but not otherwise. + +2. Patent and trademark rights are not licensed under this Public License. + +3. To the extent possible, the Licensor waives any right to collect royalties +from You for the exercise of the Licensed Rights, whether directly or through +a collecting society under any voluntary or waivable statutory or compulsory +licensing scheme. In all other cases the Licensor expressly reserves any right +to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following +conditions. + + a. Attribution. + +1. If You Share the Licensed Material (including in modified form), You must: + +A. retain the following if it is supplied by the Licensor with the Licensed +Material: + +i. identification of the creator(s) of the Licensed Material and any others +designated to receive attribution, in any reasonable manner requested by the +Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + +v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + +B. indicate if You modified the Licensed Material and retain an indication +of any previous modifications; and + +C. indicate the Licensed Material is licensed under this Public License, and +include the text of, or the URI or hyperlink to, this Public License. + +2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner +based on the medium, means, and context in which You Share the Licensed Material. +For example, it may be reasonable to satisfy the conditions by providing a +URI or hyperlink to a resource that includes the required information. + +3. If requested by the Licensor, You must remove any of the information required +by Section 3(a)(1)(A) to the extent reasonably practicable. + +4. If You Share Adapted Material You produce, the Adapter's License You apply +must not prevent recipients of the Adapted Material from complying with this +Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to +Your use of the Licensed Material: + +a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, +reuse, reproduce, and Share all or a substantial portion of the contents of +the database; + +b. if You include all or a substantial portion of the database contents in +a database in which You have Sui Generis Database Rights, then the database +in which You have Sui Generis Database Rights (but not its individual contents) +is Adapted Material; and + +c. You must comply with the conditions in Section 3(a) if You Share all or +a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace +Your obligations under this Public License where the Licensed Rights include +other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + +a. Unless otherwise separately undertaken by the Licensor, to the extent possible, +the Licensor offers the Licensed Material as-is and as-available, and makes +no representations or warranties of any kind concerning the Licensed Material, +whether express, implied, statutory, or other. This includes, without limitation, +warranties of title, merchantability, fitness for a particular purpose, non-infringement, +absence of latent or other defects, accuracy, or the presence or absence of +errors, whether or not known or discoverable. Where disclaimers of warranties +are not allowed in full or in part, this disclaimer may not apply to You. + +b. To the extent possible, in no event will the Licensor be liable to You +on any legal theory (including, without limitation, negligence) or otherwise +for any direct, special, indirect, incidental, consequential, punitive, exemplary, +or other losses, costs, expenses, or damages arising out of this Public License +or use of the Licensed Material, even if the Licensor has been advised of +the possibility of such losses, costs, expenses, or damages. Where a limitation +of liability is not allowed in full or in part, this limitation may not apply +to You. + +c. The disclaimer of warranties and limitation of liability provided above +shall be interpreted in a manner that, to the extent possible, most closely +approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + +a. This Public License applies for the term of the Copyright and Similar Rights +licensed here. However, if You fail to comply with this Public License, then +Your rights under this Public License terminate automatically. + +b. Where Your right to use the Licensed Material has terminated under Section +6(a), it reinstates: + +1. automatically as of the date the violation is cured, provided it is cured +within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + +c. For the avoidance of doubt, this Section 6(b) does not affect any right +the Licensor may have to seek remedies for Your violations of this Public +License. + +d. For the avoidance of doubt, the Licensor may also offer the Licensed Material +under separate terms or conditions or stop distributing the Licensed Material +at any time; however, doing so will not terminate this Public License. + + e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + +a. The Licensor shall not be bound by any additional or different terms or +conditions communicated by You unless expressly agreed. + +b. Any arrangements, understandings, or agreements regarding the Licensed +Material not stated herein are separate from and independent of the terms +and conditions of this Public License. + +Section 8 – Interpretation. + +a. For the avoidance of doubt, this Public License does not, and shall not +be interpreted to, reduce, limit, restrict, or impose conditions on any use +of the Licensed Material that could lawfully be made without permission under +this Public License. + +b. To the extent possible, if any provision of this Public License is deemed +unenforceable, it shall be automatically reformed to the minimum extent necessary +to make it enforceable. If the provision cannot be reformed, it shall be severed +from this Public License without affecting the enforceability of the remaining +terms and conditions. + +c. No term or condition of this Public License will be waived and no failure +to comply consented to unless expressly agreed to by the Licensor. + +d. Nothing in this Public License constitutes or may be interpreted as a limitation +upon, or waiver of, any privileges and immunities that apply to the Licensor +or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative +Commons may elect to apply one of its public licenses to material it publishes +and in those instances will be considered the "Licensor." The text of the +Creative Commons public licenses is dedicated to the public domain under the +CC0 Public Domain Dedication. Except for the limited purpose of indicating +that material is shared under a Creative Commons public license or as otherwise +permitted by the Creative Commons policies published at creativecommons.org/policies, +Creative Commons does not authorize the use of the trademark "Creative Commons" +or any other trademark or logo of Creative Commons without its prior written +consent including, without limitation, in connection with any unauthorized +modifications to any of its public licenses or any other arrangements, understandings, +or agreements concerning use of licensed material. For the avoidance of doubt, +this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1106c98 --- /dev/null +++ b/Makefile @@ -0,0 +1,194 @@ +#! /usr/bin/make -f +# Default Makefile for fxSDK add-ins. This file was probably copied there by +# the [fxsdk] program. +#--- + +# +# Configuration +# + +include project.cfg + +# Compiler flags +CFLAGSFX := $(CFLAGS) $(CFLAGS_FX) $(INCLUDE) +CFLAGSCG := $(CFLAGS) $(CFLAGS_CG) $(INCLUDE) + +# Linker flags +LDFLAGSFX := $(LDFLAGS) $(LDFLAGS_FX) +LDFLAGSCG := $(LDFLAGS) $(LDFLAGS_CG) + +# Dependency list generation flags +depflags = -MMD -MT $@ -MF $(@:.o=.d) -MP +# ELF to binary flags +BINFLAGS := -R .bss -R .gint_bss + +# G1A and G3A generation flags +NAME_G1A ?= $(NAME) +NAME_G3A ?= $(NAME) +G1AF := -i "$(ICON_FX)" -n "$(NAME_G1A)" --internal="$(INTERNAL)" +G3AF := -n basic:"$(NAME_G3A)" -i uns:"$(ICON_CG_UNS)" -i sel:"$(ICON_CG_SEL)" + +ifeq "$(TOOLCHAIN_FX)" "" +TOOLCHAIN_FX := sh3eb-elf +endif + +ifeq "$(TOOLCHAIN_CG)" "" +TOOLCHAIN_CG := sh4eb-elf +endif + +# fxconv flags +FXCONVFX := --fx --toolchain=$(TOOLCHAIN_FX) +FXCONVCG := --cg --toolchain=$(TOOLCHAIN_CG) + +# +# File listings +# + +NULL := +TARGET := $(subst $(NULL) $(NULL),-,$(NAME)) + +ifeq "$(TARGET_FX)" "" +TARGET_FX := $(TARGET).g1a +endif + +ifeq "$(TARGET_CG)" "" +TARGET_CG := $(TARGET).g3a +endif + +ELF_FX := build-fx/$(shell basename -s .g1a $(TARGET_FX)).elf +BIN_FX := $(ELF_FX:.elf=.bin) + +ELF_CG := build-cg/$(shell basename -s .g3a $(TARGET_CG)).elf +BIN_CG := $(ELF_CG:.elf=.bin) + +# Source files +src := $(wildcard src/*.[csS] \ + src/*/*.[csS] \ + src/*/*/*.[csS] \ + src/*/*/*/*.[csS]) +assets-fx := $(wildcard assets-fx/*/*) +assets-cg := $(wildcard assets-cg/*/*) + +# Object files +obj-fx := $(src:%=build-fx/%.o) \ + $(assets-fx:assets-fx/%=build-fx/assets/%.o) +obj-cg := $(src:%=build-cg/%.o) \ + $(assets-cg:assets-cg/%=build-cg/assets/%.o) + +# Additional dependencies +deps-fx := $(ICON_FX) +deps-cg := $(ICON_CG_UNS) $(ICON_CG_SEL) + +# All targets +all := +ifneq "$(wildcard build-fx)" "" +all += all-fx +endif +ifneq "$(wildcard build-cg)" "" +all += all-cg +endif + +# +# Build rules +# + +all: $(all) + +all-fx: $(TARGET_FX) +all-cg: $(TARGET_CG) + +$(TARGET_FX): $(obj-fx) $(deps-fx) + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -o $(ELF_FX) $(obj-fx) $(CFLAGSFX) $(LDFLAGSFX) + $(TOOLCHAIN_FX)-objcopy -O binary $(BINFLAGS) $(ELF_FX) $(BIN_FX) + fxg1a $(BIN_FX) -o $@ $(G1AF) + +$(TARGET_CG): $(obj-cg) $(deps-cg) + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -o $(ELF_CG) $(obj-cg) $(CFLAGSCG) $(LDFLAGSCG) + $(TOOLCHAIN_CG)-objcopy -O binary $(BINFLAGS) $(ELF_CG) $(BIN_CG) + mkg3a $(G3AF) $(BIN_CG) $@ + +# C sources +build-fx/%.c.o: %.c + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -c $< -o $@ $(CFLAGSFX) $(depflags) +build-cg/%.c.o: %.c + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -c $< -o $@ $(CFLAGSCG) $(depflags) + +# Assembler sources +build-fx/%.s.o: %.s + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -c $< -o $@ +build-cg/%.s.o: %.s + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -c $< -o $@ + +# Preprocessed assembler sources +build-fx/%.S.o: %.S + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -c $< -o $@ $(INCLUDE) +build-cg/%.S.o: %.S + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -c $< -o $@ $(INCLUDE) + +# Images +build-fx/assets/img/%.o: assets-fx/img/% + @ mkdir -p $(dir $@) + fxconv --bopti-image $< -o $@ $(FXCONVFX) name:img_$(basename $*) $(IMG.$*) +build-cg/assets/img/%.o: assets-cg/img/% + @ mkdir -p $(dir $@) + fxconv --bopti-image $< -o $@ $(FXCONVCG) name:img_$(basename $*) $(IMG.$*) + +# Fonts +build-fx/assets/fonts/%.o: assets-fx/fonts/% + @ mkdir -p $(dir $@) + fxconv -f $< -o $@ $(FXCONVFX) name:font_$(basename $*) $(FONT.$*) +build-cg/assets/fonts/%.o: assets-cg/fonts/% + @ mkdir -p $(dir $@) + fxconv -f $< -o $@ $(FXCONVCG) name:font_$(basename $*) $(FONT.$*) + +# Binaries +build-fx/assets/bin/%.o: assets-fx/bin/% + @ mkdir -p $(dir $@) + fxconv -b $< -o $@ $(FXCONVFX) name:bin_$(basename $*) $(BIN.$*) +build-cg/assets/bin/%.o: assets-cg/bin/% + @ mkdir -p $(dir $@) + fxconv -b $< -o $@ $(FXCONVCG) name:bin_$(basename $*) $(BIN.$*) + +# +# Cleaning and utilities +# + +# Dependency information +-include $(shell find build* -name *.d 2> /dev/null) +build-fx/%.d: ; +build-cg/%.d: ; +.PRECIOUS: build-fx build-cg build-fx/%.d build-cg/%.d %/ + +clean-fx: + @ rm -rf build-fx/ +clean-cg: + @ rm -rf build-cg/ + +distclean-fx: clean-fx + @ rm -f $(TARGET_FX) +distclean-cg: clean-cg + @ rm -f $(TARGET_CG) + +clean: clean-fx clean-cg + +distclean: distclean-fx distclean-cg + +install-fx: $(TARGET_FX) + p7 send -f $< +install-cg: $(TARGET_CG) + @ while [[ ! -h /dev/Prizm1 ]]; do sleep 0.25; done + @ while ! mount /dev/Prizm1; do sleep 0.25; done + @ rm -f /mnt/prizm/$< + @ cp $< /mnt/prizm + @ umount /dev/Prizm1 + @- eject /dev/Prizm1 + +.PHONY: all all-fx all-cg clean distclean install-fx install-cg diff --git a/assets-cg/icon-cg-sel.png b/assets-cg/icon-cg-sel.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae7c8963688b1f8535c36201755f8958dbef9b7 GIT binary patch literal 4513 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 literal 0 HcmV?d00001 diff --git a/assets-cg/icon-cg-uns.png b/assets-cg/icon-cg-uns.png new file mode 100644 index 0000000000000000000000000000000000000000..40410437059ed0481d4812818959cc3f43716f02 GIT binary patch literal 2712 zcmV;J3TO3+P)PxL~k(Y?* z=oDrY8N`v!pdf$XD2@&cpoos6jxvLzh05TFA}=YnMQqb&nl!H_-RvXT=iU1_$3JeG zq??GcZd66a4Dnd@UmsL9ev5Yn`1J z1p)z46m8qi<#K(;`wORK?wpTHga=|qch8DgEauuV3}bkBczk5aoYI%0=gS3!$mY6B z+LOs-JRa9H&2^?wCIZEbClNJNq(+qSFKY9tbAZXSPk z?+K^mKbK{J5@;!}UB7C>h7FNOBp3_=AcO#jMx)VaG?7Ti^8WtAX=Z4P+aaRe)}w6R zyt$>NB@&5<;&g90=h0|1nM`V$cI5D}%%IO+ECUpRo;4SBb#*m1HtM=gDRqeeAcTZM zAwtNiRjW+X9O|_ex756Xc6WCt5{Y0iC`riZ~H%Z#x9>_CPEa3xz_0 z;GLBzrHZ07Ha51kwGpZ6mk012N>c~x?CcDMLXspcbPpj!QIu#j+TGoqSm_hr>&T$&3_535UZi@g`6<_j)WD42439qAdRH%*ch( z)YP8iD~l|FiEr@P*46W1gl2L69U# zQT>_M`UXYS(sPgO_{5j)0{}vT(RjhcXdZ74 zKo+5f@cTy}m~V%3E(n4k2%sM%D5sCSO(p!{v4={TcG@vS@WTKo9p zBZEgPrRgNX87A_O6vSGv@6{Kt-u{*Ob_j6+UZ{MFlfgcl!8n*bO6FZ&+z38gd)@cEz(e9hjZ>Yj&0lE zKD=h%A|<(QQ!Fy=3@1DJyYfaBn%IO#$Z|a$R_Om4ayd7{9dmh z)`o*=nw3f=KUMa{7vFLUGo|jUzFs=?d*$8*fZ~Xw#MRn>dbBDwQTCCYUihc>|-V zRQk?mj_1QS>^*?6ii=lcDu<_^M)=a+dw%Xwc69CJayh4RL7Qze^0RO~IXP)L?Aw1V zy|L?w;eodk$q!$)?X%Z*u3PAS(=^NF^3-GzILn#hq*X4JZoB`fV)lXk|9mcG6jpBB zdiOWCQNg>nobz(ITr3uS8IR#Fl(CUaB9ZFo==k{dyO&(}+qPXQm9p7v{&ek~=9HF7 zr5YL<+E(;@`i`B8+u@uWhLOo+MutxT3l@gYOMX_~DwA?1lPMO9OP-E$rziP*KAlc` zZP}1qE>|cNEX#77CDt;Gu}YrBa4rEba_rtXwXSjg6h? z8}hti;MnPrk&$AtxTGD^G}Gzy@nii?Wr_X9bC=Is9Mvg3l}eS%<;9(;R;z_V;nb;9 z<&1a0TSa|zbTpsOSF6>9YA68QK_`_;6({`61AgxiavXT~Xe<_Uw|nRBb#TtzcRMgJ z(0^!>+Y6M1IL7)|Uwa?tysfQGRn_@bPRDTyg~Iswc<;f(3)*>4@_*aZ$OMLlhGbdR zG)-02x!V*jky5ENHa0deFu=`4Jz=!}#7R|EBasMzxpi!JVq%)+#Kgql;9zdl=XhV1 zQwP2OIi1aB9mk2qVhs%q?%p_K%rJ~>Hak8(zUQsIg|VemKxRDzd#bWNJ zx=Unoax$089XN2HuXh5>pXtermIVs8#jz9CvCy$%v6x6C-18}nv8k!4k&%(X!NGGO z;;NF-4jw#IE|)FKa(CL@Jd#eQ$HvC`dehACnFyBe&_JyeI{p*j=~)uDK(4#h)tC?2Xq z@lYL#hw4x~REOfBIusApp?Ihc#Y1%{9;!p}P#ubg>QFpXhvK0+6c5#*cWO}nRvY0uqX5yapvnGoIox|Yi>gTe~DWM4fL@i93 literal 0 HcmV?d00001 diff --git a/assets-cg/img/blue_dot.png b/assets-cg/img/blue_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..0a38613ca46c4f2c70de8dd1475c626534547201 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|vOHZJLo9le z6Be*t@cMQ5!+e(oQ@^k$GWbl8u~YVGm^g8wV5FcOL-6SnK+xnXG(WAxdq#n$KsJZ4 zUF#8s9gHn=`gkT>4LZ;2Y|dkFiBU7o(U4)r+A V@YXyoM*_$R5d)Tg-J=Z8nx1=3yBJTcAE3cQ!Lw4OYE!1weHJMnu9`5L*S(msginmQ(CocjNODdmKY#^hyI RuYlGuc)I$ztaD0e0stJZJ3{~f literal 0 HcmV?d00001 diff --git a/assets-cg/img/dust.png b/assets-cg/img/dust.png new file mode 100644 index 0000000000000000000000000000000000000000..cf8904348c8458a3ce42dc67d5ff39f1740fcdde GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJe}GSjE07Ki4PCWr)&Kwhf$S&M zk7IxoYe|q_FauENzsv0sJ%Ivlo-U3d6?5Lsyv@~Oz~dtP z|Ns2W{!Lfz8LeL0Sv;?0-pUQHU0h9#gF_9C14Cy%EII4r;?{jf_w`fi zwmXZb=clf(-ttLq--P#nUe zTx^?muJNCoVBpo4vz>IKt-q!1t^Ts-qMY$_jk#;t8Mu2aBNG}8j~`ym+`xKlj?RVy zGd53p#{d*k=hiWJ=Ca6=A>zRgpy=e*nbH-d3>ywqA7D!M6AQCxywAqK{YM6FVdQ&MBb@ E0MQ4jB>(^b literal 0 HcmV?d00001 diff --git a/assets-cg/img/elevator1.png b/assets-cg/img/elevator1.png new file mode 100644 index 0000000000000000000000000000000000000000..9b5f74f8279844b1b2614d8640d0d2d1cebc2333 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-WBp(Z(Y)*8_#(JY5_^EKVnH*{=WdyaQuG(gFdV zBIa*7c1Jd(e^%VXw&B60j^6i=vfJ-7IBiQb?r4?h{lSy;=kLiJ6WIrhdi%;E7V}9a y@Vdmz+Hh2?i?Jo=aGJp5_x@@BJFj+}RbXH^sjH`Ro@oluCI(MeKbLh*2~7a#O-CjG literal 0 HcmV?d00001 diff --git a/assets-cg/img/elevator10.png b/assets-cg/img/elevator10.png new file mode 100644 index 0000000000000000000000000000000000000000..9e41871f06026b37f40d5f82a00ff2624d906143 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-W9@i;qX%7NAhFr;B5V#p&cfe^0)#XJ&2aY;onar8LbF&OdXG zSj;E6K|uJvf!($nNs3bfI3$la^|;lr83xUo%lJsdz~A}mGZ&zB44$rjF6*2UngEIM BMvnjh literal 0 HcmV?d00001 diff --git a/assets-cg/img/elevator11.png b/assets-cg/img/elevator11.png new file mode 100644 index 0000000000000000000000000000000000000000..730dbc65ba6f7c780c53e0eaecf1e36ba3b9103a GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-W9@kJIF5Z9t(EPZ!4!i_^(}{+@he&&=A;+33`8 zok2X_nhl8euo)zMX43PmHj_V;&!BjFgXEDPzbD_UPclt1?znhwUy8u-LkFZcq<>ai z6WGoZ(b1VNAs?NyQNT;1g(peTP1&wlg5AcPi6L0jz+e1d>wKVn44$rjF6*2UngH|H BLS_H} literal 0 HcmV?d00001 diff --git a/assets-cg/img/elevator12.png b/assets-cg/img/elevator12.png new file mode 100644 index 0000000000000000000000000000000000000000..efbd7be69787fb519ae9cc3a268dc3e0ca1b92e5 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-WBZ(2hB`p8|!FJzX3_EKVo?`Frw>Ju_t&mPIF4Cj<4%U@%WP-!KQwQckb8qC39M+N)JDl88Ts)}yB%cM*xuZ%;mE$C$Sjuh yNcz}uv1pwZAuh${h>nXL=M~&$rK#-#+IxiEz<<^HJ4=ApF?hQAxvXDWQTFiz zK(HbGvto>wgv3TkhRYp%8zftj81#C7@FaniZIs$5c_br0{?q(MrUOSD6eXUpy}4P# zkuQ}10*Y$;5^Hic9(B@KC}7mlDgn}VWV*PUhZO_E?D>Wp+a}E10koLG)78&qol`;+ E0EA>sI{*Lx literal 0 HcmV?d00001 diff --git a/assets-cg/img/elevator14.png b/assets-cg/img/elevator14.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b1411a576969aa0a7dfbc6388b527346052845 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-WBZLV71!>t%lDrHlS-N`rQsyNAtz+bP0l+XkK*mOn+ literal 0 HcmV?d00001 diff --git a/assets-cg/img/elevator15.png b/assets-cg/img/elevator15.png new file mode 100644 index 0000000000000000000000000000000000000000..3a77e45bb27cef266a6d1622c10bf9f8f08de496 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-WBZS<8HT6QEF^+^s8CBULEb zlOw=wDD_eDNXHx@_sfiG1s}I6&v4$zrljY4BZ-^g?Nwd9ZH{vcfHpFCy85}Sb4q9e E04rNY00000 literal 0 HcmV?d00001 diff --git a/assets-cg/img/elevator16.png b/assets-cg/img/elevator16.png new file mode 100644 index 0000000000000000000000000000000000000000..b2b4d066ba98e8c1d4b8458420f3f05a6faece26 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-W9zqd5P`A3&iLPZ!4!i_^(}{+@iZzk9tbvt`2h zXU;r5-@d8-m(*bJ;Sp(a%sVjeY`es_9J`k53}P`-8$WJ5D#mTsyMxEgtfN(;_XkfB zP;p!*DO(AZzO&0qQ^!?y?td7i}@rI zcwJ&li#;{an^LB{Ts5 DG+akv literal 0 HcmV?d00001 diff --git a/assets-cg/img/elevator3.png b/assets-cg/img/elevator3.png new file mode 100644 index 0000000000000000000000000000000000000000..ef67512f1f29d77662dc0a0a1abfcfd03357aa31 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-W9r_riwu1fWo|r;B5V#p&cN+x35*cVJ9NS|ISi zG~xU+XP#;^`9s+Z+hSDg1ju!(oJqt20xBk2N<-}|R+;Xaa>(9peJ_Sy<(wg_gy z>1sI}Tay?RZ*P!1^5gg9oApViNyZ%$m(A?d1G>_8roLS6=`D+a)-iax`njxgN@xNA DnOsK7 literal 0 HcmV?d00001 diff --git a/assets-cg/img/elevator5.png b/assets-cg/img/elevator5.png new file mode 100644 index 0000000000000000000000000000000000000000..49ec82b32793c00f03e690a117da9ebcc6003a46 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4cSSh6U$c>z#_v%n*= zn1O*?7=#%aX3dcR3bL1Y`ns||VdY^{;MM7W9tadl_jGX#u{fQ)WxM{*^9{^zZq{@( z0>Qzf*ZHOkv5D14bsBcC&UZ_SIpWmgR>Nla?_bKd`Hf5mjyNbvJYn1Myu2Aj5`G5<0KScGB9|5(cRPHCnf^4lEKr}&t;uc GLK6TMeMMLR literal 0 HcmV?d00001 diff --git a/assets-cg/img/elevator6.png b/assets-cg/img/elevator6.png new file mode 100644 index 0000000000000000000000000000000000000000..8a75c062e47d9e7cd9b0aa631ef8cc0fef76ecf6 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4cSSh6U$c>z#_v%n*= zn1O*?7=#%aX3dcR3bL1Y`ns||VdY^{5Ve0?&khty@^o!5=9fuq;?vacvIuW9V?7T$Kl z$*^HU?hT%#KYvfYvEL}QQSwNKu4ex-<|__LQ!X+b{;c!be!bRZpluAEu6{1-oD!M< D$Yw?f literal 0 HcmV?d00001 diff --git a/assets-cg/img/elevator7.png b/assets-cg/img/elevator7.png new file mode 100644 index 0000000000000000000000000000000000000000..6417a8009813f27f95f622902d00482b85daaa42 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4cSSh6U$c>z#_v%n*= zn1O*?7=#%aX3dcR3bL1Y`ns||VdY^{kXvE6tREz#_v%n*= zn1O*?7=#%aX3dcR3bL1Y`ns||VdY^{P-`%j69ft+dAc};Se#DYvR(h@{`Aj^Y()*- z>t&fAzxPl3FR8)c!z0quQ z!CUZgYcdcY&Sp^F=5Sg$bu`>%1!VKcmSdwS0@W~Rm#-B%MB uxeY(^K2Gk|6?5Wjo#3c*B;!cB07J!mUA=QDJdc3(FnGH9xvX^)r^Lo9le z6C^%02u?rp9|#s}q@)~KCFU#;tK7zB(mdmX^#lV4!`=yRZ^SrmOMHiAawAqxQ)eh z6aI`3CCs{Yyb&J+HayaM0F~QczQEF`^TA8DX`iQYu@N;q8hyCan4V9*>}8xSO4zE8I6LLVjD8=eF|k;Z^OOo$-=|OB_)6$t@g>05Bg@6 Z4EtJL;yKR?MFOp6@O1TaS?83{1OTg`K7RlJ literal 0 HcmV?d00001 diff --git a/assets-cg/img/player.png b/assets-cg/img/player.png new file mode 100644 index 0000000000000000000000000000000000000000..fda1a751e1904ef893e3e37497ff5d94ef81a338 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k#^NA%Cx&(BWL^R}F`h1tAsQ3s z1{(4)7;-Qb|Nn2aJ!4Ur^%PGjmZVPMtU1zx3?8BWn=+bLa$DC-Gz;0`Xm(X%>bi|G zGk+yj|KD}^nal>CLz=t4U3u)KvhnN(?X{xIW}TN0chXz-gE5g+NAigw56A@!p00i_ I>zopr0H>ceKmY&$ literal 0 HcmV?d00001 diff --git a/assets-cg/img/red.png b/assets-cg/img/red.png new file mode 100644 index 0000000000000000000000000000000000000000..c41ea41a0e828a32d909ef2eb40bb707543ce6ea GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|iacE$Lo9md z208K_FyIi{{J(x??5(4gy(M?L7TgdMbC{&Yz+kr|OKaN$z>R#{+sIg@yY#cXi+S@s%rg&*f4Np~_2FR9-Fl iZ?M!MJRoSs%)15WXD^C4k>&`rox#)9&t;ucLK6Ty0ZRV> literal 0 HcmV?d00001 diff --git a/assets-cg/img/red_dot.png b/assets-cg/img/red_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..357d3f4b7bfb07530a9352e4d17aaa6829e0b49f GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|qC8z3Lo9le z6Be*t@cMQ5!+e(oQ@^k$GWbl0;GTGO^8pq~AV{3_!^GH$vCB%LT_SwJ>Qtp`H+LLZ z!PtC|K`e#OjY&}~VA7PC5GZvmzgRT^vzwuff!y_kM>4bT<_Pgg&ebxsLQ E0FN9q)c^nh literal 0 HcmV?d00001 diff --git a/assets-cg/img/semi_solid.png b/assets-cg/img/semi_solid.png new file mode 100644 index 0000000000000000000000000000000000000000..0850ed1919f18fd3d62ff377e66f4ae90897ed92 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|ls#P>Lo9le z|NQ^|zn;yDag(Bf*~TQFDN*MOjw0JNF&)5B8m~ zoN;%zd`duLr}kvc<92^;G5@z*e5#5;+$dw~BU6?+(E-jt(-}Nn{an^LB{Ts519me8 literal 0 HcmV?d00001 diff --git a/assets-cg/img/solid_1.png b/assets-cg/img/solid_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2afbcb3b7b1f1f845e87f886e6405929183a8263 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|GCW-zLo9ml zPIBZrV8Fq0{L=sW%4!X#tf>;0f}bxFIJ+);lFNZJ9dB=Z{`DcrZ4>(gxeE)Uk{s-I zdH!Y>O<%h9w6~M#g;@E$6IxQ!V-jyS*9s@fsf1fDyLkW4fo6BUKj&ty(qaG5$S$s$ WXvH1%=kyk!oeZ9?elF{r5}E)3rb3SZ literal 0 HcmV?d00001 diff --git a/assets-cg/img/spike.png b/assets-cg/img/spike.png new file mode 100644 index 0000000000000000000000000000000000000000..77baffd5239bbdd1878a4e6294a1004dbe372b08 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|$~|2iLo9li z20QW{P~cd6?0@~t*ket+u4k))xI|da-o49WmG|(k>(dRJ{g-kus9#-B#K6Fp5Y54J z@t$pj;eBhrZ!^8ap4M}g{neU1^X84SyO?(c&fONk_L-@)KSD1^qpY#cycy&fklC6(CX!}%l{T2rHt%5)&FnGH9xvXp% literal 0 HcmV?d00001 diff --git a/assets-cg/img/teleporter_0.png b/assets-cg/img/teleporter_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a5480453563e123be22116d8da6db143f4749ae3 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|sytmBLo9mN z20QW{P~h17=l}WJsWWbg9-34bl({e@_VxQ6^JY9+n8FY+L9Aqkc*oThT5;~GYhQCQ z%;a}ZDiYF;FAHUV;OBR8p@ZtDS>K~BR4v#Zc=w#4)768$2eq6%r{12G?Ot&1`ApM5 q>)yDyXBEbZWo_F&ex2O=m~F94^>2=E&&7eRVDNPHb6Mw<&;$S;=S*Ax literal 0 HcmV?d00001 diff --git a/assets-cg/img/teleporter_1.png b/assets-cg/img/teleporter_1.png new file mode 100644 index 0000000000000000000000000000000000000000..92e5be4b62911349f7228e2f36b541864cf6da0f GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Dm`5sLo9mt z2002bC~{o-_doqxl67as^tn&3NH9%Ht7l|fXFd7S(%sUG3?a6r%?5?jgHqX5C$U(y z2WMPAH6wVBu9Cd|k>IAuFBtP4Y?f(^-7S*YqWA1=wl`DV4!vJuajPN)pMF}w5*re? o<$90j-Cur>T5WRgJ+EN6qFeo&{njNxpd%POUHx3vIVCg!0K+9lm;e9( literal 0 HcmV?d00001 diff --git a/assets-cg/img/water.png b/assets-cg/img/water.png new file mode 100644 index 0000000000000000000000000000000000000000..a9af4a9e3a2fd4789779b0179218c6a0cee2040d GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|6g^!WLo9le y6M*2y|NsB%H)VF296qpu+b!1MRg>cbCI*8e{{$93h&c&V%;4$j=d#Wzp$PzDwjj6w literal 0 HcmV?d00001 diff --git a/build-cg/JTMM.bin b/build-cg/JTMM.bin new file mode 100755 index 0000000000000000000000000000000000000000..f9d0d04faec03249b1c49ff0edf5b4f014995608 GIT binary patch literal 58468 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 B?ER$xOnaAGwyBJV=KMgZ*{F~(o3m1|& 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 H(dT~wIA|(4 literal 0 HcmV?d00001 diff --git a/build-cg/JTMM.elf b/build-cg/JTMM.elf new file mode 100755 index 0000000000000000000000000000000000000000..51ddcd619a1bcc7b78a40da7432589a75a2d532d GIT binary patch literal 74324 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 literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/blue.png.o b/build-cg/assets/img/blue.png.o new file mode 100644 index 0000000000000000000000000000000000000000..b48f13950e6217d344c0cf5cd3154a36f724a311 GIT binary patch literal 928 zcmaJ=I}XAy40QuYAQl)ABMV|+Vq}Ghfg4nrSv{q%p(;+aUvLD>?G7na}#Zc(15yTJJ6xbr{ZX}W+e)>jKi$ou9_{Yu2xf5 zpY>75hM0GdP0G4i1#eI`pW8LOKkWHi?^pcte6LthiCp3z|0!PSs_ie`x)uBvP6=;@zmnH)Mg>VamcLpIW{i;!x~QBMp8 Ig3xQ-7iv?c-T(jq literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/blue_dot.png.o b/build-cg/assets/img/blue_dot.png.o new file mode 100644 index 0000000000000000000000000000000000000000..fd3160a8698d108a347f2480db445baa87a3431b GIT binary patch literal 940 zcmbVLF%H5o40J=0U;<_)#DW-@7+GOr;0IMvD?p-DDrJC$5AY}+!v}alvE#T&5k&$^ zvCnt0ok+=bzFc_9gVH=0BX$V&(Are{5j4TqY8Sd?%@aUsoe+S=-6oV_A#pbeUAug|(CFbh$}Y7nbL97uQ>zcJPfpMONHO!S1|& zaD(4a`Ht|h5bgk|7WFgvz~;phf?cu+*85W&L}^~lg7^@;IMFjX^jD_nSOUF&0{|Is!a1~PR+$3IEux(}fq PE~+)A?g)mGVbpV9vcdMJ literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/bouncer.png.o b/build-cg/assets/img/bouncer.png.o new file mode 100644 index 0000000000000000000000000000000000000000..e65b0e41b46dadafc61ff4122d77444af213786f GIT binary patch literal 936 zcma)4%?`mp5T33|xCmzl2N!XWNE}@`Ie3Gnw7~&M)q#r_@JimrD|mvM+1at%ro|+k zzwevbnPzUY#oSXKe8htx`c6VUH8#y+VQBER%hkkr#xK#|5=LT--&4;o{s=5Q)gz_xW!#Rzx_PueZ!gzZ+mXB-LcS8I75l@ksJ`kZpkn(`MXcVRwnPv0_n|4@ zI5$Vj??A`Ts%*;ip021%)@7g0*ZHN}9zDkyVvpE29A5dyN7Y{WU+}T$)@z((xig2g ULJOF;U@E}fJ1Q@F2D)Q^e@*| zb$cX|ui;DfpYB)PT|G|y9ddWz*ad~;UqkG+wVGsdLq;q^|b5U&)9 z^4p>SR)V)Y-zaj%?K=VNbVLz6kFdN_AVg?Ob-DH2H>fzie72=gbF`ma}^y0q{9c%OO=Ke_d&Yao&R(;MhTAt@UYJY7G2bq(q zhjXV?h*t{5cpiJvOaA@nS&GbYBl-^S@~^y~#&h4|*q=6s%j}O-J)AqGLcCHa#`D;V zUVMM#_}ehb{z%!w>z(PWdgc7IJjcCqM(wZ7p~#$6J)AqGLcCHa#`D;VUi|k#PWRID zN6H?#-YFE$D@CmRm*VivZneKQ@69Jw53hGhg?Ob zl_J*uOL6#Sx7uHu_vVwThu1r$LcCHa#`D;VUi|)%)4lZkk+MgwcM65`N)c=Sr8s=E zTkWsSd-F-v!|R<=AzmpI<9X~wFMj{X>0WyNNZBLTJB7k|rHHlvQXIb7t@hXEz4@f- z;q^|b5U&)9@jUjT7r%exbT2)Br0kLFokHQfQpDPS4A?N=${@f>^6O`eZC@SAY%lwHItg~UI9{xjc_dkL&#E++G^)Qr&_?hDUpXvPa`qTO5YV&oy zyV>UGeDmd^WNt6NZ>H(h?YHaQ`eS?Vws?Q$X?t_A-mSB*e?(6k56`CuUHjJq{2pTN zqY literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/elevator1.png.o b/build-cg/assets/img/elevator1.png.o new file mode 100644 index 0000000000000000000000000000000000000000..308af12431b4a3da15aad0a743789a0600ea3df2 GIT binary patch literal 944 zcmb<-^>JflVq|~=Mg}b)8%coa1z64mOlmN&GO&PI0t^C{?*=O zCXP(Q)F6wYvn}7DiwrCuo> zae%Zy`N|0X|BnpunYrolsX3`-i6!|(hG^XQ)VvgQq2kP{R0amU;>z5T#3UeHQUswh zV63A2l*E!m9B#xREDaO~xtj?p4@~(GH$(X_KOw6DDYpR<0YD7&I#@3#p8&ndzzG!t hQXs(810>ABOb7upPY}oj>4gHO!$1ZweBc1A4ghA>eqjIr literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/elevator10.png.o b/build-cg/assets/img/elevator10.png.o new file mode 100644 index 0000000000000000000000000000000000000000..0396276a8b09ddfe28fdfb52bf6d00299e0a0c3f GIT binary patch literal 948 zcmb<-^>JflVq|~=Mg}b)8%coa4Oq?uOlmN&GO&PI0t^EG+vo``-&wxHWgkcm2GP~P z#F1&38e}na_Ww3?k%8rd+>FZwF#ljvgDeMQ!_0y4vC+6g8>SkZ4sa06kTe8OM*JflVq|~=Mg}b)8%coa4Oq?uOlmN&GO&PI0t^EG+o%aG-&wxHWgbWl2GP~P z#F1&38e}na_Ww3?k%8rd+>FZwF#ljvgDeMQ!_0y4vC+6g8=GouV&HUugJ6cFA$U3x zfbazw7??OfTA+MY1pog>hWO0f^!U`A)Uw2q{31g`bbfqlUJ8a-ab{I21A|_1Wo}7g z5|Az_g3uW-R#ARRVo4$nXW|l;217(QUVP${NkK!!4u1ERp{0D`)I0RR91 literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/elevator12.png.o b/build-cg/assets/img/elevator12.png.o new file mode 100644 index 0000000000000000000000000000000000000000..7377fb89e1ff2a0578c879066c2b5cbb5b4ae69a GIT binary patch literal 948 zcmb<-^>JflVq|~=Mg}b)8%coa4Oq?uOlmN&GO&PI0t^EG+em?y?=0WpQV)`YL3A}R zaby~%23ZW9{l5)eWMKIqH{)^v%s<%FAj`qnFmqshY&7oB#-^GaF>pG-K`=wo5Ih|T zK=^_T3``s#El|EHg8%;`Lwsg#dVFe5YFT1QevzROIzK)&F9k!aII}91fkCghGPfi# z2}qX|LFfz^t0+Guu_O_PGjRz^10_IiXM!pKrhbUKp?sLXkkx>c+W?6GAO?CLtQVA5 ofL>+bgo*(v5Mb&75>{X)gn*d`3?Hyws1(yNAVV3-0a0Le0Ht?-1ONa4 literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/elevator13.png.o b/build-cg/assets/img/elevator13.png.o new file mode 100644 index 0000000000000000000000000000000000000000..1f55d61e0c94b31c9b92de1341ce8856a2c4a32a GIT binary patch literal 948 zcmb<-^>JflVq|~=Mg}b)8%coa4Oq?uOlmN&GO&PI0t^EG+mNBJflVq|~=Mg}b)8%coa4Oq?uOlmN&GO&PI0t^EG+hEZ09Rk9{U^GGo!NMm8 zQ}w?M#u^+n$j!K10`m_xHOO)>Hq0Ct9~*7?4x8w}iGkdVYCAX`;2@YGX$YQ<1R#7t z1_mY$kQOLk6~X`iks&@aH$6TzC$%iGB)`be1f3tBnwNqhR-9Rt%D|vkT$x*vm;|It ziXe0bj8&AMl30?6!B2-B3QvU&v}e%58u|01yMc57rCHD?qO@ la6-j^6bLZ&00}EF6GFhu1BMS+FI0-@7?7b1<$x%#Isju2e+mEq literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/elevator15.png.o b/build-cg/assets/img/elevator15.png.o new file mode 100644 index 0000000000000000000000000000000000000000..9631997ba4d627a1f9b593bfef73d0db41b2ffea GIT binary patch literal 948 zcmb<-^>JflVq|~=Mg}b)8%coa4Oq?uOlmN&GO&PI0t^EG+d$Cr9VUdxV3&ib#xDy~ zML!ysUqCK^`3IXCWH}fc=4u!p8;xozHWl<0L-!}L?J)nKssX1190W5Y4Z+iq0E92d zz`(=-(gNkHBKZG5GQ?-*rpKq|q?RR?Wt literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/elevator16.png.o b/build-cg/assets/img/elevator16.png.o new file mode 100644 index 0000000000000000000000000000000000000000..bb6c72eaf6e71d8ac88e76643a4549e46f687db5 GIT binary patch literal 948 zcmb<-^>JflVq|~=Mg}b)8%coa4Oq?uOlmN&GO&PI0t^EG+brMVhWKT1>!X#-|2Et% z0?EN3y8SS5WE!RhSqz$<%4Dp${>G7#Ksbz^J`9+3i==}K9yc7(v;>@a41_r(2%G{E~Bp_W< z1fervtfKss#F9iD&cr1w4U_=6oe8P{nED~^hVo(lLRJG(ZUZC&fEeg~uwGDJ0eY2z l6DkIzK!B+SNLYcH5CUc%Fnqvzp;Ao8fDC0Q2SkC@0RU+|e-How literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/elevator2.png.o b/build-cg/assets/img/elevator2.png.o new file mode 100644 index 0000000000000000000000000000000000000000..93dec3065d48ee526029edb0c71c680254025941 GIT binary patch literal 944 zcmb<-^>JflVq|~=Mg}b)8%coa1z64mOlmN&GO&PI0t^C{@8}8txBYL!Wgkcm2GP~P z#F1&38e}naw&go?k%8rd+>FZwF#ljvgDeMQ!_0y4vC+6g8>SkZ4sa06kTe8OM*JflVq|~=Mg}b)8%coa1z64mOlmN&GO&PI0t^C{@2Cm?xBYL!WgbWl2GP~P z#F1&38e}naw&go?k%8rd+>FZwF#ljvgDeMQ!_0y4vC+6g8=GouV&HUugJ6cFA$U3x zfbfA769-5Ol&_57|NqDkpP8E;pPG|emROQsWQ@j*Pt8j~7b?!IN@ZZsE3V8fNlXIL zB}EWA1I8-KPf09E#NkF9!qPx-kh__n^1zf2aWj+;^AoZfka8O!5dg$MuY>i1@(IwJ l44hCgAO!+UJwU=7%!Cjy^8|rhkX|TYIt*k0!v_w)>HsaQerEsx literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/elevator4.png.o b/build-cg/assets/img/elevator4.png.o new file mode 100644 index 0000000000000000000000000000000000000000..13fb8f4f612d10d7cc88fad0a171045696207dc8 GIT binary patch literal 944 zcmb<-^>JflVq|~=Mg}b)8%coa1z64mOlmN&GO&PI0t^C{??{3F+y1xVQV)`YL3A}R zaby~%23ZW9ZTSveWMKIqH{)^v%s<%FAj`qnFmqshY&7oB#-^GaF>pG-K`=wo5Ih|T zK=?q4i36ks%2!74|9@nN&&*AaPt8d!ODxGRGC||Ur{<-g3l(Qpr7|$+6<6k#Bqjmr zk|GG50b>>ArzDmn;&3AlVQHW^$lXj(d0@(ixEaca`3YGKNVyG=2moTB*TH&0`2^@q l22Q9LkOBdw9w1>3WJflVq|~=Mg}b)8%coa1z64mOlmN&GO&PI0t^C{?~vjDw*PI&d}KCA4hE6M zL2Q^fG7VFMEQZd;t`l7q{rI^20&)S&KiJeD%fZ+%SHt+&XjD_Nsi3tOI33_1m?3Eh zo{j_{d?3Zd0n!5HD^HR`-iZiQH85s16D|1T{ zlYn$d5rocwv5N9j5=#JflVq|~=Mg}b)8%coa1z64mOlmN&GO&PI0t^C{?_ltM8v??_U^GGo!NMm8 zQ)T%M#u^+n$j!K10`m_xHOO)>Hq0Ct9~=F@4V&n|iGkdVYCAX`;2@YGX$YQ<1R#7M z#l!*90_7_s`2RmL#AoKF$EW6`mL-3E^5^=Z@hp;qI9OP~$s5~&`L);AI!~BG-2Bh2uNCW^e(Cc8mpnL-KCIcr_ i3`l_hQxA|Z2QwiA%sfFL7o-;om<|IO!0>?susQ%=&wg+K literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/elevator7.png.o b/build-cg/assets/img/elevator7.png.o new file mode 100644 index 0000000000000000000000000000000000000000..6f0f764b04fe3951e3810f2f461bfded3226493e GIT binary patch literal 944 zcmb<-^>JflVq|~=Mg}b)8%coa1z64mOlmN&GO&PI0t^C{??CW>8zzLvV3&ib#xDy~ zML!ysUqCK^`3IXCWH}fc=4u!p8;xozHWl<0L-!}L?J)nKssX1190W5Y4Z+iq0E7>u zm^eUMpnPQn|NlpZ_{`k&_|%-#vc!`7B6Boud}>|_x=?XuRVo96UU6k^Nn#R^E-8Z0 z88B8+eoA6VA`Um=5S9jtgWSyol?SGLh?}8&n4gfH!kwU?zlsnI{P3g7iWG(_tV37(Q?SRtEsu?|yRt literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/elevator8.png.o b/build-cg/assets/img/elevator8.png.o new file mode 100644 index 0000000000000000000000000000000000000000..f1010a738ee4d2d08e1c90fb5354cb629029b412 GIT binary patch literal 944 zcmb<-^>JflVq|~=Mg}b)8%coa1z64mOlmN&GO&PI0t^C{@BX*phWKT1>!X#71zYSevVEG_7<8lGaKiJeD%fZ+XbHM2U2f++UL-2GY0O12E zCJvAmC|?=D|NoI8J~KBxJ~bz`EU_fN$O4TUpPH9~E>xUZmCC@NS6rD}l9&XfONtmdpORRTh{KIIgr$MvAa^rC<$)<5;$|ox<|kw|AmuhdA^?biUI*(1JflVq|~=Mg}b)8%coa1z64mOlmN&GO&PI0t^EG+XfS~d}sL%mwP~RFo>=O zCXP(Q)F6wYv;ViDiwrCuo> zae%Zy`N|0X|BnpunYrolsX3`-i6!|(mT27g)VvgQq2kP{R0amU;>z5T#3UeHQUswh zV63A2l*E!m9B#xREDaO~xtj?p4@~(GH$(X_KOw6DDYpR<0YD7&I#@3#p8&ndzzG!t hQXs(810>ABOb7upPY}oj>4gHO!$1ZweBc1A4gdhget7@@ literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/exit.png.o b/build-cg/assets/img/exit.png.o new file mode 100644 index 0000000000000000000000000000000000000000..82b974d0d0755b679ea877372cc1cea3741dc4ef GIT binary patch literal 928 zcmb<-^>JflVq|~=Mg}b)8%coa23XDnOlmN&GO&PU1sDY2dg#FT4+Yq)g2};XbTu$> z7>z0q6Gf(xRUnJQ*wmC~V1StlqmfMqv0>sc8eJY)4K}%f5Mzd4gHOEkK4cj0dE_>Hy(#!Rr73 literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/ground.png.o b/build-cg/assets/img/ground.png.o new file mode 100644 index 0000000000000000000000000000000000000000..0cdc4e860d64f40352db9d38c590bcc52cf8a274 GIT binary patch literal 936 zcmb<-^>JflVq|~=Mg}b)8%coa0a(riOlmN&GO&PI0t^C{Ss)nXiwYs4FcMWR$QLFK zp(&9?w;9#s;V(4x={{N2*@tL{l@##hR zrFkjH?D$kPesN}1Dg%RFab<2vViJ%pDT2@$Fji51N@7VO4yWM~mIg|I+{*-208H@^ zw?g?azaXmtDYpR<0YD7&GFUGte*nG5zzG!tQXs(810?joOb7upPY}oj>4gHOT|kC1 Jj0dE_>Hz$T#v=d# literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/ice.png.o b/build-cg/assets/img/ice.png.o new file mode 100644 index 0000000000000000000000000000000000000000..c97930e4e7df4f19756dc4cffa030868aef3899b GIT binary patch literal 668 zcmb<-^>JflVq|~=Mg}b)8(H8ASk44YYA~=euz+O+7&vt6LGYLa2twGHeA>xEY=+qj zaviceAbez5kUT0MmB+whWO0f z^!Uu=R5&9(H7^ChDbB1)Wnj=NuFNe-Oajs+MG!gz#wyBBNi0dk=PYzNX`leejZ9Dp zU@Sx22j#=ukE{ly#RfFr)@W=sIfQVdTfcxN3!lZ|h3a4AJv`< zC?tzsRjTXRVJ@zGjh&?mvrNQF7}!H65D)iwUscQAm*&auRF}ESf7cP-1`OGuy#L|F zi{jm36QB3VHO<00PLJy^e%akpqVeT=$deT?&jhztWv6wLC%;ejSM8z0=hX{AxDj$z tb=WN78n!Hv7I-nT_eMaBM@`iL9PWWM_N65IUKfb;@5L{o3L{gb51tmg4DN?0OODYO}U^&793P3V$k|rPEGyH{*}u#(u?J7Jg{$Go=Gwry8d_#k|e8ImnOfkN0;sm-)66P`n>lXmu+@ z)o6X`)e6dc=t=KTdyn|C2!0`Qees0)6?OAZ`FgX=t8&qTyxc~`e*Ie#z3+cEb@9!) zt~9R Sn>XN6yy3VbgOOF7z3vRKcGyV( literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/red_dot.png.o b/build-cg/assets/img/red_dot.png.o new file mode 100644 index 0000000000000000000000000000000000000000..02a4b8bde4a3a20b1c59a14291487e310805f979 GIT binary patch literal 936 zcmb<-^>JflVq|~=Mg}b)8%coa0a(riOlmN&GO&PU1sDXtA_R#4H~>T&ND`X?FmZ@1 zx)C59Fc}yN*%Xl6$dL#66&)b_4+#h4(1C;=OdMS&jE}B^R6a8#4Z+h9FtLExd<+as z93Zoxe0c=_|3`-S%-r<&qSTc5l>8DDPJC)!3aUVHW>qQ!gI;lEZb@PikS-~L&>1jR zQGQBdNg^rEmIf*YxseH~37Fy`ZiVt;enD0PQf>nz0)QCkWw2frAPveJoKP_!1p-Vx dK*A8rgb*JflVq|~=Mg}b)8%coa4Oq?uOlmN&GO&PU1sDYW695bh|Nnz@fkH!i~U?zlsnFkCXuwJMX(=i}J8Oi}sV08fh C#ev5F literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/solid_0.png.o b/build-cg/assets/img/solid_0.png.o new file mode 100644 index 0000000000000000000000000000000000000000..560950db823e619e39f4ac477408fb7dd624d723 GIT binary patch literal 936 zcmb<-^>JflVq|~=Mg}b)8%coa0a(riOlmN&GO&PI0t^EGDFk41pajGy1_qdsAYmAr zRy53hWb;9`Ld20pX~l-Q07irCf%qFFLMvNg=0a?R*$5Fu_@A)-Fjr%vnIUNio{j_{ zd_D#SCJvB#C|@4I|NoI8J~KBxzBoT8GbP>tg%h8emx3x#oLQC1z@S%LnOl;W1f)xf zAan+dRg|BSSdxg%X}H9sff6A1GC>spQ#{12P(I8r$Z9~!ZGc1o5Cgpo)(grXK<_bd kLdAd-2r%^k2}3XwLcq)u1ad)op@3;Gkf99Y0co&0085$K)&Kwi literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/solid_1.png.o b/build-cg/assets/img/solid_1.png.o new file mode 100644 index 0000000000000000000000000000000000000000..8739d87369728a058387d66f3ef147dede2c2fc7 GIT binary patch literal 936 zcmb<-^>JflVq|~=Mg}b)8%coa0a(riOlmN&GO&PI0t^EG;edew#)PpTG%63K21MhM zN7ezhhXMlGK5T55(a3Tj`yt}UqO@YeTmYj%_P|007810w8{to6n-Km-7RBxcn5(hT z%#bt$Pe%d}J|6=E69-5=lrN9q|NqDkpP8E;U!0$lnG$b^!ii7KOFYw0@5W#5IO_KD#}kuEJ?)XG+biRKnak0nV<@QDIVfhC?Dn*WHlh=Hb5c(h=E=P s>jmWxp!XO!p<+M^1ekh&gdvy-Azi*E&>xkX#tE7dkOQhwW;+(XhG9fLkNqayoI33m=|cGsl$|GBRy#ywU}-) zm#7NAt7a8xoe@>2i_Zkp44xo!xFSrds^hKH*DL?`r+cL0&cZZurEY$8L(!?ypRIeV zt~%G>K{0D&lD`#ewDOG_{D;ba6f*Aum^P^$?<+6f5T%E0l%3Ok;=w36ZhV@hw*+94 zT@QJ@#+Y9??gU*dfZSNfH~J?yVGPK3Xm_jFv|K~XdWXXsXV@VPeM#E4IWj>};n YGY@oQ3)xA(9#XpN%sdecgkiM051@7|!vFvP literal 0 HcmV?d00001 diff --git a/build-cg/assets/img/teleporter_0.png.o b/build-cg/assets/img/teleporter_0.png.o new file mode 100644 index 0000000000000000000000000000000000000000..c2da7e2e03ba229a53afb21ce61fa8aaa673d122 GIT binary patch literal 952 zcmbVLy>0?A4ECiUm5qv#k%clKhK?Or%G7~3I2|G?Nc`!@QkK3zAB~5hPXKltUmSjf zilvL~@5h%rB|jgZqs(MbMFu^r6<`jYd-H1->QM7+6PlIhPI1JzEzuk)DWW>o%y6$! z)@qgzQSdZo35|H_Bb-&DU|u|e$|PaMCDTM7c~R&$#A)J-tezk`J%bz?=RVz6%JsBx#lOC#jcVGn2`;<=y!X({w`mQ@-*Fk^gTKIgYnbV-Gy;Z+ Z!u;Ygq$-5Wd%>Q(ASXxnY>L4S5OlL4LQ#UcZj{0xIWSibz`?jy~cAza^h&qg^@7!JXeMB z$bdv`1$aZrRHJBb18)k^SsyN8ps_Bd!I7)gp$wc-U2-dLU8oGDhe~&%^D#~PsxX}? z^WDIsn9pr@{$F+U3^nJ74~yh|B6llOQ~hN1=}6^r{ZR(L@}Ju}__`dOGo|0mFR;7i zwJflVq|~=Mg}b)8%coa4p`0vOlmN&GO&PU1sDVv82IMLm9>c(qMG}Oqe3# literal 0 HcmV?d00001 diff --git a/build-cg/map b/build-cg/map new file mode 100644 index 0000000..6a8d163 --- /dev/null +++ b/build-cg/map @@ -0,0 +1,983 @@ +Archive member included to satisfy reference by file (symbol) + +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) + build-cg/src/main.c.o (_timer_setup) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(gint.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) (_gint_intlevel) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(start.c.o) + (_start) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(mmu.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(start.c.o) (_utlb_mapped_memory) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(setup.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(start.c.o) (_gint_install) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(hardware.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(start.c.o) (_hw_detect) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(keysc.c.o) + build-cg/src/menu.c.o (_clearevents) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(cpg.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) (_clock_freq) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dprint.c.o) + build-cg/src/menu.c.o (_dprint) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(memory.c.o) + build-cg/src/levels.c.o (_memcpy) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(stdio.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dprint.c.o) (_vsnprintf) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dclear.c.o) + build-cg/src/menu.c.o (_dclear) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + build-cg/src/menu.c.o (_dtext) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti-asm.s.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) (_topti_glyph_fg_bg) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dvram.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dclear.c.o) (_gint_vram) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dimage.c.o) + build-cg/src/draw.c.o (_dimage) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dupdate.c.o) + build-cg/src/menu.c.o (_dupdate) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(drect.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) (_drect) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(r61524.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dupdate.c.o) (_r61524_display) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(font8x9.png.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) (_gint_font8x9) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.s.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) (_inth_tmu) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(start.c.o) (_gint_panic) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(vbr.s.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(setup.c.o) (_gint_setvbr) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.s.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(setup.c.o) (_gint_exch_tlbh) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.S.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(setup.c.o) (_gint_inth_7305) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(getkey.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(keysc.c.o) (_getkey_repeat) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.c.o) (_dfont) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(string.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) (_strlen) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(memset.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dclear.c.o) (_dma_memset) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dma.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(r61524.c.o) (_dma_transfer) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(bopti.c.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dimage.c.o) (_bopti_render_clip) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(bopti-asm.s.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(bopti.c.o) (_bopti_r5g6b5) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.s.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dma.c.o) (_inth_dma_te) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_movmem.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) (___movmemSI24) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_div_table.o) + build-cg/src/draw.c.o (___sdivsi3_i4i) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) (___udivdi3) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(stdio.c.o) (___umoddi3) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + build-cg/src/main.c.o (___adddf3) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + build-cg/src/main.c.o (___muldf3) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + build-cg/src/main.c.o (___nedf2) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + build-cg/src/main.c.o (___gtdf2) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + build-cg/src/main.c.o (___gedf2) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + build-cg/src/main.c.o (___ltdf2) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + build-cg/src/main.c.o (___floatsidf) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + build-cg/src/main.c.o (___fixdfsi) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_thenan_df.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) (___thenan_df) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udiv_qrnnd_16.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) (___udiv_qrnnd_16) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clz.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) (___clz_tab) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) (___clzsi2) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) (___pack_d) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) (___unpack_d) +/home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_fpcmp_parts_df.o) + /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) (___fpcmp_parts_d) + +Discarded input sections + + .comment 0x0000000000000000 0x12 build-cg/src/menu.c.o + .comment 0x0000000000000000 0x12 build-cg/src/collide.c.o + .comment 0x0000000000000000 0x12 build-cg/src/player.c.o + .comment 0x0000000000000000 0x12 build-cg/src/draw.c.o + .comment 0x0000000000000000 0x12 build-cg/src/levels.c.o + .comment 0x0000000000000000 0x12 build-cg/src/main.c.o + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(gint.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(start.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(mmu.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(setup.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(hardware.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(keysc.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(cpg.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dprint.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(memory.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(stdio.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dclear.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dvram.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dimage.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dupdate.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(drect.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(r61524.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(getkey.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(string.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(memset.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dma.c.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(bopti.c.o) + .debug_info 0x0000000000000000 0x737 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + .debug_abbrev 0x0000000000000000 0x218 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + .debug_loc 0x0000000000000000 0x6d5 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + .debug_ranges 0x0000000000000000 0xf0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + .debug_line 0x0000000000000000 0x28f /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + .debug_str 0x0000000000000000 0x5a9 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + .eh_frame 0x0000000000000000 0x80 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + .debug_info 0x0000000000000000 0x746 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + .debug_abbrev 0x0000000000000000 0x229 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + .debug_loc 0x0000000000000000 0x6ef /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + .debug_ranges 0x0000000000000000 0x108 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + .debug_line 0x0000000000000000 0x2e5 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + .debug_str 0x0000000000000000 0x5a9 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + .eh_frame 0x0000000000000000 0x90 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + .debug_info 0x0000000000000000 0x740 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + .debug_abbrev 0x0000000000000000 0x244 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + .debug_loc 0x0000000000000000 0x6aa /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + .debug_ranges 0x0000000000000000 0x60 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + .debug_line 0x0000000000000000 0x400 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + .debug_str 0x0000000000000000 0x616 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + .debug_info 0x0000000000000000 0x6e9 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + .debug_abbrev 0x0000000000000000 0x27c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + .debug_loc 0x0000000000000000 0x4c5 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + .debug_ranges 0x0000000000000000 0xa8 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + .debug_line 0x0000000000000000 0x356 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + .debug_str 0x0000000000000000 0x5e8 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + .debug_info 0x0000000000000000 0x4f4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + .debug_abbrev 0x0000000000000000 0x1b7 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + .debug_loc 0x0000000000000000 0x50 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + .debug_line 0x0000000000000000 0x11a /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + .debug_str 0x0000000000000000 0x5a5 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + .debug_info 0x0000000000000000 0x4f4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + .debug_abbrev 0x0000000000000000 0x1b7 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + .debug_loc 0x0000000000000000 0x50 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + .debug_line 0x0000000000000000 0x11a /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + .debug_str 0x0000000000000000 0x5a5 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + .debug_info 0x0000000000000000 0x4f4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + .debug_abbrev 0x0000000000000000 0x1b7 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + .debug_loc 0x0000000000000000 0x50 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + .debug_line 0x0000000000000000 0x11a /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + .debug_str 0x0000000000000000 0x5a5 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + .debug_info 0x0000000000000000 0x4f4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + .debug_abbrev 0x0000000000000000 0x1b7 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + .debug_loc 0x0000000000000000 0x50 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + .debug_line 0x0000000000000000 0x11a /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + .debug_str 0x0000000000000000 0x5a5 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + .debug_info 0x0000000000000000 0x494 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + .debug_abbrev 0x0000000000000000 0x1fb /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + .debug_loc 0x0000000000000000 0xd1 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + .debug_ranges 0x0000000000000000 0x48 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + .debug_line 0x0000000000000000 0x19e /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + .debug_str 0x0000000000000000 0x580 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + .debug_info 0x0000000000000000 0x4ce /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + .debug_abbrev 0x0000000000000000 0x1bb /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + .debug_loc 0x0000000000000000 0x49 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + .debug_line 0x0000000000000000 0x152 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + .debug_str 0x0000000000000000 0x59d /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + .debug_info 0x0000000000000000 0x391 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_thenan_df.o) + .debug_abbrev 0x0000000000000000 0x11c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_thenan_df.o) + .debug_aranges + 0x0000000000000000 0x18 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_thenan_df.o) + .debug_line 0x0000000000000000 0xab /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_thenan_df.o) + .debug_str 0x0000000000000000 0x533 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_thenan_df.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_thenan_df.o) + .debug_info 0x0000000000000000 0x371 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clz.o) + .debug_abbrev 0x0000000000000000 0xcf /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clz.o) + .debug_aranges + 0x0000000000000000 0x18 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clz.o) + .debug_line 0x0000000000000000 0xe2 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clz.o) + .debug_str 0x0000000000000000 0x526 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clz.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clz.o) + .debug_info 0x0000000000000000 0x3de /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + .debug_abbrev 0x0000000000000000 0x129 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + .debug_loc 0x0000000000000000 0x5a /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + .debug_ranges 0x0000000000000000 0x38 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + .debug_line 0x0000000000000000 0x13c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + .debug_str 0x0000000000000000 0x543 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + .debug_info 0x0000000000000000 0x4d4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + .debug_abbrev 0x0000000000000000 0x1cb /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + .debug_loc 0x0000000000000000 0x31c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + .debug_ranges 0x0000000000000000 0x58 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + .debug_line 0x0000000000000000 0x282 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + .debug_str 0x0000000000000000 0x591 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + .debug_info 0x0000000000000000 0x45d /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + .debug_abbrev 0x0000000000000000 0x18b /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + .debug_loc 0x0000000000000000 0xb5 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + .debug_line 0x0000000000000000 0x1a8 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + .debug_str 0x0000000000000000 0x573 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + .debug_info 0x0000000000000000 0x425 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_fpcmp_parts_df.o) + .debug_abbrev 0x0000000000000000 0x173 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_fpcmp_parts_df.o) + .debug_aranges + 0x0000000000000000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_fpcmp_parts_df.o) + .debug_line 0x0000000000000000 0x1fd /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_fpcmp_parts_df.o) + .debug_str 0x0000000000000000 0x556 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_fpcmp_parts_df.o) + .comment 0x0000000000000000 0x12 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_fpcmp_parts_df.o) + +Memory Configuration + +Name Origin Length Attributes +rom 0x0000000000300000 0x0000000000037000 xr +ram 0x0000000008102000 0x000000000007e000 rw +vbr 0x000000008c160000 0x0000000000001400 xrw +rram 0x000000008c161400 0x0000000000000c00 xrw +ilram 0x00000000e5200000 0x0000000000001000 xrw +xram 0x00000000e5007000 0x0000000000002000 xrw +yram 0x00000000e5017000 0x0000000000002000 xrw +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +LOAD build-cg/src/menu.c.o +LOAD build-cg/src/collide.c.o +LOAD build-cg/src/player.c.o +LOAD build-cg/src/draw.c.o +LOAD build-cg/src/levels.c.o +LOAD build-cg/src/main.c.o +LOAD build-cg/assets/img/semi_solid.png.o +LOAD build-cg/assets/img/elevator13.png.o +LOAD build-cg/assets/img/elevator1.png.o +LOAD build-cg/assets/img/ground.png.o +LOAD build-cg/assets/img/dust.png.o +LOAD build-cg/assets/img/elevator6.png.o +LOAD build-cg/assets/img/spike.png.o +LOAD build-cg/assets/img/solid_1.png.o +LOAD build-cg/assets/img/blue.png.o +LOAD build-cg/assets/img/elevator8.png.o +LOAD build-cg/assets/img/bouncer.png.o +LOAD build-cg/assets/img/elevator2.png.o +LOAD build-cg/assets/img/elevator11.png.o +LOAD build-cg/assets/img/elevator5.png.o +LOAD build-cg/assets/img/red.png.o +LOAD build-cg/assets/img/teleporter_0.png.o +LOAD build-cg/assets/img/ice.png.o +LOAD build-cg/assets/img/elevator12.png.o +LOAD build-cg/assets/img/elevator16.png.o +LOAD build-cg/assets/img/elevator4.png.o +LOAD build-cg/assets/img/elevator7.png.o +LOAD build-cg/assets/img/teleporter_1.png.o +LOAD build-cg/assets/img/water.png.o +LOAD build-cg/assets/img/exit.png.o +LOAD build-cg/assets/img/elevator10.png.o +LOAD build-cg/assets/img/player.png.o +LOAD build-cg/assets/img/elevator3.png.o +LOAD build-cg/assets/img/blue_dot.png.o +LOAD build-cg/assets/img/elevator15.png.o +LOAD build-cg/assets/img/elevator9.png.o +LOAD build-cg/assets/img/elevator.png.o +LOAD build-cg/assets/img/red_dot.png.o +LOAD build-cg/assets/img/solid_0.png.o +LOAD build-cg/assets/img/elevator14.png.o +LOAD /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a +LOAD /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a +LOAD /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a + 0x0000000000300000 _brom = 0x300000 + 0x000000000000e30c _srom = (((SIZEOF (.text) + SIZEOF (.rodata)) + SIZEOF (.gint.drivers)) + SIZEOF (.gint.blocks)) + +.text 0x0000000000300000 0x5e18 + *(.pretext.entry) + .pretext.entry + 0x0000000000300000 0x1a4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(start.c.o) + 0x0000000000300000 _start + *(.pretext) + .pretext 0x00000000003001a4 0x30 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(start.c.o) + .pretext 0x00000000003001d4 0x40 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(hardware.c.o) + 0x00000000003001d4 _hw_detect + .pretext 0x0000000000300214 0x23c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + 0x0000000000300214 _topti_render + 0x0000000000300404 _dtext + .pretext 0x0000000000300450 0xc4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti-asm.s.o) + 0x0000000000300450 _topti_glyph_fg_bg + 0x000000000030048e _topti_glyph_fg + 0x00000000003004c8 _topti_glyph_bg + .pretext 0x0000000000300514 0x110 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + 0x0000000000300514 _dfont + 0x000000000030052c _charset_size + 0x0000000000300558 _charset_decode + 0x00000000003005c6 _topti_offset + 0x0000000000300624 _btors = . + *(.ctors .ctors.*) + 0x0000000000300624 _mtors = . + *(.dtors .dtors.*) + 0x0000000000300624 _etors = . + 0x0000000000300624 _gint_exch_tlbh_start = . + *(.gint.exch_tlbh) + *fill* 0x0000000000300624 0xc + .gint.exch_tlbh + 0x0000000000300630 0x4c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.s.o) + 0x0000000000300630 _gint_exch_tlbh + 0x0000000000000058 _gint_exch_tlbh_size = ABSOLUTE ((. - _gint_exch_tlbh_start)) + *(.text .text.*) + .text 0x000000000030067c 0x2f8 build-cg/src/menu.c.o + 0x000000000030067c _menu_level_selection + 0x000000000030079c _menu + .text 0x0000000000300974 0x2b0 build-cg/src/collide.c.o + 0x0000000000300974 _collide + 0x00000000003009ec _collide_point + 0x0000000000300a1a _collide_spike + 0x0000000000300a94 _collide_solid + 0x0000000000300b80 _collide_and_erase + .text 0x0000000000300c24 0x74 build-cg/src/player.c.o + 0x0000000000300c24 _jump_test + 0x0000000000300c88 _set_start_pos + 0x0000000000300c8e _reset_old_pos + .text 0x0000000000300c98 0x3e0 build-cg/src/draw.c.o + 0x0000000000300c98 _draw_anim_speed + 0x0000000000300cf0 _draw_anim + 0x0000000000300d0c _draw_player + 0x0000000000300d20 _erase_tile + 0x0000000000300d4a _draw_level + 0x0000000000300f4c _draw_timer + 0x0000000000300f90 _just_breathe + .text 0x0000000000301078 0xb8 build-cg/src/levels.c.o + 0x0000000000301078 _set_level + .text 0x0000000000301130 0x14 build-cg/src/main.c.o + 0x0000000000301130 _callback + 0x0000000000301138 _sgn + .text.startup 0x0000000000301144 0x954 build-cg/src/main.c.o + 0x0000000000301144 _main + .text 0x0000000000301a98 0x584 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) + 0x0000000000301d88 _timer_setup + 0x0000000000301e50 _timer_delay + 0x0000000000301eb0 _timer_start + 0x0000000000301ee8 _timer_reload + 0x0000000000301f20 _timer_pause + 0x0000000000301f5c _timer_stop + 0x0000000000301fd8 _timer_timeout + 0x0000000000301fe4 _timer_clear + .text 0x000000000030201c 0x5c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(gint.c.o) + 0x000000000030201c _gint_intlevel + 0x0000000000302054 _gint_inthandler + .text 0x0000000000302078 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(start.c.o) + .text 0x0000000000302078 0xf8 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(mmu.c.o) + 0x0000000000302078 _utlb_addr + 0x0000000000302088 _utlb_data + 0x0000000000302098 _utlb_mapped_memory + .text 0x0000000000302170 0x2c0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(setup.c.o) + 0x000000000030230c _gint_install + 0x0000000000302388 _gint_unload + 0x00000000003023cc _gint_switch + 0x000000000030242c _gint_osmenu + .text 0x0000000000302430 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(hardware.c.o) + .text 0x0000000000302430 0x420 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(keysc.c.o) + 0x0000000000302604 _pollevent + 0x0000000000302740 _waitevent + 0x000000000030278c _clearevents + 0x00000000003027ac _keydown + 0x00000000003027d8 _keydown_all + 0x0000000000302814 _keydown_any + .text 0x0000000000302850 0xc8 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(cpg.c.o) + 0x000000000030290c _clock_freq + .text 0x0000000000302918 0x58 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dprint.c.o) + 0x0000000000302918 _dprint + .text 0x0000000000302970 0xdc /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(memory.c.o) + 0x0000000000302970 _memcpy + 0x0000000000302a2a __memmove + 0x0000000000302a2e __memcmp + 0x0000000000302a32 _memset + .text 0x0000000000302a4c 0xce4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(stdio.c.o) + 0x0000000000303448 _kprint_opt + 0x0000000000303590 _kprint + 0x0000000000303668 _kvsprint + 0x00000000003036b0 _sprintf + 0x00000000003036d8 _vsprintf + 0x00000000003036f8 _snprintf + 0x0000000000303718 _vsnprintf + .text 0x0000000000303730 0x1c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dclear.c.o) + 0x0000000000303730 _dclear + .text 0x000000000030374c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + .text 0x000000000030374c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti-asm.s.o) + .text 0x000000000030374c 0x6c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dvram.c.o) + 0x000000000030374c _dsetvram + 0x0000000000303778 _dgetvram + 0x0000000000303798 _dvram_switch + .text 0x00000000003037b8 0x40 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dimage.c.o) + 0x00000000003037b8 _dimage + 0x00000000003037e0 _dsubimage + .text 0x00000000003037f8 0x3c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dupdate.c.o) + 0x00000000003037f8 _dupdate + 0x000000000030381c _dupdate_noint + .text 0x0000000000303834 0xc0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(drect.c.o) + 0x0000000000303834 _drect + .text 0x00000000003038f4 0x2d4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(r61524.c.o) + 0x0000000000303944 _r61524_win_get + 0x00000000003039fc _r61524_win_set + 0x0000000000303abc _r61524_display + .text 0x0000000000303bc8 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.s.o) + .text 0x0000000000303bc8 0x2e4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.c.o) + 0x0000000000303e70 _gint_panic + 0x0000000000303e80 _gint_panic_set + 0x0000000000303e94 _gint_exc_catch + 0x0000000000303ea0 _gint_exc_skip + .text 0x0000000000303eac 0x2c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(vbr.s.o) + 0x0000000000303eac _gint_setvbr + .text 0x0000000000303ed8 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.s.o) + .text 0x0000000000303ed8 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.S.o) + .text 0x0000000000303ed8 0x1f8 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(getkey.c.o) + 0x0000000000303ed8 _getkey_opt + 0x0000000000304088 _getkey + 0x0000000000304094 _getkey_repeat + .text 0x00000000003040d0 0x9c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + 0x00000000003040d0 _dsize + .text 0x000000000030416c 0x7c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(string.c.o) + 0x000000000030416c _strlen + 0x000000000030417c _strncpy + 0x0000000000304194 _strcat + 0x00000000003041d8 _strcmp + .text 0x00000000003041e8 0x4c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(memset.c.o) + 0x00000000003041e8 _dma_memset + .text 0x0000000000304234 0x418 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dma.c.o) + 0x0000000000304494 _dma_transfer + 0x00000000003044d4 _dma_transfer_wait + 0x00000000003045e0 _dma_transfer_noint + .text 0x000000000030464c 0x1e4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(bopti.c.o) + 0x000000000030464c _bopti_render + 0x000000000030473c _bopti_render_clip + 0x0000000000304804 _bopti_render_noclip + .text 0x0000000000304830 0x100 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(bopti-asm.s.o) + 0x0000000000304830 _bopti_r5g6b5 + 0x0000000000304880 _bopti_r5g6b5a + 0x00000000003048b0 _bopti_p8 + 0x00000000003048e0 _bopti_p4 + .text 0x0000000000304930 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.s.o) + .text 0x0000000000304930 0x78 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_movmem.o) + 0x0000000000304930 ___movstr + 0x0000000000304930 ___movmem + 0x0000000000304964 ___movmemSI64 + 0x0000000000304964 ___movstrSI64 + 0x0000000000304968 ___movstrSI60 + 0x0000000000304968 ___movmemSI60 + 0x000000000030496c ___movmemSI56 + 0x000000000030496c ___movstrSI56 + 0x0000000000304970 ___movstrSI52 + 0x0000000000304970 ___movmemSI52 + 0x0000000000304974 ___movstrSI48 + 0x0000000000304974 ___movmemSI48 + 0x0000000000304978 ___movstrSI44 + 0x0000000000304978 ___movmemSI44 + 0x000000000030497c ___movstrSI40 + 0x000000000030497c ___movmemSI40 + 0x0000000000304980 ___movstrSI36 + 0x0000000000304980 ___movmemSI36 + 0x0000000000304984 ___movmemSI32 + 0x0000000000304984 ___movstrSI32 + 0x0000000000304988 ___movmemSI28 + 0x0000000000304988 ___movstrSI28 + 0x000000000030498c ___movstrSI24 + 0x000000000030498c ___movmemSI24 + 0x0000000000304990 ___movmemSI20 + 0x0000000000304990 ___movstrSI20 + 0x0000000000304994 ___movstrSI16 + 0x0000000000304994 ___movmemSI16 + 0x0000000000304998 ___movmemSI12 + 0x0000000000304998 ___movstrSI12 + 0x000000000030499c ___movmemSI8 + 0x000000000030499c ___movstrSI8 + 0x00000000003049a0 ___movmemSI4 + 0x00000000003049a0 ___movstrSI4 + .text 0x00000000003049a8 0x424 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_div_table.o) + 0x00000000003049a8 ___udivsi3_i4i + 0x0000000000304a78 ___sdivsi3_i4i + .text 0x0000000000304dcc 0x1e0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + 0x0000000000304dcc ___udivdi3 + .text 0x0000000000304fac 0x208 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + 0x0000000000304fac ___umoddi3 + .text 0x00000000003051b4 0x348 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + 0x0000000000305458 ___adddf3 + 0x00000000003054a8 ___subdf3 + .text 0x00000000003054fc 0x208 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + 0x00000000003054fc ___muldf3 + .text 0x0000000000305704 0x58 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + 0x0000000000305704 ___nedf2 + .text 0x000000000030575c 0x58 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + 0x000000000030575c ___gtdf2 + .text 0x00000000003057b4 0x58 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + 0x00000000003057b4 ___gedf2 + .text 0x000000000030580c 0x58 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + 0x000000000030580c ___ltdf2 + .text 0x0000000000305864 0x98 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + 0x0000000000305864 ___floatsidf + .text 0x00000000003058fc 0x8c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + 0x00000000003058fc ___fixdfsi + .text 0x0000000000305988 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_thenan_df.o) + .text 0x0000000000305988 0x60 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udiv_qrnnd_16.o) + 0x0000000000305988 ___udiv_qrnnd_16 + .text 0x00000000003059e8 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clz.o) + .text 0x00000000003059e8 0x54 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + 0x00000000003059e8 ___clzsi2 + .text 0x0000000000305a3c 0x240 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + 0x0000000000305a3c ___pack_d + .text 0x0000000000305c7c 0xcc /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + 0x0000000000305c7c ___unpack_d + .text 0x0000000000305d48 0xd0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_fpcmp_parts_df.o) + 0x0000000000305d48 ___fpcmp_parts_d + +.gint.blocks 0x0000000000305e20 0x160 + *(.gint.blocks) + .gint.blocks 0x0000000000305e20 0xe0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.s.o) + 0x0000000000305e20 _inth_tmu + 0x0000000000305ea0 _inth_etmu2 + 0x0000000000305ec0 _inth_etmu_help + 0x0000000000305ee0 _inth_etmux + .gint.blocks 0x0000000000305f00 0x40 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.S.o) + 0x0000000000305f00 _gint_inth_7305 + .gint.blocks 0x0000000000305f40 0x40 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.s.o) + 0x0000000000305f40 _inth_dma_te + 0x0000000000305f60 _inth_dma_ae + +.gint.drivers 0x0000000000305f80 0xb4 + 0x0000000000305f80 _bdrv = . + *(.gint.drivers.0) + *(.gint.drivers.1) + .gint.drivers.1 + 0x0000000000305f80 0x24 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(cpg.c.o) + 0x0000000000305f80 _drv_cpg + *(.gint.drivers.2) + .gint.drivers.2 + 0x0000000000305fa4 0x24 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) + 0x0000000000305fa4 _drv_tmu + .gint.drivers.2 + 0x0000000000305fc8 0x24 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dma.c.o) + 0x0000000000305fc8 _drv_dma0 + *(.gint.drivers.3) + *(.gint.drivers.4) + .gint.drivers.4 + 0x0000000000305fec 0x24 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(keysc.c.o) + 0x0000000000305fec _drv_keysc + *(.gint.drivers.5) + .gint.drivers.5 + 0x0000000000306010 0x24 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(r61524.c.o) + 0x0000000000306010 _drv_r61524 + *(.gint.drivers.6) + 0x0000000000306034 _edrv = . + +.rodata 0x0000000000306034 0x82e0 + *(.rodata.4) + *(.rodata .rodata.*) + .rodata.str1.4 + 0x0000000000306034 0x58 build-cg/src/menu.c.o + .rodata.str1.4 + 0x000000000030608c 0x16 build-cg/src/draw.c.o + 0x1e (size before relaxing) + *fill* 0x00000000003060a2 0x2 + .rodata.str1.4 + 0x00000000003060a4 0x185d build-cg/src/levels.c.o + *fill* 0x0000000000307901 0x3 + .rodata 0x0000000000307904 0x208 build-cg/assets/img/semi_solid.png.o + 0x0000000000307904 _img_semi_solid + 0x0000000000307b0c _img_semi_solid_end + .rodata 0x0000000000307b0c 0x208 build-cg/assets/img/elevator13.png.o + 0x0000000000307b0c _img_elevator13 + 0x0000000000307d14 _img_elevator13_end + .rodata 0x0000000000307d14 0x208 build-cg/assets/img/elevator1.png.o + 0x0000000000307d14 _img_elevator1 + 0x0000000000307f1c _img_elevator1_end + .rodata 0x0000000000307f1c 0x208 build-cg/assets/img/ground.png.o + 0x0000000000307f1c _img_ground + 0x0000000000308124 _img_ground_end + .rodata 0x0000000000308124 0x208 build-cg/assets/img/dust.png.o + 0x0000000000308124 _img_dust + 0x000000000030832c _img_dust_end + .rodata 0x000000000030832c 0x208 build-cg/assets/img/elevator6.png.o + 0x000000000030832c _img_elevator6 + 0x0000000000308534 _img_elevator6_end + .rodata 0x0000000000308534 0x208 build-cg/assets/img/spike.png.o + 0x0000000000308534 _img_spike + 0x000000000030873c _img_spike_end + .rodata 0x000000000030873c 0x208 build-cg/assets/img/solid_1.png.o + 0x000000000030873c _img_solid_1 + 0x0000000000308944 _img_solid_1_end + .rodata 0x0000000000308944 0x208 build-cg/assets/img/blue.png.o + 0x0000000000308944 _img_blue + 0x0000000000308b4c _img_blue_end + .rodata 0x0000000000308b4c 0x208 build-cg/assets/img/elevator8.png.o + 0x0000000000308b4c _img_elevator8 + 0x0000000000308d54 _img_elevator8_end + .rodata 0x0000000000308d54 0x208 build-cg/assets/img/bouncer.png.o + 0x0000000000308d54 _img_bouncer + 0x0000000000308f5c _img_bouncer_end + .rodata 0x0000000000308f5c 0x208 build-cg/assets/img/elevator2.png.o + 0x0000000000308f5c _img_elevator2 + 0x0000000000309164 _img_elevator2_end + .rodata 0x0000000000309164 0x208 build-cg/assets/img/elevator11.png.o + 0x0000000000309164 _img_elevator11 + 0x000000000030936c _img_elevator11_end + .rodata 0x000000000030936c 0x208 build-cg/assets/img/elevator5.png.o + 0x000000000030936c _img_elevator5 + 0x0000000000309574 _img_elevator5_end + .rodata 0x0000000000309574 0x208 build-cg/assets/img/red.png.o + 0x0000000000309574 _img_red + 0x000000000030977c _img_red_end + .rodata 0x000000000030977c 0x208 build-cg/assets/img/teleporter_0.png.o + 0x000000000030977c _img_teleporter_0 + 0x0000000000309984 _img_teleporter_0_end + .rodata 0x0000000000309984 0x108 build-cg/assets/img/ice.png.o + 0x0000000000309984 _img_ice + 0x0000000000309a8c _img_ice_end + .rodata 0x0000000000309a8c 0x208 build-cg/assets/img/elevator12.png.o + 0x0000000000309a8c _img_elevator12 + 0x0000000000309c94 _img_elevator12_end + .rodata 0x0000000000309c94 0x208 build-cg/assets/img/elevator16.png.o + 0x0000000000309c94 _img_elevator16 + 0x0000000000309e9c _img_elevator16_end + .rodata 0x0000000000309e9c 0x208 build-cg/assets/img/elevator4.png.o + 0x0000000000309e9c _img_elevator4 + 0x000000000030a0a4 _img_elevator4_end + .rodata 0x000000000030a0a4 0x208 build-cg/assets/img/elevator7.png.o + 0x000000000030a0a4 _img_elevator7 + 0x000000000030a2ac _img_elevator7_end + .rodata 0x000000000030a2ac 0x208 build-cg/assets/img/teleporter_1.png.o + 0x000000000030a2ac _img_teleporter_1 + 0x000000000030a4b4 _img_teleporter_1_end + .rodata 0x000000000030a4b4 0x208 build-cg/assets/img/water.png.o + 0x000000000030a4b4 _img_water + 0x000000000030a6bc _img_water_end + .rodata 0x000000000030a6bc 0x208 build-cg/assets/img/exit.png.o + 0x000000000030a6bc _img_exit + 0x000000000030a8c4 _img_exit_end + .rodata 0x000000000030a8c4 0x208 build-cg/assets/img/elevator10.png.o + 0x000000000030a8c4 _img_elevator10 + 0x000000000030aacc _img_elevator10_end + .rodata 0x000000000030aacc 0x128 build-cg/assets/img/player.png.o + 0x000000000030aacc _img_player + 0x000000000030abf4 _img_player_end + .rodata 0x000000000030abf4 0x208 build-cg/assets/img/elevator3.png.o + 0x000000000030abf4 _img_elevator3 + 0x000000000030adfc _img_elevator3_end + .rodata 0x000000000030adfc 0x208 build-cg/assets/img/blue_dot.png.o + 0x000000000030adfc _img_blue_dot + 0x000000000030b004 _img_blue_dot_end + .rodata 0x000000000030b004 0x208 build-cg/assets/img/elevator15.png.o + 0x000000000030b004 _img_elevator15 + 0x000000000030b20c _img_elevator15_end + .rodata 0x000000000030b20c 0x208 build-cg/assets/img/elevator9.png.o + 0x000000000030b20c _img_elevator9 + 0x000000000030b414 _img_elevator9_end + .rodata 0x000000000030b414 0x2008 build-cg/assets/img/elevator.png.o + 0x000000000030b414 _img_elevator + 0x000000000030d41c _img_elevator_end + .rodata 0x000000000030d41c 0x208 build-cg/assets/img/red_dot.png.o + 0x000000000030d41c _img_red_dot + 0x000000000030d624 _img_red_dot_end + .rodata 0x000000000030d624 0x208 build-cg/assets/img/solid_0.png.o + 0x000000000030d624 _img_solid_0 + 0x000000000030d82c _img_solid_0_end + .rodata 0x000000000030d82c 0x208 build-cg/assets/img/elevator14.png.o + 0x000000000030d82c _img_elevator14 + 0x000000000030da34 _img_elevator14_end + .rodata 0x000000000030da34 0xc /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) + .rodata.str1.4 + 0x000000000030da40 0x4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) + .rodata.str1.4 + 0x000000000030da44 0x6 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(keysc.c.o) + *fill* 0x000000000030da4a 0x2 + .rodata.str1.4 + 0x000000000030da4c 0x4 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(cpg.c.o) + .rodata.str1.4 + 0x000000000030da50 0x31 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(stdio.c.o) + *fill* 0x000000000030da81 0x3 + .rodata.str1.4 + 0x000000000030da84 0x7 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(r61524.c.o) + *fill* 0x000000000030da8b 0x1 + .rodata 0x000000000030da8c 0x49c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(font8x9.png.o) + 0x000000000030da8c _gint_font8x9 + 0x000000000030df28 _gint_font8x9_end + .rodata.str1.4 + 0x000000000030df28 0x288 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.c.o) + 0x28c (size before relaxing) + .rodata 0x000000000030e1b0 0x18 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + .rodata 0x000000000030e1c8 0x30 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dma.c.o) + .rodata.str1.4 + 0x000000000030e1f8 0x5 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dma.c.o) + *fill* 0x000000000030e1fd 0x3 + .rodata 0x000000000030e200 0x14 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_thenan_df.o) + 0x000000000030e200 ___thenan_df + .rodata 0x000000000030e214 0x100 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clz.o) + 0x000000000030e214 ___clz_tab + +.rela.dyn 0x000000000030e314 0x0 + .rela.text 0x000000000030e314 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(gint.c.o) + .rela.pretext.entry + 0x000000000030e314 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(gint.c.o) + .rela.pretext 0x000000000030e314 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(gint.c.o) + 0x0000000008102000 . = ORIGIN (ram) + +.bss 0x0000000008102000 0x170 + 0x0000000008102000 _rbss = . + *(.bss COMMON) + .bss 0x0000000008102000 0x0 build-cg/src/menu.c.o + .bss 0x0000000008102000 0x0 build-cg/src/collide.c.o + .bss 0x0000000008102000 0x0 build-cg/src/player.c.o + .bss 0x0000000008102000 0x0 build-cg/src/draw.c.o + .bss 0x0000000008102000 0x0 build-cg/src/levels.c.o + .bss 0x0000000008102000 0x0 build-cg/src/main.c.o + .bss 0x0000000008102000 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) + .bss 0x0000000008102000 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(gint.c.o) + .bss 0x0000000008102000 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(start.c.o) + .bss 0x0000000008102000 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(mmu.c.o) + .bss 0x0000000008102000 0x26 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(setup.c.o) + .bss 0x0000000008102026 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(hardware.c.o) + *fill* 0x0000000008102026 0x2 + .bss 0x0000000008102028 0x24 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(keysc.c.o) + .bss 0x000000000810204c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(cpg.c.o) + .bss 0x000000000810204c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dprint.c.o) + .bss 0x000000000810204c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(memory.c.o) + .bss 0x000000000810204c 0x114 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(stdio.c.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dclear.c.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti-asm.s.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dvram.c.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dimage.c.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dupdate.c.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(drect.c.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(r61524.c.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.s.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.c.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(vbr.s.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.s.o) + .bss 0x0000000008102160 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.S.o) + .bss 0x0000000008102160 0xc /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(getkey.c.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(string.c.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(memset.c.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dma.c.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(bopti.c.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(bopti-asm.s.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.s.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_movmem.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_div_table.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_thenan_df.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udiv_qrnnd_16.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clz.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + .bss 0x000000000810216c 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_fpcmp_parts_df.o) + 0x0000000008102170 . = ALIGN (0x10) + *fill* 0x000000000810216c 0x4 + 0x0000000000000170 _sbss = SIZEOF (.bss) + +.data 0x0000000008102170 0x90 load address 0x000000000030e314 + 0x000000000030e314 _ldata = LOADADDR (.data) + 0x0000000008102170 _rdata = . + *(.data .data.*) + .data 0x0000000008102170 0x0 build-cg/src/menu.c.o + .data 0x0000000008102170 0x0 build-cg/src/collide.c.o + .data 0x0000000008102170 0x0 build-cg/src/player.c.o + .data 0x0000000008102170 0x0 build-cg/src/draw.c.o + .data 0x0000000008102170 0x0 build-cg/src/levels.c.o + .data 0x0000000008102170 0x0 build-cg/src/main.c.o + .data 0x0000000008102170 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) + .data 0x0000000008102170 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(gint.c.o) + .data 0x0000000008102170 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(start.c.o) + .data 0x0000000008102170 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(mmu.c.o) + .data 0x0000000008102170 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(setup.c.o) + .data 0x0000000008102170 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(hardware.c.o) + .data 0x0000000008102170 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(keysc.c.o) + .data 0x0000000008102170 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(cpg.c.o) + .data 0x0000000008102170 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dprint.c.o) + .data 0x0000000008102170 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(memory.c.o) + .data 0x0000000008102170 0x68 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(stdio.c.o) + 0x0000000008102170 _kprint_formatters + .data 0x00000000081021d8 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dclear.c.o) + .data 0x00000000081021d8 0x8 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + 0x00000000081021d8 _topti_font + 0x00000000081021dc _gint_default_font + .data 0x00000000081021e0 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti-asm.s.o) + .data 0x00000000081021e0 0xc /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dvram.c.o) + 0x00000000081021e0 _gint_vram + .data 0x00000000081021ec 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dimage.c.o) + .data 0x00000000081021ec 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dupdate.c.o) + .data 0x00000000081021ec 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(drect.c.o) + .data 0x00000000081021ec 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(r61524.c.o) + .data 0x00000000081021ec 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.s.o) + .data 0x00000000081021ec 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.c.o) + .data 0x00000000081021ec 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(vbr.s.o) + .data 0x00000000081021ec 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.s.o) + .data 0x00000000081021ec 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.S.o) + .data 0x00000000081021ec 0x8 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(getkey.c.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(topti.c.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(string.c.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(memset.c.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dma.c.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(bopti.c.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(bopti-asm.s.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(inth.s.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_movmem.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_div_table.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udivdi3.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_umoddi3.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_thenan_df.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_udiv_qrnnd_16.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clz.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + .data 0x00000000081021f4 0x0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_fpcmp_parts_df.o) + 0x0000000008102200 . = ALIGN (0x10) + *fill* 0x00000000081021f4 0xc + +.data.4 0x0000000008102200 0x0 load address 0x000000000030e3a4 + *(.data.4) + 0x0000000008102200 . = ALIGN (0x10) + 0x0000000000000090 _sdata = (SIZEOF (.data) + SIZEOF (.data.4)) + 0x00000000e5200000 . = ORIGIN (ilram) + +.ilram 0x00000000e5200000 0x20 load address 0x000000000030e3a4 + 0x000000000030e3a4 _lilram = LOADADDR (.ilram) + 0x00000000e5200000 _rilram = . + *(.ilram) + .ilram 0x00000000e5200000 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(memset.c.o) + 0x00000000e5200020 . = ALIGN (0x10) + 0x00000000e5007000 . = ORIGIN (xram) + +.xram 0x00000000e5007000 0x0 load address 0x000000000030e3c4 + 0x000000000030e3c4 _lxram = LOADADDR (.xram) + 0x00000000e5007000 _rxram = . + *(.xram) + 0x00000000e5007000 . = ALIGN (0x10) + 0x00000000e5017000 . = ORIGIN (yram) + +.yram 0x00000000e5017000 0x0 load address 0x000000000030e3c4 + 0x000000000030e3c4 _lyram = LOADADDR (.yram) + 0x00000000e5017000 _ryram = . + *(.yram) + 0x00000000e5017000 . = ALIGN (0x10) + 0x0000000000000020 _silram = SIZEOF (.ilram) + 0x0000000000000000 _sxram = SIZEOF (.xram) + 0x0000000000000000 _syram = SIZEOF (.yram) + 0x000000008c15ff00 _gint_vbr = (ORIGIN (vbr) - 0x100) + 0x000000008c161400 . = ORIGIN (rram) + +.gint.data 0x000000008c161400 0xa0 load address 0x000000000030e3c4 + 0x000000000030e3c4 _lgdata = LOADADDR (.gint.data) + 0x000000008c161400 _rgdata = . + *(.gint.data .gint.data.*) + .gint.data 0x000000008c161400 0x30 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) + .gint.data 0x000000008c161430 0x10 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(gint.c.o) + 0x000000008c161430 _SH7305_INTC + .gint.data.sh3 + 0x000000008c161440 0x24 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(gint.c.o) + 0x000000008c161440 _SH7705_INTC + .gint.data 0x000000008c161464 0x24 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(keysc.c.o) + .gint.data 0x000000008c161488 0x8 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(r61524.c.o) + .gint.data 0x000000008c161490 0x8 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(exch.c.o) + 0x000000008c161490 _gint_exc_catcher + 0x000000008c161494 _gint_exc_panic + 0x000000008c1614a0 . = ALIGN (0x10) + *fill* 0x000000008c161498 0x8 + 0x00000000000000a0 _sgdata = SIZEOF (.gint.data) + +.gint.bss 0x000000008c1614a0 0x4f0 load address 0x000000000030e464 + *(.gint.bss .gint.bss.*) + .gint.bss 0x000000008c1614a0 0x200 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(tmu.c.o) + .gint.bss 0x000000008c1616a0 0x2c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(setup.c.o) + .gint.bss 0x000000008c1616cc 0x40 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(hardware.c.o) + 0x000000008c1616cc _gint + .gint.bss 0x000000008c16170c 0x180 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(keysc.c.o) + .gint.bss 0x000000008c16188c 0x24 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(cpg.c.o) + .gint.bss 0x000000008c1618b0 0x10 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(r61524.c.o) + .gint.bss 0x000000008c1618c0 0xd0 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/libgint-cg.a(dma.c.o) + 0x000000008c161990 . = ALIGN (0x10) + 0x00000000000004f0 _sgbss = SIZEOF (.gint.bss) + +/DISCARD/ + *(.gint.bss.sh3) + *(.gint.data.sh3) + *(.debug_info .debug_abbrev .debug_loc .debug_aranges .debug_ranges .debug_line .debug_str) + *(.jcr) + *(.eh_frame_hdr) + *(.eh_frame) + *(.comment) +OUTPUT(build-cg/JTMM.elf elf32-sh) + +.debug_frame 0x0000000000000000 0x410 + .debug_frame 0x0000000000000000 0x10c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_addsub_df.o) + .debug_frame 0x000000000000010c 0x98 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_mul_df.o) + .debug_frame 0x00000000000001a4 0x48 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ne_df.o) + .debug_frame 0x00000000000001ec 0x48 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_gt_df.o) + .debug_frame 0x0000000000000234 0x48 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_ge_df.o) + .debug_frame 0x000000000000027c 0x48 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_lt_df.o) + .debug_frame 0x00000000000002c4 0x3c /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_si_to_df.o) + .debug_frame 0x0000000000000300 0x48 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_df_to_si.o) + .debug_frame 0x0000000000000348 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_clzsi2.o) + .debug_frame 0x0000000000000368 0x68 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_pack_df.o) + .debug_frame 0x00000000000003d0 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_unpack_df.o) + .debug_frame 0x00000000000003f0 0x20 /home/massena/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.3.0/m4-nofpu/libgcc.a(_fpcmp_parts_df.o) diff --git a/build-cg/src/collide.c.d b/build-cg/src/collide.c.d new file mode 100644 index 0000000..2317244 --- /dev/null +++ b/build-cg/src/collide.c.d @@ -0,0 +1,8 @@ +build-cg/src/collide.c.o: src/collide.c include/collide.h include/draw.h \ + include/shared_define.h + +include/collide.h: + +include/draw.h: + +include/shared_define.h: diff --git a/build-cg/src/collide.c.o b/build-cg/src/collide.c.o new file mode 100644 index 0000000000000000000000000000000000000000..14190159341fa30ae0caf6608a52160f4aafd9ae GIT binary patch literal 1528 zcmb7^-%C?b9Kg@L+uY`rmKABX>Sn1~wJ(d~ysy^J0N`<}ad-IeO0FZ=F%Ki?nce9w>V z?tt$SMN?>3D0CKVgTwp~xE@_lGtMA8vfn%?@odYh*f~AQXhM1#B$xOGmQ&Q`F zeJ<5&E>c~+l;obE+T&&6V62Rov2qCsfsUaf%+cX(Inr52DvH~@Z@}5-EIKU>uv$}> zlT;xFwc}Z38qbe;a3L1Ji}4U%`9{5O#OnzU{&a^<2C}rjS={t7;kT^qL6fkQu}AXC zwCb4wPra~ov*MZ4a;(a9Brg)0`L@H_#$O0a{?=qUQI^W%<#@T$BRM5J8_nYRjT5-g zmcfh4C|-ds*5d(x^E-DeRJVN}DN~U-F@G6mf|X9YUgb`)wzYFo{x)-RwZA@RDOo0W zNcU!JO;Xj;KFw`s$R%+}URE5JcgN)3uwv8R3R@eu#wQW%fZF3Y4)_Vf?&0KfmdM=NVTisZ(M&a#hnO|GyymFZ{!wSs z>x9j}+=QL0!@!uUuwq6=d=+d}_LJ{WN|It>kqe;_&D=Fc zCQ`AaT*dT6Y+N*83JR+jOom6qsbCs1)L}%9Ng^yjIT5mIXF>zl=(f$^e{8Uy!j>yJ zT>5504vr!&El*X(G2NOHr64DZ85wcmpd3WpXgZC!P%4oSq2>P)7P85DHCh$?L($JP zn+*D$9M$YT;skdieD#8oI#N&a$T_!atlcgB5!fi&{*eoua0dDt_-CFQa!8H#+|)d{ z%3UEbUC9A!LjMBeC8!mY^ho+6S5Dru;oX^@0}G(K=>64$!;oht@1{pjf>F);4S<$W A%K!iX literal 0 HcmV?d00001 diff --git a/build-cg/src/draw.c.d b/build-cg/src/draw.c.d new file mode 100644 index 0000000..e0b9a12 --- /dev/null +++ b/build-cg/src/draw.c.d @@ -0,0 +1,5 @@ +build-cg/src/draw.c.o: src/draw.c include/draw.h include/shared_define.h + +include/draw.h: + +include/shared_define.h: diff --git a/build-cg/src/draw.c.o b/build-cg/src/draw.c.o new file mode 100644 index 0000000000000000000000000000000000000000..fcf365974ff2b503f40856ae46f980d8632d1856 GIT binary patch literal 3048 zcmb_eeQZ-z6hE&m?4w1xvavBXS_}Jx^=)IwN03kkF3Q4yK|~{T?cSq%tRJJVWm`fl zVMt2mfTc)?F=k1X_=lz-N|aziBEb|Mxnpf05-hiu4VkG9pbr#Z37`c+PNTxhP> z@BGcJeZ|Fzt~ndBHe}W7`NdE+WaOh}YiNuqG(XAp1V>gDB*8qdA(J&Fbas71X4u$N zDolXBZGt|#$(m%slNi_9^^g_THI)MP_(4l(LSvG~zBD)@bK)C{UZ+%{fe2B69>Zg?Q>R>dMUPXSd*U12ojv zud$RjY}r|1S#4Wxt5y#ueER;-!PNb9fi^8h{K)Zd#*pY{SSmP6#b+a@Iqx#b^DUqn zqYTPbd^vJ*j}G?r=-Uy$51`Q~yi=tQt2mw`*_8RG z&!xf#RPpyz{E~`)s^Xuk_-z#*Rq+QZKKXaf7*xDa#Y7TN!|4;e4zYvhIdC`}A}1UWh2;*R zPQbVratU6in@^J}keqHlfJBK4Ubln#_<&R79YMiE$9ebzya%Sl zqJl)fN8lXQvRfuKG70dUgYzpgB(m4#3E>mSYy`~+#15gI2K*skE6J0ngjU5X@?OD_ zdVn0@F+pe0ugE%`K{_Ickq&87k3mZ38f+rQ~*P(#MlVna*Kw@Aja1HVapz0y}>kESDf zyxyjbXlT<+dqKAm@4`dKNiJk9WF1Cq9R=;@cx~) Gl@@7Agl)uIp*foOD>`i6a*n43WDH4zwf=O>gt}J*^SvX2Vb_UU)5Ld z)%&Se-JN-_d+~f@N5e#Fm=^eC;Bi6+&790QW%ilo^%s}V{dgcdke&SKOn>292Wh{9_Wh=L_k81fu|%529b% znI|sjNXdG^jUGs*6(xG)cQ`jBE?oy;g<4hqNQ7DUvgfY%w!tUwyiL{G|2%U&DF zHd800n##Q7sXP>W+l8euE%@sxR0nqI#mSw|0+!;blrur_MsMIhx zip4BOrodtdOU(3mPD$W@kY7YZ$y=P->alL9jVdMqm?W1JO-ZiDloa79VYFllmKNKl z<#GW>bV_L(tSSjo3M`}yqS->7_e#h`0#1n~9Ce#S;I)Gx|8(J96X*7J3&^=pyZ0^jq4=wqjI4jCv?X&t(MTjIGX6 z41AvFzAZT2GyfiQIct+`!6iDe5ZBThxfF8|Q!ZlY%3nusXrmllRFXUk8!;F%P7gG{ zOi+o`*3wYyY>d%6?gw7dF!rE!+a>R6Q6ZR~+Ys|dWh&JbIgK;ca&qL$Ijm#F9!;gl zZ|p-=Li;LLdSJ(nV(RI5yOsHsit$U7&J2ucts?&50~QV@$XVUuHe%jSl<+hR!4)dx za1cuAQof3@#4wCYjyS;GxSo_CjHC~mrK}bU5ez=y)TK_UjpXwyB|QP_v6ySI1uIyq z)xu#ERf;XaE{;~$D`r-)DH-0z_bZ8gYLw?08>vD4NYNDe$pJ&=I9tPmcEQ($%QJoi zr5Hk@`w8J>cvN{3SnA}tS!ffGIwYoY{>GJD?$=gKHf5GA3JxQE&{Zc7*G{JnQ>W@N zS(r_Y&WPawobd^a$1#cPO`<8;y{G4|#E6S(MiO7vb%yhdL7%Y_L-{ss9G5 z`p5qq(QhXyZV`-fa{fvZgILsQnMh5dE`~P9#esymzx?{V)!exEL0G8(Lr3ZYoe}NO zS$+Ge?XwdwLJ_lDgS95;%ub(1#L&=|tlvimO|31q--ns?c9t+vNVTGq3aNH8I{gc~ z#)UfNU}s#QK*{S29Up6sj?p&fcWgZllyb~z(F!V( zeINO~aPHjM*;5x@e(mYm7wq%4!#CpG2?B*fWcO=Z2A#-`)2A9|DidkA4jFzNlmR1L=EAL$O^R5}QH`w?-epd+j(fV*e}#_Tt)TUWPf8c@7r|`X0Nath8L0_`JXS9eV5~ z^s!wcaZb2)#8GqX4e-df*g{{ZZw6NrSFjE2G5YZYu0Yg9I*2QocO3aNTsx4=`v=us Bs9OL4 literal 0 HcmV?d00001 diff --git a/build-cg/src/main.c.d b/build-cg/src/main.c.d new file mode 100644 index 0000000..de643a3 --- /dev/null +++ b/build-cg/src/main.c.d @@ -0,0 +1,14 @@ +build-cg/src/main.c.o: src/main.c include/draw.h include/collide.h \ + include/levels.h include/player.h include/menu.h include/shared_define.h + +include/draw.h: + +include/collide.h: + +include/levels.h: + +include/player.h: + +include/menu.h: + +include/shared_define.h: diff --git a/build-cg/src/main.c.o b/build-cg/src/main.c.o new file mode 100644 index 0000000000000000000000000000000000000000..ce4ecac06a07f048a38738a6edd223098804596d GIT binary patch literal 4500 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 HNPPbVbmlv{ literal 0 HcmV?d00001 diff --git a/build-cg/src/menu.c.d b/build-cg/src/menu.c.d new file mode 100644 index 0000000..d9a2ab4 --- /dev/null +++ b/build-cg/src/menu.c.d @@ -0,0 +1,5 @@ +build-cg/src/menu.c.o: src/menu.c include/menu.h include/shared_define.h + +include/menu.h: + +include/shared_define.h: diff --git a/build-cg/src/menu.c.o b/build-cg/src/menu.c.o new file mode 100644 index 0000000000000000000000000000000000000000..95b63b0874710905497cb1e6d64c55b89eebcb4b GIT binary patch literal 2032 zcma)7Z%kWN6hH5kKP``CP$-i9@jbdQJ8b#@34;YEr72isz)CTQCZ*8wxBN-}FiA`r zVG;;I;?!k{+x$SX_{k=^OlJIGHZ%R8h6ko$%RW$f1+wu$GpsXyz;j>w+QLlqr03n= z@7#0Fz4x4Z(}20Do}wv82n8jGQw$kh$aA4W^3XvRsQBq$DgJW5iNC?$;_vYxezQe; z)g2HWb)O7g8@xWq7O=%Dl_ET-tYg>{LZy*m^BWm)+epj5}WP+1%1fUL7Oi8tZ%3Xc^a)6*$&% zawIw&bw`JygVBK~F#S>7VJ@efyXBa?lwJ11?9Jepx-W#xpa3d(FYg|_3m5ag-f76Y zjeMW%?d_vT`04e(h3;+OFY`A}YvdYHSuI-Qp=&n-YY*OH^TRdP-F3MBIsF{_D%(aK zVF%cZ(}iJ*y})XOc5TJIX>+W9g(0}B%?T9*f9BQ88MRow;BpvX znsg1W%*@Qp0zBKNc;B+)V?K@?YAI?hY7=TJsw}p%Tybf+ldBFZ<-g zz{vxgKftBB5L?{ea$x@a0p5wraHwnX^|~M~Qv9%M#Bb;UI~nb6*SO1V_qyD!9^b&| z2-uxHZkNLY_954VbMyilB#vGqK5xQmcZ^J+>zHR?#D}AQ%<1sCVi}S8TyOixf~2g< zcx@@HlS;-|k1QGEmKYi1JxP~wAwaf_j{zKtV|pnWOMjD$rN2$)r@u?COaB0HSdRTM znV()x=BIy2v9G1zhbeeH1&b+oI|c8g?DIE(OnKeigpa{HG3;}6gTd?b#KwLZd0cLX zK`NaAtLXqkx7P~>&nO|pz06PnhMv)3Y@1YFEbjjm4jsu}$Xz5-0YE>ELFtRVk>n_T z39gkGkgH7P<0q24X&&S7K&qFXSvFAKp9Z|0d-rg|*^ literal 0 HcmV?d00001 diff --git a/build-cg/src/player.c.d b/build-cg/src/player.c.d new file mode 100644 index 0000000..d1b6e38 --- /dev/null +++ b/build-cg/src/player.c.d @@ -0,0 +1,3 @@ +build-cg/src/player.c.o: src/player.c include/player.h + +include/player.h: diff --git a/build-cg/src/player.c.o b/build-cg/src/player.c.o new file mode 100644 index 0000000000000000000000000000000000000000..278705b51cadd5087ea202120799b1fe021a79ab GIT binary patch literal 840 zcmb<-^>JflVq|~=Mg}b)8(H81kT1w!0#>2Hz{$X&-)kTK`g0KvUo$^ZKV60t}4|Z6KRek{GyEiynSZ5dzXeKwI6Novjo!-2Fl| z6)g3P^$fty!64x7W?}gM5m}ZQ#ZL?jKt2#50Fc9i;DIGsfqX8gSc(utzbH(N0E8h2 zq*8#G4Jxk-WM=^}2bf=wlUSKrq?gPPpH-S$5MPp7T*45aom!caU!KPhUz}PJUtE${ zR1#m1U(66+lnN5a&q)Dufo3EyFt9`XqgPy+TauW>pjTW{1fervtfJJMM7@&KiV_CB zl*E!m2EC->Vg|kB{M_8syb_=xBmf1VT9AEgP(7d+M>YZ$KGHyO5ZeKWfq-!akl+Dg zkUo%pkQ|7w2Ia%Tc?FP<3}A7k0~F){VnXT+foec{U{Mb;4;ajF0Fr}YCb%dA!yX`e v0T8nTG02S|_kp616Nq7U0-204K*9!yVF2bnL7)J#x+Orq6-*J32CD-AnNDJd literal 0 HcmV?d00001 diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..82bd325 --- /dev/null +++ b/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/bash +echo "making levels.c" +rm src/levels.c +luajit levels.lua >> src/levels.c +echo "building for cg" +fxsdk build-cg +echo "done" diff --git a/downloadpacks.sh b/downloadpacks.sh new file mode 100755 index 0000000..fae501e --- /dev/null +++ b/downloadpacks.sh @@ -0,0 +1,12 @@ +#!/usr/bin/bash +cd texturepacks +git clone https://gitea.planet-casio.com/Massena/jtmm_mariotheme +git clone https://gitea.planet-casio.com/Massena/jtmm_1bittheme +git clone https://gitea.planet-casio.com/Massena/jtmm_celestepicotheme +git clone https://gitea.planet-casio.com/KikooDX/jtmm_crafttheme +for FOLDER in * +do +cd $FOLDER +git pull +cd .. +done diff --git a/editor.sh b/editor.sh new file mode 100755 index 0000000..eced26b --- /dev/null +++ b/editor.sh @@ -0,0 +1,4 @@ +#!/usr/bin/bash +cd up-editor/ +love . + diff --git a/include/collide.h b/include/collide.h new file mode 100644 index 0000000..edb5b9f --- /dev/null +++ b/include/collide.h @@ -0,0 +1,6 @@ +char collide(int x, int y, char level[], char tile); +char collide_spike(int x, int y, char level[]); +char collide_solid(int x, int y, char level[], char polarity, + char test_semi_solid); +char collide_point(int x, int y, char level[], char tile); +char collide_and_erase(int x, int y, char level[], char tile); diff --git a/include/draw.h b/include/draw.h new file mode 100644 index 0000000..e97eedb --- /dev/null +++ b/include/draw.h @@ -0,0 +1,10 @@ +#include + +void draw_anim_speed(int x, int y, image_t *image, int step, int speed); +void draw_anim(int x, int y, image_t *image, int step); +void draw_player(int x, int y); +void draw_level(char level[], unsigned int step, char polarity, int *start_x, + int *start_y, int tp_positions[]); +void erase_tile(int x, int y, char level[]); +void draw_timer(unsigned int step); //coucou Lephé' +void just_breathe(); diff --git a/include/levels.h b/include/levels.h new file mode 100644 index 0000000..04d8536 --- /dev/null +++ b/include/levels.h @@ -0,0 +1 @@ +void set_level(int level_id, char level[]); diff --git a/include/menu.h b/include/menu.h new file mode 100644 index 0000000..a7ecb3c --- /dev/null +++ b/include/menu.h @@ -0,0 +1,3 @@ +char menu(int *level_id, char *disable_up_key, char *game_loop, + unsigned int step); +char menu_level_selection(int *level_id); diff --git a/include/player.h b/include/player.h new file mode 100644 index 0000000..17d4bc1 --- /dev/null +++ b/include/player.h @@ -0,0 +1,5 @@ +enum { UP, DOWN, LEFT, RIGHT }; +void jump_test(char *jump_pressed, char *jump_buffer, unsigned int *jump_hold, + char enable_up_key); +void set_start_pos(int *start_x, int *start_y, int x, int y); +void reset_old_pos(int *old_x, int *old_y); diff --git a/include/shared_define.h b/include/shared_define.h new file mode 100644 index 0000000..897ca14 --- /dev/null +++ b/include/shared_define.h @@ -0,0 +1,5 @@ +#define PLAYER_H 11 +#define PLAYER_W 11 +#define LEVEL_WIDTH 28 +#define LAST_LEVEL 5062 +#define FPS 60 diff --git a/levels.lua b/levels.lua new file mode 100755 index 0000000..6e31c80 --- /dev/null +++ b/levels.lua @@ -0,0 +1,31 @@ +#!/usr/bin/luajit + +io.write([[#include "levels.h" +#include +]]) +io.write("void set_level(int level_id, char level[]){") +io.write("switch (level_id){") +current = 0 +for i = 0, 9999, 1 do + file = io.open("up-editor/screens/"..i..".scr") + file_content = nil + if file then + file_content = file:read() + formated_file = "" + for j = 1, #file_content, 1 do + if j == 1 then + formated_file = formated_file.."-----------------------------" + end + formated_file = formated_file..file_content:sub(j, j) + if j % 26 == 0 then formated_file = formated_file.."--" end + if j == 390 then + formated_file = formated_file.."---------------------------" + end + end + file:close() + io.write("case "..i..":memcpy(level,\"".. + formated_file.."\","..#formated_file..");") + io.write("break;") + end +end +io.write("}}") diff --git a/project.cfg b/project.cfg new file mode 100644 index 0000000..c85bfb3 --- /dev/null +++ b/project.cfg @@ -0,0 +1,84 @@ +#--- +# fxSDK project configuration file for platform +#--- + +# Project name, should be at most 8 bytes long. +# (You can also specify NAME_G1A or NAME_G3A to override individually.) +NAME := JTMM + +# Internal name, should be '@' followed by at most 7 uppercase letters. +# WARNING: If this convention is not followed, the add-in might not appear in +# the main menu of the calculator! +INTERNAL := @JTMM + +# Output file name. The default is to take , replace spaces with dashes, +# and add .g1a (or .g3a). You can specify a different folder if you want. +TARGET_FX := +TARGET_CG := + +# fx-9860G icon location +ICON_FX = assets-fx/icon-fx.png +# fx-CG 50 icon locations +ICON_CG_UNS = assets-cg/icon-cg-uns.png +ICON_CG_SEL = assets-cg/icon-cg-sel.png + +#--- +# Toolchain selection +#--- + +# Toolchain for fx9860g. Please see also CFLAGS_FX below. +TOOLCHAIN_FX := sh3eb-elf + +# Toolchain for fxcg50. Please see also CFLAGS_CG below. +TOOLCHAIN_CG := sh-elf + +#--- +# Compiler flags +#--- + +# Base compiler flags for the fxSDK, you usually want to keep these. +CFLAGS := -mb -ffreestanding -nostdlib -fstrict-volatile-bitfields + +# Platform-specific compiler flags. +# <> If you are using sh3eb-elf, use -m3. (You can do this on both FX and CG.) +# <> If you are using sh4eb-elf, use -m4-nofpu. (Not ideal on FX but works.) +# <> If you are using sh4eb-nofpu-elf, then your compiler will likely use the +# FPU and cause problems on the calculator. Consider another configuration. +# <> If you are using an sh-elf with several targets, specify whichever you +# support. I recommend -m3 on FX and -m4-nofpu on CG. +# Please see also TOOLCHAIN_FX and TOOLCHAIN_CG above. +CFLAGS_FX := -D FX9860G -m3 +CFLAGS_CG := -D FXCG50 -m4-nofpu + +# Additional compiler flags, change to your own taste! +CFLAGS += -Wall -Wextra -Os + +# Include paths. Add one -I option for each folder from which you want to +# be able to include files with #include<>. +INCLUDE := -I include + +# Libraries. Add one -l option for each library you are using, and also +# suitable -L options if you have library files in custom folders. To use +# fxlib, add libfx.a to the project directory and use "-L . -lfx". +LIBS := + +# Base linker flags for the fxSDK, you usually want to keep these. +LDFLAGS_FX := -T fx9860g.ld -lgint-fx $(LIBS) -lgint-fx -lgcc +LDFLAGS_CG := -T fxcg50.ld -lgint-cg $(LIBS) -lgint-cg -lgcc + +# Additional linker flags, if you need any. +LDFLAGS := + +# Additional platform-specific linker flags. +LDFLAGS_FX += -Wl,-Map=build-fx/map +LDFLAGS_CG += -Wl,-Map=build-cg/map + +#--- +# File conversion parameters +#--- + +# Here you can add fxconv options for each converted file, individually. +# The syntax is ".". For example, to specify the parameters for a +# font name "hexa.png", you might write: +# +# FONT.hexa.png = charset:print grid:size:3x5 grid.padding:1 diff --git a/setpack.sh b/setpack.sh new file mode 100755 index 0000000..7d13c00 --- /dev/null +++ b/setpack.sh @@ -0,0 +1,6 @@ +#!/usr/bin/bash +for FOLDER in "$@";do +cp -r $FOLDER/*.png assets-cg/img/ -v +done +cd up-editor +./update.sh diff --git a/src/collide.c b/src/collide.c new file mode 100644 index 0000000..73962a6 --- /dev/null +++ b/src/collide.c @@ -0,0 +1,73 @@ +#include "collide.h" +#include "draw.h" +#include "shared_define.h" + +#define SPIKE_SCAM 2 + +char collide(int x, int y, char level[], char tile) +{ + if ((level[(int)(x/16) + (int)(y/16) * LEVEL_WIDTH] == tile) || + (level[(int)(x/16) + (int)((y+PLAYER_H)/16) * LEVEL_WIDTH] == tile) || + (level[(int)((x+PLAYER_W)/16) + (int)((y+PLAYER_H)/16) * + LEVEL_WIDTH] == tile) || (level[(int)((x+PLAYER_W)/16) + (int)(y/16) * + LEVEL_WIDTH] == tile)) return 1; + return 0; +} + +char collide_spike(int x, int y, char level[]) +{ + return (collide_point(x + SPIKE_SCAM, y + SPIKE_SCAM, level, 'v') || + collide_point(x + PLAYER_W - SPIKE_SCAM, y + SPIKE_SCAM, level, 'v') || + collide_point(x + SPIKE_SCAM, y + PLAYER_H - SPIKE_SCAM, level, 'v') || + collide_point(x + PLAYER_W - SPIKE_SCAM, y + PLAYER_H - SPIKE_SCAM, level, 'v')); +} + +char collide_point(int x, int y, char level[], char tile) +{ + return (level[(int)(x/16) + (int)(y/16) * LEVEL_WIDTH] == tile); +} + +char collide_solid(int x, int y, char level[], char polarity, + char test_semi_solid) +{ + char collided; + if (polarity) collided = collide(x, y, level, 'b'); + else collided = collide(x, y, level, 'r'); + if (!collided && test_semi_solid && ((y + PLAYER_H) % 16) <= 5) + { + collided = (collide_point(x, y + PLAYER_H, level, '/') || + collide_point(x + PLAYER_W, y + PLAYER_H, level, '/')); + } + return (collided || + collide(x, y, level, '0') || + collide(x, y, level, '1') || + collide(x, y, level, '^') || + collide(x, y, level, 'd') || + collide(x, y, level, '~')); +} + +char collide_and_erase(int x, int y, char level[], char tile) +{ + char collided = 0; + if (collide_point(x, y, level, tile)) + { + erase_tile(x, y, level); + collided = 1; + } + if (collide_point(x + PLAYER_W, y, level, tile)) + { + erase_tile(x + PLAYER_W, y, level); + collided = 1; + } + if (collide_point(x, y + PLAYER_H, level, tile)) + { + erase_tile(x, y + PLAYER_H, level); + collided = 1; + } + if (collide_point(x + PLAYER_W, y + PLAYER_H, level, tile)) + { + erase_tile(x + PLAYER_W, y + PLAYER_H, level); + collided = 1; + } + return collided; +} diff --git a/src/draw.c b/src/draw.c new file mode 100644 index 0000000..9e5094c --- /dev/null +++ b/src/draw.c @@ -0,0 +1,159 @@ +#include +#include +#include "draw.h" +#include "shared_define.h" + +#define BG_COLOR 0 +#define DRAW_OFFSET_Y -24 +#define DRAW_OFFSET_X -27 + +extern image_t img_player; //player texture, 12x12 (NOT ANIMATED) +extern image_t img_solid_0; //solid texture, 16x16 +extern image_t img_solid_1; //solid texture, 16x16 +extern image_t img_spike; //spike texture, 16x16 +extern image_t img_bouncer; //bouncer texture, 16x16 +extern image_t img_ice; //ice texture, 16x8 +extern image_t img_blue; //blue bloc texture, 16x16 +extern image_t img_blue_dot; //off blue bloc texture, 16x16 +extern image_t img_red; //red bloc texture, 16x16 +extern image_t img_red_dot; //off red bloc texture, 16x16 +extern image_t img_exit; //exit texture, 16x16 +extern image_t img_water; //water texture, 16x16 +extern image_t img_semi_solid; //semi solid texture, 16x16 +extern image_t img_teleporter_0; //teleporter 0 texture, 16x16 +extern image_t img_teleporter_1; //teleporter 1 texture, 16x16 +extern image_t img_elevator; //elevator texture, 16x16 +extern image_t img_dust; //dust texture, 16x16 + +void draw_anim_speed(int x, int y, image_t *image, int step, int speed) +{ + dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, image, + ((step/speed) % (image->width / 16)) * 16, 0, 16, 16, DIMAGE_NONE); +} +void draw_anim(int x, int y, image_t *image, int step) +{ + draw_anim_speed(x, y, image, step, 1); +} + +void draw_player(int x, int y) +{ + dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_player); +} + +void draw_level(char level[], unsigned int step, char polarity, int *start_x, +int *start_y, int tp_positions[]) +{ + dclear(BG_COLOR); + unsigned int i = 0; + unsigned int x = 0; + unsigned int y = 0; + while (i != LEVEL_WIDTH*16) + { + switch (level[i]) + { + case '0': + draw_anim(x, y, &img_solid_0, step); + break; + case '1': + draw_anim(x, y, &img_solid_1, step); + break; + case 'r': + if (!polarity) draw_anim(x, y, &img_red, step); + else draw_anim(x, y, &img_red_dot, step); + break; + case 'b': + if (polarity) draw_anim(x, y, &img_blue, step); + else draw_anim(x, y, &img_blue_dot, step); + break; + case 'v': + draw_anim(x, y, &img_spike, step); + break; + case '*': + draw_anim(x, y, &img_bouncer, step); + break; + case '~': + draw_anim(x, y, &img_solid_0, step); + draw_anim(x, y, &img_ice, step); + break; + case '/': + draw_anim(x, y, &img_semi_solid, step); + break; + case '^': + draw_anim_speed(x, y, &img_elevator, step, 2); //half speed + break; + case 'd': + draw_anim(x, y, &img_dust, step); + break; + case 'S': + erase_tile(x, y, level); + *start_x = x + 2; + *start_y = y + 4; + break; + case 'E': + draw_anim(x, y, &img_exit, step); + break; + case 'w': //water + draw_anim(x, y, &img_water, step); + break; + case 't': //teleporter 0 + draw_anim(x, y, &img_teleporter_0, step); + tp_positions[0] = x; + tp_positions[1] = y; + break; + case 'T': //teleporter 1 + draw_anim(x, y, &img_teleporter_1, step); + tp_positions[2] = x; + tp_positions[3] = y; + break; + } + x += 16; + if (x == 16*LEVEL_WIDTH) + { + x = 0; + y += 16; + } + i++; + } +} + +void erase_tile(int x, int y, char level[]) +{ + x = (int)(x/16); + y = (int)(y/16); + level[x + y * LEVEL_WIDTH] = '.'; + x *= 16; + y *= 16; +} + +void draw_timer(unsigned int step) +{ + dprint(0, 0, C_WHITE, C_BLACK, "%u.%02u", (step*2)/FPS, (step*2)%FPS); +} + +void just_breathe(unsigned int step) +{ + int x = 0; + int y = 0; + int xspd = 1; + int yspd = 1; + while (!keydown_any(KEY_MENU, KEY_EXIT, 0)) + { + dclear(0); + dtext(x, y, "Thank you for playing", C_WHITE, C_BLACK); + dprint(x, y + 12, C_WHITE, C_BLACK, "%u.%02u", step/FPS, step%FPS); + dupdate(); + x += xspd; + y += yspd; + if (x == 236 || !x) xspd = 0 - xspd; + if (y == 203 || !y) yspd = 0 - yspd; + clearevents(); + } + { + unsigned char timeout = 50; + while(timeout) + { + timeout--; + dclear(0); + } + } +} diff --git a/src/levels.c b/src/levels.c new file mode 100644 index 0000000..2464d16 --- /dev/null +++ b/src/levels.c @@ -0,0 +1,3 @@ +#include "levels.h" +#include +void set_level(int level_id, char level[]){switch (level_id){case 5050:memcpy(level,"-----------------------------00000000000000000000000000--00000000000000000000000000--000v...vrrv.........000000--000.....rr..........000000--000.....rr..........000000--000.....rr..........000000--000v.E.vrrv.........000000--00011111111....vvvvv000000--00000000000bbbb11111000000--00.............00000000000--00............v00000000000--00.........v11100000000000--00..S.....v100000000000000--00111111111000000000000000--00000000000000000000000000-----------------------------",476);break;case 5051:memcpy(level,"-----------------------------00000000000000000000000000--00000000000000000000000000--00000000000000000000000000--00000000000000000000000000--00000000000000000000000000--00......................00--00......................00--00......................00--00...v..v..v..v..v..v...00--00S..v..v..v..v..v..v..E00--0011rrrrrrrrrbbbbbbbbb1100--0000vvvvvvvvvvvvvvvvvv0000--00001111111111111111110000--00000000000000000000000000--00000000000000000000000000-----------------------------",476);break;case 5052:memcpy(level,"-----------------------------00000000000000000000000000--00000000000000000000000000--0000000000v........0000000--0000000000v......E.0000000--0000000000v...111110000000--0000000000v....v0000000000--0000000000vbv..v0000000000--0000000000v....v0000000000--0000000000v...110000000000--0000000000v....v0000000000--0000000000vrv..v0000000000--0000000........v0000000000--0000000.S......v0000000000--00000001111111110000000000--00000000000000000000000000-----------------------------",476);break;case 5053:memcpy(level,"-----------------------------00000000000000000000000000--00000000000000000000000000--00000000000000000000000000--0000.....00000000000000000--000.......0000000000000000--00.........000000000000000--00.........000000000000000--00.........0000....b..r.00--00.........vvv.....b..r.00--00....v....b.r....vb.vrE00--00....1....b.r...bbbrrr.00--00....0....b.r..bvvvvvvv00--00.S..0....b.r..v111111100--0011**01111vvv111000000000--00000000000111000000000000-----------------------------",476);break;case 5054:memcpy(level,"-----------------------------00000000000000000000000000--00000000000000000000000000--00.....v000v..v..v000vvv00--00......000...v...000vEv00--00.S....000.......000v.v00--00111v..000...1...000...00--00000www000www0www000www00--00000www000www0www000www00--00000www000www0www000www00--00000vwv000vwv0vwv000vwv00--00000wwwwwwwww0wwwwwwwww00--00000wwwwvwwww0wwwwvwwww00--00000wvwwvwwvw0wvwwvwwvw00--00000111111111011111111100--00000000000000000000000000-----------------------------",476);break;case 5055:memcpy(level,"-----------------------------00000000000000000000000000--00000000000000000000000000--00......................00--00......................00--00......................00--000000v...v....v...v000000--vr......................bv--vr......................bv--vr.S..................E.bv--111111v..vbv..vrv..v111111--00......................00--00......................00--00......................00--00vvvvvvvvvvvvvvvvvvvvvv00--00000000000000000000000000-----------------------------",476);break;case 5056:memcpy(level,"-----------------------------00000000000000..0000000000--00000000000000.v000v00v000--000000vvvvvvv0..0.wwwwww.0--000000.......0..0.wwwwww.0--000000.......0....vvvvvv.0--000000bbb1...0....vvvvvv.0--000000vwv0...0..11vvvvvvE0--000000vwv0v.v0..0011111110--000000vwv0v.v0..0000000000--000000rrr0......0000000000--00...0vwv0......0000000000--00...bwww0......0000000000--00.S.bwww0***1v.0000000000--00111111100000..0000000000--00000000000000..0000000000-----------------------------",476);break;case 5057:memcpy(level,"-----------------------------00000000000000000000000000--00000000000000000000000000--00vvvvv0000000000000000000--00v...vvv0000vvvvvvvvvvv00--00v.....v0000.........S.00--00vw1.E.v0000........11100--00ww0111100v.........00000--00ww000..............00000--00wv000.........vw..v00000--00wwwwww11^.....vvv..00000--00wwwvww00^.....vvv..00000--00vvvvvv00^.....vvv..00000--00000000000.....vvv..00000--000000000001vv1v111**00000--00000000000000000000000000-----------------------------",476);break;case 5058:memcpy(level,"-----------------------------0000000000ww0000000www0000--000000000www0000000www0000--00....v0..v10000000www0000--00.S..v0.^100000000www0000--00111.v0.^00000........000--00000.v0.^000v.........000--00....v0.^00vvbwwvrrrrr000--00....v0.^0vrwwbwv.....000--00bb1vvv.^vvwrwwv1.....000--00wwrww..vwbwwrwv0vvvv.000--00wwrww..vwwbwvv10..E..000--00vvvww..vrwwbv100.....000--00vvvww..vwrvv10001...1000--0011111**1ww1100000...0000--0000000000ww0000000vvv0000-----------------------------",476);break;case 5059:memcpy(level,"-----------------------------00000000000000000000000000--0000000vvvvvv0000000000000--000000vv....vv^v..v0000000--00v.v0v......v^v...0000000--00...0v..v...v^..^.0000000--0v.S.0vww0v..v^..^.0E.0000--00rrr0vvww0..v^.v^.0..0000--00.v100vvwv.vv^.v^.0v.0000--00.vv00vvbv.vv^..^..w.0000--00..v0vvww0..v^..^....0000--00...0vwrwv..v^v.^...v0000--00...0vwwvv..v^v.^w.vv0000--00vr..wwvvv.wr...^vvvv0000--001vv11111vvv1v1v111110000--00011000001110101000000000-----------------------------",476);break;case 5060:memcpy(level,"-----------------------------..........................--............0000000.......--............0vvvvv0.......--............0v....v0......--............0v.E..v0......--............0v....v0......--............0vvvv.v0......--..........000111v.v0......--.........00vvv0v.wv0......--......0000vb.rv.b.10......--......0v...b.r..bv0.......--......0S...b.r..v10.......--......01vv1vvv1v10........--.......0110111010.........--..........................-----------------------------",476);break;case 5061:memcpy(level,"-----------------------------00000000000000000000000000--00000...0000000000...00000--00....t....0000..d.T.d..00--00.........0000..d...d..00--00.........0000..d...d..00--00.........0000..d...d..00--00....*....0000..d...d..00--001//111//100001dd111dd100--00.........0000...ddd...00--00.........0000...ddd...00--00111///1110000111ddd11100--00.........0000...ddd...00--00..S......0000...dddE..00--00111111111000011111111100--00000000000000000000000000-----------------------------",476);break;case 5062:memcpy(level,"-----------------------------00000000000000000000000000--00000000000000000000000000--00......................00--00......................00--00......................00--00......................00--00......................00--00......................00--00......................00--00......................00--00......................00--00.......v..............00--00.S.....0............E.00--0011111110vvvvvv1111111100--00000000000000000000000000-----------------------------",476);break;}} \ No newline at end of file diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..6047166 --- /dev/null +++ b/src/main.c @@ -0,0 +1,365 @@ +#include +#include +#include +#include +#include +#include "draw.h" +#include "collide.h" +#include "levels.h" +#include "player.h" +#include "menu.h" +#include "shared_define.h" + +#define MAX_HSPD 2.5 +#define ACCELERATION 1.0 +#define DECELERATION 0.5 +#define MIN_VSPD -12.0 +#define MAX_VSPD 6.0 +#define JUMP_SPD -3.99 +#define GRAV 0.4 +#define JUMP_SCALE 8 +#define JUMP_REDUCTION -0.41 +#define DRAW_LEVEL() draw_level(level, step, polarity, &start_x, &start_y, tp_positions) + +void dupdate(); //gint function +//test if jump pressed +int sgn(int number); //return the sign of input double + +int callback(volatile void *arg) +{ + volatile int *has_ticked = arg; + *has_ticked = 1; + return 0; +} + +int main(void) +{ + volatile int has_ticked = 1; //fps cap + char level[477]; + int level_id = 5050; + char jump_pressed = 1; //avoid holding jump + char jump_buffer = 0; //jump buffer, last 3 frames + unsigned int jump_hold = 0; //number of consecutive frames jump has been held + double vspd = 0.0; //player vertical speed + double hspd = 0; //player horizontal speed + int move = 0; + int direction = 0; + int on_ground = 6; //remember if player is on solid + char in_water = 0; + int player_x = 0; + int player_y = 0; + int start_x = 18*16 + 2; + int start_y = 9*16 + 4; + char spawn_buffer = 0; + unsigned int step = 0; + unsigned int rem_step = 0; + char pswap_held = 0; + char polarity = 0; //0 -> blue, 1 -> red + char enable_up_key = 0; + char game_loop = 1; + char exit_buffer = 0; + char tp_buffer = 0; + int tp_positions[4] = { 0, 0, 0, 0 }; + char directions[4] = { 0, 0, 0, 0 }; + char last_direction = RIGHT; + char selected_direction = RIGHT; + char drill_buffer = 0; + char drill_toggle = 0; + set_level(level_id, level); + DRAW_LEVEL(); + player_x = start_x; + player_y = start_y; + //fps cap timer + timer_setup(0, timer_delay(0, 1000000/FPS), 0, callback, &has_ticked); + timer_start(0); + while (game_loop) { + while(!has_ticked) sleep(); + has_ticked = 0; + //START DRAW + step++; + if (!(step % 2)) + { + DRAW_LEVEL(); + draw_player(player_x, player_y); + //drill + if (drill_toggle) + { + int drill_x = player_x; + int drill_y = player_y; + switch (selected_direction) + { + case UP: + drill_y -= 12; + break; + case DOWN: + drill_y += 12; + break; + case LEFT: + drill_x -= 12; + break; + case RIGHT: + drill_x += 12; + break; + } + draw_player(drill_x, drill_y); + collide_and_erase(drill_x, drill_y, level, 'd'); + if ((selected_direction == UP || selected_direction == DOWN) && + (collide_spike(drill_x, drill_y, level) || collide_solid(drill_x, drill_y, level, polarity, 0))) + { + vspd = -vspd; + } + } + draw_timer(step/2); + dupdate(); + } + //END DRAW + clearevents(); + //direction inputs + if (keydown(KEY_LEFT)) + { + if (!directions[LEFT]) last_direction = LEFT; + directions[LEFT] += 1; + } + else directions[LEFT] = 0; + if (keydown(KEY_RIGHT)) + { + if (!directions[RIGHT]) last_direction = RIGHT; + directions[RIGHT] += 1; + } + else directions[RIGHT] = 0; + if (keydown(KEY_UP)) + { + if (!directions[UP]) last_direction = UP; + directions[UP] += 1; + } + else directions[UP] = 0; + if (keydown(KEY_DOWN)) + { + if (!directions[DOWN]) last_direction = DOWN; + directions[DOWN] += 1; + } + else directions[DOWN] = 0; + //direction inputs END + //polarity swap first + if (keydown(KEY_OPTN)) + { + if (!pswap_held) + { + pswap_held = 1; + polarity = !polarity; + } + } + else pswap_held = 0; + //drill toggling + if (keydown(KEY_ALPHA)) + { + if (!drill_buffer) + { + drill_toggle = !drill_toggle; + selected_direction = last_direction; + } + drill_buffer = 1; + } + else drill_buffer = 0; + //horizontal movement & collision + { + move = 0; + double friction = 1; + int trunc_hspd; + //ice + if (collide(player_x, player_y + 1, level, '~')) friction = 0.2; + move = keydown(KEY_RIGHT) + 0 - keydown(KEY_LEFT); + if (move) { + if (hspd < MAX_HSPD) + { + hspd += ACCELERATION * friction; + if (hspd > MAX_HSPD) hspd = MAX_HSPD; + } + direction = move; + } + else if (hspd > 0) + { + if (friction != 0.2) hspd -= DECELERATION * friction; + else hspd -= DECELERATION / 4 * friction; + if (hspd < 0) hspd = 0; + } + trunc_hspd = hspd * direction; + if (1) //glue was here + { + if (!collide_solid(player_x + trunc_hspd, player_y, level, polarity, 0)) + { + player_x += trunc_hspd; + } + else + { + int sign_hspd = sgn(trunc_hspd); + while (!collide_solid(player_x + sign_hspd, player_y, level, polarity, + 0)) + { + player_x += sign_hspd; + } + hspd = 0; + } + } + } + //ground detection + if (vspd >= 0 && collide_solid(player_x, player_y + 1, level, polarity, 1)) + { + on_ground = 6; + vspd = 0; + if (spawn_buffer) + { + spawn_buffer = 0; + set_start_pos(&start_x, &start_y, player_x, player_y); + } + } + else + { + if (on_ground != 6 && vspd < MAX_VSPD) vspd += GRAV; + if (on_ground) on_ground--; + } + //in water? + in_water = collide(player_x, player_y, level, 'w'); + //vertical movement + jump_test(&jump_pressed, &jump_buffer, &jump_hold, enable_up_key); + //jump + if (jump_buffer && (on_ground || in_water)) { + vspd = JUMP_SPD; + on_ground = 0; + jump_hold = JUMP_SCALE; + } + else if (jump_hold && + (keydown(KEY_SHIFT) || (keydown(KEY_UP) && enable_up_key))) + { + jump_hold--; + vspd += JUMP_REDUCTION; + } + else jump_hold = 0; + //elevator collision and raise + if ((collide(player_x - 1, player_y, level, '^') || + collide(player_x + 1, player_y, level, '^')) && vspd > MIN_VSPD) + { + if (vspd > -2) + { + vspd -= GRAV; + } + vspd -= GRAV; + } + //vertical collision + { + int trunc_vspd; + if (in_water) trunc_vspd = vspd / 2; + else trunc_vspd = vspd; + //bouncer + if (collide(player_x, player_y + trunc_vspd, level, '*')) + { + vspd = -vspd - 2; + trunc_vspd = vspd; + } + if (trunc_vspd) + { + if (!collide_solid(player_x, player_y + trunc_vspd, level, polarity, + trunc_vspd > 0)) + { + player_y += trunc_vspd; + } + else + { + int sign_vspd = sgn(trunc_vspd); + while (!collide_solid(player_x, player_y + sign_vspd, level, polarity, vspd)) + { + player_y += sign_vspd; + } + vspd = 0; + jump_hold = 0; + } + } + } + //teleporter + if (collide(player_x, player_y, level, 't')) + { + if (!tp_buffer) + { + player_x = tp_positions[2] + 2; + player_y = tp_positions[3] + 2; + } + tp_buffer = 1; + } + else if (collide(player_x, player_y, level, 'T')) + { + if (!tp_buffer) + { + player_x = tp_positions[0] + 2; + player_y = tp_positions[1] + 2; + } + tp_buffer = 1; + } + else tp_buffer = 0; + //spike collision and death + if (collide_spike(player_x, player_y, level)) + { + player_x = start_x; + player_y = start_y; + polarity = 0; + vspd = 0; + } + //border warp + if (player_x <= 22) player_x = 414; + else if (player_x >= 416) player_x = 24; + else if (player_y <= 8) player_y = 246; + else if (player_y >= 248) player_y = 10; + //secret way/hidden passage + collide_and_erase(player_x, player_y, level, 's'); + //next level (exit) + if (collide(player_x, player_y, level, 'E')) + { + level_id++; + rem_step = step; + if (level_id == LAST_LEVEL + 1) + { + just_breathe(step); + return 0; + } + else + { + set_level(level_id, level); + DRAW_LEVEL(); + player_x = start_x; + player_y = start_y; + polarity = 0; + vspd = 0; + } + } + //menu + if (keydown_any(KEY_EXIT, KEY_MENU, 0)) + { + if (!exit_buffer) + { + char reload = menu(&level_id, &enable_up_key, &game_loop, rem_step); + if (reload) + { + if (level_id == 5050) + { + step = 0; + } + set_level(level_id, level); + DRAW_LEVEL(); + player_x = start_x; + player_y = start_y; + polarity = 0; + vspd = 0; + } + exit_buffer = 1; + } + } + else exit_buffer = 0; + } + gint_osmenu(); + return 0; +} + +int sgn(int number) +{ + if (number < 0) return -1; + else return 1; +} diff --git a/src/menu.c b/src/menu.c new file mode 100644 index 0000000..527395a --- /dev/null +++ b/src/menu.c @@ -0,0 +1,95 @@ +#include +#include +#include "menu.h" +#include "shared_define.h" + +#define Y_POS 88 + +char menu(int *level_id, char *enable_up_key, char *game_loop, + unsigned int rem_step) +{ + char reload = 0; + char selected = 0; + char menu_loop = 1; + char exit_buffer = 1; + while (menu_loop) + { + clearevents(); + if (keydown_any(KEY_EXIT, KEY_MENU, 0)) { if (!exit_buffer) menu_loop = 0; } + else exit_buffer = 0; + //return to game + selected += keydown(KEY_DOWN) - keydown(KEY_UP); + if (selected == 4) selected = 0; + else if (selected == -1) selected = 3; + dclear(0); + dprint(0, 0, C_WHITE, C_BLACK, "%u.%02u", rem_step/60, rem_step%60); + dtext(32, Y_POS, "CONTINUE", C_WHITE, C_BLACK); + dtext(32, Y_POS + 12, "SELECT LEVEL", C_WHITE, C_BLACK); + dtext(32, Y_POS + 24, "UP KEY TO JUMP:", C_WHITE, C_BLACK); + dtext(32, Y_POS + 36, "EXIT GAME", C_WHITE, C_BLACK); + dtext(16, Y_POS + (selected * 12), ">", C_WHITE, C_BLACK); + //action switch + if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) + { + switch (selected) + { + case 0: + menu_loop = 0; + break; + case 1: + reload = menu_level_selection(level_id); + menu_loop = 0; + break; + case 2: + *enable_up_key = !*enable_up_key; + break; + case 3: + menu_loop = 0; + *game_loop = 0; + break; + } + } + //up key state display + if (*enable_up_key) dtext(152, Y_POS + 24, "ON", C_WHITE, C_BLACK); + else dtext(152, Y_POS + 24, "OFF", C_WHITE, C_BLACK); + dupdate(); + while (keydown_any(KEY_UP, KEY_DOWN, KEY_SHIFT, KEY_EXE, 0)) clearevents(); + } + return reload; +} + +char menu_level_selection(int *level_id) +{ + char confirm_buffer = 1; + char menu_loop = 1; + int initial_lid = *level_id; + while (menu_loop) { + dclear(0); + clearevents(); + *level_id += keydown(KEY_RIGHT) - keydown(KEY_LEFT); + if (*level_id > LAST_LEVEL || keydown(KEY_0)) *level_id = 5050; + else if (*level_id < 5050) *level_id = LAST_LEVEL; + dprint(32, Y_POS + 20, C_WHITE, C_BLACK, "> %02d <", *level_id - 5049); + if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) + { + if (!confirm_buffer) + { + menu_loop = 0; + } + } + else confirm_buffer = 0; + if (keydown_any(KEY_EXIT, KEY_MENU, 0)) + { + *level_id = initial_lid; + menu_loop = 0; + } + dupdate(); + while (keydown_any(KEY_RIGHT, KEY_LEFT, KEY_SHIFT, KEY_EXE, + KEY_EXIT, KEY_MENU, 0)) + { + clearevents(); + } + } + dclear(0); + return initial_lid != *level_id; +} diff --git a/src/player.c b/src/player.c new file mode 100644 index 0000000..7f6538a --- /dev/null +++ b/src/player.c @@ -0,0 +1,32 @@ +#include +#include "player.h" + +void jump_test(char *jump_pressed, char *jump_buffer, unsigned int *jump_hold, + char enable_up_key) +{ + if (keydown(KEY_SHIFT) || (keydown(KEY_UP) && enable_up_key)) + { + if (!*jump_pressed) + { + *jump_pressed = 1; + *jump_buffer = 3; + } + } + else { + *jump_hold = 0; + *jump_pressed = 0; + } + if (*jump_buffer) *jump_buffer -= 1; +} + +void set_start_pos(int *start_x, int *start_y, int x, int y) +{ + *start_x = x; + *start_y = y; +} + +void reset_old_pos(int *old_x, int *old_y) +{ + *old_x = -16; + *old_y = -16; +} diff --git a/texturepacks/default/blue.png b/texturepacks/default/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..32677ea0542f5231158800b9a3e59f8fb5387bf4 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)0AOaST02;!myzif|Tq zL>4nJa0`PlBg3pY5H=O_9v`7Y`n~`Whd+e3gvscIEGl9PJYt;`saBE#)L*g zwX33&ml&>JIlU1CI)T{n)_w^+hc#)L|C2(*CnRzB7H7kCcG~ zPlBSzc^ByqCCU2D8+I86&YG9!qLS(sk*5-7%(G{2rPx(g1I8dmhU{K>uj8guw*swZ N@O1TaS?83{1OWS!MQH#4 literal 0 HcmV?d00001 diff --git a/texturepacks/default/blue_dot.png b/texturepacks/default/blue_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..8e53f6d1f6d2151483984fa21c3255f6e13f7f44 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4$}A{cT+d-OVhBAf*t zk;M!Q+`=Ht$S`Y;1W=H@#M9T6{Ru0#ketd&hVW3JkeR28V~EA+xR2@IaD KelF{r5}E+t7%pf4 literal 0 HcmV?d00001 diff --git a/texturepacks/default/bouncer.png b/texturepacks/default/bouncer.png new file mode 100644 index 0000000000000000000000000000000000000000..7c77d59193bb9c7c53a186a4183694be33095bca GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)^mS!_!pbdVz%nzlZX-}=t*47)h{frplMVR~DG0R6R}?C) z)4O{o^~?YNZDsG5aBC+jE-YOjwy|OQHzB7(cYl8>s^qYdcX*%nMsqF8+DE4~O{e5= z-xYa(@9Y(k`18>lKNhAn23*tW+|72RP2Rz^=6G%{@7);+3@Uur5*Z5H*m|sG_x!oP zeG~KJ%Szq?k0tqf()YTvn;kLOsd?Us_tR9j$X-qLQ#bkS^ma^m#Fx|29(-EHQG4Uh eb1@xZk9h4IodjYosD}X^&fw|l=d#Wzp$P!TUT3-h literal 0 HcmV?d00001 diff --git a/texturepacks/default/elevator.png b/texturepacks/default/elevator.png new file mode 100644 index 0000000000000000000000000000000000000000..ada442e2a85e0dd91985c4f37101ac655abe69cf GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K51UT4$0sJ%JQsage(c!@6@aFM*uDo-U3d z6?5LsG!$x95Mg~7G;N{h?AsNax2!BuiRKQr6qXH9X#V-B?Dv1J6nTSR0>4f=PPzX1 z?VRFw|8|I;U2A#j<}B+|o^!jOPC2J#u)g@6RBr9_#dEIIZaa7K?)>|f`<^m6B;<;) z=*^vL7|X!1hL`F3@+?M$4Q3oU^Y4PB1a{OeVr@8(+i>945}60xK%r=$Z2Fx8wH$w2 z4wM2_tozXN?eT?~f4M*83q;J;=9ptFemZj(gFu8dYh(T1#@TudEZ5i?Uk7gm39)QD zp9ePnj@?BjhX-ar{Xu*mT!BKmK+VQ^59(xgaW=jN+7|PW^Dm>*;;TEn?6>j(1A@WR L)z4*}Q$iB}M^S}i literal 0 HcmV?d00001 diff --git a/texturepacks/default/exit.png b/texturepacks/default/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..ba020fe5a3aaea942e3c1ac92f2cd673cd0f3e22 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(|sdx(wkF9RFp2BAf*t zk;M!Q+`=Ht$S`Y;1W=H@#M9T6{Ru0#kcNilsxEGz&_Yia#}JFtOM@M`7!)~VroVG+ zx$s|JyoF`&0$bM9YpVW9#*b6jY}n@VRlToe6q*@PuJmlq* literal 0 HcmV?d00001 diff --git a/texturepacks/default/ice.png b/texturepacks/default/ice.png new file mode 100644 index 0000000000000000000000000000000000000000..4910965555856a3e09dd67ff1965f0cd98b3b39c GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQjEnx?oJHr&dIz4a`HW0978lF zCSQs9{okHh@N;q8hyCan4V9*>}8xSO4zE8I6LLVjD8=eF|k;Z^OOo$-=|OB_)6$t@g>05Bg@6 Z4EtJL;yKR?MFOp6@O1TaS?83{1OTg`K7RlJ literal 0 HcmV?d00001 diff --git a/texturepacks/default/player.png b/texturepacks/default/player.png new file mode 100644 index 0000000000000000000000000000000000000000..9facc6349eca8db2605ad52782a41d31bf8554a0 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&kwj^(N7lsTF3|;eu5h%i0;1OBO zz`!jG!i)^F=12eq*-JcqUD=;$IQgEBNDOsJqKUQNhU9u(zI&PswqL|7Og!j;AF8; zk%i&;*`BD?{x^h!y_QUgd8_i}UU>FdNBgY{L%-@fx}2+w&fap3?|QBBaRsF_mUm0v q-Ac1~zhV6+zTYy;AKqU7!TR;!&TE+&lMe#@z~JfX=d#Wzp$PyE)pVx- literal 0 HcmV?d00001 diff --git a/texturepacks/default/red.png b/texturepacks/default/red.png new file mode 100644 index 0000000000000000000000000000000000000000..742a94b28877b2c72b08effac143f9d826a9df36 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)1POmM%k<=}REZS>O>_ z%)r1c48n{Iv*t(u1=&kHeO=j~uyPB@>i+(?#|S8t@9E+gVsSe8P0EG8=N%Xm8Vye= zz45$sW9uUYW)KhtVrR)_rkI9^v#C5>8F~r_1!km)FmLco+B)|kBiH=SMkj-;0|^EV ztpPT|xenronc0ll7#~eCI?P@L&wRh`Gpw$eX Lu6{1-oD!M<OMHiAawAqxQ)eh z6aI`3CCs{Yyb&J+HayaM0F~QczQEF`^TA8DX`iQYuOMHiAawAqxQ)eh z6aI`3CCs{Yyb&J+HayaM0F~QczQEF`^TA8DX`iQYu6GIJ3@*~r4Bu*xSI+Ba z%3d3+J)Lt~t!!~mqajiPk_#Ng@b=d#Wz Gp$P!=zIDg| literal 0 HcmV?d00001 diff --git a/texturepacks/default/teleporter_0.png b/texturepacks/default/teleporter_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6cedf237e3b26c90b5221820449b9b89e0e679fd GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|W_Y?dhFJ8j zoxD-7L4n6L-ljS_T0DVyc{#KAhOMPcYaTiJeDV7u+VW?d literal 0 HcmV?d00001 diff --git a/texturepacks/programmer-art/bouncer.png b/texturepacks/programmer-art/bouncer.png new file mode 100644 index 0000000000000000000000000000000000000000..7088b2250633e0ff909db9a5112bfbd5f5b9f714 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|WIbIRLo9le vQ!0|a&2MBn;L`alklBq_!Zg7^l7ZpKCML@_dtaXgDrE3<^>bP0l+XkKWG)*Y literal 0 HcmV?d00001 diff --git a/texturepacks/programmer-art/dust.png b/texturepacks/programmer-art/dust.png new file mode 100644 index 0000000000000000000000000000000000000000..53b6f13b0c087713aeb656e12b1ba6cffc9ab574 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Iz3$+Lo9ly z1|JkWpun+M=c3^)&fl+MuU|Htv#9o=;)F$e0)#rA+Px$K1oDDRCt{2noACYFbqUfiF1`rx4lho#+DTqYgd&D1?T6O37)rY9FGLgBvNnV z_}~#q^== zy+~FWq?fpLh7^IUpG6L+xmwb608n6^-c}hXus_5BK!J67TVmAGR zHvlMbIjFh3;z8hAR8IgDm}o+Qb$Uw~hV6os2B@N-=JE;!*6H0c1JpkODKHikSf{sD zhLR7s>Hwg?SWsY{-c}jTIDxMQ00qW^0_*g)%FyE#8tMvgH7Kx7Z>tPF3j9k+E)DmdKI;Vst06*b0 AkpKVy literal 0 HcmV?d00001 diff --git a/texturepacks/programmer-art/ice.png b/texturepacks/programmer-art/ice.png new file mode 100644 index 0000000000000000000000000000000000000000..4910965555856a3e09dd67ff1965f0cd98b3b39c GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQjEnx?oJHr&dIz4a`HW0978lF zCSQs9{okHh@N;q8hyCan4V9*>}8xSO4zE8I6LLVjD8=eF|k;Z^OOo$-=|OB_)6$t@g>05Bg@6 Z4EtJL;yKR?MFOp6@O1TaS?83{1OTg`K7RlJ literal 0 HcmV?d00001 diff --git a/texturepacks/programmer-art/player.png b/texturepacks/programmer-art/player.png new file mode 100644 index 0000000000000000000000000000000000000000..381dd51d6ddd6cfbbca1faaa17f2a8d7351f9d67 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k#^NA%Cx&(BWL^R}&YmugAsQ2t z|NQ@Ww4P0fL0Gd(QbIx^;sPsQ{I32(+ph*6$z|S^l#}H1LnL{!@=gAdD-Ci|Cm168 iIH$Ad8M@6nZo;5mCU*Q0OMfoVI0jEwKbLh*2~7aRIw`0C literal 0 HcmV?d00001 diff --git a/texturepacks/programmer-art/red.png b/texturepacks/programmer-art/red.png new file mode 100644 index 0000000000000000000000000000000000000000..078ac5ebcc553263dd61319e0a9f126feccaee93 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Og&v3Lo9le z@0?HgJ-?CZz@Y;N4m>!Z;4tkOGmpH)42_L*8ygd^Gz2oc@is7tv9WoqQxa!jc&*QR U-r}}wDbN50Pgg&ebxsLQ01}cVJpcdz literal 0 HcmV?d00001 diff --git a/texturepacks/programmer-art/red_dot.png b/texturepacks/programmer-art/red_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..bf848d8571914ac4888815a707cbb0e71770c9aa GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|tUX;ELo9le z|D1pDdp;wVgru4Aq*Lh&SpKAc_P;+#?bfitr-`A#xQug`njxgN@xNA9BwJ+ literal 0 HcmV?d00001 diff --git a/texturepacks/programmer-art/semi_solid.png b/texturepacks/programmer-art/semi_solid.png new file mode 100644 index 0000000000000000000000000000000000000000..675a79c870d389cbe343ca9687e19919afc690e3 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gUf1Lo9le z_r$OGHlLBJ?xnTChFF^e4qWp)8=V|BGWM8@FZrv!CP$>FDbRs~fgx0w|M0Ez*{6Y8 O89ZJ6T-G@yGywq9Tq3Lh literal 0 HcmV?d00001 diff --git a/texturepacks/programmer-art/solid_0.png b/texturepacks/programmer-art/solid_0.png new file mode 100644 index 0000000000000000000000000000000000000000..731b01086d0c96c91d94e438014c4b08d5180465 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|WIbIRLo9le vdA^?cdES9BVUf${6^x77dZY|y@Gvkme`L}WIQ~T)sF1u7H`HWP;)8E(U_jhQWsZaGb5+ots#=}I(hh+r^pka13kbN#5lu}z^} z*iZb-+)Is%G%c4itya`|@=JbMf2YjZ6Ai4-rW_RSP}$iqsinnKVB=Hvm`axHUu_#V mrW%xd)wy9JRAjcvk-_+ARMrt?sT!aw7(8A5T-G@yGywp-t3mw$ literal 0 HcmV?d00001 diff --git a/texturepacks/programmer-art/teleporter_0.png b/texturepacks/programmer-art/teleporter_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6cedf237e3b26c90b5221820449b9b89e0e679fd GIT binary patch literal 222 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 literal 0 HcmV?d00001 diff --git a/up-editor/LICENSE b/up-editor/LICENSE new file mode 100644 index 0000000..8015026 --- /dev/null +++ b/up-editor/LICENSE @@ -0,0 +1,626 @@ +GNU GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +Preamble + +The GNU General Public License is a free, copyleft license for software and +other kinds of works. + +The licenses for most software and other practical works are designed to take +away your freedom to share and change the works. By contrast, the GNU General +Public License is intended to guarantee your freedom to share and change all +versions of a program--to make sure it remains free software for all its users. +We, the Free Software Foundation, use the GNU General Public License for most +of our software; it applies also to any other work released this way by its +authors. You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom +to distribute copies of free software (and charge for them if you wish), that +you receive source code or can get it if you want it, that you can change +the software or use pieces of it in new free programs, and that you know you +can do these things. + +To protect your rights, we need to prevent others from denying you these rights +or asking you to surrender the rights. Therefore, you have certain responsibilities +if you distribute copies of the software, or if you modify it: responsibilities +to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or +for a fee, you must pass on to the recipients the same freedoms that you received. +You must make sure that they, too, receive or can get the source code. And +you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert +copyright on the software, and (2) offer you this License giving you legal +permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that +there is no warranty for this free software. For both users' and authors' +sake, the GPL requires that modified versions be marked as changed, so that +their problems will not be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified +versions of the software inside them, although the manufacturer can do so. +This is fundamentally incompatible with the aim of protecting users' freedom +to change the software. The systematic pattern of such abuse occurs in the +area of products for individuals to use, which is precisely where it is most +unacceptable. Therefore, we have designed this version of the GPL to prohibit +the practice for those products. If such problems arise substantially in other +domains, we stand ready to extend this provision to those domains in future +versions of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. States +should not allow patents to restrict development and use of software on general-purpose +computers, but in those that do, we wish to avoid the special danger that +patents applied to a free program could make it effectively proprietary. To +prevent this, the GPL assures that patents cannot be used to render the program +non-free. + +The precise terms and conditions for copying, distribution and modification +follow. + +TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of works, +such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this License. +Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals +or organizations. + +To "modify" a work means to copy from or adapt all or part of the work in +a fashion requiring copyright permission, other than the making of an exact +copy. The resulting work is called a "modified version" of the earlier work +or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based on the +Program. + +To "propagate" a work means to do anything with it that, without permission, +would make you directly or secondarily liable for infringement under applicable +copyright law, except executing it on a computer or modifying a private copy. +Propagation includes copying, distribution (with or without modification), +making available to the public, and in some countries other activities as +well. + +To "convey" a work means any kind of propagation that enables other parties +to make or receive copies. Mere interaction with a user through a computer +network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" to the +extent that it includes a convenient and prominently visible feature that +(1) displays an appropriate copyright notice, and (2) tells the user that +there is no warranty for the work (except to the extent that warranties are +provided), that licensees may convey the work under this License, and how +to view a copy of this License. If the interface presents a list of user commands +or options, such as a menu, a prominent item in the list meets this criterion. + + 1. Source Code. + +The "source code" for a work means the preferred form of the work for making +modifications to it. "Object code" means any non-source form of a work. + +A "Standard Interface" means an interface that either is an official standard +defined by a recognized standards body, or, in the case of interfaces specified +for a particular programming language, one that is widely used among developers +working in that language. + +The "System Libraries" of an executable work include anything, other than +the work as a whole, that (a) is included in the normal form of packaging +a Major Component, but which is not part of that Major Component, and (b) +serves only to enable use of the work with that Major Component, or to implement +a Standard Interface for which an implementation is available to the public +in source code form. A "Major Component", in this context, means a major essential +component (kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to produce +the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all the source +code needed to generate, install, and (for an executable work) run the object +code and to modify the work, including scripts to control those activities. +However, it does not include the work's System Libraries, or general-purpose +tools or generally available free programs which are used unmodified in performing +those activities but which are not part of the work. For example, Corresponding +Source includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically linked +subprograms that the work is specifically designed to require, such as by +intimate data communication or control flow between those subprograms and +other parts of the work. + +The Corresponding Source need not include anything that users can regenerate +automatically from other parts of the Corresponding Source. + + The Corresponding Source for a work in source code form is that same work. + + 2. Basic Permissions. + +All rights granted under this License are granted for the term of copyright +on the Program, and are irrevocable provided the stated conditions are met. +This License explicitly affirms your unlimited permission to run the unmodified +Program. The output from running a covered work is covered by this License +only if the output, given its content, constitutes a covered work. This License +acknowledges your rights of fair use or other equivalent, as provided by copyright +law. + +You may make, run and propagate covered works that you do not convey, without +conditions so long as your license otherwise remains in force. You may convey +covered works to others for the sole purpose of having them make modifications +exclusively for you, or provide you with facilities for running those works, +provided that you comply with the terms of this License in conveying all material +for which you do not control copyright. Those thus making or running the covered +works for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of your copyrighted +material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions +stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological measure +under any applicable law fulfilling obligations under article 11 of the WIPO +copyright treaty adopted on 20 December 1996, or similar laws prohibiting +or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention +of technological measures to the extent such circumvention is effected by +exercising rights under this License with respect to the covered work, and +you disclaim any intention to limit operation or modification of the work +as a means of enforcing, against the work's users, your or third parties' +legal rights to forbid circumvention of technological measures. + + 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you receive +it, in any medium, provided that you conspicuously and appropriately publish +on each copy an appropriate copyright notice; keep intact all notices stating +that this License and any non-permissive terms added in accord with section +7 apply to the code; keep intact all notices of the absence of any warranty; +and give all recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you +may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to produce +it from the Program, in the form of source code under the terms of section +4, provided that you also meet all of these conditions: + +a) The work must carry prominent notices stating that you modified it, and +giving a relevant date. + +b) The work must carry prominent notices stating that it is released under +this License and any conditions added under section 7. This requirement modifies +the requirement in section 4 to "keep intact all notices". + +c) You must license the entire work, as a whole, under this License to anyone +who comes into possession of a copy. This License will therefore apply, along +with any applicable section 7 additional terms, to the whole of the work, +and all its parts, regardless of how they are packaged. This License gives +no permission to license the work in any other way, but it does not invalidate +such permission if you have separately received it. + +d) If the work has interactive user interfaces, each must display Appropriate +Legal Notices; however, if the Program has interactive interfaces that do +not display Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, +which are not by their nature extensions of the covered work, and which are +not combined with it such as to form a larger program, in or on a volume of +a storage or distribution medium, is called an "aggregate" if the compilation +and its resulting copyright are not used to limit the access or legal rights +of the compilation's users beyond what the individual works permit. Inclusion +of a covered work in an aggregate does not cause this License to apply to +the other parts of the aggregate. + + 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of sections +4 and 5, provided that you also convey the machine-readable Corresponding +Source under the terms of this License, in one of these ways: + +a) Convey the object code in, or embodied in, a physical product (including +a physical distribution medium), accompanied by the Corresponding Source fixed +on a durable physical medium customarily used for software interchange. + +b) Convey the object code in, or embodied in, a physical product (including +a physical distribution medium), accompanied by a written offer, valid for +at least three years and valid for as long as you offer spare parts or customer +support for that product model, to give anyone who possesses the object code +either (1) a copy of the Corresponding Source for all the software in the +product that is covered by this License, on a durable physical medium customarily +used for software interchange, for a price no more than your reasonable cost +of physically performing this conveying of source, or (2) access to copy the +Corresponding Source from a network server at no charge. + +c) Convey individual copies of the object code with a copy of the written +offer to provide the Corresponding Source. This alternative is allowed only +occasionally and noncommercially, and only if you received the object code +with such an offer, in accord with subsection 6b. + +d) Convey the object code by offering access from a designated place (gratis +or for a charge), and offer equivalent access to the Corresponding Source +in the same way through the same place at no further charge. You need not +require recipients to copy the Corresponding Source along with the object +code. If the place to copy the object code is a network server, the Corresponding +Source may be on a different server (operated by you or a third party) that +supports equivalent copying facilities, provided you maintain clear directions +next to the object code saying where to find the Corresponding Source. Regardless +of what server hosts the Corresponding Source, you remain obligated to ensure +that it is available for as long as needed to satisfy these requirements. + +e) Convey the object code using peer-to-peer transmission, provided you inform +other peers where the object code and Corresponding Source of the work are +being offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from +the Corresponding Source as a System Library, need not be included in conveying +the object code work. + +A "User Product" is either (1) a "consumer product", which means any tangible +personal property which is normally used for personal, family, or household +purposes, or (2) anything designed or sold for incorporation into a dwelling. +In determining whether a product is a consumer product, doubtful cases shall +be resolved in favor of coverage. For a particular product received by a particular +user, "normally used" refers to a typical or common use of that class of product, +regardless of the status of the particular user or of the way in which the +particular user actually uses, or expects or is expected to use, the product. +A product is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent the +only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, procedures, +authorization keys, or other information required to install and execute modified +versions of a covered work in that User Product from a modified version of +its Corresponding Source. The information must suffice to ensure that the +continued functioning of the modified object code is in no case prevented +or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically +for use in, a User Product, and the conveying occurs as part of a transaction +in which the right of possession and use of the User Product is transferred +to the recipient in perpetuity or for a fixed term (regardless of how the +transaction is characterized), the Corresponding Source conveyed under this +section must be accompanied by the Installation Information. But this requirement +does not apply if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has been installed +in ROM). + +The requirement to provide Installation Information does not include a requirement +to continue to provide support service, warranty, or updates for a work that +has been modified or installed by the recipient, or for the User Product in +which it has been modified or installed. Access to a network may be denied +when the modification itself materially and adversely affects the operation +of the network or violates the rules and protocols for communication across +the network. + +Corresponding Source conveyed, and Installation Information provided, in accord +with this section must be in a format that is publicly documented (and with +an implementation available to the public in source code form), and must require +no special password or key for unpacking, reading or copying. + + 7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this License +by making exceptions from one or more of its conditions. Additional permissions +that are applicable to the entire Program shall be treated as though they +were included in this License, to the extent that they are valid under applicable +law. If additional permissions apply only to part of the Program, that part +may be used separately under those permissions, but the entire Program remains +governed by this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any +additional permissions from that copy, or from any part of it. (Additional +permissions may be written to require their own removal in certain cases when +you modify the work.) You may place additional permissions on material, added +by you to a covered work, for which you have or can give appropriate copyright +permission. + +Notwithstanding any other provision of this License, for material you add +to a covered work, you may (if authorized by the copyright holders of that +material) supplement the terms of this License with terms: + +a) Disclaiming warranty or limiting liability differently from the terms of +sections 15 and 16 of this License; or + +b) Requiring preservation of specified reasonable legal notices or author +attributions in that material or in the Appropriate Legal Notices displayed +by works containing it; or + +c) Prohibiting misrepresentation of the origin of that material, or requiring +that modified versions of such material be marked in reasonable ways as different +from the original version; or + +d) Limiting the use for publicity purposes of names of licensors or authors +of the material; or + +e) Declining to grant rights under trademark law for use of some trade names, +trademarks, or service marks; or + +f) Requiring indemnification of licensors and authors of that material by +anyone who conveys the material (or modified versions of it) with contractual +assumptions of liability to the recipient, for any liability that these contractual +assumptions directly impose on those licensors and authors. + +All other non-permissive additional terms are considered "further restrictions" +within the meaning of section 10. If the Program as you received it, or any +part of it, contains a notice stating that it is governed by this License +along with a term that is a further restriction, you may remove that term. +If a license document contains a further restriction but permits relicensing +or conveying under this License, you may add to a covered work material governed +by the terms of that license document, provided that the further restriction +does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, +in the relevant source files, a statement of the additional terms that apply +to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form +of a separately written license, or stated as exceptions; the above requirements +apply either way. + + 8. Termination. + +You may not propagate or modify a covered work except as expressly provided +under this License. Any attempt otherwise to propagate or modify it is void, +and will automatically terminate your rights under this License (including +any patent licenses granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from +a particular copyright holder is reinstated (a) provisionally, unless and +until the copyright holder explicitly and finally terminates your license, +and (b) permanently, if the copyright holder fails to notify you of the violation +by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently +if the copyright holder notifies you of the violation by some reasonable means, +this is the first time you have received notice of violation of this License +(for any work) from that copyright holder, and you cure the violation prior +to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses +of parties who have received copies or rights from you under this License. +If your rights have been terminated and not permanently reinstated, you do +not qualify to receive new licenses for the same material under section 10. + + 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run a copy +of the Program. Ancillary propagation of a covered work occurring solely as +a consequence of using peer-to-peer transmission to receive a copy likewise +does not require acceptance. However, nothing other than this License grants +you permission to propagate or modify any covered work. These actions infringe +copyright if you do not accept this License. Therefore, by modifying or propagating +a covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically receives +a license from the original licensors, to run, modify and propagate that work, +subject to this License. You are not responsible for enforcing compliance +by third parties with this License. + +An "entity transaction" is a transaction transferring control of an organization, +or substantially all assets of one, or subdividing an organization, or merging +organizations. If propagation of a covered work results from an entity transaction, +each party to that transaction who receives a copy of the work also receives +whatever licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the Corresponding +Source of the work from the predecessor in interest, if the predecessor has +it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights +granted or affirmed under this License. For example, you may not impose a +license fee, royalty, or other charge for exercise of rights granted under +this License, and you may not initiate litigation (including a cross-claim +or counterclaim in a lawsuit) alleging that any patent claim is infringed +by making, using, selling, offering for sale, or importing the Program or +any portion of it. + + 11. Patents. + +A "contributor" is a copyright holder who authorizes use under this License +of the Program or a work on which the Program is based. The work thus licensed +is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned or controlled +by the contributor, whether already acquired or hereafter acquired, that would +be infringed by some manner, permitted by this License, of making, using, +or selling its contributor version, but do not include claims that would be +infringed only as a consequence of further modification of the contributor +version. For purposes of this definition, "control" includes the right to +grant patent sublicenses in a manner consistent with the requirements of this +License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent +license under the contributor's essential patent claims, to make, use, sell, +offer for sale, import and otherwise run, modify and propagate the contents +of its contributor version. + +In the following three paragraphs, a "patent license" is any express agreement +or commitment, however denominated, not to enforce a patent (such as an express +permission to practice a patent or covenant not to sue for patent infringement). +To "grant" such a patent license to a party means to make such an agreement +or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the +Corresponding Source of the work is not available for anyone to copy, free +of charge and under the terms of this License, through a publicly available +network server or other readily accessible means, then you must either (1) +cause the Corresponding Source to be so available, or (2) arrange to deprive +yourself of the benefit of the patent license for this particular work, or +(3) arrange, in a manner consistent with the requirements of this License, +to extend the patent license to downstream recipients. "Knowingly relying" +means you have actual knowledge that, but for the patent license, your conveying +the covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that country +that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, +you convey, or propagate by procuring conveyance of, a covered work, and grant +a patent license to some of the parties receiving the covered work authorizing +them to use, propagate, modify or convey a specific copy of the covered work, +then the patent license you grant is automatically extended to all recipients +of the covered work and works based on it. + +A patent license is "discriminatory" if it does not include within the scope +of its coverage, prohibits the exercise of, or is conditioned on the non-exercise +of one or more of the rights that are specifically granted under this License. +You may not convey a covered work if you are a party to an arrangement with +a third party that is in the business of distributing software, under which +you make payment to the third party based on the extent of your activity of +conveying the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by you +(or copies made from those copies), or (b) primarily for and in connection +with specific products or compilations that contain the covered work, unless +you entered into that arrangement, or that patent license was granted, prior +to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied +license or other defenses to infringement that may otherwise be available +to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or otherwise) +that contradict the conditions of this License, they do not excuse you from +the conditions of this License. If you cannot convey a covered work so as +to satisfy simultaneously your obligations under this License and any other +pertinent obligations, then as a consequence you may not convey it at all. +For example, if you agree to terms that obligate you to collect a royalty +for further conveying from those to whom you convey the Program, the only +way you could satisfy both those terms and this License would be to refrain +entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have permission to +link or combine any covered work with a work licensed under version 3 of the +GNU Affero General Public License into a single combined work, and to convey +the resulting work. The terms of this License will continue to apply to the +part which is the covered work, but the special requirements of the GNU Affero +General Public License, section 13, concerning interaction through a network +will apply to the combination as such. + + 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of the +GNU General Public License from time to time. Such new versions will be similar +in spirit to the present version, but may differ in detail to address new +problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies +that a certain numbered version of the GNU General Public License "or any +later version" applies to it, you have the option of following the terms and +conditions either of that numbered version or of any later version published +by the Free Software Foundation. If the Program does not specify a version +number of the GNU General Public License, you may choose any version ever +published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of +the GNU General Public License can be used, that proxy's public statement +of acceptance of a version permanently authorizes you to choose that version +for the Program. + +Later license versions may give you additional or different permissions. However, +no additional obligations are imposed on any author or copyright holder as +a result of your choosing to follow a later version. + + 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE +LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER +EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM +PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + + 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL +ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM +AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, +INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO +USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED +INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE +PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided above cannot +be given local legal effect according to their terms, reviewing courts shall +apply local law that most closely approximates an absolute waiver of all civil +liability in connection with the Program, unless a warranty or assumption +of liability accompanies a copy of the Program in return for a fee. END OF +TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible +use to the public, the best way to achieve this is to make it free software +which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach +them to the start of each source file to most effectively state the exclusion +of warranty; and each file should have at least the "copyright" line and a +pointer to where the full notice is found. + + + +Copyright (C) + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like +this when it starts in an interactive mode: + + Copyright (C) + +This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + +This is free software, and you are welcome to redistribute it under certain +conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands might +be different; for a GUI interface, you would use an "about box". + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. For +more information on this, and how to apply and follow the GNU GPL, see . + +The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General Public +License instead of this License. But first, please read . diff --git a/up-editor/README.md b/up-editor/README.md new file mode 100644 index 0000000..a7c683f --- /dev/null +++ b/up-editor/README.md @@ -0,0 +1,14 @@ +# up-editor + +A level editor for my unnamed-platformer project. +https://gitea.planet-casio.com/KikooDX/unnamed-platformer + +Keys (use QWERTY scancodes) : + - WASD : change screen (up, left, down, right in order) + - C : save screen (WASD autosave) + - O : load screen (WASD autoload) + - K/L : increase/reduce windows scale + - Escape : quit + - Tab : cycle one item forward + - LShift+Tab : cycle one item backward + - I : return to origin screen (5050) diff --git a/up-editor/conf.lua b/up-editor/conf.lua new file mode 100644 index 0000000..6b39d50 --- /dev/null +++ b/up-editor/conf.lua @@ -0,0 +1,18 @@ +function love.conf(t) + package.path = package.path..";./?.lua" + GAME_WIDTH = 416 + GAME_HEIGHT = 240 + scale = 2 --scale multiplier + t.version = "11.3" + t.window.width = GAME_WIDTH * scale + t.window.height = GAME_HEIGHT * scale + t.window.vsync = 0 + t.modules.joystick = false + t.modules.physics = false + t.modules.touch = false + t.modules.timer = false + t.modules.sound = false + t.modules.accelerometerjoystick = false + t.identity = "up_editor" + t.window.title = "UP editor" +end diff --git a/up-editor/draw.lua b/up-editor/draw.lua new file mode 100644 index 0000000..7f08316 --- /dev/null +++ b/up-editor/draw.lua @@ -0,0 +1,32 @@ +function love.draw() + love.graphics.push() + love.graphics.scale(scale) + --draw screen + love.graphics.setColor(1, 1, 1, 1) + x = 0 + y = 0 + for i = 1, SCREEN_LEN, 1 do + current_tile = selected_screen:sub(i, i) + tile_id = 0 + for i, v in ipairs(tiles_char) do + if v == current_tile then tile_id = i break end + end + if tiles[tile_id] then + love.graphics.draw(tiles[tile_id], x, y) + end + x = x + 16 + if x > 16 * 25 then + x = 0 + y = y + 16 + end + end + --draw preview + love.graphics.setColor(1, 1, 1, 0.5) + if tiles[selected_tile] then + love.graphics.draw(tiles[selected_tile], clip_mouse_x, clip_mouse_y) + end + --gui + love.graphics.pop() + love.graphics.setColor(0.8, 0.8, 0.8, 1) + love.graphics.print(screen_id, 2, 0) +end diff --git a/up-editor/force_img/elevator.png b/up-editor/force_img/elevator.png new file mode 100644 index 0000000000000000000000000000000000000000..6509581ab311557ff794d7919f375a04e2fadb6e GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|;yhg(Lo9le zw`|w{dES9BVUf#c0fU6|&zyOx&EyYdGjQwm-uR)nuj~h}LW;Cmb416*j`Iq~?$1Bt zc9~J`!K3VU(^nH1uQ?o9${C%rP{QGaSq_`wzkey;=1272;9+85IH{`_5psMQ&?W{? LS3j3^P6Z+z;!qw;0y6pc@jyr$dF^tN9&{%|V%tPCw! zT@KvlkC`FBByps9>bVYucU3$q6m6M56d8nH@C&REIFRtK%r#N#$f@*S>zJ(@R4!f# S`92+JAA_f>pUXO@geCwbnLcO$ literal 0 HcmV?d00001 diff --git a/up-editor/force_img/glue.png b/up-editor/force_img/glue.png new file mode 100644 index 0000000000000000000000000000000000000000..3a83b68f86b534e4372c41b44b5244cba1771ae5 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|>^)r^Lo9le z|LmXf(4LvKp;PE=h+zZkbeGdlEqOq|beCqu)0qi8PHYdEd~S$LJd~cJH{19~a^jVS bM4)MPJ4Am^3BJ+^G>XB~)z4*}Q$iB}IDRQz literal 0 HcmV?d00001 diff --git a/up-editor/force_img/ice.png b/up-editor/force_img/ice.png new file mode 100644 index 0000000000000000000000000000000000000000..3841df50b16eb62897f5b9b5927f54d4e8354d19 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|(mY)pLo9le zuf+WRZ_g}pM#P#i*=WiBO$iR{H=fMYxX5GP5ObCX2zuK2Wk5cMf;r zkF3X2(+{nlIpHBt+Gk2e+ir&GDpm*7&fkbJdu}hb)rDE@ke3^;#2=vDI^E`6_x0S* Q0BvOOboFyt=akR{0CwUzG5`Po literal 0 HcmV?d00001 diff --git a/up-editor/force_img/secret.png b/up-editor/force_img/secret.png new file mode 100644 index 0000000000000000000000000000000000000000..80af0bc777c1e99470192b1b072a202ec8e862e9 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|EIeHtLo9le zGxTPE-oG>FTs<2Q6y4yN((r7P<$q1H*3KmHfSdy>#NGB9XzV%A^lr|rbs}y-HyAix W1dAHlwMPQYVDNPHb6Mw<&;$T}!6+aA literal 0 HcmV?d00001 diff --git a/up-editor/force_img/spawn.png b/up-editor/force_img/spawn.png new file mode 100644 index 0000000000000000000000000000000000000000..63fdde8541e9f40b83d122fd6402d34b1302aab6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|tUO&DLo9le z6BY;zopr014A0u>b%7 literal 0 HcmV?d00001 diff --git a/up-editor/img/blue.png b/up-editor/img/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..7354b83bb36df6e5158c7c6a6feeafe8810a46b0 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|nmt_{Lo9md z20QW{P~cdcmi~8PoyYw%e8TBHOwswrwoMaqls$9i3*$-?0l`Eu<^wq#46_Qg-l|4C z5k3^ZaS3nSBd$t=GwpLDb_WYr9N%T~-SpqN3vUigP3YadZ%OasX&IgE2Qx$GDP85W ziIz~F6Ex#w(z+wEam){o$INH>WO}nRvY0uqX5yapvnGoIox|Yi>gTe~DWM4fL@i93 literal 0 HcmV?d00001 diff --git a/up-editor/img/blue_dot.png b/up-editor/img/blue_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..0a38613ca46c4f2c70de8dd1475c626534547201 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|vOHZJLo9le z6Be*t@cMQ5!+e(oQ@^k$GWbl8u~YVGm^g8wV5FcOL-6SnK+xnXG(WAxdq#n$KsJZ4 zUF#8s9gHn=`gkT>4LZ;2Y|dkFiBU7o(U4)r+A V@YXyoM*_$R5d)Tg-J=Z8nx1=3yBJTcAE3cQ!Lw4OYE!1weHJMnu9`5L*S(msginmQ(CocjNODdmKY#^hyI RuYlGuc)I$ztaD0e0stJZJ3{~f literal 0 HcmV?d00001 diff --git a/up-editor/img/dust.png b/up-editor/img/dust.png new file mode 100644 index 0000000000000000000000000000000000000000..cf8904348c8458a3ce42dc67d5ff39f1740fcdde GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJe}GSjE07Ki4PCWr)&Kwhf$S&M zk7IxoYe|q_FauENzsvonar8LbF&OdXG zSj;E6K|uJvf!($nNs3bfI3$la^|;lr83xUo%lJsdz~A}mGZ&zB44$rjF6*2UngEIM BMvnjh literal 0 HcmV?d00001 diff --git a/up-editor/img/elevator11.png b/up-editor/img/elevator11.png new file mode 100644 index 0000000000000000000000000000000000000000..730dbc65ba6f7c780c53e0eaecf1e36ba3b9103a GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-W9@kJIF5Z9t(EPZ!4!i_^(}{+@he&&=A;+33`8 zok2X_nhl8euo)zMX43PmHj_V;&!BjFgXEDPzbD_UPclt1?znhwUy8u-LkFZcq<>ai z6WGoZ(b1VNAs?NyQNT;1g(peTP1&wlg5AcPi6L0jz+e1d>wKVn44$rjF6*2UngH|H BLS_H} literal 0 HcmV?d00001 diff --git a/up-editor/img/elevator12.png b/up-editor/img/elevator12.png new file mode 100644 index 0000000000000000000000000000000000000000..efbd7be69787fb519ae9cc3a268dc3e0ca1b92e5 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-WBZ(2hB`p8|!FJzX3_EKVo?`Frw>Ju_t&mPIF4Cj<4%U@%WP-!KQwQckb8qC39M+N)JDl88Ts)}yB%cM*xuZ%;mE$C$Sjuh yNcz}uv1pwZAuh${h>nXL=M~&$rK#-#+IxiEz<<^HJ4=ApF?hQAxvXDWQTFiz zK(HbGvto>wgv3TkhRYp%8zftj81#C7@FaniZIs$5c_br0{?q(MrUOSD6eXUpy}4P# zkuQ}10*Y$;5^Hic9(B@KC}7mlDgn}VWV*PUhZO_E?D>Wp+a}E10koLG)78&qol`;+ E0EA>sI{*Lx literal 0 HcmV?d00001 diff --git a/up-editor/img/elevator14.png b/up-editor/img/elevator14.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b1411a576969aa0a7dfbc6388b527346052845 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-WBZLV71!>t%lDrHlS-N`rQsyNAtz+bP0l+XkK*mOn+ literal 0 HcmV?d00001 diff --git a/up-editor/img/elevator15.png b/up-editor/img/elevator15.png new file mode 100644 index 0000000000000000000000000000000000000000..3a77e45bb27cef266a6d1622c10bf9f8f08de496 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-WBZS<8HT6QEF^+^s8CBULEb zlOw=wDD_eDNXHx@_sfiG1s}I6&v4$zrljY4BZ-^g?Nwd9ZH{vcfHpFCy85}Sb4q9e E04rNY00000 literal 0 HcmV?d00001 diff --git a/up-editor/img/elevator16.png b/up-editor/img/elevator16.png new file mode 100644 index 0000000000000000000000000000000000000000..b2b4d066ba98e8c1d4b8458420f3f05a6faece26 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-W9zqd5P`A3&iLPZ!4!i_^(}{+@iZzk9tbvt`2h zXU;r5-@d8-m(*bJ;Sp(a%sVjeY`es_9J`k53}P`-8$WJ5D#mTsyMxEgtfN(;_XkfB zP;p!*DO(AZzO&0qQ^!?y?td7i}@rI zcwJ&li#;{an^LB{Ts5 DG+akv literal 0 HcmV?d00001 diff --git a/up-editor/img/elevator3.png b/up-editor/img/elevator3.png new file mode 100644 index 0000000000000000000000000000000000000000..ef67512f1f29d77662dc0a0a1abfcfd03357aa31 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVD-W9r_riwu1fWo|r;B5V#p&cN+x35*cVJ9NS|ISi zG~xU+XP#;^`9s+Z+hSDg1ju!(oJqt20xBk2N<-}|R+;Xaa>(9peJ_Sy<(wg_gy z>1sI}Tay?RZ*P!1^5gg9oApViNyZ%$m(A?d1G>_8roLS6=`D+a)-iax`njxgN@xNA DnOsK7 literal 0 HcmV?d00001 diff --git a/up-editor/img/elevator5.png b/up-editor/img/elevator5.png new file mode 100644 index 0000000000000000000000000000000000000000..49ec82b32793c00f03e690a117da9ebcc6003a46 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4cSSh6U$c>z#_v%n*= zn1O*?7=#%aX3dcR3bL1Y`ns||VdY^{;MM7W9tadl_jGX#u{fQ)WxM{*^9{^zZq{@( z0>Qzf*ZHOkv5D14bsBcC&UZ_SIpWmgR>Nla?_bKd`Hf5mjyNbvJYn1Myu2Aj5`G5<0KScGB9|5(cRPHCnf^4lEKr}&t;uc GLK6TMeMMLR literal 0 HcmV?d00001 diff --git a/up-editor/img/elevator6.png b/up-editor/img/elevator6.png new file mode 100644 index 0000000000000000000000000000000000000000..8a75c062e47d9e7cd9b0aa631ef8cc0fef76ecf6 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4cSSh6U$c>z#_v%n*= zn1O*?7=#%aX3dcR3bL1Y`ns||VdY^{5Ve0?&khty@^o!5=9fuq;?vacvIuW9V?7T$Kl z$*^HU?hT%#KYvfYvEL}QQSwNKu4ex-<|__LQ!X+b{;c!be!bRZpluAEu6{1-oD!M< D$Yw?f literal 0 HcmV?d00001 diff --git a/up-editor/img/elevator7.png b/up-editor/img/elevator7.png new file mode 100644 index 0000000000000000000000000000000000000000..6417a8009813f27f95f622902d00482b85daaa42 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4cSSh6U$c>z#_v%n*= zn1O*?7=#%aX3dcR3bL1Y`ns||VdY^{kXvE6tREz#_v%n*= zn1O*?7=#%aX3dcR3bL1Y`ns||VdY^{P-`%j69ft+dAc};Se#DYvR(h@{`Aj^Y()*- z>t&fAzxPl3FR8)c!z0quQ z!CUZgYcdcY&Sp^F=5Sg$bu`>%1!VKcmSdwS0@W~Rm#-B%MB uxeY(^K2Gk|6?5Wjo#3c*B;!cB07J!mUA=QDJdc3(FnGH9xvXZ+z;!qw;0y6pc@jyr$dF^tN9&{%|V%tPCw! zT@KvlkC`FBByps9>bVYucU3$q6m6M56d8nH@C&REIFRtK%r#N#$f@*S>zJ(@R4!f# S`92+JAA_f>pUXO@geCwbnLcO$ literal 0 HcmV?d00001 diff --git a/up-editor/img/glue.png b/up-editor/img/glue.png new file mode 100644 index 0000000000000000000000000000000000000000..3a83b68f86b534e4372c41b44b5244cba1771ae5 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|>^)r^Lo9le z|LmXf(4LvKp;PE=h+zZkbeGdlEqOq|beCqu)0qi8PHYdEd~S$LJd~cJH{19~a^jVS bM4)MPJ4Am^3BJ+^G>XB~)z4*}Q$iB}IDRQz literal 0 HcmV?d00001 diff --git a/up-editor/img/ground.png b/up-editor/img/ground.png new file mode 100644 index 0000000000000000000000000000000000000000..7c1192b21a95e52664c708ebd65b911e8669152e GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(|sdx(wkF9RFp2BAf*t zk;M!Q+`=Ht$S`Y;1W=H@#M9T6{Ru0#kQ!gAic$qoD9h8uF~s8Z(o1JK8w_|H9;TPQ zSa?D7&VuS4_8f9DPWnL_TW8Ie;l8ijs#AJbZ{A7OkEX}#`0|Ag>OMHiAawAqxQ)eh z6aI`3CCs{Yyb&J+HayaM0F~QczQEF`^TA8DX`iQYuWk5cMf;r zkF3X2(+{nlIpHBt+Gk2e+ir&GDpm*7&fkbJdu}hb)rDE@ke3^;#2=vDI^E`6_x0S* Q0BvOOboFyt=akR{0CwUzG5`Po literal 0 HcmV?d00001 diff --git a/up-editor/img/player.png b/up-editor/img/player.png new file mode 100644 index 0000000000000000000000000000000000000000..fda1a751e1904ef893e3e37497ff5d94ef81a338 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k#^NA%Cx&(BWL^R}F`h1tAsQ3s z1{(4)7;-Qb|Nn2aJ!4Ur^%PGjmZVPMtU1zx3?8BWn=+bLa$DC-Gz;0`Xm(X%>bi|G zGk+yj|KD}^nal>CLz=t4U3u)KvhnN(?X{xIW}TN0chXz-gE5g+NAigw56A@!p00i_ I>zopr0H>ceKmY&$ literal 0 HcmV?d00001 diff --git a/up-editor/img/red.png b/up-editor/img/red.png new file mode 100644 index 0000000000000000000000000000000000000000..c41ea41a0e828a32d909ef2eb40bb707543ce6ea GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|iacE$Lo9md z208K_FyIi{{J(x??5(4gy(M?L7TgdMbC{&Yz+kr|OKaN$z>R#{+sIg@yY#cXi+S@s%rg&*f4Np~_2FR9-Fl iZ?M!MJRoSs%)15WXD^C4k>&`rox#)9&t;ucLK6Ty0ZRV> literal 0 HcmV?d00001 diff --git a/up-editor/img/red_dot.png b/up-editor/img/red_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..357d3f4b7bfb07530a9352e4d17aaa6829e0b49f GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|qC8z3Lo9le z6Be*t@cMQ5!+e(oQ@^k$GWbl0;GTGO^8pq~AV{3_!^GH$vCB%LT_SwJ>Qtp`H+LLZ z!PtC|K`e#OjY&}~VA7PC5GZvmzgRT^vzwuff!y_kM>4bT<_Pgg&ebxsLQ E0FN9q)c^nh literal 0 HcmV?d00001 diff --git a/up-editor/img/secret.png b/up-editor/img/secret.png new file mode 100644 index 0000000000000000000000000000000000000000..80af0bc777c1e99470192b1b072a202ec8e862e9 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|EIeHtLo9le zGxTPE-oG>FTs<2Q6y4yN((r7P<$q1H*3KmHfSdy>#NGB9XzV%A^lr|rbs}y-HyAix W1dAHlwMPQYVDNPHb6Mw<&;$T}!6+aA literal 0 HcmV?d00001 diff --git a/up-editor/img/semi_solid.png b/up-editor/img/semi_solid.png new file mode 100644 index 0000000000000000000000000000000000000000..0850ed1919f18fd3d62ff377e66f4ae90897ed92 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|ls#P>Lo9le z|NQ^|zn;yDag(Bf*~TQFDN*MOjw0JNF&)5B8m~ zoN;%zd`duLr}kvc<92^;G5@z*e5#5;+$dw~BU6?+(E-jt(-}Nn{an^LB{Ts519me8 literal 0 HcmV?d00001 diff --git a/up-editor/img/solid_1.png b/up-editor/img/solid_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2afbcb3b7b1f1f845e87f886e6405929183a8263 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|GCW-zLo9ml zPIBZrV8Fq0{L=sW%4!X#tf>;0f}bxFIJ+);lFNZJ9dB=Z{`DcrZ4>(gxeE)Uk{s-I zdH!Y>O<%h9w6~M#g;@E$6IxQ!V-jyS*9s@fsf1fDyLkW4fo6BUKj&ty(qaG5$S$s$ WXvH1%=kyk!oeZ9?elF{r5}E)3rb3SZ literal 0 HcmV?d00001 diff --git a/up-editor/img/spawn.png b/up-editor/img/spawn.png new file mode 100644 index 0000000000000000000000000000000000000000..63fdde8541e9f40b83d122fd6402d34b1302aab6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|tUO&DLo9le z6BY;zopr014A0u>b%7 literal 0 HcmV?d00001 diff --git a/up-editor/img/spike.png b/up-editor/img/spike.png new file mode 100644 index 0000000000000000000000000000000000000000..77baffd5239bbdd1878a4e6294a1004dbe372b08 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|$~|2iLo9li z20QW{P~cd6?0@~t*ket+u4k))xI|da-o49WmG|(k>(dRJ{g-kus9#-B#K6Fp5Y54J z@t$pj;eBhrZ!^8ap4M}g{neU1^X84SyO?(c&fONk_L-@)KSD1^qpY#cycy&fklC6(CX!}%l{T2rHt%5)&FnGH9xvXp% literal 0 HcmV?d00001 diff --git a/up-editor/img/teleporter_0.png b/up-editor/img/teleporter_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a5480453563e123be22116d8da6db143f4749ae3 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|sytmBLo9mN z20QW{P~h17=l}WJsWWbg9-34bl({e@_VxQ6^JY9+n8FY+L9Aqkc*oThT5;~GYhQCQ z%;a}ZDiYF;FAHUV;OBR8p@ZtDS>K~BR4v#Zc=w#4)768$2eq6%r{12G?Ot&1`ApM5 q>)yDyXBEbZWo_F&ex2O=m~F94^>2=E&&7eRVDNPHb6Mw<&;$S;=S*Ax literal 0 HcmV?d00001 diff --git a/up-editor/img/teleporter_1.png b/up-editor/img/teleporter_1.png new file mode 100644 index 0000000000000000000000000000000000000000..92e5be4b62911349f7228e2f36b541864cf6da0f GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Dm`5sLo9mt z2002bC~{o-_doqxl67as^tn&3NH9%Ht7l|fXFd7S(%sUG3?a6r%?5?jgHqX5C$U(y z2WMPAH6wVBu9Cd|k>IAuFBtP4Y?f(^-7S*YqWA1=wl`DV4!vJuajPN)pMF}w5*re? o<$90j-Cur>T5WRgJ+EN6qFeo&{njNxpd%POUHx3vIVCg!0K+9lm;e9( literal 0 HcmV?d00001 diff --git a/up-editor/img/water.png b/up-editor/img/water.png new file mode 100644 index 0000000000000000000000000000000000000000..a9af4a9e3a2fd4789779b0179218c6a0cee2040d GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|6g^!WLo9le y6M*2y|NsB%H)VF296qpu+b!1MRg>cbCI*8e{{$93h&c&V%;4$j=d#Wzp$PzDwjj6w literal 0 HcmV?d00001 diff --git a/up-editor/keyboard.lua b/up-editor/keyboard.lua new file mode 100644 index 0000000..23393da --- /dev/null +++ b/up-editor/keyboard.lua @@ -0,0 +1,79 @@ +function update_keyboard() + --get keys inputs + --change screen + local buffer = k_q + k_q = love.keyboard.isScancodeDown("a") + if k_q and not buffer and screen_id%100 > 0 then + save() + screen_id = screen_id - 1 + load() + end + local buffer = k_d + k_d = love.keyboard.isScancodeDown("d") + if k_d and not buffer and screen_id%100 < 99 then + save() + screen_id = screen_id + 1 + load() + end + local buffer = k_z + k_z = love.keyboard.isScancodeDown("w") + if k_z and not buffer and screen_id > 99 then + save() + screen_id = screen_id - 100 + load() + end + local buffer = k_s + k_s = love.keyboard.isScancodeDown("s") + if k_s and not buffer and screen_id < 9900 then + save() + screen_id = screen_id + 100 + load() + end + local buffer = k_i + k_i = love.keyboard.isScancodeDown("i") + if k_i and not buffer then + save() + screen_id = 5050 + load() + end + --swap selected object + local buffer = k_tab + k_tab = love.keyboard.isScancodeDown("tab") + if k_tab and not buffer then + if love.keyboard.isDown("lshift") then + selected_tile = selected_tile - 1 + if selected_tile == 0 then selected_tile = #tiles end + else selected_tile = selected_tile + 1 + if selected_tile > #tiles then selected_tile = 1 end + end + end + --exit + if love.keyboard.isScancodeDown("escape") then + save() + love.event.quit() + end + --saving/export + local buffer = k_c + k_c = love.keyboard.isDown("c") + if k_c and not buffer then + save() + end + local buffer = k_o + k_o = love.keyboard.isDown("o") + if k_o and not buffer then + load() + end + --scaling + local buffer = k_k + k_k = love.keyboard.isDown("k") + if k_k and not buffer and scale > 1 then + scale = scale - 1 + love.window.setMode(GAME_WIDTH * scale, GAME_HEIGHT * scale, flags) + end + local buffer = k_l + k_l = love.keyboard.isDown("l") + if k_l and not buffer and scale < 8 then + scale = scale + 1 + love.window.setMode(GAME_WIDTH * scale, GAME_HEIGHT * scale, flags) + end +end diff --git a/up-editor/load.lua b/up-editor/load.lua new file mode 100644 index 0000000..0ba3ffe --- /dev/null +++ b/up-editor/load.lua @@ -0,0 +1,13 @@ +--scaling settings +love.graphics.setDefaultFilter("nearest", "nearest") + +default_screen = "000000000000000000000000000000000000000000000000000000......................0000......................0000......................0000......................0000......................0000......................0000......................0000......................0000......................0000......................0000......................000000000000000000000000000000000000000000000000000000" +SCREEN_LEN = 390 +screen_id = 5050 +load() +path = "../platformer/" + +--font +love.graphics.setNewFont("JetBrainsMono-Regular.ttf", 24) + +mouse_mode = 0 diff --git a/up-editor/main.lua b/up-editor/main.lua new file mode 100644 index 0000000..82d9dc8 --- /dev/null +++ b/up-editor/main.lua @@ -0,0 +1,9 @@ +function love.load() + require("save") + require("load") + require("update") + require("draw") + require("mouse") + require("keyboard") + require("tiles") +end diff --git a/up-editor/mouse.lua b/up-editor/mouse.lua new file mode 100644 index 0000000..24a5805 --- /dev/null +++ b/up-editor/mouse.lua @@ -0,0 +1,33 @@ +function update_mouse() + mouse_x, mouse_y = love.mouse.getX(), love.mouse.getY() --mouse position + mouse_x = math.floor(mouse_x / scale) + mouse_y = math.floor(mouse_y / scale) + clip_mouse_x = mouse_x - mouse_x % 16 + clip_mouse_y = mouse_y - mouse_y % 16 + --edition mode + mouse_mode = 0 + if love.mouse.isDown(1) then + mouse_mode = 1 + elseif love.mouse.isDown(2) then + mouse_mode = -1 + end + if mouse_mode == 0 then buffer_x, buffer_y = 0, 0 end + --add to layer if + if mouse_mode == 1 and (clip_mouse_x ~= buffer_x or clip_mouse_y ~= buffer_y) then + set_tile(tiles_char[selected_tile]) + buffer_x = clip_mouse_x + buffer_y = clip_mouse_y + end + --delete of layer if + if mouse_mode == -1 and (clip_mouse_x ~= buffer_x or clip_mouse_y ~= buffer_y) then + set_tile('.') + buffer_x = clip_mouse_x + buffer_y = clip_mouse_y + end +end + +function set_tile(char) + pos = clip_mouse_x / 16 + 1 + clip_mouse_y / 16 * 26 + selected_screen = selected_screen:sub(1, pos - 1)..char.. + selected_screen:sub(pos + 1, -1) +end diff --git a/up-editor/pack.sh b/up-editor/pack.sh new file mode 100755 index 0000000..aaf8707 --- /dev/null +++ b/up-editor/pack.sh @@ -0,0 +1 @@ +zip -9 -r up-editor.love *.ttf *.lua img diff --git a/up-editor/save.lua b/up-editor/save.lua new file mode 100644 index 0000000..8110e51 --- /dev/null +++ b/up-editor/save.lua @@ -0,0 +1,17 @@ +function save() + if selected_screen ~= default_screen then + file = io.open("screens/"..screen_id..".scr", "w") + file:write(selected_screen) + file:close() + end +end + +function load() + file = io.open("screens/"..screen_id..".scr", "r") + if file then + selected_screen = file:read() + file:close() + else + selected_screen = default_screen + end +end diff --git a/up-editor/screens/5050.scr b/up-editor/screens/5050.scr new file mode 100644 index 0000000..27dccec --- /dev/null +++ b/up-editor/screens/5050.scr @@ -0,0 +1 @@ +0000000000000000000000000000000000000000000000000000000v...vrrv.........000000000.....rr..........000000000.....rr..........000000000.....rr..........000000000v.E.vrrv.........00000000011111111....vvvvv00000000000000000bbbb1111100000000.............0000000000000............v0000000000000.........v1110000000000000..S.....v1000000000000000011111111100000000000000000000000000000000000000000 \ No newline at end of file diff --git a/up-editor/screens/5051.scr b/up-editor/screens/5051.scr new file mode 100644 index 0000000..42e74ba --- /dev/null +++ b/up-editor/screens/5051.scr @@ -0,0 +1 @@ +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000......................0000......................0000......................0000...v..v..v..v..v..v...0000S..v..v..v..v..v..v..E000011rrrrrrrrrbbbbbbbbb11000000vvvvvvvvvvvvvvvvvv0000000011111111111111111100000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/up-editor/screens/5052.scr b/up-editor/screens/5052.scr new file mode 100644 index 0000000..7c0146c --- /dev/null +++ b/up-editor/screens/5052.scr @@ -0,0 +1 @@ +00000000000000000000000000000000000000000000000000000000000000v........00000000000000000v......E.00000000000000000v...1111100000000000000000v....v00000000000000000000vbv..v00000000000000000000v....v00000000000000000000v...1100000000000000000000v....v00000000000000000000vrv..v00000000000000000........v00000000000000000.S......v00000000000000000111111111000000000000000000000000000000000000 \ No newline at end of file diff --git a/up-editor/screens/5053.scr b/up-editor/screens/5053.scr new file mode 100644 index 0000000..9eac9b5 --- /dev/null +++ b/up-editor/screens/5053.scr @@ -0,0 +1 @@ +0000000000000000000000000000000000000000000000000000000000000000000000000000000000.....00000000000000000000.......000000000000000000.........00000000000000000.........00000000000000000.........0000....b..r.0000.........vvv.....b..r.0000....v....b.r....vb.vrE0000....1....b.r...bbbrrr.0000....0....b.r..bvvvvvvv0000.S..0....b.r..v1111111000011**01111vvv11100000000000000000000111000000000000 \ No newline at end of file diff --git a/up-editor/screens/5054.scr b/up-editor/screens/5054.scr new file mode 100644 index 0000000..00f1598 --- /dev/null +++ b/up-editor/screens/5054.scr @@ -0,0 +1 @@ +000000000000000000000000000000000000000000000000000000.....v000v..v..v000vvv0000......000...v...000vEv0000.S....000.......000v.v0000111v..000...1...000...0000000www000www0www000www0000000www000www0www000www0000000www000www0www000www0000000vwv000vwv0vwv000vwv0000000wwwwwwwww0wwwwwwwww0000000wwwwvwwww0wwwwvwwww0000000wvwwvwwvw0wvwwvwwvw000000011111111101111111110000000000000000000000000000 \ No newline at end of file diff --git a/up-editor/screens/5055.scr b/up-editor/screens/5055.scr new file mode 100644 index 0000000..a06949c --- /dev/null +++ b/up-editor/screens/5055.scr @@ -0,0 +1 @@ +000000000000000000000000000000000000000000000000000000......................0000......................0000......................00000000v...v....v...v000000vr......................bvvr......................bvvr.S..................E.bv111111v..vbv..vrv..v11111100......................0000......................0000......................0000vvvvvvvvvvvvvvvvvvvvvv0000000000000000000000000000 \ No newline at end of file diff --git a/up-editor/screens/5056.scr b/up-editor/screens/5056.scr new file mode 100644 index 0000000..ef5649b --- /dev/null +++ b/up-editor/screens/5056.scr @@ -0,0 +1 @@ +00000000000000..000000000000000000000000.v000v00v000000000vvvvvvv0..0.wwwwww.0000000.......0..0.wwwwww.0000000.......0....vvvvvv.0000000bbb1...0....vvvvvv.0000000vwv0...0..11vvvvvvE0000000vwv0v.v0..0011111110000000vwv0v.v0..0000000000000000rrr0......000000000000...0vwv0......000000000000...bwww0......000000000000.S.bwww0***1v.000000000000111111100000..000000000000000000000000..0000000000 \ No newline at end of file diff --git a/up-editor/screens/5057.scr b/up-editor/screens/5057.scr new file mode 100644 index 0000000..f2a7ef4 --- /dev/null +++ b/up-editor/screens/5057.scr @@ -0,0 +1 @@ +000000000000000000000000000000000000000000000000000000vvvvv000000000000000000000v...vvv0000vvvvvvvvvvv0000v.....v0000.........S.0000vw1.E.v0000........1110000ww0111100v.........0000000ww000..............0000000wv000.........vw..v0000000wwwwww11^.....vvv..0000000wwwvww00^.....vvv..0000000vvvvvv00^.....vvv..0000000000000000.....vvv..00000000000000001vv1v111**0000000000000000000000000000000 \ No newline at end of file diff --git a/up-editor/screens/5058.scr b/up-editor/screens/5058.scr new file mode 100644 index 0000000..f05c661 --- /dev/null +++ b/up-editor/screens/5058.scr @@ -0,0 +1 @@ +0000000000ww0000000www0000000000000www0000000www000000....v0..v10000000www000000.S..v0.^100000000www000000111.v0.^00000........00000000.v0.^000v.........00000....v0.^00vvbwwvrrrrr00000....v0.^0vrwwbwv.....00000bb1vvv.^vvwrwwv1.....00000wwrww..vwbwwrwv0vvvv.00000wwrww..vwwbwvv10..E..00000vvvww..vrwwbv100.....00000vvvww..vwrvv10001...10000011111**1ww1100000...00000000000000ww0000000vvv0000 \ No newline at end of file diff --git a/up-editor/screens/5059.scr b/up-editor/screens/5059.scr new file mode 100644 index 0000000..c8f814f --- /dev/null +++ b/up-editor/screens/5059.scr @@ -0,0 +1 @@ +000000000000000000000000000000000vvvvvv0000000000000000000vv....vv^v..v000000000v.v0v......v^v...000000000...0v..v...v^..^.00000000v.S.0vww0v..v^..^.0E.000000rrr0vvww0..v^.v^.0..000000.v100vvwv.vv^.v^.0v.000000.vv00vvbv.vv^..^..w.000000..v0vvww0..v^..^....000000...0vwrwv..v^v.^...v000000...0vwwvv..v^v.^w.vv000000vr..wwvvv.wr...^vvvv0000001vv11111vvv1v1v11111000000011000001110101000000000 \ No newline at end of file diff --git a/up-editor/screens/5060.scr b/up-editor/screens/5060.scr new file mode 100644 index 0000000..fe622ea --- /dev/null +++ b/up-editor/screens/5060.scr @@ -0,0 +1 @@ +......................................0000000...................0vvvvv0...................0v....v0..................0v.E..v0..................0v....v0..................0vvvv.v0................000111v.v0...............00vvv0v.wv0............0000vb.rv.b.10............0v...b.r..bv0.............0S...b.r..v10.............01vv1vvv1v10...............0110111010................................... \ No newline at end of file diff --git a/up-editor/screens/5061.scr b/up-editor/screens/5061.scr new file mode 100644 index 0000000..5516ec2 --- /dev/null +++ b/up-editor/screens/5061.scr @@ -0,0 +1 @@ +0000000000000000000000000000000...0000000000...0000000....t....0000..d.T.d..0000.........0000..d...d..0000.........0000..d...d..0000.........0000..d...d..0000....*....0000..d...d..00001//111//100001dd111dd10000.........0000...ddd...0000.........0000...ddd...0000111///1110000111ddd1110000.........0000...ddd...0000..S......0000...dddE..000011111111100001111111110000000000000000000000000000 \ No newline at end of file diff --git a/up-editor/screens/5062.scr b/up-editor/screens/5062.scr new file mode 100644 index 0000000..754b1ec --- /dev/null +++ b/up-editor/screens/5062.scr @@ -0,0 +1 @@ +000000000000000000000000000000000000000000000000000000......................0000......................0000......................0000......................0000......................0000......................0000......................0000......................0000......................0000.......v..............0000.S.....0............E.000011111110vvvvvv111111110000000000000000000000000000 \ No newline at end of file diff --git a/up-editor/screens/recover.lua b/up-editor/screens/recover.lua new file mode 100644 index 0000000..b8abd4b --- /dev/null +++ b/up-editor/screens/recover.lua @@ -0,0 +1,17 @@ +local strdefi=getmetatable('').__index +getmetatable('').__index=function(str,i) if type(i) == "number" then + return string.sub(str,i,i) + else return strdefi[i] end end + +for i=5050, 5057, 1 do + file = io.open(i..".scr", "r") + file_content = file:read() + print(file_content) + file:close() + file = io.open(i..".scr", "w") + for i=1, #file_content, 1 do + if file_content[i] ~= "-" and file_content[i] ~= "\n" then + file:write(file_content[i]) + end + end +end diff --git a/up-editor/tiles.lua b/up-editor/tiles.lua new file mode 100644 index 0000000..980830b --- /dev/null +++ b/up-editor/tiles.lua @@ -0,0 +1,22 @@ +local img_path = "img/" + +tiles = { + love.graphics.newImage(img_path.."solid_0.png"), + love.graphics.newImage(img_path.."solid_1.png"), + love.graphics.newImage(img_path.."red_dot.png"), + love.graphics.newImage(img_path.."blue_dot.png"), + love.graphics.newImage(img_path.."spike.png"), + love.graphics.newImage(img_path.."elevator.png"), + love.graphics.newImage(img_path.."water.png"), + love.graphics.newImage(img_path.."bouncer.png"), + love.graphics.newImage(img_path.."semi_solid.png"), + love.graphics.newImage(img_path.."teleporter_0.png"), + love.graphics.newImage(img_path.."teleporter_1.png"), + love.graphics.newImage(img_path.."dust.png"), + love.graphics.newImage(img_path.."spawn.png"), + love.graphics.newImage(img_path.."exit.png"), +} +tiles_char = { '0', '1', 'r', 'b', 'v', '^', 'w', '*', '/', 't', 'T', 'd', 'S', +'E' } + +selected_tile = 1 diff --git a/up-editor/update.lua b/up-editor/update.lua new file mode 100644 index 0000000..b076b70 --- /dev/null +++ b/up-editor/update.lua @@ -0,0 +1,4 @@ +function love.update(dt) + update_keyboard() + update_mouse() +end diff --git a/up-editor/update.sh b/up-editor/update.sh new file mode 100755 index 0000000..8f795cd --- /dev/null +++ b/up-editor/update.sh @@ -0,0 +1,5 @@ +rm -dr img +echo "Repertory 'img' deleted" +cp -r ../assets-cg/img/ img/ -v +cp force_img/* img/ -v +echo "Done"