# Required tools:
# 	Pasmo - http://www.arrakis.es/~ninsesabe/pasmo/
#	zmakebas - http://rus.members.beeb.net/zmakebas.html
#	Chrust - http://www.west.co.tt/matt/speccy/chrust/
#	Ruby - http://www.ruby-lang.org/en/
#	RMagick - http://rmagick.rubyforge.org/
#	an environment UNIXy enough to have make, cat, dd and rm - http://www.gnu.org/
#
# Note - some of the dependencies below may be broken, as it started to get
#	horribly complicated and was written in a mad rush. Sorry about that.

koopaville.tap: koopaville.bas.tap koopavi1.tap koopavi2.tap koopavi3.tap koopavi4.tap
	cat koopaville.bas.tap koopavi1.tap koopavi2.tap koopavi3.tap koopavi4.tap > koopaville.tap

koopaville.bas.tap: koopaville.bas
	zmakebas -a 10 -n Koopaville -o koopaville.bas.tap koopaville.bas

koopavi1.tap page3.sym: page3.asm interrupt_81.bin stars_p3.bin.hru
	pasmo --tap --name koopavi1 page3.asm koopavi1.tap page3.sym

koopavi2.tap: page4.asm stars_p4.bin.hru
	pasmo --tap --name koopavi2 page4.asm koopavi2.tap

koopavi3.tap page1.sym: page1.asm kickin.scr.hru disco.bin.hru endscreen.scr.hru
	pasmo --tap --name koopavi3 page1.asm koopavi3.tap page1.sym

koopavi4.tap: bootstrap.asm dehrust.asm main.bin.hru
	pasmo --tap --name koopavi4 bootstrap.asm koopavi4.tap

music.bin music.sym: music.asm stc_player.asm mario.stc
	pasmo --public music.asm music.bin music.sym
	
main.bin.hru: main.bin
	chrust main.bin main.bin.hru

main.bin: main.asm globals.sym interrupt_ae.bin interrupt_ae.sym music.bin music.sym bading.asm logo.asm game_logo.asm game_logo.pix.hru game_logo.attr attract.asm attract1.bin floor.asm raster.bin.hru page3.sym page1.sym
	pasmo main.asm main.bin
	
interrupt_81.bin interrupt_81.sym: interrupt_81.asm music.sym globals.sym
	pasmo --public interrupt_81.asm interrupt_81.bin interrupt_81.sym

interrupt_ae.bin interrupt_ae.sym: interrupt_ae.asm music.sym globals.sym
	pasmo --public interrupt_ae.asm interrupt_ae.bin interrupt_ae.sym
	
stars.bin: stars.asm triad.dlt big_font.asm interrupt_81.sym
	pasmo stars.asm stars.bin
	
stars_p3.bin: stars.bin
	dd if=stars.bin of=stars_p3.bin bs=256 count=62

stars_p4.bin: stars.bin
	dd if=stars.bin of=stars_p4.bin bs=256 skip=62

stars_p3.bin.hru: stars_p3.bin
	chrust stars_p3.bin stars_p3.bin.hru
	
stars_p4.bin.hru: stars_p4.bin
	chrust stars_p4.bin stars_p4.bin.hru

logo.asm: xbm2asm.rb logo.xbm
	ruby xbm2asm.rb logo.xbm > logo.asm
	
game_logo.pix: game_logo.scr
	dd if=game_logo.scr of=game_logo.pix bs=2048 count=2
	
game_logo.pix.hru: game_logo.pix
	chrust game_logo.pix game_logo.pix.hru
	
game_logo.attr: game_logo.scr
	dd if=game_logo.scr of=game_logo.attr bs=32 skip=192 count=12
	
# also creates attract2.bin
attract1.bin: convert.rb background.scr
	ruby convert.rb background.scr

floor.asm: xbm2asm.rb floor.xbm
	ruby xbm2asm.rb floor.xbm > floor.asm

triad.dlt: triad.rb delta_compressor.rb
	ruby triad.rb > triad.dlt
	
big_font.asm: get_font.rb big_font.scr
	ruby get_font.rb big_font.scr > big_font.asm

raster.bin.hru: raster.bin
	chrust raster.bin raster.bin.hru
	
raster.bin: raster.asm sine.asm possible.bin this_isnt.bin interrupt_81.sym widesine.asm doublesine.asm
	pasmo raster.asm raster.bin

possible.bin: xbm2scr.rb possible.xbm
	ruby xbm2scr.rb possible.xbm > possible.bin

this_isnt.bin: xbm2scr.rb this_isnt.xbm
	ruby xbm2scr.rb this_isnt.xbm > this_isnt.bin

sine.asm: sine.rb
	ruby sine.rb 15 16 > sine.asm

widesine.asm: sine.rb
	ruby sine.rb 127 128 > widesine.asm

doublesine.asm: sine.rb
	ruby sine.rb 15 16 64 > doublesine.asm

kickin.scr.hru: kickin.scr
	chrust kickin.scr kickin.scr.hru

disco.bin.hru: disco.bin
	chrust disco.bin disco.bin.hru

disco.bin: disco.asm bigsine.asm perspect.asm texture.bin texture2.bin arcade_font.bin interrupt_81.sym
	pasmo disco.asm disco.bin

texture.bin: texture.bmp
	dd if=texture.bmp of=texture.bin bs=1 skip=566

texture2.bin: texture2.bmp
	dd if=texture2.bmp of=texture2.bin bs=1 skip=566

bigsine.asm: sine.rb
	ruby sine.rb 127 0 > bigsine.asm

perspect.asm: perspect.rb
	ruby perspect.rb > perspect.asm

endscreen.scr.hru: endscreen.scr
	chrust endscreen.scr endscreen.scr.hru

clean:
	rm -f \
	koopaville.tap \
	koopaville.bas.tap \
	koopavi1.tap \
	koopavi2.tap \
	koopavi3.tap \
	main.bin.hru \
	main.bin \
	interrupt_81.bin \
	interrupt_81.sym \
	logo.asm \
	game_logo.pix \
	game_logo.pix.hru \
	game_logo.attr \
	attract1.bin \
	attract2.bin \
	floor.asm \
	stars.bin \
	stars_p3.bin \
	stars_p4.bin \
	stars_p3.bin.hru \
	stars_p4.bin.hru \
	triad.dlt \
	big_font.asm
