CFLAGS=-fstrength-reduce -fomit-frame-pointer -finline-functions
#
ENE_SRC=enemy.c ene_slime.c ene_bat.c ene_goblin.c ene_ghost.c ene_sorcerer.c ene_skel.c ene_eye.c ene_knight.c ene_robo.c ene_mid_mecha.c ene_mid_cloud.c ene_mid_barrel.c
ENE_OBJ=$(ENE_SRC:.c=.o)
ENE_HED=$(ENE_SRC:.c=.h)
#
ENE2_SRC=ene_mummy.c ene_mummy_big.c ene_mid_madman.c
ENE2_OBJ=$(ENE2_SRC:.c=.o)
ENE2_HED=$(ENE2_SRC:.c=.h)
#
BOSS_SRC=ene_boss1.c ene_boss2.c ene_boss3.c ene_boss4.c ene_boss5.c ene_boss6.c ene_boss5opt.c bossshot.c
BOSS_OBJ=$(BOSS_SRC:.c=.o)
BOSS_HED=$(BOSS_SRC:.c=.h)
#
STRUCTS_H=structs.h constants.h
GAME_CONTEXT_H=../devs/memory_map_buffer.h game_context.h $(STRUCTS_H)

all: bin/koncore.a bin/stage.a bin/enemy.a bin/enemy2.a bin/boss.a

# <<< Archive >>>
bin/koncore.a: koncore.o constants.o kon_util.o game.o title.o gameover.o ending.o shop.o common.o collision.o jiki.o blade.o magic.o subweapon.o eneshot.o explode.o item.o esp.o
	ar bin/koncore.a $^

bin/stage.a: stage.o stage1.o stage2.o stage3.o stage4.o stage5.o stage6.o
	ar bin/stage.a $^

bin/enemy.a: $(ENE_OBJ)
	ar bin/enemy.a $(ENE_OBJ)

bin/enemy2.a: $(ENE2_OBJ)
	ar bin/enemy2.a $(ENE2_OBJ)

bin/boss.a: $(BOSS_OBJ)
	ar bin/boss.a $(BOSS_OBJ)

# <<< Compile >>>
koncore.o: koncore.c koncore.h ../devs/devs.h constants.h $(GAME_CONTEXT_H) kon_util.h game.h stage.h
	gcc -O -c $(CFLAGS) $<

constants.o: constants.c constants.h
	gcc -O -c $(CFLAGS) $<

kon_util.o: kon_util.c kon_util.h ../devs/devs.h
	gcc -O -c $(CFLAGS) $<

game.o: game.c game.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) common.h constants.h stage.h title.h ending.h
	gcc -O -c $(CFLAGS) $<

title.o: title.c title.h ../devs/devs.h kon_util.h constants.h $(STRUCTS_H) common.h $(GAME_CONTEXT_H) stage.h
	gcc -O -c $(CFLAGS) $<

gameover.o: gameover.c gameover.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) common.h stage.h shop.h jiki.h
	gcc -O -c $(CFLAGS) $<

ending.o: ending.c ending.h ../devs/devs.h kon_util.h constants.h $(STRUCTS_H) common.h $(GAME_CONTEXT_H) stage.h
	gcc -O -c $(CFLAGS) $<

shop.o: shop.c shop.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) common.h stage.h jiki.h blade.h
	gcc -O -c $(CFLAGS) $<

stage.o: stage.c stage.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) common.h constants.h collision.h jiki.h subweapon.h magic.h shop.h gameover.h stage1.h stage2.h stage3.h stage4.h stage5.h stage6.h enemy.h explode.h
	gcc -O -c $(CFLAGS) $<

stage1.o: stage1.c stage1.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) stage.h jiki.h magic.h subweapon.h
	gcc -O -c $(CFLAGS) $<

stage2.o: stage2.c stage2.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) stage.h jiki.h magic.h subweapon.h
	gcc -O -c $(CFLAGS) $<

stage3.o: stage3.c stage3.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) stage.h jiki.h magic.h subweapon.h
	gcc -O -c $(CFLAGS) $<

stage4.o: stage4.c stage4.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) stage.h jiki.h magic.h subweapon.h
	gcc -O -c $(CFLAGS) $<

stage5.o: stage5.c stage5.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) stage.h jiki.h magic.h subweapon.h common.h
	gcc -O -c $(CFLAGS) $<

stage6.o: stage6.c stage6.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) stage.h jiki.h magic.h subweapon.h
	gcc -O -c $(CFLAGS) $<

common.o: common.c common.h constants.h kon_util.h ../devs/devs.h $(GAME_CONTEXT_H) $(STRUCTS_H) $(GAME_CONTEXT_H) stage.h explode.h enemy.h
	gcc -O -c $(CFLAGS) $<

collision.o: collision.c collision.h constants.h kon_util.h $(GAME_CONTEXT_H) $(STRUCTS_H) $(GAME_CONTEXT_H) common.h explode.h enemy.h
	gcc -O -c $(CFLAGS) $<

jiki.o: jiki.c jiki.h ../devs/devs.h kon_util.h constants.h $(GAME_CONTEXT_H) $(STRUCTS_H) common.h stage.h blade.h esp.h shop.h gameover.h
	gcc -O -c $(CFLAGS) $<

blade.o: blade.c blade.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) $(STRUCTS_H) common.h subweapon.h stage.h
	gcc -O -c $(CFLAGS) $<

magic.o: magic.c magic.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) $(STRUCTS_H) common.h stage.h esp.h
	gcc -O -c $(CFLAGS) $<

subweapon.o: subweapon.c subweapon.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) $(STRUCTS_H) common.h explode.h esp.h stage.h
	gcc -O -c $(CFLAGS) $<

eneshot.o: eneshot.c eneshot.h $(GAME_CONTEXT_H) common.h stage.h collision.h kon_util.h
	gcc -O -c $(CFLAGS) $<

explode.o: explode.c explode.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) $(STRUCTS_H) common.h stage.h
	gcc -O -c $(CFLAGS) $<

item.o: item.c item.h $(GAME_CONTEXT_H) common.h kon_util.h collision.h stage.h
	gcc -O -c $(CFLAGS) $<

esp.o: esp.c esp.h ../devs/devs.h kon_util.h $(GAME_CONTEXT_H) $(STRUCTS_H) common.h stage.h
	gcc -O -c $(CFLAGS) $<

## Enemies.
enemy.o: $(ENE_SRC) $(ENE_HED) $(ENE2_HED) $(BOSS_HED) ../devs/devs.h constants.h $(GAME_CONTEXT_H) common.h stage.h collision.h enemy.h kon_util.h explode.h eneshot.h item.h esp.h stage.h
	gcc -O -c $(CFLAGS) $(ENE_SRC)

ene_mummy.o: $(ENE2_SRC) $(ENE2_HED) ../devs/devs.h constants.h $(GAME_CONTEXT_H) common.h stage.h collision.h enemy.h kon_util.h explode.h eneshot.h item.h esp.h stage.h
	gcc -O -c $(CFLAGS) $(ENE2_SRC)

## Boss.
ene_boss1.o: $(BOSS_SRC) $(BOSS_HED) ../devs/devs.h constants.h $(GAME_CONTEXT_H) common.h stage.h collision.h enemy.h kon_util.h explode.h eneshot.h bossshot.h item.h esp.h stage.h
	gcc -O -c $(CFLAGS) $(BOSS_SRC)

clean:
	-del /Y *.o
	-del /Y bin\koncore.a
	-del /Y bin\stage.a
	-del /Y bin\enemy.a
