2024-07-11 00:58:18 -03:00
|
|
|
export PATH := /opt/psn00bsdk/bin:$(PATH)
|
|
|
|
export PSN00BSDK_LIBS := /opt/psn00bsdk/lib/libpsn00b
|
|
|
|
|
2025-01-11 23:54:01 -03:00
|
|
|
CHD := ./Sonic\ The\ Hedgehog\ XA.chd
|
|
|
|
CUESHEET := ./build/Sonic\ The\ Hedgehog\ XA.cue
|
|
|
|
|
2024-08-18 17:41:45 -03:00
|
|
|
MAP16SRC := $(shell ls ./assets/levels/**/map16.json)
|
|
|
|
COL16SRC := $(shell ls ./assets/levels/**/tiles16.tsx)
|
|
|
|
MAP128SRC := $(shell ls ./assets/levels/**/tilemap128.tmx)
|
|
|
|
LVLSRC := $(shell ls ./assets/levels/**/Z*.tmx)
|
2024-10-01 19:03:35 -03:00
|
|
|
MDLSRC := $(shell ls ./assets/models/**/*.rsd)
|
2024-10-21 01:18:48 -03:00
|
|
|
PRLSRC := $(shell ls ./assets/levels/**/parallax.toml)
|
2025-01-12 03:26:23 -03:00
|
|
|
XASRC := $(shell ls ./assets/bgm/*.txt)
|
2024-08-18 17:41:45 -03:00
|
|
|
|
|
|
|
MAP16OUT := $(addsuffix MAP16.MAP,$(dir $(MAP16SRC)))
|
|
|
|
COL16OUT := $(addsuffix MAP16.COL,$(dir $(COL16SRC)))
|
|
|
|
MAP128OUT := $(addsuffix MAP128.MAP,$(dir $(COL16SRC)))
|
|
|
|
LVLOUT := $(addsuffix .LVL,$(basename $(LVLSRC)))
|
2024-10-01 00:13:59 -03:00
|
|
|
OMPOUT := $(addsuffix .OMP,$(basename $(LVLSRC)))
|
2024-10-01 19:03:35 -03:00
|
|
|
MDLOUT := $(addsuffix .mdl,$(basename $(MDLSRC)))
|
2024-10-21 01:18:48 -03:00
|
|
|
PRLOUT := $(addsuffix PRL.PRL,$(dir $(PRLSRC)))
|
2025-01-12 03:26:23 -03:00
|
|
|
XAOUT := $(addsuffix .XA,$(basename $(XASRC)))
|
2024-08-18 17:41:45 -03:00
|
|
|
|
2025-01-11 23:54:01 -03:00
|
|
|
.PHONY: clean ${CUESHEET} run configure chd cook iso elf debug cooktest purge rebuild repack packrun
|
2024-07-11 00:58:18 -03:00
|
|
|
|
2024-08-24 21:47:19 -03:00
|
|
|
# Final product is CUE+BIN files
|
|
|
|
all: iso
|
|
|
|
|
|
|
|
# Targets for producing ELF, CUE+BIN and CHD files
|
2025-01-07 12:00:41 -03:00
|
|
|
elf: ./build/sonic.elf
|
2025-01-11 23:54:01 -03:00
|
|
|
iso: ${CUESHEET}
|
|
|
|
chd: ${CHD}
|
2024-07-11 00:58:18 -03:00
|
|
|
|
2024-08-24 21:47:19 -03:00
|
|
|
# Target for running the image
|
2025-01-11 23:54:01 -03:00
|
|
|
run: ${CUESHEET}
|
2024-08-24 21:47:19 -03:00
|
|
|
pcsx-redux-appimage \
|
|
|
|
-run -interpreter -fastboot -stdout \
|
2025-01-12 03:26:23 -03:00
|
|
|
-iso "$<"
|
2024-10-30 01:44:57 -03:00
|
|
|
|
2024-10-12 02:03:41 -03:00
|
|
|
# Target for running the image on Mednafen
|
2025-01-11 23:54:01 -03:00
|
|
|
run-mednafen: ${CUESHEET}
|
2025-01-09 18:20:05 -03:00
|
|
|
mednafen -force_module psx $<
|
2024-10-12 02:03:41 -03:00
|
|
|
|
2024-11-02 22:09:19 -03:00
|
|
|
# Target for running the image on PCSX-ReARMed
|
2025-01-11 23:54:01 -03:00
|
|
|
run-rearmed: ${CUESHEET}
|
2024-11-02 22:09:19 -03:00
|
|
|
pcsx -cdfile $<
|
2024-08-24 21:47:19 -03:00
|
|
|
|
2025-01-11 23:54:20 -03:00
|
|
|
run-duckstation: ${CUESHEET}
|
|
|
|
duckstation $<
|
|
|
|
|
2024-08-24 21:47:19 -03:00
|
|
|
# Run debugger
|
|
|
|
debug:
|
|
|
|
gdb-multiarch
|
|
|
|
|
|
|
|
# =======================================
|
|
|
|
# Targets for executable building
|
|
|
|
# =======================================
|
2024-07-11 00:58:18 -03:00
|
|
|
|
2024-08-24 21:47:19 -03:00
|
|
|
# Target directory
|
|
|
|
./build: configure
|
|
|
|
|
|
|
|
# ELF PSX executable
|
2025-01-07 12:00:41 -03:00
|
|
|
./build/sonic.elf: ./build
|
|
|
|
cd build && make sonic
|
2024-07-11 00:58:18 -03:00
|
|
|
|
2024-08-24 21:47:19 -03:00
|
|
|
# .CUE + .BIN (needs ELF and cooked assets)
|
2025-01-11 23:54:01 -03:00
|
|
|
${CUESHEET}: cook ./build/sonic.elf
|
2024-08-24 21:47:19 -03:00
|
|
|
cd build && make iso
|
|
|
|
|
|
|
|
# .CHD file (single-file CD image)
|
2025-01-11 23:54:01 -03:00
|
|
|
${CHD}: ${CUESHEET}
|
|
|
|
tochd -d . -- "$<"
|
2024-07-22 18:18:21 -03:00
|
|
|
|
2024-07-21 19:43:49 -03:00
|
|
|
|
2024-08-24 21:47:19 -03:00
|
|
|
# =======================================
|
|
|
|
# Utilitary targets
|
|
|
|
# =======================================
|
|
|
|
|
|
|
|
# Create build directory and generate CMake config from preset
|
2024-07-21 19:43:49 -03:00
|
|
|
configure:
|
2024-11-02 15:18:40 -03:00
|
|
|
# cmake --preset default .
|
|
|
|
cmake --preset release .
|
2024-07-11 00:58:18 -03:00
|
|
|
|
2024-08-24 21:47:19 -03:00
|
|
|
# Clean build directory
|
2024-07-11 00:58:18 -03:00
|
|
|
clean:
|
2024-08-18 17:41:45 -03:00
|
|
|
rm -rf ./build
|
|
|
|
|
2024-08-24 21:47:19 -03:00
|
|
|
# Clean build directory and purge cooked assets
|
2024-08-18 22:29:51 -03:00
|
|
|
purge: clean cleancook
|
2024-08-25 14:50:26 -03:00
|
|
|
rm -rf *.chd
|
2024-08-18 22:29:51 -03:00
|
|
|
|
2024-10-03 00:32:02 -03:00
|
|
|
# Clean everything and recreate iso
|
2024-10-04 22:33:51 -03:00
|
|
|
rebuild: purge cook elf iso
|
2024-10-03 00:32:02 -03:00
|
|
|
|
|
|
|
# Clean binaries and recreate iso
|
2024-10-04 22:33:51 -03:00
|
|
|
repack: clean cook elf iso
|
|
|
|
|
|
|
|
# Repack and run
|
|
|
|
packrun: repack run
|
2024-10-03 00:32:02 -03:00
|
|
|
|
2024-08-18 17:41:45 -03:00
|
|
|
# =======================================
|
|
|
|
# ASSET COOKING TARGETS
|
|
|
|
# =======================================
|
|
|
|
|
2024-10-01 19:03:35 -03:00
|
|
|
mdls: $(MDLOUT)
|
2024-08-18 17:41:45 -03:00
|
|
|
map16: $(MAP16OUT) $(COL16OUT)
|
|
|
|
map128: $(MAP128OUT)
|
|
|
|
lvl: $(LVLOUT)
|
2024-10-21 01:18:48 -03:00
|
|
|
prl: $(PRLOUT)
|
2024-10-01 00:13:59 -03:00
|
|
|
objs: $(OMPOUT)
|
2025-01-12 03:26:23 -03:00
|
|
|
xa: $(XAOUT)
|
2024-08-18 17:41:45 -03:00
|
|
|
|
2025-01-12 03:26:23 -03:00
|
|
|
cook: mdls map16 map128 lvl objs prl xa
|
2024-08-18 17:41:45 -03:00
|
|
|
|
|
|
|
cleancook:
|
2024-10-01 19:03:35 -03:00
|
|
|
rm -rf assets/models/**/*.mdl \
|
|
|
|
assets/levels/**/*.COL \
|
2024-08-18 12:41:05 -03:00
|
|
|
assets/levels/**/*.MAP \
|
|
|
|
assets/levels/**/*.LVL \
|
2024-10-01 00:13:59 -03:00
|
|
|
assets/levels/**/*.OMP \
|
|
|
|
assets/levels/**/*.OTD \
|
2024-10-21 01:18:48 -03:00
|
|
|
assets/levels/**/*.PRL \
|
2024-08-18 12:41:05 -03:00
|
|
|
assets/levels/**/collision16.json \
|
2024-09-17 17:49:29 -03:00
|
|
|
assets/levels/**/tilemap128.csv \
|
|
|
|
assets/levels/**/tilemap128_solid.csv \
|
2024-11-19 20:45:55 -03:00
|
|
|
assets/levels/**/tilemap128_oneway.csv \
|
2025-01-12 03:26:23 -03:00
|
|
|
assets/levels/**/tilemap128_front.csv \
|
|
|
|
assets/bgm/*.XA \
|
|
|
|
assets/bgm/*.xa
|
2024-08-18 03:07:15 -03:00
|
|
|
|
2024-10-01 19:03:35 -03:00
|
|
|
# Object models
|
|
|
|
%.mdl: %.rsd %.ply %.mat
|
|
|
|
./tools/convrsd/convrsd.py $<
|
|
|
|
|
2024-08-18 17:41:45 -03:00
|
|
|
# 16x16 tile mapping
|
|
|
|
# (Depends on mapping generated on Aseprite)
|
|
|
|
%/MAP16.MAP: %/map16.json
|
|
|
|
./tools/framepacker.py --tilemap $< $@
|
|
|
|
|
|
|
|
# 16x16 collision
|
|
|
|
# (Depends on tiles16.tsx tile map with collision data, generated on Tiled).
|
|
|
|
%/MAP16.COL: %/tiles16.tsx
|
|
|
|
tiled --export-tileset $< "$(dir $<)collision16.json"
|
|
|
|
./tools/cookcollision.py "$(dir $<)collision16.json" $@
|
|
|
|
rm "$(dir $@)collision16.json"
|
|
|
|
|
|
|
|
# 128x128 tile mapping
|
|
|
|
# Also generates 128.png to create a 128x128 tileset (should be done manually)
|
|
|
|
# (Depends on tilemap128.tmx map generated on Tiled)
|
|
|
|
%/MAP128.MAP: %/tilemap128.tmx
|
2024-09-17 17:49:29 -03:00
|
|
|
tiled --export-map $< "$(basename $<).psxcsv"
|
2024-08-18 17:41:45 -03:00
|
|
|
tmxrasterizer $< "$(dir $<)128.png"
|
2024-09-17 17:49:29 -03:00
|
|
|
./tools/chunkgen.py "$(basename $<).psxcsv" $@
|
|
|
|
rm -f "$(basename $<).psxcsv"
|
|
|
|
rm -f "$(basename $<)_solid.psxcsv"
|
|
|
|
rm -f "$(basename $<)_oneway.psxcsv"
|
|
|
|
rm -f "$(basename $<)_none.psxcsv"
|
2024-11-19 20:45:55 -03:00
|
|
|
rm -f "$(basename $<)_front.psxcsv"
|
2024-08-18 17:41:45 -03:00
|
|
|
|
|
|
|
# Level maps
|
|
|
|
# These maps should use a tileset generated from "128.png".
|
|
|
|
# (Depends on files such as Z1.tmx, Z2.tmx, etc., generated on Tiled)
|
|
|
|
%.LVL: %.tmx
|
|
|
|
tiled --export-map $< "$(basename $@).psxlvl"
|
|
|
|
./tools/cooklvl.py "$(basename $@).psxlvl" $@
|
|
|
|
rm "$(basename $@).psxlvl"
|
|
|
|
|
|
|
|
|
2024-10-01 00:13:59 -03:00
|
|
|
# Object level placement
|
|
|
|
# (Depends on files such as Z1.tmx, Z2.tmx, etc., generated on Tiled)
|
|
|
|
%.OMP: %.tmx
|
|
|
|
./tools/cookobj/cookobj.py $<
|
2024-10-21 01:18:48 -03:00
|
|
|
|
|
|
|
# Level parallax data
|
|
|
|
# (Depends on a specific file named parallax.toml within level directory)
|
|
|
|
%/PRL.PRL: %/parallax.toml
|
|
|
|
./tools/buildprl/buildprl.py $<
|
2025-01-12 03:26:23 -03:00
|
|
|
|
|
|
|
# Individual file XA songs
|
|
|
|
%.xa: %.flac
|
|
|
|
psxavenc -f 37800 -t xa -b 4 -c 2 -F 1 -C 0 $< $@
|
|
|
|
|
|
|
|
# Dynamic rule for generating dependencies for a given .XA file.
|
|
|
|
# These dependencies are then .xa files that are generated for individual .flac songs.
|
|
|
|
define XA_RULE
|
|
|
|
$T: $(shell cat "$(T:.XA=.txt)" | awk '{print $$3}' | awk 'NF {print "./assets/bgm/"$$1}' | paste -s -d ' ')
|
|
|
|
endef
|
|
|
|
$(foreach T,$(XAOUT),$(eval $(XA_RULE)))
|
|
|
|
|
|
|
|
# Interleaved XA songs
|
|
|
|
%.XA: %.txt
|
|
|
|
cd $(dir $<) && xainterleave 1 $(notdir $<) $(notdir $@)
|