-Compile assets in .z80 format to .bin
-Compress .bin to .rle
-Move .rle to their asset folders and delete the .bin artifacts
-Compiles the ROM (using tniasm)
-Analyzes the label definitions to calculate remaining byte space AND automatically adds breakpoints to an openMSX config file
-Launches OpenMSX w/ the proper configs
I've pasted it at the bottom of this post.
BEHOLD, IRIDESCENT:
IRIDESCENT is a two-player, pseudo-random cyberpunk hack-and-slash. Imagine Gauntlet or Smash TV crossed with Shadowrun.
Progress shown above:
-Room data is decompressed on load, enemies are populated in RAM simultaneously.
-Support for 25 enemies at once
-Enemies animate and collide with the player and projectiles, player collides w/ 2px accuracy on walls/enemies
-Video buffering - 1/3 of the screen tiles from RAM buffer are drawn to the VDP per frame, easily allotting for 60 fps sprite action with no play impact
-PSG-only MuSICA playback
The white is video blank code. By only doing 1/3 of the screen tiles at once, this easily keeps update time within blank interval.
Green is per-frame CPU code. After optimizations today, it's been cut down to allot for PLENTY of more calculations!
compile-and-run.sh:
#!/bin/bash check_success(){ if [ $? -eq 0 ]; then : else cat errors.log echo echo Compile script failed. Terminating. exit 1 fi } echo Compiling assets... za=$(wine tniasm ./screens/screen1.z80 ./screen1.bin) check_success
...
echo Compressing assets... za=$(python3 ./rlenc.py screen1.bin) check_success
...
# move compressed data to folders and remove artifacts mv screen1.rle ./screens/ rm screen1.bin
...
echo Done. Compiling ROM... calc_block_size () { # $1 = label to find, end of used-up memory # $2 = start of block (byte no.) # $3 = full size of block in b te="$(grep -i $1 tniasm.sym)" a="$te" b=${a#*:} c=${b%;*} te2="$(echo "$c" | tr -dc '0-9','A-F')" d="$te2" t3="$(echo "obase=10; ibase=16; $d" | bc)" e="$t3" f="$(($e-$2))" g="$(($3-$f))" } # compile rom, catch errors w=$(wine ./tniasm.exe gamerom.z80 irides.rom 2> errors.log) check_success echo Success. find_debug_points(){ db=($(grep -i breakpoint tniasm.sym)) for i in ${db[@]}; do vv=${i#*:} vb=${vv%;*} vc=$(echo "$vb" | tr -dc '0-9','A-F') vd="$vc" if [ ${#vd} == 5 ]; then echo debug set_bp 0x$vd >> m1.txt echo Breakpoint found @ \$$vd fi done } echo plug joyporta keyjoystick1 > m1.txt find_debug_points calc_block_size PlayerCompressed_end 16384 16384 echo "$g bytes remaining in data block (\$04000-\$$d)" calc_block_size EndMainCode 32768 9655 echo "$g bytes remaining in code block A (\$08000-\$$d)" calc_block_size EndBlockTwo 42423 6729 echo "$g bytes remaining in code block B (\$0a5b7-\$$d)" calc_block_size EndRAM 49152 3583 echo "$g bytes remaining for RAM (\$0c000-\$$d)" echo Launching OpenMSX... sudo /opt/openMSX/bin/openmsx -machine Sony_HB-10 -cart ./irides.rom -script m1.txtThe output looks like this:
No comments:
Post a Comment