CC = gcc
CXX = g++
CFLAGS ?= -O2 -s -Wall -pedantic

all: png2holyc \
tiled2holyc \
Tile.HC \
TileData.HC \
Levels \
Px \
Px/Font \
Px/FontBig \
Px/CursorReg.HC \
Px/CursorBuy.HC \
Px/StatusBar.HC \
Px/InventoryScreen.HC \
Px/InventoryButtonOpen.HC \
Px/TradeScreen.HC \
Px/Buy.HC \
Px/BuyHover.HC \
Px/Sell.HC \
Px/SellHover.HC \
Px/PxSlider.HC \
Px/PxSliderHover.HC \
Px/CloseButtonHover.HC \
Px/Cloud1.HC \
Px/Car1.HC \
Px/Car2.HC \
Px/Car3.HC \
Px/CarGibLeft.HC \
Px/CarGibRight.HC \
Px/CarGibBottom.HC \
Px/BlobIdle1.HC \
Px/BlobIdle2.HC \
Px/BlobFlap1.HC \
Px/BlobFlap2.HC \
Px/BlobFlap3.HC \
Px/BlobGibLeft.HC \
Px/BlobGibRight.HC \
Px/BlobGibBottom.HC \
Px/BlobGibLeftWing.HC \
Px/BlobGibRightWing.HC \
Px/BG0.HC \
Px/BGGrass0.HC \
Px/BGGrass1.HC \
Px/BGLowerTrim.HC \
Px/NManFall.HC \
Px/NManJump1.HC \
Px/NManJump2.HC \
Px/NManJump3.HC \
Px/NManJump4.HC \
Px/NManStand1.HC \
Px/NManStand2.HC \
Px/NManWalk1.HC \
Px/NManWalk2.HC \
Px/NManWalk3.HC \
Px/NManWalk4.HC \
Px/UsePickaxe.HC \
Px/TerryLaugh.HC \
Px/tNoHook.HC \
Px/tShop1.HC \
Px/tShop10.HC \
Px/tShop11.HC \
Px/tShop12.HC \
Px/tShop13.HC \
Px/tShop14.HC \
Px/tShop15.HC \
Px/tShop16.HC \
Px/tShop17.HC \
Px/tShop18.HC \
Px/tShop19.HC \
Px/tShop2.HC \
Px/tShop20.HC \
Px/tShop21.HC \
Px/tShop22.HC \
Px/tShop23.HC \
Px/tShop3.HC \
Px/tShop4.HC \
Px/tShop5.HC \
Px/tShop6.HC \
Px/tShop7.HC \
Px/tShop8.HC \
Px/tShop9.HC \
Px/tDoorBL.HC \
Px/tDoorBR.HC \
Px/tDoorML.HC \
Px/tDoorMR.HC \
Px/tDoorTL.HC \
Px/tDoorTR.HC \
Px/tHardEarth.HC \
Px/tEarth1.HC \
Px/tEarth2.HC \
Px/tEarth3.HC \
Px/tEarth4.HC \
Px/tRock1.HC \
Px/tRock2.HC \
Px/tRock3.HC \
Px/tRock4.HC \
Px/tRockBlock1.HC \
Px/tRockBlock2.HC \
Px/tRockBlock3.HC \
Px/tRockBlock4.HC \
Px/tSilver1.HC \
Px/tSilver2.HC \
Px/tSilver3.HC \
Px/tSilver4.HC \
Px/tSilverBlock1.HC \
Px/tSilverBlock2.HC \
Px/tSilverBlock3.HC \
Px/tSilverBlock4.HC \
Px/tGold1.HC \
Px/tGold2.HC \
Px/tGold3.HC \
Px/tGold4.HC \
Px/tGoldBlock1.HC \
Px/tGoldBlock2.HC \
Px/tGoldBlock3.HC \
Px/tGoldBlock4.HC \
Px/tLadder.HC \
Px/tCooler1.HC \
Px/tCooler2.HC \
Px/tCooler3.HC \
Px/tCooler4.HC \
Px/tCooler5.HC \
Px/tCooler6.HC \
Px/tCooler7.HC \
Px/tCooler8.HC \
Px/tUranium1.HC \
Px/tUranium2.HC \
Px/tUranium3.HC \
Px/tUranium4.HC \
Px/tUraniumBlock1.HC \
Px/tUraniumBlock2.HC \
Px/tUraniumBlock3.HC \
Px/tUraniumBlock4.HC \
Px/tEarthDebris.HC \
Px/tGrass.HC \
Px/tSpikesU.HC \
Px/tSpikesD.HC \
Px/tSpikesL.HC \
Px/tSpikesR.HC \
Px/Rock.HC \
Px/Silver.HC \
Px/Gold.HC \
Px/Uranium.HC \
Px/ItemGrenade.HC \
Px/PxExplosion1.HC \
Px/PxExplosion2.HC \
Px/PxExplosion3.HC \
Px/PxExplosion4.HC \
Px/PxExplosion5.HC \
Px/PxExplosion6.HC \
Px/NewScum.HC \
Px/CrunkLord.HC \
Px/TitleDigGaym1.HC \
Px/TitleDigGaym2.HC \
Px/TitleDigGaym3.HC \
Px/TitleDigGaym4.HC \
Px/TitleDigGaym5.HC \
Px/Gun.HC \
Px/GunInv.HC \
Px/GrappleGun.HC \
Px/GrappleGunInv.HC \
Px/GrappleGunHook.HC \
Px/GrappleGunHookInv.HC \
Px/Font/1.HC \
Px/Font/2.HC \
Px/Font/3.HC \
Px/Font/4.HC \
Px/Font/5.HC \
Px/Font/6.HC \
Px/Font/7.HC \
Px/Font/8.HC \
Px/Font/9.HC \
Px/Font/10.HC \
Px/Font/11.HC \
Px/Font/12.HC \
Px/Font/13.HC \
Px/Font/14.HC \
Px/Font/15.HC \
Px/Font/16.HC \
Px/Font/17.HC \
Px/Font/18.HC \
Px/Font/19.HC \
Px/Font/20.HC \
Px/Font/21.HC \
Px/Font/22.HC \
Px/Font/23.HC \
Px/Font/24.HC \
Px/Font/25.HC \
Px/Font/26.HC \
Px/Font/27.HC \
Px/Font/28.HC \
Px/Font/29.HC \
Px/Font/30.HC \
Px/Font/31.HC \
Px/Font/32.HC \
Px/Font/33.HC \
Px/Font/34.HC \
Px/Font/35.HC \
Px/Font/36.HC \
Px/Font/37.HC \
Px/Font/38.HC \
Px/Font/39.HC \
Px/Font/40.HC \
Px/Font/41.HC \
Px/Font/42.HC \
Px/Font/43.HC \
Px/Font/44.HC \
Px/Font/45.HC \
Px/Font/46.HC \
Px/Font/47.HC \
Px/Font/48.HC \
Px/Font/49.HC \
Px/Font/50.HC \
Px/Font/51.HC \
Px/Font/52.HC \
Px/Font/53.HC \
Px/Font/54.HC \
Px/Font/55.HC \
Px/Font/56.HC \
Px/Font/57.HC \
Px/Font/58.HC \
Px/Font/59.HC \
Px/Font/60.HC \
Px/Font/61.HC \
Px/Font/62.HC \
Px/Font/63.HC \
Px/Font/64.HC \
Px/Font/65.HC \
Px/Font/66.HC \
Px/Font/67.HC \
Px/Font/68.HC \
Px/FontBig/1.HC \
Px/FontBig/2.HC \
Px/FontBig/3.HC \
Px/FontBig/4.HC \
Px/FontBig/5.HC \
Px/FontBig/6.HC \
Px/FontBig/7.HC \
Px/FontBig/8.HC \
Px/FontBig/9.HC \
Px/FontBig/10.HC \
Px/FontBig/11.HC \
Px/FontBig/12.HC \
Px/FontBig/13.HC \
Px/FontBig/14.HC \
Px/FontBig/15.HC \
Px/FontBig/16.HC \
Px/FontBig/17.HC \
Px/FontBig/18.HC \
Px/FontBig/19.HC \
Px/FontBig/20.HC \
Px/FontBig/21.HC \
Px/FontBig/22.HC \
Px/FontBig/23.HC \
Px/FontBig/24.HC \
Px/FontBig/25.HC \
Px/FontBig/26.HC \
Px/FontBig/27.HC \
Px/FontBig/28.HC \
Px/FontBig/29.HC \
Px/FontBig/30.HC \
Px/FontBig/31.HC \
Px/FontBig/32.HC \
Px/FontBig/33.HC \
Px/FontBig/34.HC \
Px/FontBig/35.HC \
Px/FontBig/36.HC \
Px/FontBig/37.HC \
Px/FontBig/38.HC \
Px/FontBig/39.HC \
Px/FontBig/40.HC \
Px/FontBig/41.HC \
Px/FontBig/42.HC \
Px/FontBig/43.HC \
Px/FontBig/44.HC \
Px/FontBig/45.HC \
Px/FontBig/46.HC \
Px/FontBig/47.HC \
Px/FontBig/48.HC \
Px/FontBig/49.HC \
Px/FontBig/50.HC \
Px/FontBig/51.HC \
Px/FontBig/52.HC \
Px/FontBig/53.HC \
Px/FontBig/54.HC \
Px/FontBig/55.HC \
Px/FontBig/56.HC \
Px/FontBig/57.HC \
Px/FontBig/58.HC \
Px/FontBig/59.HC \
Px/FontBig/60.HC \
Px/FontBig/61.HC \
Px/FontBig/62.HC \
Px/FontBig/63.HC \
Px/FontBig/64.HC \
Px/FontBig/65.HC \
Px/FontBig/66.HC \
Px/FontBig/67.HC \
Px/FontBig/68.HC \
Levels/LevelTitle.HC \
Levels/Sandbox.HC \
Levels/Level00.HC \
Levels/Level01.HC \
Levels/Level02.HC \
Levels/Level03.HC \
Levels/Level04.HC \
Levels/Level05.HC \
Levels/Level06.HC \
Levels/Level07.HC \
Levels/Level08.HC \
Levels/Level09.HC \
Levels/Level10.HC

png2holyc: tools/png2holyc/png2holyc.c
	$(CC) $(CFLAGS) -lpng $< -o $@

tools/tiled2holyc/tiledata.h: tsxinc assets/tiled/gaym.tsx
	./tsxinc

tiled2holyc: tools/tiled2holyc/tiled2holyc.c tools/tiled2holyc/tiledata.h tools/tiled2holyc/tile.h tools/tiled2holyc/cute_tiled.h
	$(CC) $(CFLAGS) $< -o $@

tsxinc: tools/tsxinc/tsxinc.cpp
	$(CXX) $(CFLAGS) $< -o $@ -ltinyxml2

TileData.HC Tile.HC: tiled2holyc
	./tiled2holyc

Levels/%.HC: assets/tiled/%.json tiled2holyc
	./tiled2holyc $(subst .json,,$(notdir $<)) $< $@

Levels:
	mkdir -p Levels
Px:
	mkdir -p Px
Px/Font:
	mkdir -p Px/Font
Px/FontBig:
	mkdir -p Px/FontBig

Px/%.HC: assets/png/%.png png2holyc
	./png2holyc $(subst .png,,$(notdir $<)) $< $@

Px/Font/%.HC: assets/png/font/%.png png2holyc
	./png2holyc Font$(subst .png,,$(notdir $<)) $< $@

Px/FontBig/%.HC: assets/png/fontBig/%.png png2holyc
	./png2holyc FontBig$(subst .png,,$(notdir $<)) $< $@

clean:
	rm -f png2holyc tiled2holyc tsxinc tools/tiled2holyc/tiledata.h Px/*.HC Levels/*.HC Px/Font/*.HC Px/FontBig/*.HC
