diff --git a/Makefile b/Makefile index 9fff960f3..924a6be83 100644 --- a/Makefile +++ b/Makefile @@ -31,22 +31,25 @@ dsk: asm $(CADIUS) ADDFILE build/"$(DISK)" "/$(VOLUME)/" "build/LAUNCHER.SYSTEM" >>build/log rsync -aP res/PREFS.CONF build/PREFS.CONF >> build/log bin/padto.sh 512 build/PREFS.CONF >>build/log - bin/buildhelp.sh "build/HELPFUL" "build/helper.inc" >>build/log - $(ACME) -r build/helper.lst src/helper/helper.a >>build/log + bin/buildhelp.sh "res/GAMES.CONF" "build/HELP.DATA" "build/HELPFUL" >>build/log bin/buildokvs.sh "res/ATTRACT.CONF" "build/ATTRACT.DATA" >>build/log - bin/buildfx.sh "res/FX.CONF" "build/FX.DATA" "build/FXFUL" >>build/log - bin/buildfx.sh "res/DFX.CONF" "build/DFX.DATA" "build/DFXFUL" >>build/log - for f in res/TITLE res/COVER res/HELP res/GAMES.CONF build/ATTRACT.DATA build/FX.DATA build/FXFUL build/DFX.DATA build/DFXFUL build/PREFS.CONF res/CREDITS res/HELPTEXT build/HELPER build/HELPFUL res/DECRUNCH res/JOYSTICK res/Finder.Data res/Finder.Root; do $(CADIUS) ADDFILE build/"$(DISK)" "/$(VOLUME)/" "$$f" >>build/log; done + bin/buildfx.sh "res/FX.CONF" "build/FX.DATA" "build/FXFUL" "build/FX" >>build/log + bin/buildfx.sh "res/DFX.CONF" "build/DFX.DATA" "build/DFXFUL" "build/FX" >>build/log + rm -f build/SSDIR.CONF && touch build/SSDIR.CONF + for f in res/SS/*; do bin/buildokvs.sh "$$f" "build/SS/$$(basename $$f)" && echo "$$(basename $$f)" >> build/SSDIR.CONF; done >>build/log + bin/buildfx.sh "build/SSDIR.CONF" "build/SS.DATA" "build/SSFUL" "build/SS" >>build/log + rm -f build/ATTRACTDIR.CONF && touch build/ATTRACTDIR.CONF + for f in res/ATTRACT/*; do bin/buildokvs.sh "$$f" "build/ATTRACT/$$(basename $$f)" && echo "$$(basename $$f)" >> build/ATTRACTDIR.CONF; done >>build/log + bin/buildfx.sh "build/ATTRACTDIR.CONF" "build/ATTRACTIVE" "build/ATTRACTFUL" "build/ATTRACT" >>build/log + for f in res/TITLE res/COVER res/HELP res/GAMES.CONF build/PREFS.CONF res/CREDITS res/HELPTEXT build/ATTRACT.DATA build/FX.DATA build/FXFUL build/DFX.DATA build/DFXFUL build/HELP.DATA build/HELPFUL build/SS.DATA build/SSFUL build/ATTRACTIVE build/ATTRACTFUL res/DECRUNCH res/JOYSTICK res/Finder.Data res/Finder.Root; do $(CADIUS) ADDFILE build/"$(DISK)" "/$(VOLUME)/" "$$f" >>build/log; done bin/buildfileinfo.sh res/TITLE.HGR "06" "4000" >>build/log bin/buildfileinfo.sh res/TITLE.DHGR "06" "4000" >>build/log bin/buildfileinfo.sh res/ACTION.HGR "06" "3FF8" >>build/log bin/buildfileinfo.sh res/ACTION.DHGR "06" "3FF8" >>build/log bin/buildfileinfo.sh res/ACTION.GR "06" "6000" >>build/log bin/buildfileinfo.sh res/ARTWORK.SHR "06" "1FF8" >>build/log - bin/buildfileinfo.sh res/ATTRACT "04" "8000" >>build/log - bin/buildfileinfo.sh res/SS "04" "4000" >>build/log bin/buildfileinfo.sh res/ICONS "CA" "0000" >>build/log - for f in res/TITLE.HGR res/TITLE.DHGR res/ACTION.HGR res/ACTION.DHGR res/ACTION.GR res/ARTWORK.SHR res/ATTRACT res/SS res/DEMO res/TITLE.ANIMATED res/ICONS; do rm -f "$$f"/.DS_Store; $(CADIUS) ADDFOLDER build/"$(DISK)" "/$(VOLUME)/$$(basename $$f)" "$$f" >>build/log; done + for f in res/TITLE.HGR res/TITLE.DHGR res/ACTION.HGR res/ACTION.DHGR res/ACTION.GR res/ARTWORK.SHR res/DEMO res/TITLE.ANIMATED res/ICONS; do rm -f "$$f"/.DS_Store; $(CADIUS) ADDFOLDER build/"$(DISK)" "/$(VOLUME)/$$(basename $$f)" "$$f" >>build/log; done for i in 1 2 3 4 5 6; do $(CADIUS) RENAMEFILE build/"$(DISK)" "/$(VOLUME)/DEMO/SPCARTOON.$${i}$${i}" "SPCARTOON.$${i}." >>build/log; done $(CADIUS) CREATEFOLDER build/"$(DISK)" "/$(VOLUME)/FX/" >>build/log for f in build/FX/COVERFADE build/FX/GR.FIZZLE build/FX/SHR.FIZZLE build/FX/*.DATA; do $(CADIUS) ADDFILE "build/$(DISK)" "/$(VOLUME)/FX/" "$$f"; done >>build/log @@ -88,7 +91,7 @@ mount: dsk osascript bin/V2Make.scpt "`pwd`" bin/4cade.vii build/"$(DISK)" md: - mkdir -p build/X build/FX build/PRELAUNCH + mkdir -p build/X build/FX build/PRELAUNCH build/ATTRACT build/SS touch build/log clean: diff --git a/bin/buildfx.sh b/bin/buildfx.sh index 73f29c4cf..29604cfbb 100755 --- a/bin/buildfx.sh +++ b/bin/buildfx.sh @@ -1,5 +1,13 @@ #!/bin/bash +# run from project root directory + +# parameters +# 1 - input filename of text file containing list of effects (probably FX.CONF or DFX.CONF) +# 2 - output filename for index file +# 3 - output filename for merged-effects file +# 4 - input directory of (previously assembled) effects files + # create or truncate merged-effects file :>| "$3" @@ -16,7 +24,7 @@ source=$(mktemp) echo "!byte ${#key}" # OKVS key length echo "!text \"$key\"" # OKVS key (effect name) echo "!be24 $(wc -c <"$3")" # offset into merged-effects file - cat "build/FX/$key" >> "$3" # add effect code into merged-effects file + cat "$4/$key" >> "$3" # add effect code into merged-effects file # (all effects were previously assembled) done < "$records") > "$source" diff --git a/bin/buildhelp.sh b/bin/buildhelp.sh index 3645e4887..603e847e6 100755 --- a/bin/buildhelp.sh +++ b/bin/buildhelp.sh @@ -2,21 +2,37 @@ # run from project root directory -# make in-memory array of game filenames -games=$(grep "," res/GAMES.CONF | grep -v "^#" | cut -d"," -f2 | cut -d"=" -f1 | sort) +# parameters +# 1 - input filename of text file containing list of games (probably GAMES.CONF) +# 2 - output filename for index file +# 3 - output filename for merged-gamehelp file + +# make temp file with list of game filenames +records=$(mktemp) +grep "," < "$1" | grep -v "^#" | cut -d"," -f2 | cut -d"=" -f1 | sort > "$records" # first help text is the 'TODO' placeholder screen -cp res/GAMEHELP/STANDARD "$1" -for c in {A..Z}; do - echo "group$c" # group games by first letter - for game in $(echo "$games" | grep "^$c"); do - echo "!byte ${#game}" # key length - echo "!text \"$game\"" # key (game filename) - if [ -f "res/GAMEHELP/$game" ]; then - echo "!be24 $(wc -c <"$1")" # value (3-byte big-endian offset into merged help file) - cat res/GAMEHELP/"$game" >> "$1" - else - echo "!be24 0" # if game has no help, reuse placeholder at offset 0 - fi - done -done > "$2" +cp res/GAMEHELP/STANDARD "$3" + +# make temp assembly source file that represents the binary OKVS data structure +source=$(mktemp) +(echo "*=0" # dummy program counter for assembler + echo "!le16 $(wc -l <"$records"), 0" # OKVS header + while read -r key; do + echo "!byte ${#key}+5" # OKVS record length + echo "!byte ${#key}" # OKVS key length + echo "!text \"$key\"" # OKVS key (effect name) + if [ -f "res/GAMEHELP/$key" ]; then + echo "!be24 $(wc -c <"$3")" # value (3-byte big-endian offset into merged-gamehelp file) + cat res/GAMEHELP/"$key" >> "$3" + else + echo "!be24 0" # if game has no help, reuse placeholder at offset 0 + fi + done < "$records") > "$source" + +# assemble temp source file to create binary OKVS data structure +acme -o "$2" "$source" + +# clean up +rm "$source" +rm "$records"