A dungeon delver roguelike using Pathfinder 2nd edition rules
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Restructuring the project

+70 -94
+2 -1
gb/.gitignore
··· 1 1 obj/ 2 - bin/ 2 + bin/ 3 + src/generated/
+68 -44
gb/Makefile
··· 1 - .SUFFIXES: # Suppress a lot of useless default rules, which also provides a nice speedup. 1 + include project.mk 2 2 3 - # Recursive `wildcard` function. 4 - rwildcard = $(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) 5 - 6 - # Program contsants. 7 - RM_RF := rm -rf 8 - MKDIR_P := mkdir -p 9 - ifeq ($(strip $(shell which rm)),) 10 - # Windows *really* tries its hardest to be Special! 11 - RM_RF := -rmdir /s /q 12 - MKDIR_P := -mkdir 13 - endif 3 + SRCDIR = src 4 + OBJDIR = obj 5 + BINDIR = bin 6 + RESDIR = $(SRCDIR)/resources 7 + ASMDIR = $(SRCDIR)/main 8 + RESSPRITES = $(RESDIR)/sprites 9 + RESBACKGROUNDS = $(RESDIR)/backgrounds 10 + GENDIR = $(SRCDIR)/generated 11 + GENSPRITES = $(GENDIR)/sprites 12 + GENBACKGROUNDS = $(GENDIR)/backgrounds 13 + BINS = $(BINDIR)/$(ROMNAME).$(ROMEXT) 14 14 15 15 RGBDS ?= 16 16 ASM := $(RGBDS)rgbasm ··· 18 18 FIX := $(RGBDS)rgbfix 19 19 GFX := $(RGBDS)rgbgfx 20 20 21 - ROM = bin/$(ROMNAME).$(ROMEXT) 22 - 23 - # Argument constants 24 - INCDIRS = src/ include/ 21 + INCLUDEDIRS = include/ 25 22 WARNINGS = all extra 26 - ASMFLAGS = -p $(PADVALUE) $(addprefix -I,$(INCDIRS)) $(addprefix -W,$(WARNINGS)) 27 - LINKFLAGS = -p $(PADVALUE) 28 - FIXFLAGS = -p $(PADVALUE) -i "$(GAMEID)" -k "$(LICENSEE)" -l $(OLDLIC) -m $(MBC) -n $(VERSION) -r $(SRAMSIZE) -t $(TITLE) 23 + ASMFLAGS := -p $(PADVALUE) $(addprefix -I,$(INCLUDEDIRS)) $(addprefix -W,$(WARNINGS)) 24 + LINKFLAGS := -p $(PADVALUE) 25 + FIXFLAGS := -p $(PADVALUE) -i "$(GAMEID)" -k "$(LICENSEE)" -l $(OLDLIC) -m $(MBC) -n $(VERSION) -r $(SRAMSIZE) -t $(TITLE) -v 29 26 30 - SRCS = $(call rwildcard,src,*.asm) 27 + # https://stackoverflow.com/a/18258352 28 + # Make does not offer a recursive wild card function, so here's one: 29 + rwildcard = $(foreach d,\ 30 + $(wildcard $(1:=/*)), \ 31 + $(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d) \ 32 + ) 31 33 32 - include project.mk 34 + # https://stackoverflow.com/a/16151140 35 + # This makes it so every entry in a space-delimited list appears only once 36 + unique = $(if $1,\ 37 + $(firstword $1) $(call unique,$(filter-out $(firstword $1),$1)) \ 38 + ) 33 39 34 - all: $(ROM) 35 - .PHONY: all 40 + ASMSOURCES_COLLECTED = $(call rwildcard,$(ASMDIR),*.asm) $(call rwildcard,$(LIBDIR),*.asm) 41 + OBJS = $(patsubst %.asm,$(OBJDIR)/%.o,$(notdir $(ASMSOURCES_COLLECTED))) $(OBJDIR)/build_date.o 36 42 37 - clean: 38 - $(RM_RF) bin obj assets 39 - .PHONY: clean 43 + all: $(BINS) 40 44 41 - rebuild: 42 - $(MAKE) clean 43 - $(MAKE) all 44 - .PHONY: rebuild 45 + NEEDED_GRAPHICS = 45 46 46 - VPATH := src 47 + $(GENSPRITES)/%.2bpp: $(RESSPRITES)/%.png | $(GENSPRITES) 48 + $(GFX) -c "#FFFFFF,#cfcfcf,#686868,#000000;" --columns -o $@ $< 47 49 48 - bin/%.$(ROMEXT): $(patsubst src/%.asm,obj/%.o,$(SRCS)) 49 - @$(MKDIR_P) "$(@D)" 50 - $(ASM) $(ASMFLAGS) -o obj/build_date.o src/assets/build_date.asm 51 - $(LINK) $(LINKFLAGS) -m bin/$*.map -n bin/$*.sym -o $@ $^ \ 52 - && $(FIX) -v $(FIXFLAGS) $@ 50 + $(GENBACKGROUNDS)/%.tilemap: $(RESBACKGROUNDS)/%.png | $(GENBACKGROUNDS) 51 + $(GFX) -c "#FFFFFFFF,#cbcbcb,#414141,#000000;" \ 52 + --tilemap $@ \ 53 + --unique-tiles \ 54 + -o $(GENBACKGROUNDS)/$*.2bpp \ 55 + $< 53 56 54 - obj/%.mk: src/%.asm 55 - @$(MKDIR_P) "$(@D)" 56 - $(ASM) $(ASMFLAGS) -M $@ -MG -MP -MQ $(@:.mk=.o) -MQ $@ -o $(@:.mk=.o) $< 57 + ASMSOURCES_DIRS = $(patsubst %,%%.asm,\ 58 + $(call unique,$(dir $(ASMSOURCES_COLLECTED))) \ 59 + ) 57 60 58 - obj/%.o: obj/%.mk 59 - @touch $@ 61 + define object-from-asm 62 + $(OBJDIR)/%.o: $1 | $(OBJDIR) $(NEEDED_GRAPHICS) 63 + $$(ASM) $$(ASMFLAGS) -o $$@ $$< 64 + endef 60 65 61 - ifeq ($(filter clean,$(MAKECMDGOALS)),) 62 - include $(patsubst src/%.asm,obj/%.mk,$(SRCS)) 63 - endif 66 + $(foreach i, $(ASMSOURCES_DIRS), $(eval $(call object-from-asm,$i))) 67 + 68 + $(BINS): $(OBJS) | $(BINDIR) 69 + $(LINK) $(LINKFLAGS) -m $(@:.gb=.map) -n $(@:.gb=.sym) -o $@ $^ 70 + $(FIX) $(FIXFLAGS) $@ 71 + 72 + $(OBJDIR)/build_date.o: $(SRCDIR)/assets/build_date.asm | $(OBJDIR) 73 + $(ASM) $(ASMFLAGS) -o $@ $^ 74 + 75 + define ensure-directory 76 + $1: 77 + mkdir -p $$@ 78 + endef 79 + 80 + PREPARE_DIRECTORIES = $(OBJDIR) $(GENSPRITES) $(GENBACKGROUNDS) $(BINDIR) 81 + 82 + $(foreach i, $(PREPARE_DIRECTORIES), $(eval $(call ensure-directory,$i))) 83 + 84 + clean: 85 + rm -rfv $(PREPARE_DIRECTORIES) 86 + 87 + .PHONY: clean all test
-2
gb/src/dungeon.asm gb/src/main/dungeon.asm
··· 12 12 13 13 SECTION "DungeonCode", ROM0 14 14 15 - INCLUDE "macros/dungeon.inc" 16 - 17 15 BIT_USED_ROOM:: db %00000001 18 16 BIT_ENTRANCE:: db %00000010 19 17 BIT_DOOR_NORTH:: db %00000100
-47
gb/src/macros/dungeon.inc
··· 1 - MACRO IsUsed 2 - ld a, \1 3 - cp [BIT_USED_ROOM] 4 - jp z, \2 5 - ENDM 6 - 7 - MACRO IsEntrance 8 - ld a, \1 9 - cp [BIT_ENTRANCE] 10 - jp z, \2 11 - ENDM 12 - 13 - MACRO HasNorthDoor 14 - ld a, \1 15 - cp [BIT_DOOR_NORTH] 16 - jp z, \2 17 - ENDM 18 - 19 - MACRO HasWestDoor 20 - ld a, \1 21 - cp [BIT_DOOR_WEST] 22 - jp z, \2 23 - ENDM 24 - 25 - MACRO HasSouthDoor 26 - ld a, \1 27 - cp [BIT_DOOR_SOUTH] 28 - jp z, \2 29 - ENDM 30 - 31 - MACRO HasEastDoor 32 - ld a, \1 33 - cp [BIT_DOOR_EAST] 34 - jp z, \2 35 - ENDM 36 - 37 - MACRO HasStairDown 38 - ld a, \1 39 - cp [BIT_STAIR_BELOW] 40 - jp z, \2 41 - ENDM 42 - 43 - MACRO HasStairUp 44 - ld a, \1 45 - cp [BIT_STAIR_UP] 46 - jp z, \2 47 - ENDM
gb/src/main.asm gb/src/main/main.asm
gb/src/utils.asm gb/src/main/utils.asm