romdev-mcp 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +726 -0
- package/LICENSE +45 -0
- package/NOTICE +86 -0
- package/README.md +46 -0
- package/examples/README.md +36 -0
- package/examples/art-first-workflow/README.md +205 -0
- package/examples/atari2600/main.asm +143 -0
- package/examples/atari2600/templates/default.asm +183 -0
- package/examples/atari2600/templates/mini_invaders.asm +381 -0
- package/examples/atari2600/templates/music_demo.asm +322 -0
- package/examples/atari2600/templates/paddle.asm +345 -0
- package/examples/atari2600/templates/single_screen.asm +242 -0
- package/examples/atari7800/main.c +88 -0
- package/examples/atari7800/templates/default.c +183 -0
- package/examples/atari7800/templates/hello_sprite.c +141 -0
- package/examples/atari7800/templates/music_demo.c +123 -0
- package/examples/atari7800/templates/platformer.c +159 -0
- package/examples/atari7800/templates/puzzle.c +164 -0
- package/examples/atari7800/templates/racing.c +139 -0
- package/examples/atari7800/templates/shmup.c +148 -0
- package/examples/atari7800/templates/sports.c +207 -0
- package/examples/c64/main.c +63 -0
- package/examples/c64/templates/hello_sprite.c +117 -0
- package/examples/c64/templates/music_demo.c +131 -0
- package/examples/c64/templates/platformer.c +194 -0
- package/examples/c64/templates/puzzle.c +178 -0
- package/examples/c64/templates/racing.c +140 -0
- package/examples/c64/templates/shmup.c +201 -0
- package/examples/c64/templates/sports.c +109 -0
- package/examples/c64/templates/tile_engine.c +174 -0
- package/examples/gb/main.asm +106 -0
- package/examples/gb/main.c +49 -0
- package/examples/gb/templates/default.c +58 -0
- package/examples/gb/templates/hello_sprite.c +130 -0
- package/examples/gb/templates/music_demo.c +52 -0
- package/examples/gb/templates/platformer.c +178 -0
- package/examples/gb/templates/puzzle.c +217 -0
- package/examples/gb/templates/racing.c +158 -0
- package/examples/gb/templates/shmup.c +172 -0
- package/examples/gb/templates/sports.c +136 -0
- package/examples/gb/templates/tile_engine.c +280 -0
- package/examples/gba/templates/gba_hello.c +64 -0
- package/examples/gba/templates/maxmod_demo.c +105 -0
- package/examples/gba/templates/platformer.c +215 -0
- package/examples/gba/templates/puzzle.c +237 -0
- package/examples/gba/templates/racing.c +175 -0
- package/examples/gba/templates/shmup.c +197 -0
- package/examples/gba/templates/sports.c +177 -0
- package/examples/gba/templates/tonc_hello.c +72 -0
- package/examples/gba/templates/tonc_hello_sprite.c +109 -0
- package/examples/gbc/main.asm +123 -0
- package/examples/gbc/templates/default.c +61 -0
- package/examples/gbc/templates/hello_sprite.c +140 -0
- package/examples/gbc/templates/music_demo.c +63 -0
- package/examples/gbc/templates/platformer.c +181 -0
- package/examples/gbc/templates/puzzle.c +217 -0
- package/examples/gbc/templates/racing.c +164 -0
- package/examples/gbc/templates/shmup.c +188 -0
- package/examples/gbc/templates/sports.c +142 -0
- package/examples/gbc/templates/tile_engine.c +280 -0
- package/examples/genesis/main.s +161 -0
- package/examples/genesis/templates/hello_sprite.c +75 -0
- package/examples/genesis/templates/platformer.c +166 -0
- package/examples/genesis/templates/puzzle.c +240 -0
- package/examples/genesis/templates/racing.c +170 -0
- package/examples/genesis/templates/sgdk_hello.c +41 -0
- package/examples/genesis/templates/shmup.c +188 -0
- package/examples/genesis/templates/shmup_2p.c +244 -0
- package/examples/genesis/templates/sports.c +172 -0
- package/examples/genesis/templates/tile_engine.c +135 -0
- package/examples/genesis/templates/xgm2_demo.c +53 -0
- package/examples/genesis/templates/xgm2_demo_data.s +27 -0
- package/examples/gg/main.c +10 -0
- package/examples/gg/templates/default.c +156 -0
- package/examples/gg/templates/hello_sprite.c +90 -0
- package/examples/gg/templates/music_demo.c +156 -0
- package/examples/gg/templates/platformer.c +220 -0
- package/examples/gg/templates/puzzle.c +204 -0
- package/examples/gg/templates/racing.c +161 -0
- package/examples/gg/templates/shmup.c +188 -0
- package/examples/gg/templates/sports.c +137 -0
- package/examples/gg/templates/tile_engine.c +137 -0
- package/examples/lynx/main.c +4 -0
- package/examples/lynx/templates/default.c +41 -0
- package/examples/lynx/templates/hello_sprite.c +39 -0
- package/examples/lynx/templates/music_demo.c +37 -0
- package/examples/lynx/templates/platformer.c +72 -0
- package/examples/lynx/templates/puzzle.c +142 -0
- package/examples/lynx/templates/racing.c +94 -0
- package/examples/lynx/templates/shmup.c +132 -0
- package/examples/lynx/templates/sports.c +59 -0
- package/examples/nes/main.c +143 -0
- package/examples/nes/space-shooter/README.md +68 -0
- package/examples/nes/space-shooter/main.c +441 -0
- package/examples/nes/space-shooter/nes_runtime.c +347 -0
- package/examples/nes/space-shooter/nes_runtime.h +141 -0
- package/examples/nes/templates/default.c +41 -0
- package/examples/nes/templates/hello_sprite.c +104 -0
- package/examples/nes/templates/music_demo.c +80 -0
- package/examples/nes/templates/platformer.c +171 -0
- package/examples/nes/templates/puzzle.c +232 -0
- package/examples/nes/templates/racing.c +203 -0
- package/examples/nes/templates/shmup.c +228 -0
- package/examples/nes/templates/sports.c +205 -0
- package/examples/nes/templates/tile_engine.c +224 -0
- package/examples/porting-across-platforms/README.md +59 -0
- package/examples/sms/main.c +129 -0
- package/examples/sms/templates/default.c +110 -0
- package/examples/sms/templates/hello_sprite.c +90 -0
- package/examples/sms/templates/music_demo.c +151 -0
- package/examples/sms/templates/platformer.c +215 -0
- package/examples/sms/templates/puzzle.c +204 -0
- package/examples/sms/templates/racing.c +161 -0
- package/examples/sms/templates/shmup.c +167 -0
- package/examples/sms/templates/shmup_2p.c +219 -0
- package/examples/sms/templates/sports.c +147 -0
- package/examples/sms/templates/tile_engine.c +137 -0
- package/examples/snes/main.asm +70 -0
- package/examples/snes/templates/c-hello-data.asm +28 -0
- package/examples/snes/templates/c-hello.c +71 -0
- package/examples/snes/templates/default-data.asm +36 -0
- package/examples/snes/templates/default.c +74 -0
- package/examples/snes/templates/hello_sprite-data.asm +45 -0
- package/examples/snes/templates/hello_sprite.c +76 -0
- package/examples/snes/templates/music_demo-data.asm +20 -0
- package/examples/snes/templates/music_demo.c +83 -0
- package/examples/snes/templates/platformer-data.asm +27 -0
- package/examples/snes/templates/platformer.c +142 -0
- package/examples/snes/templates/puzzle-data.asm +14 -0
- package/examples/snes/templates/puzzle.c +199 -0
- package/examples/snes/templates/racing-data.asm +33 -0
- package/examples/snes/templates/racing.c +146 -0
- package/examples/snes/templates/shmup-data.asm +61 -0
- package/examples/snes/templates/shmup.c +199 -0
- package/examples/snes/templates/sports-data.asm +28 -0
- package/examples/snes/templates/sports.c +144 -0
- package/package.json +83 -0
- package/src/cli/smoke.js +283 -0
- package/src/cores/registry.js +95 -0
- package/src/host/LibretroHost.js +502 -0
- package/src/host/callbacks.js +444 -0
- package/src/host/chafa-render.js +170 -0
- package/src/host/coreLoader.js +57 -0
- package/src/host/cpu-state.js +422 -0
- package/src/host/dsp-state.js +188 -0
- package/src/host/framebuffer.js +115 -0
- package/src/host/gpgx-state.js +309 -0
- package/src/host/index.js +4 -0
- package/src/host/retroConstants.js +72 -0
- package/src/host/snes9x-state.js +35 -0
- package/src/host/types.js +280 -0
- package/src/mcp/disclosure.js +250 -0
- package/src/mcp/log.js +87 -0
- package/src/mcp/server.js +433 -0
- package/src/mcp/state.js +83 -0
- package/src/mcp/tools/address-to-symbol.js +151 -0
- package/src/mcp/tools/art-loaders.js +740 -0
- package/src/mcp/tools/assets.js +89 -0
- package/src/mcp/tools/audio.js +173 -0
- package/src/mcp/tools/cart-parts.js +649 -0
- package/src/mcp/tools/diff-roms.js +412 -0
- package/src/mcp/tools/disasm.js +980 -0
- package/src/mcp/tools/find-references.js +361 -0
- package/src/mcp/tools/font-map.js +353 -0
- package/src/mcp/tools/frame.js +249 -0
- package/src/mcp/tools/free-space.js +95 -0
- package/src/mcp/tools/index.js +351 -0
- package/src/mcp/tools/input-layout.js +215 -0
- package/src/mcp/tools/input.js +142 -0
- package/src/mcp/tools/lifecycle.js +110 -0
- package/src/mcp/tools/lospec.js +156 -0
- package/src/mcp/tools/memory.js +169 -0
- package/src/mcp/tools/metasprite-tools.js +261 -0
- package/src/mcp/tools/platform-docs.js +102 -0
- package/src/mcp/tools/platform-tools.js +1063 -0
- package/src/mcp/tools/platforms.js +86 -0
- package/src/mcp/tools/playtest.js +280 -0
- package/src/mcp/tools/preview-tile.js +360 -0
- package/src/mcp/tools/project.js +1885 -0
- package/src/mcp/tools/record.js +131 -0
- package/src/mcp/tools/rendering-context.js +700 -0
- package/src/mcp/tools/rom-id.js +256 -0
- package/src/mcp/tools/run-until.js +173 -0
- package/src/mcp/tools/snippets.js +235 -0
- package/src/mcp/tools/splice-chr.js +215 -0
- package/src/mcp/tools/sprite-pipeline.js +614 -0
- package/src/mcp/tools/state.js +99 -0
- package/src/mcp/tools/symbols.js +277 -0
- package/src/mcp/tools/tile-inspect.js +206 -0
- package/src/mcp/tools/toolchain.js +680 -0
- package/src/mcp/tools/watch-memory.js +212 -0
- package/src/mcp/tools/which-tiles.js +193 -0
- package/src/mcp/util.js +85 -0
- package/src/observer/bus.js +127 -0
- package/src/observer/livestream.html +589 -0
- package/src/observer/server.js +66 -0
- package/src/observer/tool-wrap.js +115 -0
- package/src/platforms/atari2600/MENTAL_MODEL.md +185 -0
- package/src/platforms/atari2600/TROUBLESHOOTING.md +155 -0
- package/src/platforms/atari2600/UPSTREAM_SOURCES.md +49 -0
- package/src/platforms/atari2600/lib/README.md +67 -0
- package/src/platforms/atari2600/lib/cc65-src/crt0.s +49 -0
- package/src/platforms/atari2600/lib/cc65-src/ctype.s +5 -0
- package/src/platforms/atari2600/lib/kernel_skeleton.asm +85 -0
- package/src/platforms/atari2600/lib/player_kernel.asm +87 -0
- package/src/platforms/atari2600/lib/playfield_kernel.asm +63 -0
- package/src/platforms/atari2600/lib/read_joystick.asm +76 -0
- package/src/platforms/atari2600/lib/score_kernel.asm +141 -0
- package/src/platforms/atari2600/lib/vcs_constants.h +97 -0
- package/src/platforms/atari2600/lib/vectors.asm +16 -0
- package/src/platforms/atari2600/tia.js +355 -0
- package/src/platforms/atari7800/MENTAL_MODEL.md +306 -0
- package/src/platforms/atari7800/TROUBLESHOOTING.md +195 -0
- package/src/platforms/atari7800/UPSTREAM_SOURCES.md +43 -0
- package/src/platforms/atari7800/lib/README.md +45 -0
- package/src/platforms/atari7800/lib/c/atari7800_music.c +215 -0
- package/src/platforms/atari7800/lib/c/atari7800_music.h +33 -0
- package/src/platforms/atari7800/lib/c/atari7800_sfx.c +74 -0
- package/src/platforms/atari7800/lib/c/atari7800_sfx.h +45 -0
- package/src/platforms/atari7800/lib/cc65-src/clock.s +69 -0
- package/src/platforms/atari7800/lib/cc65-src/clocks_per_sec.s +34 -0
- package/src/platforms/atari7800/lib/cc65-src/clrscr.s +27 -0
- package/src/platforms/atari7800/lib/cc65-src/conio.s +226 -0
- package/src/platforms/atari7800/lib/cc65-src/conio_font.s +278 -0
- package/src/platforms/atari7800/lib/cc65-src/cputc.s +139 -0
- package/src/platforms/atari7800/lib/cc65-src/crt0.s +71 -0
- package/src/platforms/atari7800/lib/cc65-src/ctype.s +5 -0
- package/src/platforms/atari7800/lib/cc65-src/exehdr.s +46 -0
- package/src/platforms/atari7800/lib/cc65-src/extra/mono.s +28 -0
- package/src/platforms/atari7800/lib/cc65-src/extzp.inc +15 -0
- package/src/platforms/atari7800/lib/cc65-src/extzp.s +15 -0
- package/src/platforms/atari7800/lib/cc65-src/get_tv.s +65 -0
- package/src/platforms/atari7800/lib/cc65-src/irq.s +36 -0
- package/src/platforms/atari7800/lib/cc65-src/joy/atari7800-stdjoy.s +197 -0
- package/src/platforms/atari7800/lib/cc65-src/joy_stat_stddrv.s +14 -0
- package/src/platforms/atari7800/lib/cc65-src/libref.s +8 -0
- package/src/platforms/atari7800/lib/cc65-src/mono_clrscr.s +27 -0
- package/src/platforms/atari7800/lib/cc65-src/mono_conio.s +231 -0
- package/src/platforms/atari7800/lib/cc65-src/mono_cputc.s +102 -0
- package/src/platforms/atari7800/lib/cc65-src/mono_font.s +2065 -0
- package/src/platforms/atari7800/lib/cc65-src/mono_setcursor.s +214 -0
- package/src/platforms/atari7800/lib/cc65-src/setcursor.s +214 -0
- package/src/platforms/atari7800/lib/cc65-src/textcolor.s +53 -0
- package/src/platforms/atari7800/lib/cc65-src/wherex.s +19 -0
- package/src/platforms/atari7800/lib/cc65-src/wherey.s +19 -0
- package/src/platforms/atari7800/lib/display_list.asm +53 -0
- package/src/platforms/atari7800/lib/maria_init.asm +48 -0
- package/src/platforms/atari7800/lib/maria_registers.h +61 -0
- package/src/platforms/atari7800/lib/palette_load.asm +53 -0
- package/src/platforms/atari7800/lib/read_pad.asm +57 -0
- package/src/platforms/atari7800/lib/vblank_wait.asm +16 -0
- package/src/platforms/atari7800/maria.js +220 -0
- package/src/platforms/c64/MENTAL_MODEL.md +175 -0
- package/src/platforms/c64/TROUBLESHOOTING.md +130 -0
- package/src/platforms/c64/UPSTREAM_SOURCES.md +35 -0
- package/src/platforms/c64/image-to-tilemap.js +190 -0
- package/src/platforms/c64/lib/README.md +52 -0
- package/src/platforms/c64/lib/basic_stub.s +25 -0
- package/src/platforms/c64/lib/c/c64_music.c +248 -0
- package/src/platforms/c64/lib/c/c64_music.h +36 -0
- package/src/platforms/c64/lib/c/c64_sfx.c +94 -0
- package/src/platforms/c64/lib/c/c64_sfx.h +37 -0
- package/src/platforms/c64/lib/c64_registers.h +108 -0
- package/src/platforms/c64/lib/cc65-src/_scrsize.s +12 -0
- package/src/platforms/c64/lib/cc65-src/acc_c128_speed.s +5 -0
- package/src/platforms/c64/lib/cc65-src/acc_c64dtv_speed.s +64 -0
- package/src/platforms/c64/lib/cc65-src/acc_c65_speed.s +69 -0
- package/src/platforms/c64/lib/cc65-src/acc_chameleon_speed.s +100 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_c128.s +33 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_c64dtv.s +44 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_c65.s +55 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_chameleon.s +39 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_scpu.s +34 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_turbomaster.s +45 -0
- package/src/platforms/c64/lib/cc65-src/acc_scpu_speed.s +59 -0
- package/src/platforms/c64/lib/cc65-src/acc_turbomaster_speed.s +56 -0
- package/src/platforms/c64/lib/cc65-src/bordercolor.s +17 -0
- package/src/platforms/c64/lib/cc65-src/break.s +108 -0
- package/src/platforms/c64/lib/cc65-src/cgetc.s +62 -0
- package/src/platforms/c64/lib/cc65-src/clrscr.s +11 -0
- package/src/platforms/c64/lib/cc65-src/color.s +24 -0
- package/src/platforms/c64/lib/cc65-src/conio.s +10 -0
- package/src/platforms/c64/lib/cc65-src/cputc.s +105 -0
- package/src/platforms/c64/lib/cc65-src/crt0.s +117 -0
- package/src/platforms/c64/lib/cc65-src/devnum.s +7 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-65816.s +377 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-c256k.s +508 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-dqbb.s +447 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-georam.s +355 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-isepic.s +276 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-kerberos.s +281 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-ram.s +270 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-ramcart.s +297 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-reu.s +286 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-rrr.s +363 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-vdc.s +405 -0
- package/src/platforms/c64/lib/cc65-src/emd/dtv-himem.s +251 -0
- package/src/platforms/c64/lib/cc65-src/extra/soft80.s +71 -0
- package/src/platforms/c64/lib/cc65-src/extra/soft80mono.s +74 -0
- package/src/platforms/c64/lib/cc65-src/extra/tgimousedata.s +21 -0
- package/src/platforms/c64/lib/cc65-src/get_ostype.s +43 -0
- package/src/platforms/c64/lib/cc65-src/get_tv.s +20 -0
- package/src/platforms/c64/lib/cc65-src/gettime.s +83 -0
- package/src/platforms/c64/lib/cc65-src/irq.s +49 -0
- package/src/platforms/c64/lib/cc65-src/joy/c64-hitjoy.s +218 -0
- package/src/platforms/c64/lib/cc65-src/joy/c64-numpad.s +155 -0
- package/src/platforms/c64/lib/cc65-src/joy/c64-ptvjoy.s +146 -0
- package/src/platforms/c64/lib/cc65-src/joy/c64-stdjoy.s +111 -0
- package/src/platforms/c64/lib/cc65-src/joy_stat_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/joy_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/kbhit.s +23 -0
- package/src/platforms/c64/lib/cc65-src/kbrepeat.s +14 -0
- package/src/platforms/c64/lib/cc65-src/kernal.s +53 -0
- package/src/platforms/c64/lib/cc65-src/kplot.s +22 -0
- package/src/platforms/c64/lib/cc65-src/libref.s +16 -0
- package/src/platforms/c64/lib/cc65-src/mainargs.s +137 -0
- package/src/platforms/c64/lib/cc65-src/mcbdefault.s +146 -0
- package/src/platforms/c64/lib/cc65-src/mcbspritedata.s +4 -0
- package/src/platforms/c64/lib/cc65-src/mou/c64-1351.s +467 -0
- package/src/platforms/c64/lib/cc65-src/mou/c64-inkwell.s +446 -0
- package/src/platforms/c64/lib/cc65-src/mou/c64-joy.s +451 -0
- package/src/platforms/c64/lib/cc65-src/mou/c64-pot.s +409 -0
- package/src/platforms/c64/lib/cc65-src/mouse_stat_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/mouse_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/mouseref.s +23 -0
- package/src/platforms/c64/lib/cc65-src/pencalib.c +94 -0
- package/src/platforms/c64/lib/cc65-src/randomize.s +18 -0
- package/src/platforms/c64/lib/cc65-src/revers.s +27 -0
- package/src/platforms/c64/lib/cc65-src/ser/c64-swlink.s +484 -0
- package/src/platforms/c64/lib/cc65-src/ser_stat_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/ser_stddrv.s +13 -0
- package/src/platforms/c64/lib/cc65-src/settime.s +84 -0
- package/src/platforms/c64/lib/cc65-src/soft80.inc +46 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cgetc.s +85 -0
- package/src/platforms/c64/lib/cc65-src/soft80_charset.s +182 -0
- package/src/platforms/c64/lib/cc65-src/soft80_color.s +159 -0
- package/src/platforms/c64/lib/cc65-src/soft80_conio.s +157 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cpeekc.s +148 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cpeekcolor.s +19 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cpeekrevers.s +15 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cpeeks.s +71 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cputc.s +521 -0
- package/src/platforms/c64/lib/cc65-src/soft80_kclrscr.s +76 -0
- package/src/platforms/c64/lib/cc65-src/soft80_kplot.s +63 -0
- package/src/platforms/c64/lib/cc65-src/soft80_scrsize.s +14 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_cgetc.s +67 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_color.s +65 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_conio.s +168 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_cpeekcolor.s +17 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_cputc.s +204 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_kclrscr.s +63 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_kplot.s +52 -0
- package/src/platforms/c64/lib/cc65-src/status.s +15 -0
- package/src/platforms/c64/lib/cc65-src/sysuname.s +37 -0
- package/src/platforms/c64/lib/cc65-src/tgi/c64-hi.s +881 -0
- package/src/platforms/c64/lib/cc65-src/tgi_stat_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/tgi_stddrv.s +13 -0
- package/src/platforms/c64/lib/cc65-src/tmcommon.s +67 -0
- package/src/platforms/c64/lib/cc65-src/waitvsync.s +18 -0
- package/src/platforms/c64/lib/read_joystick.s +28 -0
- package/src/platforms/c64/lib/sid_play.s +48 -0
- package/src/platforms/c64/lib/sprite_table.s +73 -0
- package/src/platforms/c64/lib/vic_init.s +47 -0
- package/src/platforms/c64/sid.js +128 -0
- package/src/platforms/c64/vic.js +273 -0
- package/src/platforms/common/default-palette.js +139 -0
- package/src/platforms/common/image-to-tiles.js +407 -0
- package/src/platforms/common/intent.js +111 -0
- package/src/platforms/common/metasprite-adapters.js +279 -0
- package/src/platforms/common/metasprite-codegen.js +192 -0
- package/src/platforms/common/metasprite-core.js +201 -0
- package/src/platforms/common/metasprite.js +89 -0
- package/src/platforms/common/platform-palette.js +137 -0
- package/src/platforms/common/registers.js +329 -0
- package/src/platforms/common/render-tiles.js +86 -0
- package/src/platforms/common/screenshot-sprite.js +153 -0
- package/src/platforms/common/tile-decode.js +149 -0
- package/src/platforms/gb/MENTAL_MODEL.md +252 -0
- package/src/platforms/gb/TROUBLESHOOTING.md +221 -0
- package/src/platforms/gb/UPSTREAM_SOURCES.md +43 -0
- package/src/platforms/gb/image-to-tilemap.js +173 -0
- package/src/platforms/gb/lib/README.md +115 -0
- package/src/platforms/gb/lib/c/LICENSE-HUGEDRIVER +25 -0
- package/src/platforms/gb/lib/c/README.md +120 -0
- package/src/platforms/gb/lib/c/SDCC_GOTCHAS.md +189 -0
- package/src/platforms/gb/lib/c/gb_crt0.s +163 -0
- package/src/platforms/gb/lib/c/gb_hardware.h +113 -0
- package/src/platforms/gb/lib/c/gb_runtime.c +284 -0
- package/src/platforms/gb/lib/c/gb_runtime.h +145 -0
- package/src/platforms/gb/lib/c/hUGEDriver.c +191 -0
- package/src/platforms/gb/lib/c/hUGEDriver.h +95 -0
- package/src/platforms/gb/lib/c/hUGEDriver.upstream.asm +1908 -0
- package/src/platforms/gb/lib/c/lcd_init.c +19 -0
- package/src/platforms/gb/lib/c/patch-header.js +154 -0
- package/src/platforms/gb/lib/c/song_data.c +88 -0
- package/src/platforms/gb/lib/c/unroll.h +52 -0
- package/src/platforms/gb/lib/c/wait_vblank.c +14 -0
- package/src/platforms/gb/lib/dma_oam.asm +51 -0
- package/src/platforms/gb/lib/header.asm +56 -0
- package/src/platforms/gb/lib/joypad_read.asm +47 -0
- package/src/platforms/gb/lib/lcd_init.asm +44 -0
- package/src/platforms/gb/lib/load_palette.asm +25 -0
- package/src/platforms/gb/lib/load_tiles.asm +29 -0
- package/src/platforms/gb/lib/vblank_wait.asm +31 -0
- package/src/platforms/gb/ppu.js +574 -0
- package/src/platforms/gba/MENTAL_MODEL.md +203 -0
- package/src/platforms/gba/TROUBLESHOOTING.md +250 -0
- package/src/platforms/gba/UPSTREAM_SOURCES.md +41 -0
- package/src/platforms/gba/lib/arm-archives/libc.a +0 -0
- package/src/platforms/gba/lib/arm-archives/libgcc.a +0 -0
- package/src/platforms/gba/lib/arm-archives/libnosys.a +0 -0
- package/src/platforms/gba/lib/c/gba_sfx.c +81 -0
- package/src/platforms/gba/lib/c/gba_sfx.h +48 -0
- package/src/platforms/gba/lib/libgba/crtbegin.o +0 -0
- package/src/platforms/gba/lib/libgba/crtend.o +0 -0
- package/src/platforms/gba/lib/libgba/crti.o +0 -0
- package/src/platforms/gba/lib/libgba/crtn.o +0 -0
- package/src/platforms/gba/lib/libgba/gba_cart.ld +319 -0
- package/src/platforms/gba/lib/libgba/gba_crt0.s +258 -0
- package/src/platforms/gba/lib/libgba/include/BoyScout.h +128 -0
- package/src/platforms/gba/lib/libgba/include/disc.h +36 -0
- package/src/platforms/gba/lib/libgba/include/disc_io.h +64 -0
- package/src/platforms/gba/lib/libgba/include/dldi.h +112 -0
- package/src/platforms/gba/lib/libgba/include/erapi.h +195 -0
- package/src/platforms/gba/lib/libgba/include/fade.h +76 -0
- package/src/platforms/gba/lib/libgba/include/gba.h +47 -0
- package/src/platforms/gba/lib/libgba/include/gba_affine.h +83 -0
- package/src/platforms/gba/lib/libgba/include/gba_base.h +122 -0
- package/src/platforms/gba/lib/libgba/include/gba_compression.h +66 -0
- package/src/platforms/gba/lib/libgba/include/gba_console.h +55 -0
- package/src/platforms/gba/lib/libgba/include/gba_dma.h +100 -0
- package/src/platforms/gba/lib/libgba/include/gba_input.h +127 -0
- package/src/platforms/gba/lib/libgba/include/gba_interrupt.h +146 -0
- package/src/platforms/gba/lib/libgba/include/gba_multiboot.h +72 -0
- package/src/platforms/gba/lib/libgba/include/gba_sio.h +124 -0
- package/src/platforms/gba/lib/libgba/include/gba_sound.h +356 -0
- package/src/platforms/gba/lib/libgba/include/gba_sprites.h +195 -0
- package/src/platforms/gba/lib/libgba/include/gba_systemcalls.h +194 -0
- package/src/platforms/gba/lib/libgba/include/gba_timers.h +63 -0
- package/src/platforms/gba/lib/libgba/include/gba_types.h +60 -0
- package/src/platforms/gba/lib/libgba/include/gba_video.h +307 -0
- package/src/platforms/gba/lib/libgba/include/mappy.h +72 -0
- package/src/platforms/gba/lib/libgba/include/mbv2.h +90 -0
- package/src/platforms/gba/lib/libgba/include/xcomms.h +93 -0
- package/src/platforms/gba/lib/libgba/include/xcomms_cmd.h +53 -0
- package/src/platforms/gba/lib/libgba/libgba.seed.a +0 -0
- package/src/platforms/gba/lib/libgba/libgba.seed.hash +1 -0
- package/src/platforms/gba/lib/libgba/src/AffineSet.c +42 -0
- package/src/platforms/gba/lib/libgba/src/ArcTan.s +41 -0
- package/src/platforms/gba/lib/libgba/src/BoyScout/BoyScout.c +1242 -0
- package/src/platforms/gba/lib/libgba/src/BoyScout/GBASoundRegs.h +200 -0
- package/src/platforms/gba/lib/libgba/src/Compression.c +84 -0
- package/src/platforms/gba/lib/libgba/src/CpuSet.c +41 -0
- package/src/platforms/gba/lib/libgba/src/Div.s +58 -0
- package/src/platforms/gba/lib/libgba/src/DivArm.s +50 -0
- package/src/platforms/gba/lib/libgba/src/InterruptDispatcher.s +113 -0
- package/src/platforms/gba/lib/libgba/src/IntrWait.c +35 -0
- package/src/platforms/gba/lib/libgba/src/MultiBoot.s +33 -0
- package/src/platforms/gba/lib/libgba/src/Reset.s +49 -0
- package/src/platforms/gba/lib/libgba/src/Sound.s +48 -0
- package/src/platforms/gba/lib/libgba/src/Sqrt.s +34 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/disc.c +58 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/dldi.c +189 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/dldi_stub.s +78 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_cf_common.c +260 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_cf_common.h +72 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3_common.c +60 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3_common.h +48 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3cf.c +83 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3cf.h +45 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3sd.c +508 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3sd.h +45 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_mpcf.c +87 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_mpcf.h +42 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sc_common.c +47 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sc_common.h +43 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sccf.c +83 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sccf.h +45 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd.c +385 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd.h +48 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd_s.s +139 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sd_common.c +203 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sd_common.h +108 -0
- package/src/platforms/gba/lib/libgba/src/fade.c +185 -0
- package/src/platforms/gba/lib/libgba/src/input.c +127 -0
- package/src/platforms/gba/lib/libgba/src/interrupt.c +116 -0
- package/src/platforms/gba/lib/libgba/src/mappy_print.c +74 -0
- package/src/platforms/gba/lib/libgba/src/mb2print.c +69 -0
- package/src/platforms/gba/lib/libgba/src/mbv2.c +230 -0
- package/src/platforms/gba/lib/libgba/src/mbv2.txt +119 -0
- package/src/platforms/gba/lib/libgba/src/xcomms.c +203 -0
- package/src/platforms/gba/lib/libgba/src/xcomms_print.c +56 -0
- package/src/platforms/gba/lib/libgba/sysinclude/_ansi.h +82 -0
- package/src/platforms/gba/lib/libgba/sysinclude/_newlib_version.h +11 -0
- package/src/platforms/gba/lib/libgba/sysinclude/_syslist.h +41 -0
- package/src/platforms/gba/lib/libgba/sysinclude/alloca.h +21 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ar.h +65 -0
- package/src/platforms/gba/lib/libgba/sysinclude/argz.h +33 -0
- package/src/platforms/gba/lib/libgba/sysinclude/assert.h +50 -0
- package/src/platforms/gba/lib/libgba/sysinclude/complex.h +150 -0
- package/src/platforms/gba/lib/libgba/sysinclude/cpio.h +30 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ctype.h +183 -0
- package/src/platforms/gba/lib/libgba/sysinclude/devctl.h +78 -0
- package/src/platforms/gba/lib/libgba/sysinclude/dirent.h +85 -0
- package/src/platforms/gba/lib/libgba/sysinclude/elf.h +3147 -0
- package/src/platforms/gba/lib/libgba/sysinclude/envlock.h +15 -0
- package/src/platforms/gba/lib/libgba/sysinclude/envz.h +16 -0
- package/src/platforms/gba/lib/libgba/sysinclude/errno.h +11 -0
- package/src/platforms/gba/lib/libgba/sysinclude/fastmath.h +13 -0
- package/src/platforms/gba/lib/libgba/sysinclude/fcntl.h +1 -0
- package/src/platforms/gba/lib/libgba/sysinclude/fenv.h +42 -0
- package/src/platforms/gba/lib/libgba/sysinclude/float.h +631 -0
- package/src/platforms/gba/lib/libgba/sysinclude/fnmatch.h +55 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ftw.h +66 -0
- package/src/platforms/gba/lib/libgba/sysinclude/getopt.h +185 -0
- package/src/platforms/gba/lib/libgba/sysinclude/glob.h +90 -0
- package/src/platforms/gba/lib/libgba/sysinclude/grp.h +86 -0
- package/src/platforms/gba/lib/libgba/sysinclude/iconv.h +63 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ieeefp.h +295 -0
- package/src/platforms/gba/lib/libgba/sysinclude/inttypes.h +345 -0
- package/src/platforms/gba/lib/libgba/sysinclude/iso646.h +45 -0
- package/src/platforms/gba/lib/libgba/sysinclude/langinfo.h +332 -0
- package/src/platforms/gba/lib/libgba/sysinclude/libgen.h +37 -0
- package/src/platforms/gba/lib/libgba/sysinclude/limits.h +168 -0
- package/src/platforms/gba/lib/libgba/sysinclude/locale.h +96 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/_arc4random.h +1 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/_default_types.h +250 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/_endian.h +39 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/_time.h +3 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/_types.h +8 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/ansi.h +1 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/endian.h +69 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/fastmath.h +98 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/ieee.h +127 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/ieeefp.h +533 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/malloc.h +8 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/param.h +8 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/setjmp-dj.h +43 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/setjmp.h +524 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/stdlib.h +8 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/termios.h +1 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/time.h +15 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/types.h +13 -0
- package/src/platforms/gba/lib/libgba/sysinclude/malloc.h +173 -0
- package/src/platforms/gba/lib/libgba/sysinclude/math.h +645 -0
- package/src/platforms/gba/lib/libgba/sysinclude/memory.h +4 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ndbm.h +91 -0
- package/src/platforms/gba/lib/libgba/sysinclude/newlib.h +427 -0
- package/src/platforms/gba/lib/libgba/sysinclude/paths.h +9 -0
- package/src/platforms/gba/lib/libgba/sysinclude/pthread.h +456 -0
- package/src/platforms/gba/lib/libgba/sysinclude/pwd.h +83 -0
- package/src/platforms/gba/lib/libgba/sysinclude/reent.h +190 -0
- package/src/platforms/gba/lib/libgba/sysinclude/regdef.h +7 -0
- package/src/platforms/gba/lib/libgba/sysinclude/regex.h +103 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sched.h +112 -0
- package/src/platforms/gba/lib/libgba/sysinclude/search.h +64 -0
- package/src/platforms/gba/lib/libgba/sysinclude/setjmp.h +25 -0
- package/src/platforms/gba/lib/libgba/sysinclude/signal.h +35 -0
- package/src/platforms/gba/lib/libgba/sysinclude/spawn.h +111 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/ssp.h +76 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/stdio.h +101 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/stdlib.h +30 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/string.h +115 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/strings.h +55 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/unistd.h +93 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/wchar.h +97 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdarg.h +135 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdatomic.h +409 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdbool.h +51 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stddef.h +463 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdint.h +466 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdio.h +807 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdio_ext.h +79 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdlib.h +345 -0
- package/src/platforms/gba/lib/libgba/sysinclude/string.h +183 -0
- package/src/platforms/gba/lib/libgba/sysinclude/strings.h +80 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_default_fcntl.h +241 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_intsup.h +199 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_locale.h +12 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_pthreadtypes.h +233 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_sigset.h +43 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_stdint.h +90 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_timespec.h +52 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_timeval.h +60 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_types.h +228 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_tz_structs.h +24 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/cdefs.h +754 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/config.h +314 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/custom_file.h +2 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/dir.h +10 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/dirent.h +13 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/endian.h +207 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/errno.h +198 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/fcntl.h +12 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/features.h +551 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/fenv.h +90 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/file.h +2 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/iconvnls.h +77 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/iosupport.h +143 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/lock.h +75 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/param.h +35 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/queue.h +919 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/reent.h +913 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/resource.h +24 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/sched.h +69 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/select.h +94 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/signal.h +388 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/stat.h +179 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/statvfs.h +41 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/stdio.h +27 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/string.h +2 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/syslimits.h +61 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/time.h +448 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/timeb.h +40 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/times.h +32 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/timespec.h +63 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/tree.h +864 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/types.h +228 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/unistd.h +591 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/utime.h +22 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/wait.h +44 -0
- package/src/platforms/gba/lib/libgba/sysinclude/tar.h +43 -0
- package/src/platforms/gba/lib/libgba/sysinclude/termios.h +7 -0
- package/src/platforms/gba/lib/libgba/sysinclude/tgmath.h +127 -0
- package/src/platforms/gba/lib/libgba/sysinclude/threads.h +93 -0
- package/src/platforms/gba/lib/libgba/sysinclude/time.h +313 -0
- package/src/platforms/gba/lib/libgba/sysinclude/unctrl.h +42 -0
- package/src/platforms/gba/lib/libgba/sysinclude/unistd.h +6 -0
- package/src/platforms/gba/lib/libgba/sysinclude/utime.h +12 -0
- package/src/platforms/gba/lib/libgba/sysinclude/utmp.h +8 -0
- package/src/platforms/gba/lib/libgba/sysinclude/varargs.h +7 -0
- package/src/platforms/gba/lib/libgba/sysinclude/wchar.h +339 -0
- package/src/platforms/gba/lib/libgba/sysinclude/wctype.h +74 -0
- package/src/platforms/gba/lib/libgba/sysinclude/wordexp.h +53 -0
- package/src/platforms/gba/lib/libtonc/crtbegin.o +0 -0
- package/src/platforms/gba/lib/libtonc/crtend.o +0 -0
- package/src/platforms/gba/lib/libtonc/crti.o +0 -0
- package/src/platforms/gba/lib/libtonc/crtn.o +0 -0
- package/src/platforms/gba/lib/libtonc/gba_cart.ld +319 -0
- package/src/platforms/gba/lib/libtonc/gba_crt0.s +258 -0
- package/src/platforms/gba/lib/libtonc/include/tonc.h +72 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_asminc.h +132 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_bios.h +555 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_core.h +573 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_input.h +184 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_irq.h +121 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_legacy.h +481 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_libgba.h +537 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_math.h +692 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_memdef.h +962 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_memmap.h +583 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_nocash.h +51 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_oam.h +186 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_surface.h +461 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_text.h +270 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_tte.h +748 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_types.h +376 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_video.h +615 -0
- package/src/platforms/gba/lib/libtonc/libtonc.seed.a +0 -0
- package/src/platforms/gba/lib/libtonc/libtonc.seed.hash +1 -0
- package/src/platforms/gba/lib/libtonc/src/asm/clr_blend_fast.s +72 -0
- package/src/platforms/gba/lib/libtonc/src/asm/clr_fade_fast.s +74 -0
- package/src/platforms/gba/lib/libtonc/src/asm/div_lut.s +54 -0
- package/src/platforms/gba/lib/libtonc/src/asm/sin_lut.s +90 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_bios.s +289 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_bios_ex.s +97 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_isr_master.s +92 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_isr_nest.s +98 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_memcpy.s +126 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_memset.s +123 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_nocash.s +73 -0
- package/src/platforms/gba/lib/libtonc/src/font/sys8.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/sys8.s +46 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana10.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana10.s +293 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9.s +167 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9_b4.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9_b4.s +545 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9b.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9b.s +167 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9i.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9i.s +167 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_bitmap.c +289 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text.c +81 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_bm.c +244 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_map.c +122 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_oam.c +113 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/toncfont.s +43 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_bg.c +61 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_bg_affine.c +112 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_bmp16.c +240 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_bmp8.c +314 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_color.c +368 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_core.c +237 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_input.c +118 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_irq.c +271 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_math.c +54 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_oam.c +76 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_obj_affine.c +146 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_sbmp16.c +369 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_sbmp8.c +405 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_schr4c.c +588 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_schr4r.c +462 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_surface.c +105 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_video.c +33 -0
- package/src/platforms/gba/lib/libtonc/src/tte/ase_drawg.c +83 -0
- package/src/platforms/gba/lib/libtonc/src/tte/bmp16_drawg.c +72 -0
- package/src/platforms/gba/lib/libtonc/src/tte/bmp16_drawg_b1cs.c +92 -0
- package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg.c +71 -0
- package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg_b1cs.c +104 -0
- package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg_b1cts_fast.s +115 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b1cts.c +76 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b1cts_fast.s +128 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b4cts.c +67 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b4cts_fast.s +127 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4r_drawg_b1cts.c +80 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4r_drawg_b1cts_fast.s +145 -0
- package/src/platforms/gba/lib/libtonc/src/tte/obj_drawg.c +61 -0
- package/src/platforms/gba/lib/libtonc/src/tte/se_drawg.c +110 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_ase.c +87 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_bmp.c +118 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_chr4c.c +86 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_chr4r.c +87 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_obj.c +84 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_se.c +96 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_iohook.c +264 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_main.c +756 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_types.s +119 -0
- package/src/platforms/gba/lib/maxmod/LICENSE-MAXMOD +23 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_defs.inc +117 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_format_mas.inc +108 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_macros.inc +195 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_mas.inc +40 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_mas_structs.inc +189 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_mixer_ds.inc +46 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_mixer_gba.inc +42 -0
- package/src/platforms/gba/lib/maxmod/asm_include/swi_gba.inc +23 -0
- package/src/platforms/gba/lib/maxmod/include/maxmod.h +412 -0
- package/src/platforms/gba/lib/maxmod/include/mm_types.h +333 -0
- package/src/platforms/gba/lib/maxmod/maxmod.seed.a +0 -0
- package/src/platforms/gba/lib/maxmod/maxmod.seed.hash +1 -0
- package/src/platforms/gba/lib/maxmod/music/chiptune.xm +0 -0
- package/src/platforms/gba/lib/maxmod/music/chiptune_soundbank.bin +0 -0
- package/src/platforms/gba/lib/maxmod/music/chiptune_soundbank.h +4 -0
- package/src/platforms/gba/lib/maxmod/music/make_chiptune_xm.js +203 -0
- package/src/platforms/gba/lib/maxmod/source/mm_effect.s +767 -0
- package/src/platforms/gba/lib/maxmod/source/mm_main.s +115 -0
- package/src/platforms/gba/lib/maxmod/source/mm_mas.s +4990 -0
- package/src/platforms/gba/lib/maxmod/source/mm_mas_arm.s +612 -0
- package/src/platforms/gba/lib/maxmod/source_gba/mm_init_default.s +98 -0
- package/src/platforms/gba/lib/maxmod/source_gba/mm_main_gba.s +292 -0
- package/src/platforms/gba/lib/maxmod/source_gba/mm_mixer_gba.s +1367 -0
- package/src/platforms/gba/lib/sysbase/gba_iosupport.c +138 -0
- package/src/platforms/gbc/MENTAL_MODEL.md +165 -0
- package/src/platforms/gbc/TROUBLESHOOTING.md +142 -0
- package/src/platforms/gbc/UPSTREAM_SOURCES.md +60 -0
- package/src/platforms/gbc/lib/c/LICENSE-HUGEDRIVER +25 -0
- package/src/platforms/gbc/lib/c/README.md +120 -0
- package/src/platforms/gbc/lib/c/SDCC_GOTCHAS.md +189 -0
- package/src/platforms/gbc/lib/c/gb_crt0.s +163 -0
- package/src/platforms/gbc/lib/c/gb_hardware.h +113 -0
- package/src/platforms/gbc/lib/c/gb_runtime.c +284 -0
- package/src/platforms/gbc/lib/c/gb_runtime.h +145 -0
- package/src/platforms/gbc/lib/c/hUGEDriver.c +191 -0
- package/src/platforms/gbc/lib/c/hUGEDriver.h +95 -0
- package/src/platforms/gbc/lib/c/hUGEDriver.upstream.asm +1908 -0
- package/src/platforms/gbc/lib/c/lcd_init.c +19 -0
- package/src/platforms/gbc/lib/c/patch-header.js +154 -0
- package/src/platforms/gbc/lib/c/song_data.c +88 -0
- package/src/platforms/gbc/lib/c/unroll.h +52 -0
- package/src/platforms/gbc/lib/c/wait_vblank.c +14 -0
- package/src/platforms/genesis/MENTAL_MODEL.md +223 -0
- package/src/platforms/genesis/TROUBLESHOOTING.md +193 -0
- package/src/platforms/genesis/UPSTREAM_SOURCES.md +52 -0
- package/src/platforms/genesis/image-to-tilemap.js +333 -0
- package/src/platforms/genesis/lib/README.md +157 -0
- package/src/platforms/genesis/lib/c/crtbegin.o +0 -0
- package/src/platforms/genesis/lib/c/crtend.o +0 -0
- package/src/platforms/genesis/lib/c/genesis.ld +44 -0
- package/src/platforms/genesis/lib/c/genesis_sfx.c +51 -0
- package/src/platforms/genesis/lib/c/genesis_sfx.h +49 -0
- package/src/platforms/genesis/lib/c/libc.a +0 -0
- package/src/platforms/genesis/lib/c/libgcc.a +0 -0
- package/src/platforms/genesis/lib/c/libm.a +0 -0
- package/src/platforms/genesis/lib/c/sega.s +71 -0
- package/src/platforms/genesis/lib/header.s +96 -0
- package/src/platforms/genesis/lib/nmi_safe.s +79 -0
- package/src/platforms/genesis/lib/pad_read.s +104 -0
- package/src/platforms/genesis/lib/sgdk/COPYING.RUNTIME +73 -0
- package/src/platforms/genesis/lib/sgdk/LICENSE +12 -0
- package/src/platforms/genesis/lib/sgdk/include/asm.h +52 -0
- package/src/platforms/genesis/lib/sgdk/include/asm_mac.i +9 -0
- package/src/platforms/genesis/lib/sgdk/include/bmp.h +690 -0
- package/src/platforms/genesis/lib/sgdk/include/config.h +208 -0
- package/src/platforms/genesis/lib/sgdk/include/dma.h +542 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/console.h +387 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/everdrive.h +116 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/fat16.h +84 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/flash-save/flash.h +164 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/flash-save/saveman.h +177 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/link_cable.h +316 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/minimusic/minimus.h +29 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/16c550.h +221 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/comm.h +93 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/gamejolt.h +541 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/jsmn.h +471 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/json.h +122 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/lsd.h +172 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/megawifi.h +984 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/mw-msg.h +392 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/ssf_ed_pro.h +38 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/ssf_ed_x7.h +73 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/serial/buffer.h +8 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/serial/serial.h +133 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/stb/stb_sprintf.h +1864 -0
- package/src/platforms/genesis/lib/sgdk/include/genesis.h +92 -0
- package/src/platforms/genesis/lib/sgdk/include/joy.h +482 -0
- package/src/platforms/genesis/lib/sgdk/include/kdebug.h +21 -0
- package/src/platforms/genesis/lib/sgdk/include/map.h +409 -0
- package/src/platforms/genesis/lib/sgdk/include/mapper.h +186 -0
- package/src/platforms/genesis/lib/sgdk/include/maths.h +1071 -0
- package/src/platforms/genesis/lib/sgdk/include/maths3D.h +480 -0
- package/src/platforms/genesis/lib/sgdk/include/memory.h +346 -0
- package/src/platforms/genesis/lib/sgdk/include/memory_base.h +37 -0
- package/src/platforms/genesis/lib/sgdk/include/object.h +171 -0
- package/src/platforms/genesis/lib/sgdk/include/pal.h +500 -0
- package/src/platforms/genesis/lib/sgdk/include/pool.h +171 -0
- package/src/platforms/genesis/lib/sgdk/include/psg.h +153 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_dpcm2.h +79 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_pcm.h +98 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_pcm4.h +125 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/pcm/tab_vol.h +6 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/smp_null.h +6 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/smp_null_dpcm.h +6 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/sound.h +70 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/xgm.h +399 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/xgm2.h +389 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/z80_def.i80 +41 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/z80_fct.i80 +83 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/z80_mac.i80 +1476 -0
- package/src/platforms/genesis/lib/sgdk/include/sprite_eng.h +1095 -0
- package/src/platforms/genesis/lib/sgdk/include/sprite_eng_legacy.h +1030 -0
- package/src/platforms/genesis/lib/sgdk/include/sram.h +110 -0
- package/src/platforms/genesis/lib/sgdk/include/string.h +349 -0
- package/src/platforms/genesis/lib/sgdk/include/sys.h +511 -0
- package/src/platforms/genesis/lib/sgdk/include/tab_cnv.h +19 -0
- package/src/platforms/genesis/lib/sgdk/include/task.h +77 -0
- package/src/platforms/genesis/lib/sgdk/include/task_cst.h +33 -0
- package/src/platforms/genesis/lib/sgdk/include/timer.h +132 -0
- package/src/platforms/genesis/lib/sgdk/include/tools.h +450 -0
- package/src/platforms/genesis/lib/sgdk/include/types.h +320 -0
- package/src/platforms/genesis/lib/sgdk/include/vdp.h +1150 -0
- package/src/platforms/genesis/lib/sgdk/include/vdp_bg.h +723 -0
- package/src/platforms/genesis/lib/sgdk/include/vdp_pal.h +101 -0
- package/src/platforms/genesis/lib/sgdk/include/vdp_spr.h +448 -0
- package/src/platforms/genesis/lib/sgdk/include/vdp_tile.h +1136 -0
- package/src/platforms/genesis/lib/sgdk/include/vram.h +270 -0
- package/src/platforms/genesis/lib/sgdk/include/ym2612.h +87 -0
- package/src/platforms/genesis/lib/sgdk/include/z80_ctrl.h +420 -0
- package/src/platforms/genesis/lib/sgdk/libmd.seed.a +0 -0
- package/src/platforms/genesis/lib/sgdk/libmd.seed.hash +1 -0
- package/src/platforms/genesis/lib/sgdk/md.ld +120 -0
- package/src/platforms/genesis/lib/sgdk/music/demo.vgm +0 -0
- package/src/platforms/genesis/lib/sgdk/music/demo.xgc +0 -0
- package/src/platforms/genesis/lib/sgdk/music/demo.xgm +0 -0
- package/src/platforms/genesis/lib/sgdk/res/image/font_default.png +0 -0
- package/src/platforms/genesis/lib/sgdk/res/image/sgdk_logo.png +0 -0
- package/src/platforms/genesis/lib/sgdk/res/libres.h +10 -0
- package/src/platforms/genesis/lib/sgdk/res/libres.res +5 -0
- package/src/platforms/genesis/lib/sgdk/res/libres.s +166 -0
- package/src/platforms/genesis/lib/sgdk/res/sound/stop_xgm.bin +0 -0
- package/src/platforms/genesis/lib/sgdk/rom_header.c +33 -0
- package/src/platforms/genesis/lib/sgdk/sega.preprocessed.s +364 -0
- package/src/platforms/genesis/lib/sgdk/sega.s +365 -0
- package/src/platforms/genesis/lib/sgdk/src/bmp.c +1539 -0
- package/src/platforms/genesis/lib/sgdk/src/bmp_a.s +3477 -0
- package/src/platforms/genesis/lib/sgdk/src/boot/rom_header.c +33 -0
- package/src/platforms/genesis/lib/sgdk/src/boot/sega.s +365 -0
- package/src/platforms/genesis/lib/sgdk/src/dma.c +782 -0
- package/src/platforms/genesis/lib/sgdk/src/dma_a.s +23 -0
- package/src/platforms/genesis/lib/sgdk/src/error_a.s +376 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/console.c +490 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/everdrive.c +285 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/fat16.c +610 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/README.md +112 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/flash.c +300 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/saveman.c +641 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/link_cable.c +1758 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/CHANGELOG.md +31 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/LICENSE.txt +17 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/README.md +18 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/data.z80 +148 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/define.z80 +173 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/api-c.md +80 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/format.md +132 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/teradrive.md +33 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/fm.z80 +363 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/main.z80 +433 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/minimus.c +129 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/minimus_drv.s80 +17 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/psg.z80 +231 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/track.z80 +398 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/util.z80 +98 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/16c550.c +84 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/README.md +849 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/comm.c +141 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/gamejolt.c +758 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/json.c +153 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/lsd.c +364 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/megawifi.c +1501 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/ssf_ed_pro.c +98 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/ssf_ed_x7.c +67 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/serial/buffer.c +69 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/serial/serial.c +158 -0
- package/src/platforms/genesis/lib/sgdk/src/joy.c +1361 -0
- package/src/platforms/genesis/lib/sgdk/src/kdebug.s +109 -0
- package/src/platforms/genesis/lib/sgdk/src/map.c +1915 -0
- package/src/platforms/genesis/lib/sgdk/src/mapper.c +280 -0
- package/src/platforms/genesis/lib/sgdk/src/maths.c +878 -0
- package/src/platforms/genesis/lib/sgdk/src/maths3D.c +480 -0
- package/src/platforms/genesis/lib/sgdk/src/maths3D_a.s +205 -0
- package/src/platforms/genesis/lib/sgdk/src/memory.c +760 -0
- package/src/platforms/genesis/lib/sgdk/src/memory_a.s +306 -0
- package/src/platforms/genesis/lib/sgdk/src/object.c +111 -0
- package/src/platforms/genesis/lib/sgdk/src/pal.c +484 -0
- package/src/platforms/genesis/lib/sgdk/src/pool.c +234 -0
- package/src/platforms/genesis/lib/sgdk/src/psg.c +82 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/drv_null.s80 +27 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/drv_xgm.s80 +3037 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_dpcm2.s80 +984 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_pcm.s80 +592 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_pcm4.s80 +699 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_dpcm2.c +172 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_pcm.c +152 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_pcm4.c +213 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/tab_vol.c +277 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/smp_null.s +22 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/smp_null_dpcm.s +15 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/sound.c +33 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm.c +683 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2.s80 +993 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_fct.i80 +611 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_mac.i80 +133 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_pcm_fct.i80 +114 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_pcm_mac.i80 +1444 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_psg_fct.i80 +491 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_psg_mac.i80 +43 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_ym_fct.i80 +1664 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_ym_mac.i80 +295 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2.c +1083 -0
- package/src/platforms/genesis/lib/sgdk/src/sprite_eng.c +2256 -0
- package/src/platforms/genesis/lib/sgdk/src/sprite_eng_legacy.c +2309 -0
- package/src/platforms/genesis/lib/sgdk/src/sram.c +30 -0
- package/src/platforms/genesis/lib/sgdk/src/sram_a.s +41 -0
- package/src/platforms/genesis/lib/sgdk/src/string.c +720 -0
- package/src/platforms/genesis/lib/sgdk/src/sys.c +1053 -0
- package/src/platforms/genesis/lib/sgdk/src/sys_a.s +74 -0
- package/src/platforms/genesis/lib/sgdk/src/tab_cnv.c +129 -0
- package/src/platforms/genesis/lib/sgdk/src/tab_log10.c +8201 -0
- package/src/platforms/genesis/lib/sgdk/src/tab_log2.c +8201 -0
- package/src/platforms/genesis/lib/sgdk/src/tab_sin.c +2058 -0
- package/src/platforms/genesis/lib/sgdk/src/tab_sqrt.c +8201 -0
- package/src/platforms/genesis/lib/sgdk/src/task.s +148 -0
- package/src/platforms/genesis/lib/sgdk/src/timer.c +201 -0
- package/src/platforms/genesis/lib/sgdk/src/tools.c +1299 -0
- package/src/platforms/genesis/lib/sgdk/src/tools_a.s +979 -0
- package/src/platforms/genesis/lib/sgdk/src/types.c +18 -0
- package/src/platforms/genesis/lib/sgdk/src/vdp.c +1060 -0
- package/src/platforms/genesis/lib/sgdk/src/vdp_bg.c +511 -0
- package/src/platforms/genesis/lib/sgdk/src/vdp_spr.c +322 -0
- package/src/platforms/genesis/lib/sgdk/src/vdp_tile.c +1011 -0
- package/src/platforms/genesis/lib/sgdk/src/vdp_tile_a.s +68 -0
- package/src/platforms/genesis/lib/sgdk/src/vram.c +273 -0
- package/src/platforms/genesis/lib/sgdk/src/ym2612.c +175 -0
- package/src/platforms/genesis/lib/sgdk/src/z80_ctrl.c +334 -0
- package/src/platforms/genesis/lib/sprite_table.s +129 -0
- package/src/platforms/genesis/lib/vblank_wait.s +73 -0
- package/src/platforms/genesis/lib/vdp_init.s +85 -0
- package/src/platforms/genesis/lib/wram.s +88 -0
- package/src/platforms/genesis/lib/z80_bootstrap.s +102 -0
- package/src/platforms/genesis/vdp.js +495 -0
- package/src/platforms/gg/MENTAL_MODEL.md +155 -0
- package/src/platforms/gg/TROUBLESHOOTING.md +91 -0
- package/src/platforms/gg/UPSTREAM_SOURCES.md +36 -0
- package/src/platforms/gg/lib/c/gg_crt0.s +112 -0
- package/src/platforms/gg/lib/c/gg_hw.h +62 -0
- package/src/platforms/gg/lib/c/gg_music.c +155 -0
- package/src/platforms/gg/lib/c/gg_music.h +89 -0
- package/src/platforms/gg/lib/c/gg_sfx.c +82 -0
- package/src/platforms/gg/lib/c/gg_sfx.h +40 -0
- package/src/platforms/gg/lib/c/joypad_read.c +22 -0
- package/src/platforms/gg/lib/c/load_palette.c +20 -0
- package/src/platforms/gg/lib/c/load_tiles.c +32 -0
- package/src/platforms/gg/lib/c/sprite_table.c +60 -0
- package/src/platforms/gg/lib/c/vblank_wait.c +10 -0
- package/src/platforms/gg/lib/c/vdp_init.c +58 -0
- package/src/platforms/index.js +7 -0
- package/src/platforms/lynx/MENTAL_MODEL.md +231 -0
- package/src/platforms/lynx/TROUBLESHOOTING.md +105 -0
- package/src/platforms/lynx/UPSTREAM_SOURCES.md +66 -0
- package/src/platforms/lynx/lib/c/lynx_music.c +63 -0
- package/src/platforms/lynx/lib/c/lynx_music.h +16 -0
- package/src/platforms/lynx/lib/c/lynx_sfx.c +147 -0
- package/src/platforms/lynx/lib/c/lynx_sfx.h +59 -0
- package/src/platforms/lynx/lib/cc65-src/bllhdr.s +18 -0
- package/src/platforms/lynx/lib/cc65-src/bootldr.s +195 -0
- package/src/platforms/lynx/lib/cc65-src/cgetc.s +69 -0
- package/src/platforms/lynx/lib/cc65-src/clock.s +87 -0
- package/src/platforms/lynx/lib/cc65-src/crt0.s +135 -0
- package/src/platforms/lynx/lib/cc65-src/defdir.s +29 -0
- package/src/platforms/lynx/lib/cc65-src/eeprom.s +255 -0
- package/src/platforms/lynx/lib/cc65-src/eeprom46.s +204 -0
- package/src/platforms/lynx/lib/cc65-src/eeprom66.s +227 -0
- package/src/platforms/lynx/lib/cc65-src/eeprom86.s +236 -0
- package/src/platforms/lynx/lib/cc65-src/exec.s +34 -0
- package/src/platforms/lynx/lib/cc65-src/exehdr.s +27 -0
- package/src/platforms/lynx/lib/cc65-src/extzp.inc +23 -0
- package/src/platforms/lynx/lib/cc65-src/extzp.s +30 -0
- package/src/platforms/lynx/lib/cc65-src/irq.s +45 -0
- package/src/platforms/lynx/lib/cc65-src/joy/lynx-stdjoy.s +93 -0
- package/src/platforms/lynx/lib/cc65-src/joy_stat_stddrv.s +14 -0
- package/src/platforms/lynx/lib/cc65-src/kbhit.s +56 -0
- package/src/platforms/lynx/lib/cc65-src/libref.s +9 -0
- package/src/platforms/lynx/lib/cc65-src/load.s +41 -0
- package/src/platforms/lynx/lib/cc65-src/lseek.s +58 -0
- package/src/platforms/lynx/lib/cc65-src/lynx-cart.s +98 -0
- package/src/platforms/lynx/lib/cc65-src/lynx-snd.s +1270 -0
- package/src/platforms/lynx/lib/cc65-src/mainargs.s +24 -0
- package/src/platforms/lynx/lib/cc65-src/open.s +136 -0
- package/src/platforms/lynx/lib/cc65-src/oserror.s +14 -0
- package/src/platforms/lynx/lib/cc65-src/read.s +44 -0
- package/src/platforms/lynx/lib/cc65-src/ser/lynx-comlynx.s +404 -0
- package/src/platforms/lynx/lib/cc65-src/ser_stat_stddrv.s +14 -0
- package/src/platforms/lynx/lib/cc65-src/sysuname.s +39 -0
- package/src/platforms/lynx/lib/cc65-src/tgi/lynx-160-102-16.s +1075 -0
- package/src/platforms/lynx/lib/cc65-src/tgi_colors.s +9 -0
- package/src/platforms/lynx/lib/cc65-src/tgi_irq.s +11 -0
- package/src/platforms/lynx/lib/cc65-src/tgi_stat_stddrv.s +14 -0
- package/src/platforms/lynx/lib/cc65-src/tgi_stddrv.s +13 -0
- package/src/platforms/lynx/lib/cc65-src/uploader.s +81 -0
- package/src/platforms/nes/MENTAL_MODEL.md +301 -0
- package/src/platforms/nes/TROUBLESHOOTING.md +321 -0
- package/src/platforms/nes/UPSTREAM_SOURCES.md +31 -0
- package/src/platforms/nes/image-to-chr.js +195 -0
- package/src/platforms/nes/image-to-tilemap.js +415 -0
- package/src/platforms/nes/lib/README.md +40 -0
- package/src/platforms/nes/lib/asm/LICENSE-FAMITONE +40 -0
- package/src/platforms/nes/lib/asm/chr_ram_header.s +32 -0
- package/src/platforms/nes/lib/asm/famitone2.s +1258 -0
- package/src/platforms/nes/lib/asm/famitone_bridge.s +50 -0
- package/src/platforms/nes/lib/asm/music_data.s +238 -0
- package/src/platforms/nes/lib/c/chr_ram_runtime_hello_sprite.c +81 -0
- package/src/platforms/nes/lib/c/chr_ram_runtime_hud_row.c +101 -0
- package/src/platforms/nes/lib/c/nes_runtime.c +347 -0
- package/src/platforms/nes/lib/c/nes_runtime.h +153 -0
- package/src/platforms/nes/lib/c/nmi_handler.c +51 -0
- package/src/platforms/nes/lib/c/nmi_trampoline.s +25 -0
- package/src/platforms/nes/lib/cc65-src/Makefile.inc +9 -0
- package/src/platforms/nes/lib/cc65-src/_scrsize.s +24 -0
- package/src/platforms/nes/lib/cc65-src/cclear.s +29 -0
- package/src/platforms/nes/lib/cc65-src/chline.s +31 -0
- package/src/platforms/nes/lib/cc65-src/clock.s +31 -0
- package/src/platforms/nes/lib/cc65-src/clrscr.s +72 -0
- package/src/platforms/nes/lib/cc65-src/color.s +68 -0
- package/src/platforms/nes/lib/cc65-src/cpeekc.s +37 -0
- package/src/platforms/nes/lib/cc65-src/cpeekcolor.s +8 -0
- package/src/platforms/nes/lib/cc65-src/cpeekrevers.s +37 -0
- package/src/platforms/nes/lib/cc65-src/cputc.s +95 -0
- package/src/platforms/nes/lib/cc65-src/crt0.s +180 -0
- package/src/platforms/nes/lib/cc65-src/cvline.s +31 -0
- package/src/platforms/nes/lib/cc65-src/get_tv.s +37 -0
- package/src/platforms/nes/lib/cc65-src/gotox.s +21 -0
- package/src/platforms/nes/lib/cc65-src/gotoxy.s +22 -0
- package/src/platforms/nes/lib/cc65-src/gotoy.s +22 -0
- package/src/platforms/nes/lib/cc65-src/irq.s +19 -0
- package/src/platforms/nes/lib/cc65-src/joy/nes-stdjoy.s +102 -0
- package/src/platforms/nes/lib/cc65-src/joy_stat_stddrv.s +14 -0
- package/src/platforms/nes/lib/cc65-src/libref.s +9 -0
- package/src/platforms/nes/lib/cc65-src/mainargs.s +24 -0
- package/src/platforms/nes/lib/cc65-src/neschar.s +4616 -0
- package/src/platforms/nes/lib/cc65-src/ppu.s +158 -0
- package/src/platforms/nes/lib/cc65-src/ppubuf.s +117 -0
- package/src/platforms/nes/lib/cc65-src/randomize.s +18 -0
- package/src/platforms/nes/lib/cc65-src/revers.s +27 -0
- package/src/platforms/nes/lib/cc65-src/setcursor.s +37 -0
- package/src/platforms/nes/lib/cc65-src/sysuname.s +39 -0
- package/src/platforms/nes/lib/cc65-src/tgi/nes-64-56-2.s +480 -0
- package/src/platforms/nes/lib/cc65-src/tgi_stat_stddrv.s +14 -0
- package/src/platforms/nes/lib/cc65-src/tgi_stddrv.s +13 -0
- package/src/platforms/nes/lib/cc65-src/waitvsync.s +18 -0
- package/src/platforms/nes/lib/cc65-src/wherex.s +19 -0
- package/src/platforms/nes/lib/cc65-src/wherey.s +19 -0
- package/src/platforms/nes/lib/clear_nametable.s +38 -0
- package/src/platforms/nes/lib/clear_oam.s +18 -0
- package/src/platforms/nes/lib/load_palette.s +31 -0
- package/src/platforms/nes/lib/nmi_safe.s +65 -0
- package/src/platforms/nes/lib/oam_dma.s +16 -0
- package/src/platforms/nes/lib/read_pad.s +46 -0
- package/src/platforms/nes/lib/reset.s +46 -0
- package/src/platforms/nes/lib/sprite_table_populate.s +75 -0
- package/src/platforms/nes/lib/wait_vblank.s +12 -0
- package/src/platforms/nes/palette.js +39 -0
- package/src/platforms/nes/ppu.js +372 -0
- package/src/platforms/sms/MENTAL_MODEL.md +267 -0
- package/src/platforms/sms/TROUBLESHOOTING.md +124 -0
- package/src/platforms/sms/UPSTREAM_SOURCES.md +29 -0
- package/src/platforms/sms/image-to-tilemap.js +260 -0
- package/src/platforms/sms/lib/README.md +117 -0
- package/src/platforms/sms/lib/c/joypad_read.c +33 -0
- package/src/platforms/sms/lib/c/load_palette.c +24 -0
- package/src/platforms/sms/lib/c/load_tiles.c +32 -0
- package/src/platforms/sms/lib/c/sms_crt0.s +101 -0
- package/src/platforms/sms/lib/c/sms_hw.h +53 -0
- package/src/platforms/sms/lib/c/sms_music.c +178 -0
- package/src/platforms/sms/lib/c/sms_music.h +50 -0
- package/src/platforms/sms/lib/c/sms_sfx.c +82 -0
- package/src/platforms/sms/lib/c/sms_sfx.h +40 -0
- package/src/platforms/sms/lib/c/sprite_table.c +60 -0
- package/src/platforms/sms/lib/c/vblank_wait.c +10 -0
- package/src/platforms/sms/lib/c/vdp_init.c +58 -0
- package/src/platforms/sms/lib/header.s +33 -0
- package/src/platforms/sms/lib/joypad_read.s +40 -0
- package/src/platforms/sms/lib/load_palette.s +30 -0
- package/src/platforms/sms/lib/load_tiles.s +50 -0
- package/src/platforms/sms/lib/sprite_table.s +44 -0
- package/src/platforms/sms/lib/vblank_wait.s +36 -0
- package/src/platforms/sms/lib/vdp_init.s +47 -0
- package/src/platforms/sms/vdp.js +530 -0
- package/src/platforms/snes/MENTAL_MODEL.md +275 -0
- package/src/platforms/snes/TROUBLESHOOTING.md +208 -0
- package/src/platforms/snes/UPSTREAM_SOURCES.md +50 -0
- package/src/platforms/snes/brr.js +208 -0
- package/src/platforms/snes/image-to-tilemap.js +227 -0
- package/src/platforms/snes/lib/audio/apu_blob.asm +228 -0
- package/src/platforms/snes/lib/audio/apu_blob.bin +0 -0
- package/src/platforms/snes/lib/audio/explosion.brr +0 -0
- package/src/platforms/snes/lib/audio/sample_bank.bin +0 -0
- package/src/platforms/snes/lib/audio/shoot.brr +0 -0
- package/src/platforms/snes/lib/audio/spc_driver.asm +241 -0
- package/src/platforms/snes/lib/audio_pipeline.asm +62 -0
- package/src/platforms/snes/lib/c/crt0.asm +125 -0
- package/src/platforms/snes/lib/c/hdr.asm +50 -0
- package/src/platforms/snes/lib/c/snes_sfx.c +116 -0
- package/src/platforms/snes/lib/c/snes_sfx.h +96 -0
- package/src/platforms/snes/lib/c/snes_sfx_data.asm +25 -0
- package/src/platforms/snes/lib/cgram_upload.asm +43 -0
- package/src/platforms/snes/lib/lorom_header.asm +47 -0
- package/src/platforms/snes/lib/lorom_multibank.asm +66 -0
- package/src/platforms/snes/lib/nmi_safe.asm +77 -0
- package/src/platforms/snes/lib/oam_upload.asm +45 -0
- package/src/platforms/snes/lib/pad_read.asm +64 -0
- package/src/platforms/snes/lib/pvsneslib/LICENSE +21 -0
- package/src/platforms/snes/lib/pvsneslib/include/ctype.h +6 -0
- package/src/platforms/snes/lib/pvsneslib/include/float.h +4 -0
- package/src/platforms/snes/lib/pvsneslib/include/hdr.asm +47 -0
- package/src/platforms/snes/lib/pvsneslib/include/limits.h +13 -0
- package/src/platforms/snes/lib/pvsneslib/include/math.h +10 -0
- package/src/platforms/snes/lib/pvsneslib/include/setjmp.h +4 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/background.h +396 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/console.h +188 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/dma.h +381 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/input.h +289 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/interrupt.h +264 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/libversion.h +10 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/lzss.h +43 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/map.h +113 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/object.h +234 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/pixel.h +53 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/scores.h +66 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/snestypes.h +65 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/sound.h +245 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/sprite.h +456 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/video.h +465 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes.h +190 -0
- package/src/platforms/snes/lib/pvsneslib/include/stdarg.h +28 -0
- package/src/platforms/snes/lib/pvsneslib/include/stdbool.h +53 -0
- package/src/platforms/snes/lib/pvsneslib/include/stddef.h +27 -0
- package/src/platforms/snes/lib/pvsneslib/include/stdint.h +7 -0
- package/src/platforms/snes/lib/pvsneslib/include/stdio.h +9 -0
- package/src/platforms/snes/lib/pvsneslib/include/stdlib.h +13 -0
- package/src/platforms/snes/lib/pvsneslib/include/string.h +19 -0
- package/src/platforms/snes/lib/pvsneslib/include/strings.h +5 -0
- package/src/platforms/snes/lib/pvsneslib/source/Makefile +87 -0
- package/src/platforms/snes/lib/pvsneslib/source/backgrounds.asm +834 -0
- package/src/platforms/snes/lib/pvsneslib/source/consoles.asm +1028 -0
- package/src/platforms/snes/lib/pvsneslib/source/crt0_snes.asm +329 -0
- package/src/platforms/snes/lib/pvsneslib/source/dmas.asm +1275 -0
- package/src/platforms/snes/lib/pvsneslib/source/hdr.asm +56 -0
- package/src/platforms/snes/lib/pvsneslib/source/input.asm +445 -0
- package/src/platforms/snes/lib/pvsneslib/source/libc.asm +485 -0
- package/src/platforms/snes/lib/pvsneslib/source/libc_c.c +1214 -0
- package/src/platforms/snes/lib/pvsneslib/source/libm.asm +510 -0
- package/src/platforms/snes/lib/pvsneslib/source/libtcc.asm +374 -0
- package/src/platforms/snes/lib/pvsneslib/source/lzsss.asm +256 -0
- package/src/platforms/snes/lib/pvsneslib/source/maps.asm +1078 -0
- package/src/platforms/snes/lib/pvsneslib/source/objects.asm +2881 -0
- package/src/platforms/snes/lib/pvsneslib/source/scores.asm +226 -0
- package/src/platforms/snes/lib/pvsneslib/source/sm_spc.asm +187 -0
- package/src/platforms/snes/lib/pvsneslib/source/snesmodwla.asm +1186 -0
- package/src/platforms/snes/lib/pvsneslib/source/sounds.asm +273 -0
- package/src/platforms/snes/lib/pvsneslib/source/sprites.asm +3946 -0
- package/src/platforms/snes/lib/pvsneslib/source/vblank.asm +917 -0
- package/src/platforms/snes/lib/pvsneslib/source/videos.asm +1137 -0
- package/src/platforms/snes/lib/reset_init.asm +31 -0
- package/src/platforms/snes/lib/sprite_table_populate.asm +122 -0
- package/src/platforms/snes/lib/vram_dma_upload.asm +42 -0
- package/src/platforms/snes/ppu.js +606 -0
- package/src/playtest/playtest.js +612 -0
- package/src/rom-id/identifier.js +421 -0
- package/src/rom-id/patch.js +217 -0
- package/src/toolchains/_worker/pool.js +253 -0
- package/src/toolchains/_worker/run.js +78 -0
- package/src/toolchains/_worker/wasm-worker.js +233 -0
- package/src/toolchains/arm-none-eabi-gcc/gcc.js +208 -0
- package/src/toolchains/asar/asar.js +542 -0
- package/src/toolchains/assemble-snippet.js +256 -0
- package/src/toolchains/cc65/cc65.js +395 -0
- package/src/toolchains/cc65/da65.js +119 -0
- package/src/toolchains/cc65/dbgparse.js +274 -0
- package/src/toolchains/cc65/preset-resolver.js +59 -0
- package/src/toolchains/cc65/presets/nes/chr-ram-runtime.cfg +79 -0
- package/src/toolchains/cc65/presets/nes/chr-ram-runtime.crt0.s +178 -0
- package/src/toolchains/cc65/presets/nes/chr-ram.cfg +76 -0
- package/src/toolchains/cc65/presets/nes/chr-ram.crt0.s +106 -0
- package/src/toolchains/common/ar.js +121 -0
- package/src/toolchains/common/sdk-cache.js +116 -0
- package/src/toolchains/common/symbols.js +139 -0
- package/src/toolchains/dasm/dasm.js +96 -0
- package/src/toolchains/gba-c/gba-c.js +832 -0
- package/src/toolchains/genesis-c/README.md +61 -0
- package/src/toolchains/genesis-c/genesis-c.js +598 -0
- package/src/toolchains/index.js +727 -0
- package/src/toolchains/m68k-elf-gcc/gcc.js +220 -0
- package/src/toolchains/m68kdasm.js +438 -0
- package/src/toolchains/parse-errors.js +258 -0
- package/src/toolchains/registry.js +67 -0
- package/src/toolchains/rgbds/rgbds.js +144 -0
- package/src/toolchains/sdcc/preflight-lint.js +295 -0
- package/src/toolchains/sdcc/sdcc.js +519 -0
- package/src/toolchains/sjasm/sjasm.js +85 -0
- package/src/toolchains/sm83dasm.js +194 -0
- package/src/toolchains/snes-c/snes-c.js +409 -0
- package/src/toolchains/tcc816/tcc816.js +79 -0
- package/src/toolchains/vasm68k/vasm68k.js +138 -0
- package/src/toolchains/wladx/wladx.js +120 -0
- package/src/toolchains/z80dasm.js +303 -0
|
@@ -0,0 +1,2881 @@
|
|
|
1
|
+
;---------------------------------------------------------------------------------
|
|
2
|
+
;
|
|
3
|
+
; Copyright (C) 2012-2024
|
|
4
|
+
; Alekmaul, Nub1604
|
|
5
|
+
;
|
|
6
|
+
; This software is provided 'as-is', without any express or implied
|
|
7
|
+
; warranty. In no event will the authors be held liable for any
|
|
8
|
+
; damages arising from the use of this software.
|
|
9
|
+
;
|
|
10
|
+
; Permission is granted to anyone to use this software for any
|
|
11
|
+
; purpose, including commercial applications, and to alter it and
|
|
12
|
+
; redistribute it freely, subject to the following restrictions:
|
|
13
|
+
;
|
|
14
|
+
; 1. The origin of this software must not be misrepresented; you
|
|
15
|
+
; must not claim that you wrote the original software. If you use
|
|
16
|
+
; this software in a product, an acknowledgment in the product
|
|
17
|
+
; documentation would be appreciated but is not required.
|
|
18
|
+
; 2. Altered source versions must be plainly marked as such, and
|
|
19
|
+
; must not be misrepresented as being the original software.
|
|
20
|
+
; 3. This notice may not be removed or altered from any source
|
|
21
|
+
; distribution.
|
|
22
|
+
;
|
|
23
|
+
; Special thanks to Nub1604 for the slope management
|
|
24
|
+
;
|
|
25
|
+
;---------------------------------------------------------------------------------
|
|
26
|
+
|
|
27
|
+
.DEFINE OB_NULL $FFFF ; null value for linked table
|
|
28
|
+
.DEFINE OB_ID_NULL $0000 ; null value for obj id
|
|
29
|
+
|
|
30
|
+
.DEFINE OB_MAX 80 ; total number of objects in the game
|
|
31
|
+
.DEFINE OB_TYPE_MAX 64 ; total number of type of objects in the game
|
|
32
|
+
|
|
33
|
+
.DEFINE OB_SIZE 64 ; 64 bytes for each object
|
|
34
|
+
|
|
35
|
+
.DEFINE OB_SCR_XLR_CHK -64 ; -64 is the minimum on "virtual" screen x position to update object
|
|
36
|
+
.DEFINE OB_SCR_XRR_CHK 320 ; 256+64 is the maximum on "virtual" screen x position to update object
|
|
37
|
+
.DEFINE OB_SCR_YLR_CHK -64 ; -64 is the minimum on "virtual" screen y position to update object
|
|
38
|
+
.DEFINE OB_SCR_YRR_CHK 288 ; 224+64 is the maximum on "virtual" screen y position to update object
|
|
39
|
+
|
|
40
|
+
.DEFINE OB_SCR_XLE_CHK -32 ; -32 is the minimum on screen x position to display sprite object
|
|
41
|
+
.DEFINE OB_SCR_XRI_CHK 256 ; 256 is the maximum on screen x position to display sprite object
|
|
42
|
+
.DEFINE OB_SCR_YLE_CHK -32 ; -32 is the minimum on screen y position to display sprite object
|
|
43
|
+
.DEFINE OB_SCR_YRI_CHK 224 ; 224 is the maximum on screen y position to display sprite object
|
|
44
|
+
|
|
45
|
+
.DEFINE T_SOLID $FF00
|
|
46
|
+
.DEFINE T_LADDER $0001
|
|
47
|
+
.DEFINE T_FIRES $0002
|
|
48
|
+
.DEFINE T_SPIKE $0004
|
|
49
|
+
.DEFINE T_PLATE $0008
|
|
50
|
+
.DEFINE T_SLOPES $0020
|
|
51
|
+
; $0020 Type Slope 1x1 Up ◢ (action will be climb on it) for tile
|
|
52
|
+
; $0021 Type Slope 1x1 Down ◣ (action will be descend on it) for tile
|
|
53
|
+
; $0022 Type Slope 2x1 lower half Up ◢ (action will be climb on it) for tile
|
|
54
|
+
; $0023 Type Slope 2x1 lower half Down ◣ (action will be descend on it) for tile
|
|
55
|
+
; $0024 Type Slope 2x1 upper half Up ◢ (action will be climb on it) for tile
|
|
56
|
+
; $0025 Type Slope 2x1 upper half Down ◣ (action will be descend on it) for tile
|
|
57
|
+
|
|
58
|
+
.DEFINE ACT_CLIMB $2000
|
|
59
|
+
.DEFINE ACT_DIE $4000
|
|
60
|
+
.DEFINE ACT_BURN $8000
|
|
61
|
+
|
|
62
|
+
.DEFINE GRAVITY 41 ; default values
|
|
63
|
+
.DEFINE MAX_Y_VELOCITY (10*256)
|
|
64
|
+
.DEFINE FRICTION $10
|
|
65
|
+
|
|
66
|
+
.DEFINE FRICTION1D $0100
|
|
67
|
+
|
|
68
|
+
.STRUCT t_objs
|
|
69
|
+
prev DW ; 0 previous object linked list
|
|
70
|
+
next DW ; 2 next object in linked list
|
|
71
|
+
type DB ; 4 type of object, depend of the game
|
|
72
|
+
nID DB ; 5 obj ID in linked list
|
|
73
|
+
|
|
74
|
+
sprnum DW ; 6 sprite oam number of the object (multiple of 4)
|
|
75
|
+
sprid3216 DW ; 8 sprite oam id in sprite oam memory
|
|
76
|
+
sprblk3216 DW ; 10 sprite oam address in sprites tiles memory
|
|
77
|
+
sprflip DB ; 12 sprite flip attribute
|
|
78
|
+
sprpal DB ; 13 sprite palette
|
|
79
|
+
sprframe DW ; 14 current frame
|
|
80
|
+
|
|
81
|
+
xpos DSB 3 ; 16 x position on the screen (3 fixed point)
|
|
82
|
+
ypos DSB 3 ; 19 y position on the screen (3 fixed point)
|
|
83
|
+
|
|
84
|
+
xofs DW ; 22 x offset of the object (from the square 16x16 or 32x32)
|
|
85
|
+
yofs DW ; 24 y offset of the object (from the square 16x16 or 32x32)
|
|
86
|
+
width DW ; 26 width of the object (from the square 16x16 or 32x32)
|
|
87
|
+
height DW ; 28 height of the object (from the square 16x16 or 32x32)
|
|
88
|
+
xmin DW ; 30 min x coordinate for action of object, depends of game (ex: revert direction)
|
|
89
|
+
xmax DW ; 32 max x coordinate for action of object, depends of game (ex: revert direction)
|
|
90
|
+
|
|
91
|
+
xvel DW ; 34 x velocity
|
|
92
|
+
yvel DW ; 36 y velocity
|
|
93
|
+
|
|
94
|
+
tilestand DW ; 38 tile number object is standing on
|
|
95
|
+
tileabove DW ; 40 tile number above object
|
|
96
|
+
tilesprop DW ; 42 tile property stand on
|
|
97
|
+
tilebprop DW ; 44 tile property on left/right side
|
|
98
|
+
|
|
99
|
+
action DW ; 46 current action of the object, depends of game
|
|
100
|
+
status DB ; 48 status of object regarding collision
|
|
101
|
+
tempo DB ; 49 if object needs tempo
|
|
102
|
+
count DB ; 50 if object needs a counter
|
|
103
|
+
dir DB ; 51 if object needs to manage direction
|
|
104
|
+
|
|
105
|
+
parentID DW ; 52 obj ID of parent (useful for projectiles)
|
|
106
|
+
hitpoints DB ; 54 number of hit points of object
|
|
107
|
+
sprrefresh DB ; 55 if object needs sprite to be refresh
|
|
108
|
+
|
|
109
|
+
onscreen DB ; 56 to know if object is on screen or not
|
|
110
|
+
|
|
111
|
+
objnotused DSB 7 ; OB_SIZE-56-1 for future use
|
|
112
|
+
|
|
113
|
+
.ENDST
|
|
114
|
+
|
|
115
|
+
.BASE $00
|
|
116
|
+
.RAMSECTION ".reg_objects7e" BANK $7E SLOT RAMSLOT_0
|
|
117
|
+
|
|
118
|
+
objbuffers INSTANCEOF t_objs OB_MAX ; object struct in memory
|
|
119
|
+
objactives DSW OB_TYPE_MAX ; active object list
|
|
120
|
+
|
|
121
|
+
objfctinit DSB 4*OB_TYPE_MAX ; pointer to init function of objects
|
|
122
|
+
objfctupd DSB 4*OB_TYPE_MAX ; pointer to update function of object
|
|
123
|
+
objfctref DSB 4*OB_TYPE_MAX ; pointer to refresh function of sprite object
|
|
124
|
+
|
|
125
|
+
objtmpbuf DSW (OB_MAX*5)+1 ; temporary buffer for object
|
|
126
|
+
|
|
127
|
+
objunused DW ; buffer of unused objects
|
|
128
|
+
objnewid DW ; new id created for the last object
|
|
129
|
+
objgetid DW ; return value of objNew
|
|
130
|
+
objnextid DB ; each new object is given a unique nID
|
|
131
|
+
|
|
132
|
+
objfctcall DSB 2 ; low address for C function call
|
|
133
|
+
objfctcallh DSB 2 ; high address for C function call
|
|
134
|
+
|
|
135
|
+
objptr DW ; pointer to current object
|
|
136
|
+
objcidx DW ; index of loop object
|
|
137
|
+
|
|
138
|
+
objgravity DW ; default gravity for objects
|
|
139
|
+
objfriction DW ; default friction for objects
|
|
140
|
+
|
|
141
|
+
objtokill DB ; =1 if need to kill object
|
|
142
|
+
|
|
143
|
+
objneedrefresh DB ; =1 if we need to refresh all spritesbecause object is out of screen
|
|
144
|
+
|
|
145
|
+
objtmp1 DW ; temporary vars for stuffs
|
|
146
|
+
objtmp2 DW
|
|
147
|
+
objtmp3 DW
|
|
148
|
+
objtmp4 DW
|
|
149
|
+
|
|
150
|
+
.ENDS
|
|
151
|
+
|
|
152
|
+
.BASE BASE_0
|
|
153
|
+
.SECTION ".objects0_text" superfree
|
|
154
|
+
|
|
155
|
+
.accu 16
|
|
156
|
+
.index 16
|
|
157
|
+
.16bit
|
|
158
|
+
|
|
159
|
+
;---------------------------------------------------------------------------------
|
|
160
|
+
; void objInitEngine(void)
|
|
161
|
+
objInitEngine:
|
|
162
|
+
php
|
|
163
|
+
phb
|
|
164
|
+
phx
|
|
165
|
+
phy
|
|
166
|
+
|
|
167
|
+
sep #$20 ; change bank for object bank
|
|
168
|
+
lda #$7e
|
|
169
|
+
pha
|
|
170
|
+
plb
|
|
171
|
+
|
|
172
|
+
rep #$20
|
|
173
|
+
ldx #0
|
|
174
|
+
|
|
175
|
+
_oieR0:
|
|
176
|
+
stz objbuffers,x ; clear all object memory
|
|
177
|
+
inx
|
|
178
|
+
inx
|
|
179
|
+
txa
|
|
180
|
+
cmp #(OB_SIZE*(OB_MAX))
|
|
181
|
+
bne _oieR0
|
|
182
|
+
|
|
183
|
+
lda #$0000
|
|
184
|
+
ldy #$0001
|
|
185
|
+
|
|
186
|
+
_oieR1:
|
|
187
|
+
tax
|
|
188
|
+
stz objbuffers.1.nID,x ;init and link up all the unused objects
|
|
189
|
+
tya
|
|
190
|
+
sta objbuffers.1.next,x
|
|
191
|
+
txa
|
|
192
|
+
cmp #(OB_SIZE*(OB_MAX-2)) ; if max reached, go away
|
|
193
|
+
beq _oieR2
|
|
194
|
+
iny
|
|
195
|
+
clc
|
|
196
|
+
adc #OB_SIZE
|
|
197
|
+
bra _oieR1
|
|
198
|
+
|
|
199
|
+
_oieR2:
|
|
200
|
+
tya ; because obj size is 64
|
|
201
|
+
asl a
|
|
202
|
+
asl a
|
|
203
|
+
asl a
|
|
204
|
+
asl a
|
|
205
|
+
asl a
|
|
206
|
+
asl a
|
|
207
|
+
tax
|
|
208
|
+
lda #OB_NULL
|
|
209
|
+
sta objbuffers.1.next,x ; terminate linked list
|
|
210
|
+
stz objunused ; top of unused list is object 0
|
|
211
|
+
|
|
212
|
+
ldx #(2*(OB_TYPE_MAX-1))
|
|
213
|
+
_oieR3:
|
|
214
|
+
sta objactives,x ; each active object to OB_NULL
|
|
215
|
+
dex
|
|
216
|
+
dex
|
|
217
|
+
bne _oieR3
|
|
218
|
+
sta objactives,x ; for last one
|
|
219
|
+
|
|
220
|
+
stz.w objnewid
|
|
221
|
+
stz.w objgetid
|
|
222
|
+
|
|
223
|
+
sep #$20
|
|
224
|
+
lda #$1
|
|
225
|
+
sta objnextid
|
|
226
|
+
|
|
227
|
+
rep #$20
|
|
228
|
+
lda #GRAVITY ; set default values for gravity and other variables
|
|
229
|
+
sta objgravity
|
|
230
|
+
lda #FRICTION
|
|
231
|
+
sta objfriction
|
|
232
|
+
|
|
233
|
+
ply
|
|
234
|
+
plx
|
|
235
|
+
plb
|
|
236
|
+
plp
|
|
237
|
+
|
|
238
|
+
rtl
|
|
239
|
+
|
|
240
|
+
;---------------------------------------------------------------------------------
|
|
241
|
+
; void objInitGravity(u16 objgravity, u16 objfriction)
|
|
242
|
+
objInitGravity:
|
|
243
|
+
php
|
|
244
|
+
phb
|
|
245
|
+
|
|
246
|
+
sep #$20 ; change bank for object bank
|
|
247
|
+
lda #$7e
|
|
248
|
+
pha
|
|
249
|
+
plb
|
|
250
|
+
|
|
251
|
+
lda 7,s ; get gravity (5+2)
|
|
252
|
+
sta objgravity
|
|
253
|
+
lda 8,s ; get friction (6+2)
|
|
254
|
+
sta objfriction
|
|
255
|
+
rep #$20
|
|
256
|
+
|
|
257
|
+
plb
|
|
258
|
+
plp
|
|
259
|
+
|
|
260
|
+
rtl
|
|
261
|
+
|
|
262
|
+
;---------------------------------------------------------------------------------
|
|
263
|
+
; void objInitFunctions(u8 objtype, void *initfct,void *updfct,void *reffct)
|
|
264
|
+
; 5 6-9 10-13 14-16
|
|
265
|
+
objInitFunctions:
|
|
266
|
+
php
|
|
267
|
+
phb
|
|
268
|
+
|
|
269
|
+
phx
|
|
270
|
+
|
|
271
|
+
sep #$20 ; go to object bank
|
|
272
|
+
lda #$7e
|
|
273
|
+
pha
|
|
274
|
+
plb
|
|
275
|
+
|
|
276
|
+
lda 8,s ; get type of object (x4 to have correct entry) (5+1+2)
|
|
277
|
+
rep #$20
|
|
278
|
+
and #$00ff
|
|
279
|
+
asl a
|
|
280
|
+
asl a
|
|
281
|
+
tax
|
|
282
|
+
|
|
283
|
+
lda 9,s ; get bank + data init function address (6+1+2 & 8+1+2)
|
|
284
|
+
sta objfctinit,x
|
|
285
|
+
lda 11,s
|
|
286
|
+
sta objfctinit+2,x
|
|
287
|
+
|
|
288
|
+
lda 13,s ; get bank + data update function address (10+1+2 & 12+1+2)
|
|
289
|
+
sta objfctupd,x
|
|
290
|
+
lda 15,s
|
|
291
|
+
sta objfctupd+2,x
|
|
292
|
+
|
|
293
|
+
lda 17,s ; get bank + data update function address (14+1+2 & 16+1+2)
|
|
294
|
+
sta objfctref,x
|
|
295
|
+
lda 19,s
|
|
296
|
+
sta objfctref+2,x
|
|
297
|
+
|
|
298
|
+
plx
|
|
299
|
+
plb
|
|
300
|
+
plp
|
|
301
|
+
rtl
|
|
302
|
+
|
|
303
|
+
;---------------------------------------------------------------------------------
|
|
304
|
+
; u16 objNew (u8 objtype, u16 x, u16 y)
|
|
305
|
+
; 5 6-7 8-9
|
|
306
|
+
objNew:
|
|
307
|
+
php
|
|
308
|
+
phb
|
|
309
|
+
|
|
310
|
+
phx
|
|
311
|
+
phy
|
|
312
|
+
|
|
313
|
+
sep #$20 ; go to bank object
|
|
314
|
+
lda #$7e
|
|
315
|
+
pha
|
|
316
|
+
plb
|
|
317
|
+
|
|
318
|
+
lda 10,s ; get object type (5+1+2+2)
|
|
319
|
+
|
|
320
|
+
rep #$20
|
|
321
|
+
and #$00ff
|
|
322
|
+
asl a
|
|
323
|
+
tay
|
|
324
|
+
|
|
325
|
+
lda objunused ; if no object left, return null id value
|
|
326
|
+
cmp #OB_NULL
|
|
327
|
+
beq _oiN0
|
|
328
|
+
bra _oiN1
|
|
329
|
+
|
|
330
|
+
_oiN0:
|
|
331
|
+
lda #OB_ID_NULL ; put OB_ID_NULL and leave function
|
|
332
|
+
sta tcc__r0
|
|
333
|
+
bra _oiNEnd
|
|
334
|
+
|
|
335
|
+
_oiN1:
|
|
336
|
+
sta objnewid
|
|
337
|
+
asl a ; size 64
|
|
338
|
+
asl a
|
|
339
|
+
asl a
|
|
340
|
+
asl a
|
|
341
|
+
asl a
|
|
342
|
+
asl a
|
|
343
|
+
tax
|
|
344
|
+
lda objbuffers.1.next,x ; get the next unused object
|
|
345
|
+
sta objunused
|
|
346
|
+
|
|
347
|
+
lda #OB_NULL
|
|
348
|
+
sta objbuffers.1.prev,x
|
|
349
|
+
lda objactives,y ; add new object to the top of it's active list
|
|
350
|
+
sta objbuffers.1.next,x
|
|
351
|
+
|
|
352
|
+
phx
|
|
353
|
+
cmp #OB_NULL
|
|
354
|
+
beq _oiN2
|
|
355
|
+
asl a
|
|
356
|
+
asl a
|
|
357
|
+
asl a
|
|
358
|
+
asl a
|
|
359
|
+
asl a
|
|
360
|
+
asl a
|
|
361
|
+
tax
|
|
362
|
+
lda objnewid
|
|
363
|
+
sta objbuffers.1.prev,x
|
|
364
|
+
|
|
365
|
+
_oiN2:
|
|
366
|
+
lda objnewid
|
|
367
|
+
sta objactives,y
|
|
368
|
+
plx
|
|
369
|
+
|
|
370
|
+
sep #$20 ; init object
|
|
371
|
+
lda 10,s
|
|
372
|
+
sta objbuffers.1.type,x
|
|
373
|
+
lda objnextid
|
|
374
|
+
sta objbuffers.1.nID,x
|
|
375
|
+
inc a
|
|
376
|
+
bne _oiN3 ; zero is invalid nID (for unused objects)
|
|
377
|
+
inc a
|
|
378
|
+
_oiN3:
|
|
379
|
+
sta objnextid
|
|
380
|
+
|
|
381
|
+
rep #$20
|
|
382
|
+
lda 11,s ; store coordinates x
|
|
383
|
+
sta objbuffers.1.xpos+1,x
|
|
384
|
+
lda 13,s ; store coordinates y
|
|
385
|
+
sta objbuffers.1.ypos+1,x
|
|
386
|
+
|
|
387
|
+
sep #$20
|
|
388
|
+
lda objbuffers.1.nID,x ; calculate (pObj->nID<<8) + newObjIdx
|
|
389
|
+
|
|
390
|
+
rep #$20
|
|
391
|
+
and #$00ff ; build the object handle (combined nID and object index in buffer)
|
|
392
|
+
xba
|
|
393
|
+
clc
|
|
394
|
+
adc objnewid
|
|
395
|
+
sta tcc__r0
|
|
396
|
+
sta objgetid
|
|
397
|
+
|
|
398
|
+
_oiNEnd:
|
|
399
|
+
ply
|
|
400
|
+
plx
|
|
401
|
+
plb
|
|
402
|
+
plp
|
|
403
|
+
|
|
404
|
+
rtl
|
|
405
|
+
|
|
406
|
+
;---------------------------------------------------------------------------------
|
|
407
|
+
; long call to the subroutine pointed to in objfctcall, needed for C functions
|
|
408
|
+
jslcallfct:
|
|
409
|
+
sep #$20
|
|
410
|
+
lda.l objfctcall + 2
|
|
411
|
+
pha
|
|
412
|
+
rep #$20
|
|
413
|
+
lda.l objfctcall
|
|
414
|
+
dec a
|
|
415
|
+
pha
|
|
416
|
+
rtl
|
|
417
|
+
|
|
418
|
+
;---------------------------------------------------------------------------------
|
|
419
|
+
; void objGetPointer(u16 objhandle)
|
|
420
|
+
objGetPointer:
|
|
421
|
+
php
|
|
422
|
+
phb
|
|
423
|
+
|
|
424
|
+
phx
|
|
425
|
+
phy
|
|
426
|
+
|
|
427
|
+
sep #$20 ; bank address of objects
|
|
428
|
+
lda #$7e
|
|
429
|
+
pha
|
|
430
|
+
plb
|
|
431
|
+
|
|
432
|
+
rep #$20 ; grab the nID value from the id (top word of the id)
|
|
433
|
+
lda 10,s ; 5+1+2+2
|
|
434
|
+
xba
|
|
435
|
+
and #$00ff
|
|
436
|
+
|
|
437
|
+
sta objptr
|
|
438
|
+
lda 10,s
|
|
439
|
+
and #$00ff ; grab the ptr to the object (from index, lower word of id 5+1+2+2)
|
|
440
|
+
tax
|
|
441
|
+
inx ; grab value for return value
|
|
442
|
+
asl a ; adapt to object size 64
|
|
443
|
+
asl a
|
|
444
|
+
asl a
|
|
445
|
+
asl a
|
|
446
|
+
asl a
|
|
447
|
+
asl a
|
|
448
|
+
tay
|
|
449
|
+
sep #$20
|
|
450
|
+
lda objbuffers.1.nID,y
|
|
451
|
+
rep #$20
|
|
452
|
+
and #$00ff
|
|
453
|
+
clc
|
|
454
|
+
cmp objptr ; is object still valid?
|
|
455
|
+
beq _oigp1
|
|
456
|
+
|
|
457
|
+
ldx #0 ; no... object has died and it's buffer slot has been reallocated
|
|
458
|
+
_oigp1:
|
|
459
|
+
txa
|
|
460
|
+
sta objptr
|
|
461
|
+
|
|
462
|
+
ply
|
|
463
|
+
plx
|
|
464
|
+
plb
|
|
465
|
+
plp
|
|
466
|
+
rtl
|
|
467
|
+
|
|
468
|
+
;---------------------------------------------------------------------------------
|
|
469
|
+
; void objKill(u16 objhandle)
|
|
470
|
+
objKill:
|
|
471
|
+
php
|
|
472
|
+
phb
|
|
473
|
+
|
|
474
|
+
phx
|
|
475
|
+
phy
|
|
476
|
+
|
|
477
|
+
sep #$20 ; got o object bank
|
|
478
|
+
lda #$7e
|
|
479
|
+
pha
|
|
480
|
+
plb
|
|
481
|
+
|
|
482
|
+
rep #$20 ; grab the nID value from the id (top word of the id)
|
|
483
|
+
lda 10,s ; handle of object (5+1+2+2)
|
|
484
|
+
pha
|
|
485
|
+
jsl objGetPointer
|
|
486
|
+
pla
|
|
487
|
+
|
|
488
|
+
lda objptr
|
|
489
|
+
bne _oik1 ; if NULL, object is already dead
|
|
490
|
+
brl _oikend
|
|
491
|
+
|
|
492
|
+
_oik1:
|
|
493
|
+
dec a ; point to correct object (size 64)
|
|
494
|
+
asl a
|
|
495
|
+
asl a
|
|
496
|
+
asl a
|
|
497
|
+
asl a
|
|
498
|
+
asl a
|
|
499
|
+
asl a
|
|
500
|
+
tax
|
|
501
|
+
sta objptr
|
|
502
|
+
|
|
503
|
+
lda objbuffers.1.prev,x ; remove it from its active list
|
|
504
|
+
|
|
505
|
+
cmp #OB_NULL
|
|
506
|
+
bne _oik2
|
|
507
|
+
|
|
508
|
+
sep #$20 ; this object was at the top of its list... move next one up to top
|
|
509
|
+
lda objbuffers.1.type,x
|
|
510
|
+
rep #$20
|
|
511
|
+
and #$00ff
|
|
512
|
+
asl a
|
|
513
|
+
tay
|
|
514
|
+
lda objbuffers.1.next,x
|
|
515
|
+
sta objactives,y
|
|
516
|
+
|
|
517
|
+
cmp #OB_NULL
|
|
518
|
+
beq _oik3
|
|
519
|
+
|
|
520
|
+
asl a
|
|
521
|
+
asl a
|
|
522
|
+
asl a
|
|
523
|
+
asl a
|
|
524
|
+
asl a
|
|
525
|
+
asl a
|
|
526
|
+
tax
|
|
527
|
+
lda #OB_NULL
|
|
528
|
+
sta objbuffers.1.prev,x
|
|
529
|
+
bra _oik3
|
|
530
|
+
|
|
531
|
+
_oik2:
|
|
532
|
+
lda objbuffers.1.next,x
|
|
533
|
+
tay
|
|
534
|
+
lda objbuffers.1.prev,x
|
|
535
|
+
asl a
|
|
536
|
+
asl a
|
|
537
|
+
asl a
|
|
538
|
+
asl a
|
|
539
|
+
asl a
|
|
540
|
+
asl a
|
|
541
|
+
tax
|
|
542
|
+
tya
|
|
543
|
+
sta objbuffers.1.next,x
|
|
544
|
+
|
|
545
|
+
cmp #OB_NULL
|
|
546
|
+
beq _oik3
|
|
547
|
+
|
|
548
|
+
ldx objptr
|
|
549
|
+
lda objbuffers.1.prev,x
|
|
550
|
+
tay
|
|
551
|
+
lda objbuffers.1.next,x
|
|
552
|
+
asl a
|
|
553
|
+
asl a
|
|
554
|
+
asl a
|
|
555
|
+
asl a
|
|
556
|
+
asl a
|
|
557
|
+
asl a
|
|
558
|
+
tax
|
|
559
|
+
tya
|
|
560
|
+
sta objbuffers.1.prev,x
|
|
561
|
+
|
|
562
|
+
_oik3:
|
|
563
|
+
ldx objptr ; add the object to the unused list
|
|
564
|
+
lda objunused
|
|
565
|
+
sta objbuffers.1.next,x
|
|
566
|
+
lda 10,s
|
|
567
|
+
and #$00ff
|
|
568
|
+
sta objunused
|
|
569
|
+
|
|
570
|
+
ldy #4
|
|
571
|
+
_oik4: ; init memory of object
|
|
572
|
+
stz objbuffers.1.type,x
|
|
573
|
+
inx
|
|
574
|
+
inx
|
|
575
|
+
iny
|
|
576
|
+
iny
|
|
577
|
+
cpy #OB_SIZE
|
|
578
|
+
bne _oik4
|
|
579
|
+
|
|
580
|
+
_oikend:
|
|
581
|
+
ply
|
|
582
|
+
plx
|
|
583
|
+
plb
|
|
584
|
+
plp
|
|
585
|
+
|
|
586
|
+
rtl
|
|
587
|
+
|
|
588
|
+
;---------------------------------------------------------------------------------
|
|
589
|
+
; void objKillAll(void)
|
|
590
|
+
objKillAll:
|
|
591
|
+
php
|
|
592
|
+
phb
|
|
593
|
+
|
|
594
|
+
phx
|
|
595
|
+
phy
|
|
596
|
+
|
|
597
|
+
sep #$20 ; go to object bank
|
|
598
|
+
lda #$7e
|
|
599
|
+
pha
|
|
600
|
+
plb
|
|
601
|
+
|
|
602
|
+
rep #$20
|
|
603
|
+
ldy #$0000
|
|
604
|
+
|
|
605
|
+
_oikal1:
|
|
606
|
+
lda objactives,y ; walk through entire active buffer
|
|
607
|
+
_oikal2:
|
|
608
|
+
sta objcidx
|
|
609
|
+
cmp #OB_NULL ; there are still object left in the list
|
|
610
|
+
beq _oikal3
|
|
611
|
+
asl a
|
|
612
|
+
asl a
|
|
613
|
+
asl a
|
|
614
|
+
asl a
|
|
615
|
+
asl a
|
|
616
|
+
asl a
|
|
617
|
+
tax
|
|
618
|
+
lda objbuffers.1.next,x
|
|
619
|
+
pha
|
|
620
|
+
|
|
621
|
+
sep #$20 ; kill this object
|
|
622
|
+
lda objbuffers.1.nID,x
|
|
623
|
+
rep #$20
|
|
624
|
+
and #$00ff
|
|
625
|
+
xba
|
|
626
|
+
clc
|
|
627
|
+
adc objcidx
|
|
628
|
+
pha
|
|
629
|
+
jsl objKill
|
|
630
|
+
pla
|
|
631
|
+
|
|
632
|
+
pla
|
|
633
|
+
bra _oikal2
|
|
634
|
+
|
|
635
|
+
_oikal3:
|
|
636
|
+
iny
|
|
637
|
+
iny
|
|
638
|
+
cpy #OB_TYPE_MAX*2 ; loop for all objects
|
|
639
|
+
bne _oikal1
|
|
640
|
+
|
|
641
|
+
stz.w objnewid
|
|
642
|
+
stz.w objgetid
|
|
643
|
+
stz.w objunused
|
|
644
|
+
|
|
645
|
+
sep #$20
|
|
646
|
+
lda #$1
|
|
647
|
+
sta objnextid
|
|
648
|
+
|
|
649
|
+
ply
|
|
650
|
+
plx
|
|
651
|
+
plb
|
|
652
|
+
plp
|
|
653
|
+
rtl
|
|
654
|
+
|
|
655
|
+
objOamRefreshAll:
|
|
656
|
+
php
|
|
657
|
+
phx
|
|
658
|
+
|
|
659
|
+
ldx #$0000
|
|
660
|
+
_oora:
|
|
661
|
+
sep #$20
|
|
662
|
+
lda #$1
|
|
663
|
+
sta oambuffer.1.oamrefresh,x ; get refresh attribute
|
|
664
|
+
rep #$20
|
|
665
|
+
txa
|
|
666
|
+
clc
|
|
667
|
+
adc #16 ; to be on correct index (16 bytes per oam)
|
|
668
|
+
tax
|
|
669
|
+
cmp #128*16
|
|
670
|
+
bne _oora
|
|
671
|
+
|
|
672
|
+
plx
|
|
673
|
+
plp
|
|
674
|
+
rts
|
|
675
|
+
|
|
676
|
+
;---------------------------------------------------------------------------------
|
|
677
|
+
; void objUpdateAll(void)
|
|
678
|
+
objUpdateAll:
|
|
679
|
+
php
|
|
680
|
+
phb
|
|
681
|
+
|
|
682
|
+
phx
|
|
683
|
+
phy
|
|
684
|
+
|
|
685
|
+
sep #$20 ; goto object bank
|
|
686
|
+
lda #$7e
|
|
687
|
+
pha
|
|
688
|
+
plb
|
|
689
|
+
|
|
690
|
+
stz objneedrefresh ; no global refresh needed
|
|
691
|
+
|
|
692
|
+
rep #$20
|
|
693
|
+
ldx #$0000
|
|
694
|
+
|
|
695
|
+
_oiual1:
|
|
696
|
+
lda objactives,x ; walk through entire active buffer
|
|
697
|
+
phx
|
|
698
|
+
_oiual10:
|
|
699
|
+
sta objcidx ; to keep value of current index
|
|
700
|
+
cmp #OB_NULL ; there are still object left in the list
|
|
701
|
+
bne _oiual3
|
|
702
|
+
brl _oiual2
|
|
703
|
+
_oiual3:
|
|
704
|
+
asl a
|
|
705
|
+
asl a
|
|
706
|
+
asl a
|
|
707
|
+
asl a
|
|
708
|
+
asl a
|
|
709
|
+
asl a
|
|
710
|
+
tax ; x is now the current object
|
|
711
|
+
|
|
712
|
+
lda objbuffers.1.next,x ; grab the next object to update
|
|
713
|
+
pha ; will be restore at the end
|
|
714
|
+
|
|
715
|
+
lda objbuffers.1.xpos+1,x
|
|
716
|
+
sec
|
|
717
|
+
sbc.l x_pos
|
|
718
|
+
|
|
719
|
+
cmp.w #OB_SCR_XRR_CHK
|
|
720
|
+
bcc _oiual3y ; x is lower than map max
|
|
721
|
+
cmp.w #OB_SCR_XLR_CHK
|
|
722
|
+
bcc _oiual3y1 ; but x is lower than map min
|
|
723
|
+
|
|
724
|
+
_oiual3y: ; check now y coordinates
|
|
725
|
+
lda objbuffers.1.ypos+1,x
|
|
726
|
+
sec
|
|
727
|
+
sbc.l y_pos
|
|
728
|
+
|
|
729
|
+
cmp.w #OB_SCR_YRR_CHK
|
|
730
|
+
bcc _oiual32 ; y is lower than map max
|
|
731
|
+
cmp.w #OB_SCR_YLR_CHK
|
|
732
|
+
bcs _oiual32 ; but y is greater than map min
|
|
733
|
+
|
|
734
|
+
_oiual3y1:
|
|
735
|
+
jmp _oial4
|
|
736
|
+
|
|
737
|
+
_oiual32: ; *** now we test if we are really on screen ***
|
|
738
|
+
lda objbuffers.1.xpos+1,x
|
|
739
|
+
sec
|
|
740
|
+
sbc.l x_pos
|
|
741
|
+
cmp.w #OB_SCR_XRI_CHK
|
|
742
|
+
bcc _oiual3sy ; x is lower than map max
|
|
743
|
+
cmp.w #OB_SCR_XLE_CHK
|
|
744
|
+
bcc _oiual3sy1 ; but x is lower than map min
|
|
745
|
+
|
|
746
|
+
_oiual3sy: ; check now y coordinates
|
|
747
|
+
lda objbuffers.1.ypos+1,x
|
|
748
|
+
sec
|
|
749
|
+
sbc.l y_pos
|
|
750
|
+
|
|
751
|
+
cmp.w #OB_SCR_YRI_CHK
|
|
752
|
+
bcc _oiuals32 ; y is lower than map max
|
|
753
|
+
cmp.w #OB_SCR_YLE_CHK
|
|
754
|
+
bcs _oiuals32 ; but y is greater than map min
|
|
755
|
+
|
|
756
|
+
_oiual3sy1:
|
|
757
|
+
sep #$20 ; check if it was previously on screen to refresh all the objects
|
|
758
|
+
lda objbuffers.1.onscreen,x
|
|
759
|
+
beq _oiual3sy11 ; no ? no need to refresh
|
|
760
|
+
stz objbuffers.1.onscreen,x
|
|
761
|
+
lda objneedrefresh ; if we have noticed a global refresh previously, don't do it again
|
|
762
|
+
bne _oiual3sy11
|
|
763
|
+
lda #1
|
|
764
|
+
sta objneedrefresh
|
|
765
|
+
jsr objOamRefreshAll ; do a global refresh of sprites
|
|
766
|
+
|
|
767
|
+
_oiual3sy11: ; here we are not on screen but we manage object update
|
|
768
|
+
bra _oiual321
|
|
769
|
+
|
|
770
|
+
_oiuals32:
|
|
771
|
+
sep #$20
|
|
772
|
+
lda objbuffers.1.onscreen,x
|
|
773
|
+
bne _oiual321 ; no ? we need to refresh
|
|
774
|
+
lda #$1
|
|
775
|
+
sta objbuffers.1.onscreen,x ; store that object is on screen
|
|
776
|
+
lda objneedrefresh ; if we have noticed a global refresh previously, don't do it again
|
|
777
|
+
bne _oiual321
|
|
778
|
+
lda #1
|
|
779
|
+
sta objneedrefresh
|
|
780
|
+
jsr objOamRefreshAll ; do a global refresh of sprites
|
|
781
|
+
_oiual321:
|
|
782
|
+
lda objbuffers.1.type,x
|
|
783
|
+
rep #$20
|
|
784
|
+
and #$00ff
|
|
785
|
+
asl a
|
|
786
|
+
asl a
|
|
787
|
+
tay
|
|
788
|
+
|
|
789
|
+
lda objfctupd,y ; get address of update function and call it
|
|
790
|
+
sta objfctcall
|
|
791
|
+
lda objfctupd+2,y
|
|
792
|
+
sta objfctcallh
|
|
793
|
+
|
|
794
|
+
lda objcidx
|
|
795
|
+
pha
|
|
796
|
+
|
|
797
|
+
sep #$20
|
|
798
|
+
stz objtokill ; not killing object for now
|
|
799
|
+
jsl jslcallfct
|
|
800
|
+
rep #$20
|
|
801
|
+
pla
|
|
802
|
+
|
|
803
|
+
sep #$20
|
|
804
|
+
lda objtokill ; object returned that it is now dead
|
|
805
|
+
beq _oial4
|
|
806
|
+
|
|
807
|
+
_oial41:
|
|
808
|
+
rep #$20
|
|
809
|
+
lda objcidx
|
|
810
|
+
asl a
|
|
811
|
+
asl a
|
|
812
|
+
asl a
|
|
813
|
+
asl a
|
|
814
|
+
asl a
|
|
815
|
+
asl a
|
|
816
|
+
tax
|
|
817
|
+
sep #$20
|
|
818
|
+
stz objbuffers.1.onscreen,x ; remove it from the screen
|
|
819
|
+
lda objbuffers.1.nID,x
|
|
820
|
+
rep #$20
|
|
821
|
+
and #$00ff
|
|
822
|
+
xba
|
|
823
|
+
clc
|
|
824
|
+
adc objcidx
|
|
825
|
+
pha
|
|
826
|
+
jsl objKill
|
|
827
|
+
pla
|
|
828
|
+
|
|
829
|
+
sep #$20
|
|
830
|
+
lda objneedrefresh ; it is dead, so remove sprite from screen
|
|
831
|
+
bne _oial4 ; if we have noticed a global refresh previously, don't do it again
|
|
832
|
+
lda #1
|
|
833
|
+
sta objneedrefresh
|
|
834
|
+
jsr objOamRefreshAll ; do a global refresh of sprites
|
|
835
|
+
|
|
836
|
+
_oial4:
|
|
837
|
+
rep #$20 ; goto next object (saved at beginning)
|
|
838
|
+
pla
|
|
839
|
+
brl _oiual10
|
|
840
|
+
|
|
841
|
+
_oiual2:
|
|
842
|
+
plx
|
|
843
|
+
inx
|
|
844
|
+
inx
|
|
845
|
+
cpx #OB_TYPE_MAX*2 ; loop with all type of objects
|
|
846
|
+
beq _oiuaend
|
|
847
|
+
brl _oiual1
|
|
848
|
+
|
|
849
|
+
_oiuaend:
|
|
850
|
+
ply
|
|
851
|
+
plx
|
|
852
|
+
plb
|
|
853
|
+
plp
|
|
854
|
+
rtl
|
|
855
|
+
|
|
856
|
+
;---------------------------------------------------------------------------------
|
|
857
|
+
; void objRefreshAll(void)
|
|
858
|
+
objRefreshAll:
|
|
859
|
+
php
|
|
860
|
+
phb
|
|
861
|
+
|
|
862
|
+
phx
|
|
863
|
+
phy
|
|
864
|
+
|
|
865
|
+
sep #$20 ; goto object bank
|
|
866
|
+
lda #$7e
|
|
867
|
+
pha
|
|
868
|
+
plb
|
|
869
|
+
|
|
870
|
+
stz objneedrefresh ; no global refresh needed
|
|
871
|
+
|
|
872
|
+
rep #$20
|
|
873
|
+
ldx #$0000
|
|
874
|
+
|
|
875
|
+
_oiral1:
|
|
876
|
+
lda objactives,x ; walk through entire active buffer
|
|
877
|
+
phx
|
|
878
|
+
_oiral10:
|
|
879
|
+
sta objcidx ; to keep value of current index
|
|
880
|
+
cmp #OB_NULL ; there are still object left in the list
|
|
881
|
+
bne _oiral3
|
|
882
|
+
brl _oiral2
|
|
883
|
+
_oiral3:
|
|
884
|
+
asl a
|
|
885
|
+
asl a
|
|
886
|
+
asl a
|
|
887
|
+
asl a
|
|
888
|
+
asl a
|
|
889
|
+
asl a
|
|
890
|
+
tax ; x is now the current object
|
|
891
|
+
|
|
892
|
+
lda objbuffers.1.next,x ; grab the next object to update
|
|
893
|
+
pha ; will be restore at the end
|
|
894
|
+
|
|
895
|
+
sep #$20 ; check if it was previously on screen to refresh all the objects
|
|
896
|
+
lda objbuffers.1.onscreen,x
|
|
897
|
+
bne _oiral32 ; no ? no need to refresh
|
|
898
|
+
|
|
899
|
+
rep #$20
|
|
900
|
+
bra _oiral31
|
|
901
|
+
|
|
902
|
+
_oiral32:
|
|
903
|
+
lda objbuffers.1.type,x
|
|
904
|
+
rep #$20
|
|
905
|
+
and #$00ff
|
|
906
|
+
asl a
|
|
907
|
+
asl a
|
|
908
|
+
tay
|
|
909
|
+
|
|
910
|
+
lda objfctref,y ; get address of update function and call it
|
|
911
|
+
sta objfctcall
|
|
912
|
+
lda objfctref+2,y
|
|
913
|
+
sta objfctcallh
|
|
914
|
+
|
|
915
|
+
lda objcidx
|
|
916
|
+
pha
|
|
917
|
+
|
|
918
|
+
sep #$20
|
|
919
|
+
jsl jslcallfct
|
|
920
|
+
rep #$20
|
|
921
|
+
pla
|
|
922
|
+
|
|
923
|
+
_oiral31:
|
|
924
|
+
pla
|
|
925
|
+
brl _oiral10
|
|
926
|
+
|
|
927
|
+
_oiral2:
|
|
928
|
+
plx
|
|
929
|
+
inx
|
|
930
|
+
inx
|
|
931
|
+
cpx #OB_TYPE_MAX*2 ; loop with all type of objects
|
|
932
|
+
beq _oiraend
|
|
933
|
+
brl _oiral1
|
|
934
|
+
|
|
935
|
+
_oiraend:
|
|
936
|
+
ply
|
|
937
|
+
plx
|
|
938
|
+
plb
|
|
939
|
+
plp
|
|
940
|
+
rtl
|
|
941
|
+
|
|
942
|
+
.ENDS
|
|
943
|
+
|
|
944
|
+
.SECTION ".objects1_text" superfree
|
|
945
|
+
|
|
946
|
+
;---------------------------------------------------------------------------------
|
|
947
|
+
; void objCollidMap(u16 objhandle)
|
|
948
|
+
objCollidMap:
|
|
949
|
+
php
|
|
950
|
+
phb
|
|
951
|
+
|
|
952
|
+
phx
|
|
953
|
+
phy
|
|
954
|
+
|
|
955
|
+
sep #$20 ; go to bank objects
|
|
956
|
+
lda #$7e
|
|
957
|
+
pha
|
|
958
|
+
plb
|
|
959
|
+
|
|
960
|
+
rep #$20
|
|
961
|
+
lda 10,s ; grad the index of object (5+1+2+2)
|
|
962
|
+
asl a
|
|
963
|
+
asl a
|
|
964
|
+
asl a
|
|
965
|
+
asl a
|
|
966
|
+
asl a
|
|
967
|
+
asl a
|
|
968
|
+
tax
|
|
969
|
+
sta objtmp2 ; to keep global handle for object
|
|
970
|
+
|
|
971
|
+
lda objbuffers.1.yvel,x ; if yvel>=0 -> if object is falling
|
|
972
|
+
bpl _oicm1
|
|
973
|
+
jmp _oicmtstyn
|
|
974
|
+
_oicm1:
|
|
975
|
+
xba ; compute ypos
|
|
976
|
+
and #$00FF
|
|
977
|
+
clc
|
|
978
|
+
adc objbuffers.1.ypos+1,x
|
|
979
|
+
clc
|
|
980
|
+
adc objbuffers.1.yofs,x
|
|
981
|
+
clc
|
|
982
|
+
adc objbuffers.1.height,x
|
|
983
|
+
bpl + ; if y<0, put it to 0 *FIX 221130 *
|
|
984
|
+
lda #0000
|
|
985
|
+
|
|
986
|
+
+ lsr a
|
|
987
|
+
lsr a
|
|
988
|
+
and #$FFFE
|
|
989
|
+
tay
|
|
990
|
+
|
|
991
|
+
lda objbuffers.1.xpos+1,x
|
|
992
|
+
clc
|
|
993
|
+
adc objbuffers.1.xofs,x
|
|
994
|
+
pha
|
|
995
|
+
|
|
996
|
+
and #$0007 ; compute the number of tiles to test
|
|
997
|
+
clc
|
|
998
|
+
adc objbuffers.1.width,x
|
|
999
|
+
dec a
|
|
1000
|
+
lsr a
|
|
1001
|
+
lsr a
|
|
1002
|
+
lsr a
|
|
1003
|
+
inc a
|
|
1004
|
+
sta objtmp1
|
|
1005
|
+
|
|
1006
|
+
pla ; compute the offset line for y
|
|
1007
|
+
lsr a
|
|
1008
|
+
lsr a
|
|
1009
|
+
and #$FFFE
|
|
1010
|
+
clc
|
|
1011
|
+
adc.w mapadrrowlut, y
|
|
1012
|
+
tay
|
|
1013
|
+
|
|
1014
|
+
clc
|
|
1015
|
+
adc maptile_L1d ; get direct rom value
|
|
1016
|
+
tax
|
|
1017
|
+
phb
|
|
1018
|
+
sep #$20
|
|
1019
|
+
lda maptile_L1b.b
|
|
1020
|
+
pha
|
|
1021
|
+
plb
|
|
1022
|
+
rep #$20
|
|
1023
|
+
lda 0,x
|
|
1024
|
+
plb
|
|
1025
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1026
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1027
|
+
tax
|
|
1028
|
+
lda metatilesprop, x
|
|
1029
|
+
sta objtmp3
|
|
1030
|
+
bra _oicm21 ; speedup, saves some cycles
|
|
1031
|
+
|
|
1032
|
+
_oicm2:
|
|
1033
|
+
tya
|
|
1034
|
+
clc
|
|
1035
|
+
adc maptile_L1d ; get direct rom value
|
|
1036
|
+
tax
|
|
1037
|
+
phb
|
|
1038
|
+
sep #$20
|
|
1039
|
+
lda maptile_L1b.b
|
|
1040
|
+
pha
|
|
1041
|
+
plb
|
|
1042
|
+
rep #$20
|
|
1043
|
+
lda 0,x
|
|
1044
|
+
plb
|
|
1045
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1046
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1047
|
+
tax
|
|
1048
|
+
lda metatilesprop, x
|
|
1049
|
+
sta objtmp3
|
|
1050
|
+
|
|
1051
|
+
_oicm21:
|
|
1052
|
+
ldx objtmp2
|
|
1053
|
+
sta objbuffers.1.tilesprop,x
|
|
1054
|
+
lda objbuffers.1.tilesprop,x
|
|
1055
|
+
cmp #T_LADDER ; if ladder, well avoid doing stuffs
|
|
1056
|
+
beq _oicm3
|
|
1057
|
+
cmp #T_PLATE ; if on a plate, do same thing
|
|
1058
|
+
beq _oicm3
|
|
1059
|
+
|
|
1060
|
+
cmp #T_FIRES ; if fire, player is burning
|
|
1061
|
+
bne _oicm22
|
|
1062
|
+
lda #ACT_BURN ; player is now dying, no more checking
|
|
1063
|
+
sta objbuffers.1.action
|
|
1064
|
+
brl _oicmtstx
|
|
1065
|
+
|
|
1066
|
+
_oicm22:
|
|
1067
|
+
cmp #T_SPIKE ; if spike, player is dying too
|
|
1068
|
+
bne _oicm23
|
|
1069
|
+
lda #ACT_DIE
|
|
1070
|
+
sta objbuffers.1.action
|
|
1071
|
+
brl _oicmtstx
|
|
1072
|
+
|
|
1073
|
+
_oicm23:
|
|
1074
|
+
and #$ff00 ; keep only the high values for collision
|
|
1075
|
+
beq _oicm4
|
|
1076
|
+
|
|
1077
|
+
_oicm3:
|
|
1078
|
+
lda objtmp3
|
|
1079
|
+
sta objbuffers.1.tilestand,x ; store the tile we are standing on
|
|
1080
|
+
|
|
1081
|
+
lda objbuffers.1.yvel+1,x
|
|
1082
|
+
and #$00ff
|
|
1083
|
+
clc
|
|
1084
|
+
adc objbuffers.1.ypos+1,x
|
|
1085
|
+
clc
|
|
1086
|
+
adc objbuffers.1.yofs,x
|
|
1087
|
+
clc
|
|
1088
|
+
adc objbuffers.1.height,x
|
|
1089
|
+
inc a
|
|
1090
|
+
|
|
1091
|
+
and #$fff8
|
|
1092
|
+
sec
|
|
1093
|
+
sbc objbuffers.1.yofs,x
|
|
1094
|
+
sec
|
|
1095
|
+
sbc objbuffers.1.height,x
|
|
1096
|
+
sta objbuffers.1.ypos+1,x
|
|
1097
|
+
stz objbuffers.1.yvel,x
|
|
1098
|
+
jmp _oicmtstx
|
|
1099
|
+
|
|
1100
|
+
_oicm4:
|
|
1101
|
+
rep #$20 ; continue to test the tiles on x
|
|
1102
|
+
iny
|
|
1103
|
+
iny
|
|
1104
|
+
dec objtmp1
|
|
1105
|
+
beq _oicm5
|
|
1106
|
+
brl _oicm2
|
|
1107
|
+
|
|
1108
|
+
_oicm5:
|
|
1109
|
+
ldx objtmp2 ; not standing on anything or ladder, now falling if not climbing
|
|
1110
|
+
stz objbuffers.1.tilestand,x
|
|
1111
|
+
|
|
1112
|
+
lda objbuffers.1.tilesprop,x ; need again to verify if not tile standing
|
|
1113
|
+
beq _oicm61
|
|
1114
|
+
lda objbuffers.1.action,x ; if not climbing, well doing like if falling
|
|
1115
|
+
and #ACT_CLIMB
|
|
1116
|
+
beq _oicm61
|
|
1117
|
+
brl _oicmtstx
|
|
1118
|
+
|
|
1119
|
+
_oicm61:
|
|
1120
|
+
lda objbuffers.1.yvel,x
|
|
1121
|
+
clc
|
|
1122
|
+
adc #GRAVITY
|
|
1123
|
+
cmp #MAX_Y_VELOCITY+1 ; add velocity regarding if we do not reach the maximum
|
|
1124
|
+
bmi _oicm6
|
|
1125
|
+
lda #MAX_Y_VELOCITY
|
|
1126
|
+
|
|
1127
|
+
_oicm6:
|
|
1128
|
+
sta objbuffers.1.yvel,x
|
|
1129
|
+
brl _oicmtstx
|
|
1130
|
+
|
|
1131
|
+
_oicmtstyn: ; ------------------------------------------------------
|
|
1132
|
+
stz objbuffers.1.tilestand,x ; yvel<0, object is moving upwards
|
|
1133
|
+
|
|
1134
|
+
xba
|
|
1135
|
+
ora #$FF00
|
|
1136
|
+
clc
|
|
1137
|
+
adc objbuffers.1.ypos+1,x
|
|
1138
|
+
clc
|
|
1139
|
+
adc objbuffers.1.yofs,x
|
|
1140
|
+
bpl + ; if y < 0, put it to 0 *FIX 221126*
|
|
1141
|
+
|
|
1142
|
+
lda #0000
|
|
1143
|
+
+ lsr a
|
|
1144
|
+
lsr a
|
|
1145
|
+
and #$FFFE
|
|
1146
|
+
tay
|
|
1147
|
+
|
|
1148
|
+
lda objbuffers.1.xpos+1,x
|
|
1149
|
+
clc
|
|
1150
|
+
adc objbuffers.1.xofs,x
|
|
1151
|
+
pha
|
|
1152
|
+
|
|
1153
|
+
and #$0007
|
|
1154
|
+
clc
|
|
1155
|
+
adc objbuffers.1.width,x
|
|
1156
|
+
dec a
|
|
1157
|
+
lsr a
|
|
1158
|
+
lsr a
|
|
1159
|
+
lsr a
|
|
1160
|
+
inc a
|
|
1161
|
+
sta objtmp1
|
|
1162
|
+
|
|
1163
|
+
pla
|
|
1164
|
+
lsr a
|
|
1165
|
+
lsr a
|
|
1166
|
+
and #$FFFE
|
|
1167
|
+
clc
|
|
1168
|
+
adc.w mapadrrowlut, y
|
|
1169
|
+
tay
|
|
1170
|
+
|
|
1171
|
+
clc
|
|
1172
|
+
adc maptile_L1d ; get direct rom value
|
|
1173
|
+
tax
|
|
1174
|
+
phb
|
|
1175
|
+
sep #$20
|
|
1176
|
+
lda maptile_L1b.b
|
|
1177
|
+
pha
|
|
1178
|
+
plb
|
|
1179
|
+
rep #$20
|
|
1180
|
+
lda 0,x
|
|
1181
|
+
plb
|
|
1182
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1183
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1184
|
+
tax
|
|
1185
|
+
lda metatilesprop, x
|
|
1186
|
+
bra _oicmtstyn2 ; speedup, saves some cycles
|
|
1187
|
+
|
|
1188
|
+
_oicmtstyn1:
|
|
1189
|
+
tya
|
|
1190
|
+
clc
|
|
1191
|
+
adc maptile_L1d ; get direct rom value
|
|
1192
|
+
tax
|
|
1193
|
+
phb
|
|
1194
|
+
sep #$20
|
|
1195
|
+
lda maptile_L1b.b
|
|
1196
|
+
pha
|
|
1197
|
+
plb
|
|
1198
|
+
rep #$20
|
|
1199
|
+
lda 0,x
|
|
1200
|
+
plb
|
|
1201
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1202
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1203
|
+
tax
|
|
1204
|
+
lda metatilesprop, x
|
|
1205
|
+
|
|
1206
|
+
_oicmtstyn2:
|
|
1207
|
+
ldx objtmp2
|
|
1208
|
+
sta objbuffers.1.tilesprop,x
|
|
1209
|
+
lda objbuffers.1.tilesprop,x
|
|
1210
|
+
cmp #T_LADDER ; if ladder, well avoid doing stuffs
|
|
1211
|
+
beq _oicmtstyn4
|
|
1212
|
+
|
|
1213
|
+
and #$ff00 ; keep only the high values for collision
|
|
1214
|
+
beq _oicmtstyn3
|
|
1215
|
+
|
|
1216
|
+
lda objbuffers.1.yvel+1,x
|
|
1217
|
+
ora #$ff00
|
|
1218
|
+
clc
|
|
1219
|
+
adc objbuffers.1.ypos+1,x
|
|
1220
|
+
clc
|
|
1221
|
+
adc objbuffers.1.yofs,x
|
|
1222
|
+
clc
|
|
1223
|
+
adc #8
|
|
1224
|
+
and #$fff8
|
|
1225
|
+
sec
|
|
1226
|
+
sbc objbuffers.1.yofs,x
|
|
1227
|
+
sta objbuffers.1.ypos+1,x
|
|
1228
|
+
stz objbuffers.1.yvel,x
|
|
1229
|
+
brl _oicmtstyn4
|
|
1230
|
+
|
|
1231
|
+
_oicmtstyn3:
|
|
1232
|
+
iny ; continue to test the tiles on x
|
|
1233
|
+
iny
|
|
1234
|
+
dec objtmp1
|
|
1235
|
+
bne _oicmtstyn1
|
|
1236
|
+
|
|
1237
|
+
_oicmtstyn4:
|
|
1238
|
+
ldx objtmp2 ; not standing on anything, now falling
|
|
1239
|
+
lda objbuffers.1.yvel,x
|
|
1240
|
+
clc
|
|
1241
|
+
adc #GRAVITY
|
|
1242
|
+
cmp #MAX_Y_VELOCITY+1
|
|
1243
|
+
bmi _oicmtstyn5 ; add velocity regarding if we do not reach the maximum
|
|
1244
|
+
lda #MAX_Y_VELOCITY
|
|
1245
|
+
|
|
1246
|
+
_oicmtstyn5:
|
|
1247
|
+
sta objbuffers.1.yvel,x
|
|
1248
|
+
|
|
1249
|
+
_oicmtstx:
|
|
1250
|
+
ldx objtmp2
|
|
1251
|
+
lda objbuffers.1.xvel,x ; if xvel>=0 -> moving right
|
|
1252
|
+
bne _oicmtstx1
|
|
1253
|
+
jmp _oicmend
|
|
1254
|
+
_oicmtstx1:
|
|
1255
|
+
bpl _oicmtstx11
|
|
1256
|
+
jmp _oicmtstxn
|
|
1257
|
+
_oicmtstx11:
|
|
1258
|
+
sec ; moving right
|
|
1259
|
+
sbc objfriction
|
|
1260
|
+
bpl _oicmtstx12
|
|
1261
|
+
stz objbuffers.1.xvel,x
|
|
1262
|
+
jmp _oicmend
|
|
1263
|
+
|
|
1264
|
+
_oicmtstx12:
|
|
1265
|
+
sta objbuffers.1.xvel,x
|
|
1266
|
+
lda objbuffers.1.ypos+1,x
|
|
1267
|
+
clc
|
|
1268
|
+
adc objbuffers.1.yofs,x
|
|
1269
|
+
bpl + ; if y<0, put it to 0 *FIX 20221201 */
|
|
1270
|
+
lda #0000
|
|
1271
|
+
|
|
1272
|
+
+ pha
|
|
1273
|
+
and #$0007
|
|
1274
|
+
clc
|
|
1275
|
+
adc objbuffers.1.height,x
|
|
1276
|
+
dec a
|
|
1277
|
+
lsr a
|
|
1278
|
+
lsr a
|
|
1279
|
+
lsr a
|
|
1280
|
+
inc a
|
|
1281
|
+
sta objtmp1
|
|
1282
|
+
|
|
1283
|
+
pla
|
|
1284
|
+
lsr a
|
|
1285
|
+
lsr a
|
|
1286
|
+
and #$fffe
|
|
1287
|
+
tay
|
|
1288
|
+
|
|
1289
|
+
lda objbuffers.1.xvel+1,x
|
|
1290
|
+
and #$00ff
|
|
1291
|
+
clc
|
|
1292
|
+
adc objbuffers.1.xpos+1,x
|
|
1293
|
+
clc
|
|
1294
|
+
adc objbuffers.1.xofs,x
|
|
1295
|
+
clc
|
|
1296
|
+
adc objbuffers.1.width,x
|
|
1297
|
+
lsr a
|
|
1298
|
+
lsr a
|
|
1299
|
+
and #$fffe
|
|
1300
|
+
clc
|
|
1301
|
+
adc.w mapadrrowlut, y
|
|
1302
|
+
|
|
1303
|
+
_oicmtstx13:
|
|
1304
|
+
tay
|
|
1305
|
+
clc
|
|
1306
|
+
adc maptile_L1d
|
|
1307
|
+
tax
|
|
1308
|
+
phb
|
|
1309
|
+
sep #$20
|
|
1310
|
+
lda maptile_L1b.b
|
|
1311
|
+
pha
|
|
1312
|
+
plb
|
|
1313
|
+
rep #$20
|
|
1314
|
+
lda 0,x
|
|
1315
|
+
plb
|
|
1316
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1317
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1318
|
+
tax
|
|
1319
|
+
lda metatilesprop, x
|
|
1320
|
+
|
|
1321
|
+
ldx objtmp2
|
|
1322
|
+
sta objbuffers.1.tilebprop,x
|
|
1323
|
+
lda objbuffers.1.tilebprop,x
|
|
1324
|
+
beq _oicmtstx14
|
|
1325
|
+
and #$ff00 ; keep only the high values for collision
|
|
1326
|
+
beq _oicmtstx14
|
|
1327
|
+
|
|
1328
|
+
lda objbuffers.1.xvel+1,x
|
|
1329
|
+
and #$00ff
|
|
1330
|
+
clc
|
|
1331
|
+
adc objbuffers.1.xpos+ 1,x
|
|
1332
|
+
clc
|
|
1333
|
+
adc objbuffers.1.xofs,x
|
|
1334
|
+
clc
|
|
1335
|
+
adc objbuffers.1.width,x
|
|
1336
|
+
inc a
|
|
1337
|
+
and #$fff8
|
|
1338
|
+
sec
|
|
1339
|
+
sbc objbuffers.1.xofs,x
|
|
1340
|
+
sec
|
|
1341
|
+
sbc objbuffers.1.width,x
|
|
1342
|
+
sta objbuffers.1.xpos+ 1,x
|
|
1343
|
+
stz objbuffers.1.xvel,x
|
|
1344
|
+
brl _oicmend
|
|
1345
|
+
|
|
1346
|
+
_oicmtstx14:
|
|
1347
|
+
tya ; go through all y available
|
|
1348
|
+
clc
|
|
1349
|
+
adc.l maprowsize
|
|
1350
|
+
dec objtmp1
|
|
1351
|
+
bne _oicmtstx13
|
|
1352
|
+
brl _oicmend
|
|
1353
|
+
|
|
1354
|
+
_oicmtstxn:
|
|
1355
|
+
clc ; moving left (xvel<0)
|
|
1356
|
+
adc objfriction
|
|
1357
|
+
bmi _oicmtstxna
|
|
1358
|
+
stz objbuffers.1.xvel,x ; currently it is not ok to go left
|
|
1359
|
+
brl _oicmend
|
|
1360
|
+
|
|
1361
|
+
_oicmtstxna:
|
|
1362
|
+
sta objbuffers.1.xvel,x
|
|
1363
|
+
lda objbuffers.1.ypos+1,x
|
|
1364
|
+
clc
|
|
1365
|
+
adc objbuffers.1.yofs,x
|
|
1366
|
+
bpl + ; if y<0, put it to 0 *FIX 20221201 */
|
|
1367
|
+
lda #0000
|
|
1368
|
+
|
|
1369
|
+
+ pha
|
|
1370
|
+
and #$0007
|
|
1371
|
+
clc
|
|
1372
|
+
adc objbuffers.1.height,x
|
|
1373
|
+
dec a
|
|
1374
|
+
lsr a
|
|
1375
|
+
lsr a
|
|
1376
|
+
lsr a
|
|
1377
|
+
inc a
|
|
1378
|
+
sta objtmp1
|
|
1379
|
+
|
|
1380
|
+
pla
|
|
1381
|
+
lsr a
|
|
1382
|
+
lsr a
|
|
1383
|
+
and #$fffe
|
|
1384
|
+
tay
|
|
1385
|
+
|
|
1386
|
+
lda objbuffers.1.xvel+1,x
|
|
1387
|
+
ora #$ff00
|
|
1388
|
+
clc
|
|
1389
|
+
adc objbuffers.1.xpos+1,x
|
|
1390
|
+
clc
|
|
1391
|
+
adc objbuffers.1.xofs,x
|
|
1392
|
+
|
|
1393
|
+
bpl _oicmtstxnb ; if negative, don't bother to test, will change screen
|
|
1394
|
+
jmp _oicmend
|
|
1395
|
+
|
|
1396
|
+
_oicmtstxnb:
|
|
1397
|
+
lsr a
|
|
1398
|
+
lsr a
|
|
1399
|
+
and #$fffe
|
|
1400
|
+
clc
|
|
1401
|
+
adc.w mapadrrowlut, y
|
|
1402
|
+
|
|
1403
|
+
_oicmtstxnc:
|
|
1404
|
+
tay
|
|
1405
|
+
clc
|
|
1406
|
+
adc maptile_L1d ; get direct rom value
|
|
1407
|
+
tax
|
|
1408
|
+
phb
|
|
1409
|
+
sep #$20
|
|
1410
|
+
lda maptile_L1b.b
|
|
1411
|
+
pha
|
|
1412
|
+
plb
|
|
1413
|
+
rep #$20
|
|
1414
|
+
lda 0,x
|
|
1415
|
+
plb
|
|
1416
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1417
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1418
|
+
tax
|
|
1419
|
+
lda metatilesprop, x
|
|
1420
|
+
|
|
1421
|
+
ldx objtmp2
|
|
1422
|
+
sta objbuffers.1.tilebprop,x
|
|
1423
|
+
lda objbuffers.1.tilebprop,x
|
|
1424
|
+
beq _oicmtstxnd
|
|
1425
|
+
|
|
1426
|
+
and #$ff00 ; keep only the high values for collision
|
|
1427
|
+
beq _oicmtstxnd
|
|
1428
|
+
|
|
1429
|
+
lda objbuffers.1.xvel+1,x
|
|
1430
|
+
ora #$ff00
|
|
1431
|
+
clc
|
|
1432
|
+
adc objbuffers.1.xpos+ 1,x
|
|
1433
|
+
clc
|
|
1434
|
+
adc objbuffers.1.xofs,x
|
|
1435
|
+
clc
|
|
1436
|
+
adc #8
|
|
1437
|
+
and #$fff8
|
|
1438
|
+
sec
|
|
1439
|
+
sbc objbuffers.1.xofs,x
|
|
1440
|
+
sta objbuffers.1.xpos+ 1,x
|
|
1441
|
+
stz objbuffers.1.xvel,x
|
|
1442
|
+
|
|
1443
|
+
brl _oicmend
|
|
1444
|
+
|
|
1445
|
+
_oicmtstxnd:
|
|
1446
|
+
tya
|
|
1447
|
+
clc
|
|
1448
|
+
adc.l maprowsize
|
|
1449
|
+
dec objtmp1
|
|
1450
|
+
bne _oicmtstxnc ; go through all y available
|
|
1451
|
+
|
|
1452
|
+
_oicmend:
|
|
1453
|
+
ply
|
|
1454
|
+
plx
|
|
1455
|
+
plb
|
|
1456
|
+
plp
|
|
1457
|
+
rtl
|
|
1458
|
+
|
|
1459
|
+
.ENDS
|
|
1460
|
+
|
|
1461
|
+
.SECTION ".objects2_text" superfree
|
|
1462
|
+
|
|
1463
|
+
;---------------------------------------------------------------------------------
|
|
1464
|
+
; void objCollidMap1D(u16 objhandle)
|
|
1465
|
+
objCollidMap1D:
|
|
1466
|
+
php
|
|
1467
|
+
phb
|
|
1468
|
+
|
|
1469
|
+
phx
|
|
1470
|
+
phy
|
|
1471
|
+
|
|
1472
|
+
sep #$20 ; go to bank objects
|
|
1473
|
+
lda #$7e
|
|
1474
|
+
pha
|
|
1475
|
+
plb
|
|
1476
|
+
|
|
1477
|
+
rep #$20
|
|
1478
|
+
lda 10,s ; grad the index of object (5+1+2+2)
|
|
1479
|
+
asl a
|
|
1480
|
+
asl a
|
|
1481
|
+
asl a
|
|
1482
|
+
asl a
|
|
1483
|
+
asl a
|
|
1484
|
+
asl a
|
|
1485
|
+
tax
|
|
1486
|
+
sta objtmp2 ; to keep global handle for object
|
|
1487
|
+
|
|
1488
|
+
lda objbuffers.1.yvel,x ;-- TEST Y ---------
|
|
1489
|
+
bpl _oicm1d1 ; if yvel>=0 -> if object is moving down
|
|
1490
|
+
jmp _oicm1dtstyn
|
|
1491
|
+
_oicm1d1:
|
|
1492
|
+
xba ; compute ypos
|
|
1493
|
+
and #$00FF
|
|
1494
|
+
clc
|
|
1495
|
+
adc objbuffers.1.ypos+1,x
|
|
1496
|
+
clc
|
|
1497
|
+
adc objbuffers.1.yofs,x
|
|
1498
|
+
clc
|
|
1499
|
+
adc objbuffers.1.height,x
|
|
1500
|
+
bpl + ; if y<0, put it to 0
|
|
1501
|
+
lda #0000
|
|
1502
|
+
|
|
1503
|
+
+ lsr a
|
|
1504
|
+
lsr a
|
|
1505
|
+
and #$FFFE
|
|
1506
|
+
tay
|
|
1507
|
+
|
|
1508
|
+
lda objbuffers.1.xpos+1,x
|
|
1509
|
+
clc
|
|
1510
|
+
adc objbuffers.1.xofs,x
|
|
1511
|
+
pha
|
|
1512
|
+
|
|
1513
|
+
and #$0007 ; compute the number of tiles to test
|
|
1514
|
+
clc
|
|
1515
|
+
adc objbuffers.1.width,x
|
|
1516
|
+
dec a
|
|
1517
|
+
lsr a
|
|
1518
|
+
lsr a
|
|
1519
|
+
lsr a
|
|
1520
|
+
inc a
|
|
1521
|
+
sta objtmp1
|
|
1522
|
+
|
|
1523
|
+
pla ; compute the offset line for y
|
|
1524
|
+
lsr a
|
|
1525
|
+
lsr a
|
|
1526
|
+
and #$FFFE
|
|
1527
|
+
clc
|
|
1528
|
+
adc.w mapadrrowlut, y
|
|
1529
|
+
tay
|
|
1530
|
+
|
|
1531
|
+
clc
|
|
1532
|
+
adc maptile_L1d ; get direct rom value
|
|
1533
|
+
tax
|
|
1534
|
+
phb
|
|
1535
|
+
sep #$20
|
|
1536
|
+
lda maptile_L1b.b
|
|
1537
|
+
pha
|
|
1538
|
+
plb
|
|
1539
|
+
rep #$20
|
|
1540
|
+
lda 0,x
|
|
1541
|
+
plb
|
|
1542
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1543
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1544
|
+
tax
|
|
1545
|
+
lda metatilesprop, x
|
|
1546
|
+
sta objtmp3
|
|
1547
|
+
bra _oicm1d21 ; speedup, saves some cycles
|
|
1548
|
+
|
|
1549
|
+
_oicm1d2:
|
|
1550
|
+
tya
|
|
1551
|
+
clc
|
|
1552
|
+
adc maptile_L1d ; get direct rom value
|
|
1553
|
+
tax
|
|
1554
|
+
phb
|
|
1555
|
+
sep #$20
|
|
1556
|
+
lda maptile_L1b.b
|
|
1557
|
+
pha
|
|
1558
|
+
plb
|
|
1559
|
+
rep #$20
|
|
1560
|
+
lda 0,x
|
|
1561
|
+
plb
|
|
1562
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1563
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1564
|
+
tax
|
|
1565
|
+
lda metatilesprop, x
|
|
1566
|
+
sta objtmp3
|
|
1567
|
+
|
|
1568
|
+
_oicm1d21:
|
|
1569
|
+
ldx objtmp2
|
|
1570
|
+
sta objbuffers.1.tilesprop,x
|
|
1571
|
+
lda objbuffers.1.tilesprop,x
|
|
1572
|
+
cmp #T_LADDER ; if ladder, well avoid doing stuffs
|
|
1573
|
+
beq _oicm1d3
|
|
1574
|
+
cmp #T_PLATE ; if on a plate, do same thing
|
|
1575
|
+
beq _oicm1d3
|
|
1576
|
+
|
|
1577
|
+
cmp #T_FIRES ; if fire, player is burning
|
|
1578
|
+
bne _oicm1d22
|
|
1579
|
+
lda #ACT_BURN ; player is now dying, no more checking
|
|
1580
|
+
sta objbuffers.1.action
|
|
1581
|
+
brl _oicm1dtstx
|
|
1582
|
+
|
|
1583
|
+
_oicm1d22:
|
|
1584
|
+
cmp #T_SPIKE ; if spike, player is dying too
|
|
1585
|
+
bne _oicm1d23
|
|
1586
|
+
lda #ACT_DIE
|
|
1587
|
+
sta objbuffers.1.action
|
|
1588
|
+
brl _oicm1dtstx
|
|
1589
|
+
|
|
1590
|
+
_oicm1d23:
|
|
1591
|
+
and #$ff00 ; keep only the high values for collision
|
|
1592
|
+
beq _oicm1d4
|
|
1593
|
+
|
|
1594
|
+
_oicm1d3:
|
|
1595
|
+
lda objtmp3
|
|
1596
|
+
sta objbuffers.1.tilestand,x ; store the tile we are standing on
|
|
1597
|
+
|
|
1598
|
+
lda objbuffers.1.yvel+1,x
|
|
1599
|
+
and #$00ff
|
|
1600
|
+
clc
|
|
1601
|
+
adc objbuffers.1.ypos+1,x
|
|
1602
|
+
clc
|
|
1603
|
+
adc objbuffers.1.yofs,x
|
|
1604
|
+
clc
|
|
1605
|
+
adc objbuffers.1.height,x
|
|
1606
|
+
inc a
|
|
1607
|
+
|
|
1608
|
+
and #$fff8
|
|
1609
|
+
sec
|
|
1610
|
+
sbc objbuffers.1.yofs,x
|
|
1611
|
+
sec
|
|
1612
|
+
sbc objbuffers.1.height,x
|
|
1613
|
+
sta objbuffers.1.ypos+1,x
|
|
1614
|
+
stz objbuffers.1.yvel,x
|
|
1615
|
+
jmp _oicm1dtstx
|
|
1616
|
+
|
|
1617
|
+
_oicm1d4:
|
|
1618
|
+
rep #$20 ; continue to test the tiles on x
|
|
1619
|
+
iny
|
|
1620
|
+
iny
|
|
1621
|
+
dec objtmp1
|
|
1622
|
+
beq _oicm1d5
|
|
1623
|
+
brl _oicm1d2
|
|
1624
|
+
|
|
1625
|
+
_oicm1d5:
|
|
1626
|
+
ldx objtmp2 ; not standing on anything or ladder, now falling if not climbing
|
|
1627
|
+
stz objbuffers.1.tilestand,x
|
|
1628
|
+
|
|
1629
|
+
lda objbuffers.1.tilesprop,x ; need again to verify if not tile standing
|
|
1630
|
+
beq _oicm1d61
|
|
1631
|
+
lda objbuffers.1.action,x ; if not climbing, well doing like if falling
|
|
1632
|
+
and #ACT_CLIMB
|
|
1633
|
+
beq _oicm1d61
|
|
1634
|
+
brl _oicm1dtstx
|
|
1635
|
+
|
|
1636
|
+
_oicm1d61:
|
|
1637
|
+
brl _oicm1dtstx ; test x now
|
|
1638
|
+
|
|
1639
|
+
_oicm1dtstyn:
|
|
1640
|
+
stz objbuffers.1.tilestand,x ; yvel<0, object is moving upwards
|
|
1641
|
+
xba
|
|
1642
|
+
ora #$FF00
|
|
1643
|
+
clc
|
|
1644
|
+
adc objbuffers.1.ypos+1,x
|
|
1645
|
+
clc
|
|
1646
|
+
adc objbuffers.1.yofs,x
|
|
1647
|
+
bpl + ; if y < 0, put it to 0
|
|
1648
|
+
lda #0000
|
|
1649
|
+
|
|
1650
|
+
+ lsr a
|
|
1651
|
+
lsr a
|
|
1652
|
+
and #$FFFE
|
|
1653
|
+
tay
|
|
1654
|
+
|
|
1655
|
+
lda objbuffers.1.xpos+1,x
|
|
1656
|
+
clc
|
|
1657
|
+
adc objbuffers.1.xofs,x
|
|
1658
|
+
pha
|
|
1659
|
+
|
|
1660
|
+
and #$0007
|
|
1661
|
+
clc
|
|
1662
|
+
adc objbuffers.1.width,x
|
|
1663
|
+
dec a
|
|
1664
|
+
lsr a
|
|
1665
|
+
lsr a
|
|
1666
|
+
lsr a
|
|
1667
|
+
inc a
|
|
1668
|
+
sta objtmp1
|
|
1669
|
+
|
|
1670
|
+
pla
|
|
1671
|
+
lsr a
|
|
1672
|
+
lsr a
|
|
1673
|
+
and #$FFFE
|
|
1674
|
+
clc
|
|
1675
|
+
adc.w mapadrrowlut, y
|
|
1676
|
+
tay
|
|
1677
|
+
|
|
1678
|
+
clc
|
|
1679
|
+
adc maptile_L1d ; get direct rom value
|
|
1680
|
+
tax
|
|
1681
|
+
phb
|
|
1682
|
+
sep #$20
|
|
1683
|
+
lda maptile_L1b.b
|
|
1684
|
+
pha
|
|
1685
|
+
plb
|
|
1686
|
+
rep #$20
|
|
1687
|
+
lda 0,x
|
|
1688
|
+
plb
|
|
1689
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1690
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1691
|
+
tax
|
|
1692
|
+
lda metatilesprop, x
|
|
1693
|
+
bra _oicm1dtstyn2 ; speedup, saves some cycles
|
|
1694
|
+
|
|
1695
|
+
_oicm1dtstyn1:
|
|
1696
|
+
tya
|
|
1697
|
+
clc
|
|
1698
|
+
adc maptile_L1d ; get direct rom value
|
|
1699
|
+
tax
|
|
1700
|
+
phb
|
|
1701
|
+
sep #$20
|
|
1702
|
+
lda maptile_L1b.b
|
|
1703
|
+
pha
|
|
1704
|
+
plb
|
|
1705
|
+
rep #$20
|
|
1706
|
+
lda 0,x
|
|
1707
|
+
plb
|
|
1708
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1709
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1710
|
+
tax
|
|
1711
|
+
lda metatilesprop, x
|
|
1712
|
+
|
|
1713
|
+
_oicm1dtstyn2:
|
|
1714
|
+
ldx objtmp2
|
|
1715
|
+
sta objbuffers.1.tilesprop,x
|
|
1716
|
+
lda objbuffers.1.tilesprop,x
|
|
1717
|
+
cmp #T_LADDER ; if ladder, well avoid doing stuffs
|
|
1718
|
+
beq _oicm1dtstx
|
|
1719
|
+
|
|
1720
|
+
and #$ff00 ; keep only the high values for collision
|
|
1721
|
+
beq _oicm1dtstyn3
|
|
1722
|
+
|
|
1723
|
+
lda objbuffers.1.yvel+1,x
|
|
1724
|
+
ora #$ff00
|
|
1725
|
+
clc
|
|
1726
|
+
adc objbuffers.1.ypos+1,x
|
|
1727
|
+
clc
|
|
1728
|
+
adc objbuffers.1.yofs,x
|
|
1729
|
+
clc
|
|
1730
|
+
adc #8
|
|
1731
|
+
and #$fff8
|
|
1732
|
+
sec
|
|
1733
|
+
sbc objbuffers.1.yofs,x
|
|
1734
|
+
sta objbuffers.1.ypos+1,x
|
|
1735
|
+
stz objbuffers.1.yvel,x
|
|
1736
|
+
brl _oicm1dtstx
|
|
1737
|
+
|
|
1738
|
+
_oicm1dtstyn3:
|
|
1739
|
+
iny ; continue to test the tiles on x
|
|
1740
|
+
iny
|
|
1741
|
+
dec objtmp1
|
|
1742
|
+
bne _oicm1dtstyn1
|
|
1743
|
+
|
|
1744
|
+
|
|
1745
|
+
_oicm1dtstx: ;-- TEST X ---------------------------
|
|
1746
|
+
ldx objtmp2
|
|
1747
|
+
lda objbuffers.1.xvel,x ; if xvel>=0 -> moving right
|
|
1748
|
+
bne _oicm1dtstx1
|
|
1749
|
+
jmp _oicm1dend
|
|
1750
|
+
_oicm1dtstx1:
|
|
1751
|
+
bpl _oicm1dtstx11
|
|
1752
|
+
jmp _oicm1dtstxn
|
|
1753
|
+
|
|
1754
|
+
_oicm1dtstx11:
|
|
1755
|
+
lda objbuffers.1.ypos+1,x
|
|
1756
|
+
clc
|
|
1757
|
+
adc objbuffers.1.yofs,x
|
|
1758
|
+
bpl + ; if y < 0, put it to 0
|
|
1759
|
+
lda #0000
|
|
1760
|
+
|
|
1761
|
+
+ pha
|
|
1762
|
+
and #$0007
|
|
1763
|
+
clc
|
|
1764
|
+
adc objbuffers.1.height,x
|
|
1765
|
+
dec a
|
|
1766
|
+
lsr a
|
|
1767
|
+
lsr a
|
|
1768
|
+
lsr a
|
|
1769
|
+
inc a
|
|
1770
|
+
sta objtmp1
|
|
1771
|
+
|
|
1772
|
+
pla
|
|
1773
|
+
lsr a
|
|
1774
|
+
lsr a
|
|
1775
|
+
and #$fffe
|
|
1776
|
+
tay
|
|
1777
|
+
|
|
1778
|
+
lda objbuffers.1.xvel+1,x
|
|
1779
|
+
and #$00ff
|
|
1780
|
+
clc
|
|
1781
|
+
adc objbuffers.1.xpos+1,x
|
|
1782
|
+
clc
|
|
1783
|
+
adc objbuffers.1.xofs,x
|
|
1784
|
+
clc
|
|
1785
|
+
adc objbuffers.1.width,x
|
|
1786
|
+
lsr a
|
|
1787
|
+
lsr a
|
|
1788
|
+
and #$fffe
|
|
1789
|
+
clc
|
|
1790
|
+
adc.w mapadrrowlut, y
|
|
1791
|
+
|
|
1792
|
+
_oicm1dtstx13:
|
|
1793
|
+
tay
|
|
1794
|
+
clc
|
|
1795
|
+
adc maptile_L1d
|
|
1796
|
+
tax
|
|
1797
|
+
phb
|
|
1798
|
+
sep #$20
|
|
1799
|
+
lda maptile_L1b.b
|
|
1800
|
+
pha
|
|
1801
|
+
plb
|
|
1802
|
+
rep #$20
|
|
1803
|
+
lda 0,x
|
|
1804
|
+
plb
|
|
1805
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1806
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1807
|
+
tax
|
|
1808
|
+
lda metatilesprop, x
|
|
1809
|
+
|
|
1810
|
+
ldx objtmp2
|
|
1811
|
+
sta objbuffers.1.tilebprop,x
|
|
1812
|
+
lda objbuffers.1.tilebprop,x
|
|
1813
|
+
beq _oicm1dtstx14
|
|
1814
|
+
and #$ff00 ; keep only the high values for collision
|
|
1815
|
+
beq _oicm1dtstx14
|
|
1816
|
+
|
|
1817
|
+
lda objbuffers.1.xvel+1,x
|
|
1818
|
+
and #$00ff
|
|
1819
|
+
clc
|
|
1820
|
+
adc objbuffers.1.xpos+ 1,x
|
|
1821
|
+
clc
|
|
1822
|
+
adc objbuffers.1.xofs,x
|
|
1823
|
+
clc
|
|
1824
|
+
adc objbuffers.1.width,x
|
|
1825
|
+
inc a
|
|
1826
|
+
and #$fff8
|
|
1827
|
+
sec
|
|
1828
|
+
sbc objbuffers.1.xofs,x
|
|
1829
|
+
sec
|
|
1830
|
+
sbc objbuffers.1.width,x
|
|
1831
|
+
sta objbuffers.1.xpos+ 1,x
|
|
1832
|
+
stz objbuffers.1.xvel,x
|
|
1833
|
+
brl _oicm1dend
|
|
1834
|
+
|
|
1835
|
+
_oicm1dtstx14:
|
|
1836
|
+
tya ; go through all y available
|
|
1837
|
+
clc
|
|
1838
|
+
adc.l maprowsize
|
|
1839
|
+
dec objtmp1
|
|
1840
|
+
bne _oicm1dtstx13
|
|
1841
|
+
brl _oicm1dend
|
|
1842
|
+
|
|
1843
|
+
_oicm1dtstxn:
|
|
1844
|
+
lda objbuffers.1.ypos+1,x
|
|
1845
|
+
clc
|
|
1846
|
+
adc objbuffers.1.yofs,x
|
|
1847
|
+
bpl + ; if y < 0, put it to 0
|
|
1848
|
+
lda #0000
|
|
1849
|
+
|
|
1850
|
+
+ pha
|
|
1851
|
+
|
|
1852
|
+
and #$0007
|
|
1853
|
+
clc
|
|
1854
|
+
adc objbuffers.1.height,x
|
|
1855
|
+
dec a
|
|
1856
|
+
lsr a
|
|
1857
|
+
lsr a
|
|
1858
|
+
lsr a
|
|
1859
|
+
inc a
|
|
1860
|
+
sta objtmp1
|
|
1861
|
+
|
|
1862
|
+
pla
|
|
1863
|
+
lsr a
|
|
1864
|
+
lsr a
|
|
1865
|
+
and #$fffe
|
|
1866
|
+
tay
|
|
1867
|
+
|
|
1868
|
+
lda objbuffers.1.xvel+1,x
|
|
1869
|
+
ora #$ff00
|
|
1870
|
+
clc
|
|
1871
|
+
adc objbuffers.1.xpos+1,x
|
|
1872
|
+
clc
|
|
1873
|
+
adc objbuffers.1.xofs,x
|
|
1874
|
+
|
|
1875
|
+
bpl _oicm1dtstxnb ; if negative, don't bother to test, will change screen
|
|
1876
|
+
jmp _oicm1dend
|
|
1877
|
+
|
|
1878
|
+
_oicm1dtstxnb:
|
|
1879
|
+
lsr a
|
|
1880
|
+
lsr a
|
|
1881
|
+
and #$fffe
|
|
1882
|
+
clc
|
|
1883
|
+
adc.w mapadrrowlut, y
|
|
1884
|
+
|
|
1885
|
+
_oicm1dtstxnc:
|
|
1886
|
+
tay
|
|
1887
|
+
clc
|
|
1888
|
+
adc maptile_L1d ; get direct rom value
|
|
1889
|
+
tax
|
|
1890
|
+
phb
|
|
1891
|
+
sep #$20
|
|
1892
|
+
lda maptile_L1b.b
|
|
1893
|
+
pha
|
|
1894
|
+
plb
|
|
1895
|
+
rep #$20
|
|
1896
|
+
lda 0,x
|
|
1897
|
+
plb
|
|
1898
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
1899
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
1900
|
+
tax
|
|
1901
|
+
lda metatilesprop, x
|
|
1902
|
+
|
|
1903
|
+
ldx objtmp2
|
|
1904
|
+
sta objbuffers.1.tilebprop,x
|
|
1905
|
+
lda objbuffers.1.tilebprop,x
|
|
1906
|
+
beq _oicm1dtstxnd
|
|
1907
|
+
|
|
1908
|
+
and #$ff00 ; keep only the high values for collision
|
|
1909
|
+
beq _oicm1dtstxnd
|
|
1910
|
+
|
|
1911
|
+
lda objbuffers.1.xvel+1,x
|
|
1912
|
+
ora #$ff00
|
|
1913
|
+
clc
|
|
1914
|
+
adc objbuffers.1.xpos+ 1,x
|
|
1915
|
+
clc
|
|
1916
|
+
adc objbuffers.1.xofs,x
|
|
1917
|
+
clc
|
|
1918
|
+
adc #8
|
|
1919
|
+
and #$fff8
|
|
1920
|
+
sec
|
|
1921
|
+
sbc objbuffers.1.xofs,x
|
|
1922
|
+
sta objbuffers.1.xpos+ 1,x
|
|
1923
|
+
stz objbuffers.1.xvel,x
|
|
1924
|
+
|
|
1925
|
+
brl _oicm1dend
|
|
1926
|
+
|
|
1927
|
+
_oicm1dtstxnd:
|
|
1928
|
+
tya
|
|
1929
|
+
clc
|
|
1930
|
+
adc.l maprowsize
|
|
1931
|
+
dec objtmp1
|
|
1932
|
+
bne _oicm1dtstxnc ; go through all y available
|
|
1933
|
+
|
|
1934
|
+
_oicm1dend:
|
|
1935
|
+
ply
|
|
1936
|
+
plx
|
|
1937
|
+
plb
|
|
1938
|
+
plp
|
|
1939
|
+
rtl
|
|
1940
|
+
|
|
1941
|
+
.ENDS
|
|
1942
|
+
|
|
1943
|
+
.SECTION ".objects3_text" superfree
|
|
1944
|
+
|
|
1945
|
+
;---------------------------------------------------------------------------------
|
|
1946
|
+
; void objLoadObjects(u8 *sourceO)
|
|
1947
|
+
objLoadObjects:
|
|
1948
|
+
php
|
|
1949
|
+
phb
|
|
1950
|
+
|
|
1951
|
+
phx
|
|
1952
|
+
phy
|
|
1953
|
+
|
|
1954
|
+
sep #$20
|
|
1955
|
+
lda #$0
|
|
1956
|
+
pha
|
|
1957
|
+
plb
|
|
1958
|
+
|
|
1959
|
+
rep #$20 ; load objects in temporary buffer
|
|
1960
|
+
lda 10,s
|
|
1961
|
+
sta.l $4302 ; data offset of source
|
|
1962
|
+
lda #(OB_MAX*5)+1
|
|
1963
|
+
asl a
|
|
1964
|
+
sta.l $4305 ; 64*5+1 *2 values
|
|
1965
|
+
ldy #objtmpbuf.w ; data offset of destination
|
|
1966
|
+
sty $2181
|
|
1967
|
+
|
|
1968
|
+
sep #$20
|
|
1969
|
+
lda #$7e
|
|
1970
|
+
sta.l $2183 ; bank address of destination
|
|
1971
|
+
lda 12,s
|
|
1972
|
+
sta.l $4304 ; bank address of source
|
|
1973
|
+
ldx #$8000
|
|
1974
|
+
stx $4300
|
|
1975
|
+
|
|
1976
|
+
lda #$01
|
|
1977
|
+
sta $420B
|
|
1978
|
+
|
|
1979
|
+
sep #$20
|
|
1980
|
+
lda #$7e
|
|
1981
|
+
pha
|
|
1982
|
+
plb
|
|
1983
|
+
|
|
1984
|
+
rep #$20
|
|
1985
|
+
ldx #$0000
|
|
1986
|
+
|
|
1987
|
+
_oilo1:
|
|
1988
|
+
lda objtmpbuf,x ; if end , get out
|
|
1989
|
+
cmp #$ffff
|
|
1990
|
+
beq _oiloend
|
|
1991
|
+
lda objtmpbuf+8,x ; get maxx
|
|
1992
|
+
pha
|
|
1993
|
+
lda objtmpbuf+6,x ; get minx
|
|
1994
|
+
pha
|
|
1995
|
+
lda objtmpbuf+4,x ; get type
|
|
1996
|
+
pha
|
|
1997
|
+
lda objtmpbuf+2,x ; get y
|
|
1998
|
+
pha
|
|
1999
|
+
lda objtmpbuf,x ; get x
|
|
2000
|
+
pha
|
|
2001
|
+
lda objtmpbuf+4,x ; get type again
|
|
2002
|
+
asl a
|
|
2003
|
+
asl a
|
|
2004
|
+
tay ; because init function is for each type
|
|
2005
|
+
inx
|
|
2006
|
+
inx
|
|
2007
|
+
inx
|
|
2008
|
+
inx
|
|
2009
|
+
inx
|
|
2010
|
+
inx
|
|
2011
|
+
inx
|
|
2012
|
+
inx
|
|
2013
|
+
inx
|
|
2014
|
+
inx
|
|
2015
|
+
stx objcidx ; save x
|
|
2016
|
+
lda objfctinit,y ; get address of init function and call it
|
|
2017
|
+
sta objfctcall
|
|
2018
|
+
lda objfctinit+2,y
|
|
2019
|
+
sta objfctcallh
|
|
2020
|
+
|
|
2021
|
+
jsl jslcallfct
|
|
2022
|
+
|
|
2023
|
+
pla
|
|
2024
|
+
pla
|
|
2025
|
+
pla
|
|
2026
|
+
pla
|
|
2027
|
+
pla
|
|
2028
|
+
ldx objcidx ; get saved x
|
|
2029
|
+
bra _oilo1
|
|
2030
|
+
|
|
2031
|
+
_oiloend:
|
|
2032
|
+
ply
|
|
2033
|
+
plx
|
|
2034
|
+
plb
|
|
2035
|
+
plp
|
|
2036
|
+
rtl
|
|
2037
|
+
|
|
2038
|
+
.ENDS
|
|
2039
|
+
|
|
2040
|
+
.SECTION ".objects4_text" superfree
|
|
2041
|
+
|
|
2042
|
+
;---------------------------------------------------------------------------------
|
|
2043
|
+
; u16 objCollidObj(u16 objhandle1, u16 objhandle2);
|
|
2044
|
+
; 5-6 7-8
|
|
2045
|
+
objCollidObj:
|
|
2046
|
+
php
|
|
2047
|
+
phb
|
|
2048
|
+
|
|
2049
|
+
phx
|
|
2050
|
+
phy
|
|
2051
|
+
|
|
2052
|
+
sep #$20 ; go to object bank
|
|
2053
|
+
lda #$7e
|
|
2054
|
+
pha
|
|
2055
|
+
plb
|
|
2056
|
+
|
|
2057
|
+
rep #$20
|
|
2058
|
+
stz.w tcc__r0 ; no collision yet
|
|
2059
|
+
|
|
2060
|
+
lda 12,s ; grad the index of object 2 (7+1+2+2)
|
|
2061
|
+
asl a
|
|
2062
|
+
asl a
|
|
2063
|
+
asl a
|
|
2064
|
+
asl a
|
|
2065
|
+
asl a
|
|
2066
|
+
asl a
|
|
2067
|
+
tay
|
|
2068
|
+
lda objbuffers.1.xpos+1,y
|
|
2069
|
+
clc
|
|
2070
|
+
adc objbuffers.1.xofs,y
|
|
2071
|
+
bmi _oicoend ; no collision checking if second is not on screen
|
|
2072
|
+
sta objtmp1
|
|
2073
|
+
|
|
2074
|
+
lda 10,s ; grad the index of object 1 (5+1+2+2)
|
|
2075
|
+
asl a
|
|
2076
|
+
asl a
|
|
2077
|
+
asl a
|
|
2078
|
+
asl a
|
|
2079
|
+
asl a
|
|
2080
|
+
asl a
|
|
2081
|
+
tax
|
|
2082
|
+
lda objbuffers.1.xpos+1,x ; same computation as object 2
|
|
2083
|
+
clc
|
|
2084
|
+
adc objbuffers.1.xofs,x
|
|
2085
|
+
bpl _oicor1 ; if negative, will be 0
|
|
2086
|
+
lda #$0000
|
|
2087
|
+
_oicor1:
|
|
2088
|
+
sta objtmp2
|
|
2089
|
+
|
|
2090
|
+
cmp objtmp1 ; objleft
|
|
2091
|
+
bcs _oicor2
|
|
2092
|
+
adc objbuffers.1.width,x
|
|
2093
|
+
|
|
2094
|
+
cmp objtmp1
|
|
2095
|
+
bmi _oicoend
|
|
2096
|
+
bra _oicor3
|
|
2097
|
+
|
|
2098
|
+
_oicor2:
|
|
2099
|
+
lda objtmp1
|
|
2100
|
+
clc
|
|
2101
|
+
adc objbuffers.1.width,y
|
|
2102
|
+
cmp objtmp2
|
|
2103
|
+
bmi _oicoend
|
|
2104
|
+
|
|
2105
|
+
_oicor3:
|
|
2106
|
+
lda objbuffers.1.ypos+1,y
|
|
2107
|
+
clc
|
|
2108
|
+
adc objbuffers.1.yofs,y
|
|
2109
|
+
sta objtmp3
|
|
2110
|
+
|
|
2111
|
+
lda objbuffers.1.ypos+1,x ; same computation
|
|
2112
|
+
clc
|
|
2113
|
+
adc objbuffers.1.yofs,x
|
|
2114
|
+
bpl _oicor4 ; if negative, will be 0
|
|
2115
|
+
lda #$0000
|
|
2116
|
+
_oicor4:
|
|
2117
|
+
sta objtmp4
|
|
2118
|
+
|
|
2119
|
+
cmp objtmp3
|
|
2120
|
+
bcs _oicor5
|
|
2121
|
+
adc objbuffers.1.height,x
|
|
2122
|
+
cmp objtmp3
|
|
2123
|
+
bmi _oicoend
|
|
2124
|
+
|
|
2125
|
+
_oicor5:
|
|
2126
|
+
lda objtmp3
|
|
2127
|
+
clc
|
|
2128
|
+
adc objbuffers.1.height,y
|
|
2129
|
+
cmp objtmp4
|
|
2130
|
+
bmi _oicoend
|
|
2131
|
+
|
|
2132
|
+
lda #$0001 ; here, we have collision
|
|
2133
|
+
sta.w tcc__r0
|
|
2134
|
+
|
|
2135
|
+
_oicoend:
|
|
2136
|
+
|
|
2137
|
+
ply
|
|
2138
|
+
plx
|
|
2139
|
+
plb
|
|
2140
|
+
plp
|
|
2141
|
+
rtl
|
|
2142
|
+
|
|
2143
|
+
.ENDS
|
|
2144
|
+
|
|
2145
|
+
.SECTION ".objects5_text" superfree
|
|
2146
|
+
|
|
2147
|
+
;---------------------------------------------------------------------------------
|
|
2148
|
+
; void objUpdateXY(u16 objhandle)
|
|
2149
|
+
objUpdateXY:
|
|
2150
|
+
php
|
|
2151
|
+
phb
|
|
2152
|
+
|
|
2153
|
+
phx
|
|
2154
|
+
|
|
2155
|
+
sep #$20 ; go to bank object
|
|
2156
|
+
lda #$7e
|
|
2157
|
+
pha
|
|
2158
|
+
plb
|
|
2159
|
+
|
|
2160
|
+
rep #$20
|
|
2161
|
+
lda 8,s ; grab the index of object (5+1+2)
|
|
2162
|
+
asl a
|
|
2163
|
+
asl a
|
|
2164
|
+
asl a
|
|
2165
|
+
asl a
|
|
2166
|
+
asl a
|
|
2167
|
+
asl a
|
|
2168
|
+
tax
|
|
2169
|
+
|
|
2170
|
+
clc
|
|
2171
|
+
lda objbuffers.1.xvel,x ; xvel is negative
|
|
2172
|
+
bpl _oicuxy2
|
|
2173
|
+
|
|
2174
|
+
adc objbuffers.1.xpos,x
|
|
2175
|
+
sta objbuffers.1.xpos,x
|
|
2176
|
+
bcs _oicuxy1
|
|
2177
|
+
|
|
2178
|
+
sep #$20
|
|
2179
|
+
dec objbuffers.1.xpos+2,x
|
|
2180
|
+
rep #$20
|
|
2181
|
+
brl _oicuxy1
|
|
2182
|
+
|
|
2183
|
+
_oicuxy2:
|
|
2184
|
+
adc objbuffers.1.xpos,x ; xvel is positive
|
|
2185
|
+
sta objbuffers.1.xpos,x
|
|
2186
|
+
bcc _oicuxy1
|
|
2187
|
+
sep #$20
|
|
2188
|
+
inc objbuffers.1.xpos+2,x
|
|
2189
|
+
rep #$20
|
|
2190
|
+
|
|
2191
|
+
_oicuxy1:
|
|
2192
|
+
clc
|
|
2193
|
+
lda objbuffers.1.yvel,x ; same thing for yvel
|
|
2194
|
+
bpl _oicuxy3 ; yvel is negative
|
|
2195
|
+
|
|
2196
|
+
adc objbuffers.1.ypos,x
|
|
2197
|
+
sta objbuffers.1.ypos,x
|
|
2198
|
+
bcs _oicuxyend
|
|
2199
|
+
|
|
2200
|
+
sep #$20
|
|
2201
|
+
dec objbuffers.1.ypos+2,x
|
|
2202
|
+
rep #$20
|
|
2203
|
+
brl _oicuxyend
|
|
2204
|
+
|
|
2205
|
+
_oicuxy3:
|
|
2206
|
+
adc objbuffers.1.ypos,x
|
|
2207
|
+
sta objbuffers.1.ypos,x
|
|
2208
|
+
bcc _oicuxyend
|
|
2209
|
+
sep #$20
|
|
2210
|
+
inc objbuffers.1.ypos+2,x
|
|
2211
|
+
rep #$20
|
|
2212
|
+
|
|
2213
|
+
_oicuxyend:
|
|
2214
|
+
plx
|
|
2215
|
+
plb
|
|
2216
|
+
plp
|
|
2217
|
+
rtl
|
|
2218
|
+
|
|
2219
|
+
.ENDS
|
|
2220
|
+
|
|
2221
|
+
.SECTION ".objects6_text" superfree
|
|
2222
|
+
|
|
2223
|
+
.accu 16
|
|
2224
|
+
.index 16
|
|
2225
|
+
.16bit
|
|
2226
|
+
|
|
2227
|
+
_lutcol: ; x - height lut for normal slopes
|
|
2228
|
+
.db $00,$01,$02,$03,$04,$05,$06,$07 ; 0020
|
|
2229
|
+
.db $07,$06,$05,$04,$03,$02,$01,$00 ; 0021
|
|
2230
|
+
.db $04,$04,$05,$05,$06,$06,$07,$07 ; 0022
|
|
2231
|
+
.db $07,$07,$06,$06,$05,$05,$04,$04 ; 0023
|
|
2232
|
+
.db $00,$00,$01,$01,$02,$02,$03,$03 ; 0024
|
|
2233
|
+
.db $03,$03,$02,$02,$01,$01,$00,$00 ; 0025
|
|
2234
|
+
_lutcolInv:; x - height lut for h-flipped slopes
|
|
2235
|
+
.db $07,$06,$05,$04,$03,$02,$01,$00 ; 0020
|
|
2236
|
+
.db $00,$01,$02,$03,$04,$05,$06,$07 ; 0021
|
|
2237
|
+
.db $07,$07,$06,$06,$05,$05,$04,$04 ; 0022
|
|
2238
|
+
.db $04,$04,$05,$05,$06,$06,$07,$07 ; 0024
|
|
2239
|
+
.db $03,$03,$02,$02,$01,$01,$00,$00 ; 0023
|
|
2240
|
+
.db $00,$00,$01,$01,$02,$02,$03,$03 ; 0025
|
|
2241
|
+
|
|
2242
|
+
;note: objtmp1 ; tileCount
|
|
2243
|
+
;note: objtmp2 ; object handle
|
|
2244
|
+
;note: objtmp3 ; tileprop
|
|
2245
|
+
;note: objtmp4 ; enable slope /
|
|
2246
|
+
;note: tcc__r0 $00 ; centerX
|
|
2247
|
+
;note: tcc__r1 $02 ; tile difference
|
|
2248
|
+
;note: tcc__r2 $04 ; centerX relative to tile
|
|
2249
|
+
;note: tcc__r3 $06 ; bottom spot
|
|
2250
|
+
;note: tcc__r4 $08 ; tileFlipState
|
|
2251
|
+
;note: tcc__r5 $0A ; slope correction value
|
|
2252
|
+
|
|
2253
|
+
;---------------------------------------------------------------------------------
|
|
2254
|
+
; Macro definition for slope management
|
|
2255
|
+
|
|
2256
|
+
.MACRO OE_SETVELOCYTY
|
|
2257
|
+
lda objbuffers.1.yvel,x
|
|
2258
|
+
clc
|
|
2259
|
+
adc #GRAVITY
|
|
2260
|
+
cmp #MAX_Y_VELOCITY+1
|
|
2261
|
+
bmi \1 ; add velocity regarding if we do not reach the maximum
|
|
2262
|
+
lda #MAX_Y_VELOCITY
|
|
2263
|
+
.ENDM
|
|
2264
|
+
|
|
2265
|
+
.MACRO OE_GETTILEPROP ; arg1 == 1 store flipstate, Accumulator must contain value from mapadrrowlut
|
|
2266
|
+
clc
|
|
2267
|
+
adc maptile_L1d ; get direct rom
|
|
2268
|
+
tax
|
|
2269
|
+
phb ; push current bank to stack
|
|
2270
|
+
sep #$20 ; 8bit mode
|
|
2271
|
+
lda maptile_L1b.b ; load rom bank address from maptile definitions
|
|
2272
|
+
pha ; push rom bank address to stack
|
|
2273
|
+
plb ; set net bank address
|
|
2274
|
+
rep #$20 ; 16 bit mode
|
|
2275
|
+
lda 0,x ; get maptile
|
|
2276
|
+
plb ; restore bank
|
|
2277
|
+
.if \1 == 1
|
|
2278
|
+
pha
|
|
2279
|
+
and #$C000 ; store flip state
|
|
2280
|
+
sta $08
|
|
2281
|
+
pla
|
|
2282
|
+
.endif
|
|
2283
|
+
and #$03FF ; to have only tile number (no flipx/y)
|
|
2284
|
+
asl a ; to have a 16 bit value for 8 pix
|
|
2285
|
+
tax ; maptile to x
|
|
2286
|
+
lda metatilesprop, x ; get tile type solid, empty...
|
|
2287
|
+
.ENDM
|
|
2288
|
+
|
|
2289
|
+
.MACRO OE_GETYOFFSETLUT ; A must contain some y coordinate
|
|
2290
|
+
bpl + ; if y<0, put it to 0 *FIX 221130 *
|
|
2291
|
+
lda #0000
|
|
2292
|
+
+ lsr a
|
|
2293
|
+
lsr a
|
|
2294
|
+
and #$FFFE ; mask to wordsize
|
|
2295
|
+
.ENDM
|
|
2296
|
+
|
|
2297
|
+
.MACRO OE_SETCENTERXNEW
|
|
2298
|
+
OE_SETCENTERXOLD
|
|
2299
|
+
|
|
2300
|
+
lda objbuffers.1.xvel,x
|
|
2301
|
+
bpl +
|
|
2302
|
+
lda objbuffers.1.xvel+1,x
|
|
2303
|
+
ora #$FF00
|
|
2304
|
+
bra ++
|
|
2305
|
+
+ lda objbuffers.1.xvel+1,x
|
|
2306
|
+
and #$00ff
|
|
2307
|
+
bne ++
|
|
2308
|
+
inc a ; fix pushback when walking right
|
|
2309
|
+
++ clc
|
|
2310
|
+
adc $00 ; new hor center position
|
|
2311
|
+
sta $00 ; store centerX
|
|
2312
|
+
.ENDM
|
|
2313
|
+
|
|
2314
|
+
.MACRO OE_SETCENTERXOLD
|
|
2315
|
+
lda objbuffers.1.width,x ;load width
|
|
2316
|
+
lsr a ;half width to calc bottom tile on middle bottom position
|
|
2317
|
+
clc
|
|
2318
|
+
adc objbuffers.1.xpos+1,x
|
|
2319
|
+
clc
|
|
2320
|
+
adc objbuffers.1.xofs,x ; new Left position
|
|
2321
|
+
|
|
2322
|
+
sta $00 ; store centerX
|
|
2323
|
+
.ENDM
|
|
2324
|
+
|
|
2325
|
+
|
|
2326
|
+
.MACRO OE_CPTETILENUM ; arg 1 == 1 reduce 1 check, arg 2 width or height
|
|
2327
|
+
pha
|
|
2328
|
+
and #$0007 ; compute the number of tiles to test
|
|
2329
|
+
clc
|
|
2330
|
+
adc \2 ; add width or height for right or bottom side
|
|
2331
|
+
dec a ;
|
|
2332
|
+
lsr a ;
|
|
2333
|
+
lsr a ;
|
|
2334
|
+
lsr a ;
|
|
2335
|
+
inc a ;
|
|
2336
|
+
|
|
2337
|
+
.if \1 == 1
|
|
2338
|
+
sec ; if slope enabled reduce one horizonmtal check
|
|
2339
|
+
sbc objtmp4
|
|
2340
|
+
bpl +
|
|
2341
|
+
lda #$0000
|
|
2342
|
+
+:
|
|
2343
|
+
.endif
|
|
2344
|
+
|
|
2345
|
+
sta objtmp1 ; store tilecount for testing to objtmp1
|
|
2346
|
+
pla ; compute the offset line for y
|
|
2347
|
+
lsr a
|
|
2348
|
+
lsr a
|
|
2349
|
+
and #$FFFE
|
|
2350
|
+
.ENDM
|
|
2351
|
+
|
|
2352
|
+
.MACRO OE_SETYPOS ; arg == 1 bottom else 0 top
|
|
2353
|
+
lda objbuffers.1.yvel+1,x ; load vel y to a ;; calc new position
|
|
2354
|
+
.if \1 == 1 ; arg == 1 bottom else top
|
|
2355
|
+
and #$00ff
|
|
2356
|
+
.else
|
|
2357
|
+
ora #$ff00
|
|
2358
|
+
.endif
|
|
2359
|
+
clc
|
|
2360
|
+
adc objbuffers.1.ypos+1,x ;add pos to a
|
|
2361
|
+
clc ; clear carry \
|
|
2362
|
+
adc objbuffers.1.yofs,x ; add offset y to a | for avoid rounding errors
|
|
2363
|
+
|
|
2364
|
+
.if \1 == 1 ; arg == 1 bottom else 0 top
|
|
2365
|
+
clc ; clear carry |
|
|
2366
|
+
adc objbuffers.1.height,x ; add heigth to a /
|
|
2367
|
+
inc a ; a +=1
|
|
2368
|
+
.else
|
|
2369
|
+
clc
|
|
2370
|
+
adc #8
|
|
2371
|
+
.endif
|
|
2372
|
+
|
|
2373
|
+
and #$fff8 ; mask to blocksize
|
|
2374
|
+
sec ; set carry \
|
|
2375
|
+
sbc objbuffers.1.yofs,x ; subtract offset y from a | for avoid rounding errors
|
|
2376
|
+
|
|
2377
|
+
.if \1 == 1 ; arg == 1 bottom else 0 top
|
|
2378
|
+
sec ; set carry |
|
|
2379
|
+
sbc objbuffers.1.height,x ; subtract height y from a /
|
|
2380
|
+
.endif
|
|
2381
|
+
sta objbuffers.1.ypos+1,x
|
|
2382
|
+
stz objbuffers.1.yvel,x
|
|
2383
|
+
.ENDM
|
|
2384
|
+
|
|
2385
|
+
.MACRO OE_ADDX ; arg == 1 right else 0 left
|
|
2386
|
+
lda objbuffers.1.xvel+1,x ; load vel y to a ;; calc new position
|
|
2387
|
+
.if \1 == 1 ; arg == 1 right else 0 left
|
|
2388
|
+
and #$00ff
|
|
2389
|
+
.else
|
|
2390
|
+
ora #$ff00
|
|
2391
|
+
.endif
|
|
2392
|
+
clc
|
|
2393
|
+
adc objbuffers.1.xpos+1,x ;add pos to a
|
|
2394
|
+
clc ; clear carry \
|
|
2395
|
+
adc objbuffers.1.xofs,x ; add offset y to a | for avoid rounding errors
|
|
2396
|
+
|
|
2397
|
+
.if \1 == 1 ; arg == 1 right else 0 left
|
|
2398
|
+
clc ; clear carry |
|
|
2399
|
+
adc objbuffers.1.width,x ; add width to a /
|
|
2400
|
+
.endif
|
|
2401
|
+
.ENDM
|
|
2402
|
+
|
|
2403
|
+
|
|
2404
|
+
.MACRO OE_SETXPOS ; arg == 1 right else 0 left
|
|
2405
|
+
OE_ADDX \1
|
|
2406
|
+
.if \1 == 1
|
|
2407
|
+
inc a ; a +=1
|
|
2408
|
+
.else
|
|
2409
|
+
clc
|
|
2410
|
+
adc #8
|
|
2411
|
+
.endif
|
|
2412
|
+
|
|
2413
|
+
and #$fff8 ; mask to blocksize
|
|
2414
|
+
sec ; set carry \
|
|
2415
|
+
sbc objbuffers.1.xofs,x ; subtract offset y from a | for avoid rounding errors
|
|
2416
|
+
|
|
2417
|
+
.if \1 == 1 ; arg == 1 bottom else 0 top
|
|
2418
|
+
sec ; set carry |
|
|
2419
|
+
sbc objbuffers.1.width,x ; subtract width x from a /
|
|
2420
|
+
.endif
|
|
2421
|
+
sta objbuffers.1.xpos+1,x
|
|
2422
|
+
stz objbuffers.1.xvel,x
|
|
2423
|
+
.ENDM
|
|
2424
|
+
|
|
2425
|
+
.MACRO OE_SETOBJHANDLE_STK ; arg 1 = stackaddress
|
|
2426
|
+
lda \1,s ; grad the index of object (5+1+2+2)
|
|
2427
|
+
xba
|
|
2428
|
+
lsr a
|
|
2429
|
+
lsr a
|
|
2430
|
+
tax ; transfer obj index to X
|
|
2431
|
+
sta objtmp2
|
|
2432
|
+
.ENDM
|
|
2433
|
+
|
|
2434
|
+
;---------------------------------------------------------------------------------
|
|
2435
|
+
; void objCollidMapWithSlopes(u16 objhandle)
|
|
2436
|
+
objCollidMapWithSlopes:
|
|
2437
|
+
php
|
|
2438
|
+
phb
|
|
2439
|
+
phx
|
|
2440
|
+
phy
|
|
2441
|
+
sep #$20
|
|
2442
|
+
lda #$7e
|
|
2443
|
+
pha
|
|
2444
|
+
plb
|
|
2445
|
+
rep #$20 ; A 16 bits
|
|
2446
|
+
stz $0A
|
|
2447
|
+
|
|
2448
|
+
OE_SETOBJHANDLE_STK 10
|
|
2449
|
+
stz objtmp4 ; disable slope logic -> 0
|
|
2450
|
+
|
|
2451
|
+
_oicmsPrecheck
|
|
2452
|
+
ldx objtmp2 ; load objecthandle
|
|
2453
|
+
lda objbuffers.1.yvel,x ; yvel
|
|
2454
|
+
bpl _oicmsCheckSlopes1 ; branch positive Y check >=0 -> if object is falling
|
|
2455
|
+
jmp _oicmsCheckXvelNotZero ; continue without slopes
|
|
2456
|
+
|
|
2457
|
+
_oicmsCheckSlopes1 ; calculate Middlebottom
|
|
2458
|
+
stz objtmp1 ; zero out objtmp1 for
|
|
2459
|
+
OE_SETCENTERXOLD ; set center x
|
|
2460
|
+
lda objbuffers.1.ypos+1,x ; load y pos
|
|
2461
|
+
clc
|
|
2462
|
+
adc objbuffers.1.yofs,x ; add y offs
|
|
2463
|
+
clc
|
|
2464
|
+
adc objbuffers.1.height,x ; add height
|
|
2465
|
+
sta $06 ; store bottom spot
|
|
2466
|
+
dec a ; one pixel up
|
|
2467
|
+
|
|
2468
|
+
OE_GETYOFFSETLUT
|
|
2469
|
+
sta $02 ; presave tile difference
|
|
2470
|
+
tay ; transfer it to y
|
|
2471
|
+
|
|
2472
|
+
_oicmsCheckSlopes11
|
|
2473
|
+
lda $00 ; load centerX
|
|
2474
|
+
lsr a
|
|
2475
|
+
lsr a
|
|
2476
|
+
and #$FFFE
|
|
2477
|
+
clc
|
|
2478
|
+
adc.w mapadrrowlut, y
|
|
2479
|
+
tay
|
|
2480
|
+
OE_GETTILEPROP 0
|
|
2481
|
+
sta objtmp3
|
|
2482
|
+
|
|
2483
|
+
_oicmsCheckSlopes12
|
|
2484
|
+
and #T_SLOPES ; check if its slope
|
|
2485
|
+
beq ++ ; if not next try
|
|
2486
|
+
|
|
2487
|
+
ldx objtmp2 ; load object handle
|
|
2488
|
+
lda objtmp1
|
|
2489
|
+
bne + ; if 0 check if new Y pos is on same tile
|
|
2490
|
+
lda objbuffers.1.yvel+1,x ; load handle
|
|
2491
|
+
and #$00ff
|
|
2492
|
+
clc
|
|
2493
|
+
adc $06 ; add bottom spot
|
|
2494
|
+
dec a
|
|
2495
|
+
OE_GETYOFFSETLUT
|
|
2496
|
+
tay
|
|
2497
|
+
cmp $02 ; --\ if new Y Tile == old Y Tile
|
|
2498
|
+
beq _oicmsEnableResolveSlope ; | leave check
|
|
2499
|
+
lda objbuffers.1.yvel+1,x ; |
|
|
2500
|
+
and #$FF07 ; |
|
|
2501
|
+
stz objbuffers.1.yvel+1,x ; / otherwise zero yvel out
|
|
2502
|
+
|
|
2503
|
+
+ bra _oicmsEnableResolveSlope ; enable resolve slopes
|
|
2504
|
+
|
|
2505
|
+
++ lda objtmp1 ; load tilecount
|
|
2506
|
+
bne _oicmsCheckXvelNotZero ; tilecount is not 0
|
|
2507
|
+
|
|
2508
|
+
lda objbuffers.1.yvel+1,x
|
|
2509
|
+
and #$00ff
|
|
2510
|
+
clc
|
|
2511
|
+
adc $06 ; add bottomspot
|
|
2512
|
+
dec a
|
|
2513
|
+
OE_GETYOFFSETLUT
|
|
2514
|
+
tay
|
|
2515
|
+
|
|
2516
|
+
inc objtmp1
|
|
2517
|
+
brl _oicmsCheckSlopes11
|
|
2518
|
+
|
|
2519
|
+
_oicmsEnableResolveSlope: ; enable slope resolve
|
|
2520
|
+
inc objtmp4 ;
|
|
2521
|
+
|
|
2522
|
+
_oicmsCheckXvelNotZero: ; check xvel != 0
|
|
2523
|
+
ldx objtmp2 ; load objecthandle
|
|
2524
|
+
lda objbuffers.1.xvel,x ; if xvel>=0 -> moving right
|
|
2525
|
+
bne +
|
|
2526
|
+
brl _oicmsCheckYvelDirection ; branch 0
|
|
2527
|
+
+ bpl _oicmsXRightReduceFriction ; xvel > 0 moving right
|
|
2528
|
+
jmp _oicmsXLeftReduceFriction
|
|
2529
|
+
|
|
2530
|
+
_oicmsXRightReduceFriction: ; moving right
|
|
2531
|
+
sec
|
|
2532
|
+
sbc objfriction ; reduce xvel by friction
|
|
2533
|
+
bpl _oicmststx12 ; xvel still > 0 ?
|
|
2534
|
+
stz objbuffers.1.xvel,x ;
|
|
2535
|
+
jmp _oicmsCheckYvelDirection
|
|
2536
|
+
|
|
2537
|
+
_oicmststx12: ; resolve
|
|
2538
|
+
sta objbuffers.1.xvel,x ; store new xvel with reduced objfriction
|
|
2539
|
+
lda objbuffers.1.ypos+1,x ; load y position
|
|
2540
|
+
clc
|
|
2541
|
+
adc objbuffers.1.yofs,x ; add y offset
|
|
2542
|
+
bpl + ; if y<0, put it to 0 *FIX 20221201 */
|
|
2543
|
+
lda #0000
|
|
2544
|
+
|
|
2545
|
+
+ OE_CPTETILENUM 1 objbuffers.1.height,x
|
|
2546
|
+
bne +
|
|
2547
|
+
jmp _oicmsCheckYvelDirection;
|
|
2548
|
+
|
|
2549
|
+
+ tay ; tile number to Y register
|
|
2550
|
+
;Brain: CheckRight
|
|
2551
|
+
OE_ADDX 1
|
|
2552
|
+
lsr a
|
|
2553
|
+
lsr a
|
|
2554
|
+
and #$fffe
|
|
2555
|
+
clc
|
|
2556
|
+
adc.w mapadrrowlut, y
|
|
2557
|
+
|
|
2558
|
+
_oicmsXResolveColRight: ; Apply Collision Right
|
|
2559
|
+
tay
|
|
2560
|
+
OE_GETTILEPROP 0
|
|
2561
|
+
|
|
2562
|
+
ldx objtmp2 ; load objecthandle
|
|
2563
|
+
sta objbuffers.1.tilebprop,x
|
|
2564
|
+
lda objbuffers.1.tilebprop,x
|
|
2565
|
+
beq _oicmsXSelectNextTile
|
|
2566
|
+
and #$ff00 ; keep only the high values for collision
|
|
2567
|
+
beq _oicmsXSelectNextTile
|
|
2568
|
+
|
|
2569
|
+
OE_SETXPOS 1 ; arg == 1 resolve right collision
|
|
2570
|
+
brl _oicmsCheckYvelDirection
|
|
2571
|
+
|
|
2572
|
+
_oicmsXSelectNextTile:
|
|
2573
|
+
tya ; go through all y available
|
|
2574
|
+
clc
|
|
2575
|
+
adc.l maprowsize
|
|
2576
|
+
dec objtmp1
|
|
2577
|
+
bne _oicmsXResolveColRight
|
|
2578
|
+
brl _oicmsCheckYvelDirection
|
|
2579
|
+
|
|
2580
|
+
_oicmsXLeftReduceFriction: ; moving left (xvel<0)
|
|
2581
|
+
clc
|
|
2582
|
+
adc objfriction
|
|
2583
|
+
bmi _oicmststxna
|
|
2584
|
+
stz objbuffers.1.xvel,x ; currently it is not ok to go left
|
|
2585
|
+
brl _oicmsCheckYvelDirection
|
|
2586
|
+
|
|
2587
|
+
_oicmststxna:
|
|
2588
|
+
sta objbuffers.1.xvel,x
|
|
2589
|
+
lda objbuffers.1.ypos+1,x
|
|
2590
|
+
clc
|
|
2591
|
+
adc objbuffers.1.yofs,x
|
|
2592
|
+
bpl + ; if y<0, put it to 0 *FIX 20221201 */
|
|
2593
|
+
lda #0000
|
|
2594
|
+
|
|
2595
|
+
+ OE_CPTETILENUM 1 objbuffers.1.height,x;
|
|
2596
|
+
;Brain: CheckLeft
|
|
2597
|
+
tay
|
|
2598
|
+
|
|
2599
|
+
OE_ADDX 0
|
|
2600
|
+
bpl _oicmststxnb ; if negative, don't bother to test, will change screen
|
|
2601
|
+
jmp _oicmsCheckYvelDirection
|
|
2602
|
+
|
|
2603
|
+
_oicmststxnb:
|
|
2604
|
+
lsr a
|
|
2605
|
+
lsr a
|
|
2606
|
+
and #$fffe
|
|
2607
|
+
clc
|
|
2608
|
+
adc.w mapadrrowlut, y
|
|
2609
|
+
|
|
2610
|
+
_oicmststxnc: ; Apply Collision Left
|
|
2611
|
+
tay
|
|
2612
|
+
OE_GETTILEPROP 0
|
|
2613
|
+
ldx objtmp2 ; load objecthandle
|
|
2614
|
+
sta objbuffers.1.tilebprop,x
|
|
2615
|
+
lda objbuffers.1.tilebprop,x
|
|
2616
|
+
beq _oicmststxnd
|
|
2617
|
+
|
|
2618
|
+
and #$ff00 ; keep only the high values for collision
|
|
2619
|
+
beq _oicmststxnd
|
|
2620
|
+
OE_SETXPOS 0 ; arg == 0 resolve left collision
|
|
2621
|
+
|
|
2622
|
+
brl _oicmsCheckYvelDirection
|
|
2623
|
+
|
|
2624
|
+
_oicmststxnd:
|
|
2625
|
+
tya
|
|
2626
|
+
clc
|
|
2627
|
+
adc.l maprowsize
|
|
2628
|
+
dec objtmp1
|
|
2629
|
+
bne _oicmststxnc ; go through all y available
|
|
2630
|
+
brl _oicmsCheckYvelDirection
|
|
2631
|
+
|
|
2632
|
+
_oicmsResolveSlope1:
|
|
2633
|
+
lda objbuffers.1.yvel+1,x
|
|
2634
|
+
and #$00ff
|
|
2635
|
+
clc
|
|
2636
|
+
adc $06 ; add bottom spot
|
|
2637
|
+
dec a
|
|
2638
|
+
sta objtmp4
|
|
2639
|
+
|
|
2640
|
+
OE_GETYOFFSETLUT
|
|
2641
|
+
tay ; transfer it to y
|
|
2642
|
+
OE_SETCENTERXNEW ; calculate
|
|
2643
|
+
lsr a
|
|
2644
|
+
lsr a
|
|
2645
|
+
and #$FFFE
|
|
2646
|
+
clc
|
|
2647
|
+
adc.w mapadrrowlut, y
|
|
2648
|
+
tay
|
|
2649
|
+
OE_GETTILEPROP 1 ; arg1 == 1 store tile flipstate
|
|
2650
|
+
sta objtmp3
|
|
2651
|
+
cmp #$0030
|
|
2652
|
+
bcs _oicmsPrepYvelDown
|
|
2653
|
+
cmp #$0020
|
|
2654
|
+
bcc _oicmsPrepYvelDown
|
|
2655
|
+
|
|
2656
|
+
_oicmsResolveSlope2:
|
|
2657
|
+
lda $00 ; load centerX
|
|
2658
|
+
and #$0007
|
|
2659
|
+
sta $04 ; store centerX relative to tile
|
|
2660
|
+
|
|
2661
|
+
lda objtmp3 ; load tileprop index
|
|
2662
|
+
sec
|
|
2663
|
+
sbc #T_SLOPES ; set index of _lutcol 0-5
|
|
2664
|
+
asl a ; \
|
|
2665
|
+
asl a ; | offseting for _lutcol address
|
|
2666
|
+
asl a ; /
|
|
2667
|
+
adc $04 ; offsets to tileperfect
|
|
2668
|
+
tax ; transfer index _lutcol + tileoffset to x register
|
|
2669
|
+
|
|
2670
|
+
lda $08 ; load flip state
|
|
2671
|
+
sep #$20 ; set to 8 bit
|
|
2672
|
+
xba ; swap High to Low
|
|
2673
|
+
and #$40 ; Check if tile is horizontaly flipped
|
|
2674
|
+
beq +
|
|
2675
|
+
lda.l _lutcol,x ; get Slope y value on x pixel not flipped
|
|
2676
|
+
bra ++
|
|
2677
|
+
+ lda.l _lutcolInv,x ; get Slope y value on x pixel flipped
|
|
2678
|
+
++ sta $0A ; store slope correction value
|
|
2679
|
+
|
|
2680
|
+
_oicmsResolveSlope3:
|
|
2681
|
+
ldx objtmp2
|
|
2682
|
+
lda objtmp4 ; posY
|
|
2683
|
+
|
|
2684
|
+
and #$07
|
|
2685
|
+
cmp $0A ; compare to correction value
|
|
2686
|
+
rep #$20
|
|
2687
|
+
bcs +
|
|
2688
|
+
brl _oicms61
|
|
2689
|
+
|
|
2690
|
+
+ lda objtmp3
|
|
2691
|
+
sta objbuffers.1.tilestand,x ; store the tile we are standing on
|
|
2692
|
+
|
|
2693
|
+
lda objtmp4
|
|
2694
|
+
and #$fff8
|
|
2695
|
+
sec ; set carry \
|
|
2696
|
+
sbc objbuffers.1.yofs,x ; subtract offset y from a | for avoid rounding errors
|
|
2697
|
+
sec ; set carry |
|
|
2698
|
+
sbc objbuffers.1.height,x ; subtract height y from a /
|
|
2699
|
+
sep #$20
|
|
2700
|
+
clc
|
|
2701
|
+
adc $0A ; slope correction value
|
|
2702
|
+
rep #$20
|
|
2703
|
+
inc a
|
|
2704
|
+
|
|
2705
|
+
sta objbuffers.1.ypos+1,x
|
|
2706
|
+
stz objbuffers.1.yvel,x
|
|
2707
|
+
;jmp _oicmsend
|
|
2708
|
+
brl _oicmsend
|
|
2709
|
+
|
|
2710
|
+
_oicmsCheckYvelDirection:
|
|
2711
|
+
ldx objtmp2 ; restore object index to
|
|
2712
|
+
lda objtmp4 ; if slope resolve is set
|
|
2713
|
+
beq +
|
|
2714
|
+
brl _oicmsResolveSlope1
|
|
2715
|
+
+ lda objbuffers.1.yvel,x
|
|
2716
|
+
bpl _oicms11 ; yvel > 0 moving down
|
|
2717
|
+
jmp _oicmststyn ; yvel moving up
|
|
2718
|
+
|
|
2719
|
+
_oicmsPrepYvelDown:
|
|
2720
|
+
rep #$20
|
|
2721
|
+
ldx objtmp2
|
|
2722
|
+
stz objtmp4
|
|
2723
|
+
lda objbuffers.1.yvel,x
|
|
2724
|
+
|
|
2725
|
+
_oicms11:
|
|
2726
|
+
xba
|
|
2727
|
+
and #$00FF
|
|
2728
|
+
clc
|
|
2729
|
+
adc objbuffers.1.ypos+1,x ; add y pos
|
|
2730
|
+
clc
|
|
2731
|
+
adc objbuffers.1.yofs,x ; add y offs
|
|
2732
|
+
clc
|
|
2733
|
+
adc objbuffers.1.height,x ; add ; a contains y velocity so enw ypos
|
|
2734
|
+
bpl + ; if y<0, put it to 0 *FIX 221130 *
|
|
2735
|
+
lda #0000
|
|
2736
|
+
|
|
2737
|
+
+ lsr a
|
|
2738
|
+
lsr a
|
|
2739
|
+
and #$FFFE ; only even numbers
|
|
2740
|
+
tay ; transfer it to y
|
|
2741
|
+
|
|
2742
|
+
lda objbuffers.1.xpos+1,x ; load x pos
|
|
2743
|
+
clc
|
|
2744
|
+
adc objbuffers.1.xofs,x ; add offset (left edge of object)
|
|
2745
|
+
OE_CPTETILENUM 0 objbuffers.1.width,x
|
|
2746
|
+
clc
|
|
2747
|
+
adc.w mapadrrowlut, y ; add row
|
|
2748
|
+
|
|
2749
|
+
tay
|
|
2750
|
+
OE_GETTILEPROP 0
|
|
2751
|
+
sta objtmp3
|
|
2752
|
+
bra _oicms21 ; goto tile type check
|
|
2753
|
+
|
|
2754
|
+
_oicms2:
|
|
2755
|
+
tya
|
|
2756
|
+
OE_GETTILEPROP 0
|
|
2757
|
+
sta objtmp3
|
|
2758
|
+
|
|
2759
|
+
_oicms21:
|
|
2760
|
+
ldx objtmp2
|
|
2761
|
+
sta objbuffers.1.tilesprop,x
|
|
2762
|
+
lda objbuffers.1.tilesprop,x
|
|
2763
|
+
cmp #T_LADDER ; if ladder, well avoid doing stuffs
|
|
2764
|
+
beq _oicms3
|
|
2765
|
+
cmp #T_PLATE ; if on a plate, do same thing
|
|
2766
|
+
beq _oicms3
|
|
2767
|
+
|
|
2768
|
+
cmp #T_FIRES ; if fire, player is burning
|
|
2769
|
+
bne _oicms22
|
|
2770
|
+
lda #ACT_BURN ; player is now dying, no more checking
|
|
2771
|
+
sta objbuffers.1.action
|
|
2772
|
+
jmp _oicmsend
|
|
2773
|
+
|
|
2774
|
+
_oicms22:
|
|
2775
|
+
cmp #T_SPIKE ; if spike, player is dying too
|
|
2776
|
+
bne _oicms23
|
|
2777
|
+
lda #ACT_DIE
|
|
2778
|
+
sta objbuffers.1.action
|
|
2779
|
+
jmp _oicmsend
|
|
2780
|
+
|
|
2781
|
+
_oicms23: ; check tile collision
|
|
2782
|
+
and #$ff00 ; keep only the high values for collision
|
|
2783
|
+
beq _oicms4 ; if no collision
|
|
2784
|
+
|
|
2785
|
+
_oicms3: ; positioning on bottom collision
|
|
2786
|
+
lda objtmp3
|
|
2787
|
+
sta objbuffers.1.tilestand,x ; store the tile we are standing on
|
|
2788
|
+
OE_SETYPOS 1 ;
|
|
2789
|
+
jmp _oicmsend
|
|
2790
|
+
|
|
2791
|
+
_oicms4: ; increment Y-Register for next tile check on x-axis
|
|
2792
|
+
rep #$20 ; continue to test the tiles on x
|
|
2793
|
+
iny ; y +=1
|
|
2794
|
+
iny ; y +=1
|
|
2795
|
+
dec objtmp1 ; tilecount on x to check -= 1
|
|
2796
|
+
beq _oicms5
|
|
2797
|
+
brl _oicms2
|
|
2798
|
+
|
|
2799
|
+
_oicms5:
|
|
2800
|
+
ldx objtmp2 ; not standing on anything or ladder, now falling if not climbing
|
|
2801
|
+
stz objbuffers.1.tilestand,x
|
|
2802
|
+
|
|
2803
|
+
lda objbuffers.1.tilesprop,x ; need again to verify if not tile standing
|
|
2804
|
+
beq _oicms61
|
|
2805
|
+
lda objbuffers.1.action,x ; if not climbing, well doing like if falling
|
|
2806
|
+
and #ACT_CLIMB
|
|
2807
|
+
beq _oicms61
|
|
2808
|
+
brl _oicmsend
|
|
2809
|
+
|
|
2810
|
+
_oicms61:
|
|
2811
|
+
OE_SETVELOCYTY _oicms6
|
|
2812
|
+
|
|
2813
|
+
_oicms6:
|
|
2814
|
+
sta objbuffers.1.yvel,x
|
|
2815
|
+
brl _oicmsend
|
|
2816
|
+
|
|
2817
|
+
_oicmststyn: ; yvel<0, object is moving upwards----------------------------
|
|
2818
|
+
stz objbuffers.1.tilestand,x ; zero out "tilestand"
|
|
2819
|
+
xba
|
|
2820
|
+
ora #$FF00
|
|
2821
|
+
clc
|
|
2822
|
+
adc objbuffers.1.ypos+1,x
|
|
2823
|
+
clc
|
|
2824
|
+
adc objbuffers.1.yofs,x
|
|
2825
|
+
bpl + ; if y < 0, put it to 0 *FIX 221126*
|
|
2826
|
+
|
|
2827
|
+
lda #0000
|
|
2828
|
+
+ lsr a
|
|
2829
|
+
lsr a
|
|
2830
|
+
and #$FFFE
|
|
2831
|
+
tay
|
|
2832
|
+
|
|
2833
|
+
lda objbuffers.1.xpos+1,x
|
|
2834
|
+
clc
|
|
2835
|
+
adc objbuffers.1.xofs,x
|
|
2836
|
+
|
|
2837
|
+
OE_CPTETILENUM 0 objbuffers.1.width
|
|
2838
|
+
|
|
2839
|
+
clc
|
|
2840
|
+
adc.w mapadrrowlut, y
|
|
2841
|
+
tay
|
|
2842
|
+
|
|
2843
|
+
OE_GETTILEPROP 0
|
|
2844
|
+
bra _oicmststyn2 ; speedup, saves some cycles
|
|
2845
|
+
|
|
2846
|
+
_oicmststyn1:
|
|
2847
|
+
tya
|
|
2848
|
+
OE_GETTILEPROP 0
|
|
2849
|
+
|
|
2850
|
+
_oicmststyn2:
|
|
2851
|
+
ldx objtmp2
|
|
2852
|
+
sta objbuffers.1.tilesprop,x
|
|
2853
|
+
lda objbuffers.1.tilesprop,x
|
|
2854
|
+
cmp #T_LADDER ; if ladder, well avoid doing stuffs
|
|
2855
|
+
beq _oicmststyn4
|
|
2856
|
+
|
|
2857
|
+
and #$ff00 ; keep only the high values for collision
|
|
2858
|
+
beq _oicmststyn3
|
|
2859
|
+
|
|
2860
|
+
OE_SETYPOS 0 ;arg 0 == top correction
|
|
2861
|
+
bra _oicmststyn4
|
|
2862
|
+
|
|
2863
|
+
_oicmststyn3: ; continue to test next tile on x axis
|
|
2864
|
+
iny ; increase Y Register for next
|
|
2865
|
+
iny
|
|
2866
|
+
dec objtmp1 ; decrease tilecount
|
|
2867
|
+
bne _oicmststyn1 ; if tilecount not 0 jump to _oicmststyn1 for next collision test
|
|
2868
|
+
|
|
2869
|
+
_oicmststyn4: ; not standing on anything, now falling by adding gravity
|
|
2870
|
+
ldx objtmp2 ; load objecthandle
|
|
2871
|
+
OE_SETVELOCYTY _oicmststyn5
|
|
2872
|
+
_oicmststyn5:
|
|
2873
|
+
sta objbuffers.1.yvel,x
|
|
2874
|
+
|
|
2875
|
+
_oicmsend:
|
|
2876
|
+
ply
|
|
2877
|
+
plx
|
|
2878
|
+
plb
|
|
2879
|
+
plp
|
|
2880
|
+
rtl
|
|
2881
|
+
.ENDS
|