From 71906064daa2c35829001b5753890890a29dc73c Mon Sep 17 00:00:00 2001 From: Forest Belton <65484+forestbelton@users.noreply.github.com> Date: Thu, 2 Sep 2021 23:29:05 -0400 Subject: [PATCH] Begin work on title screen --- .gitignore | 2 ++ Makefile | 10 ++++++++-- inc/game.inc | 2 ++ png/bg/title.aseprite | Bin 0 -> 2888 bytes png/bg/title.png | Bin 0 -> 2259 bytes src/game.s | 25 ++++++++++++++++++++++++ src/main.s | 40 +++++++++++++++----------------------- src/title.s | 44 ++++++++++++++++++++++++++++++++++++++++++ src/util.s | 18 +++++++++++++++++ 9 files changed, 115 insertions(+), 26 deletions(-) create mode 100644 inc/game.inc create mode 100644 png/bg/title.aseprite create mode 100644 png/bg/title.png create mode 100644 src/game.s create mode 100644 src/title.s diff --git a/.gitignore b/.gitignore index a00b467..79eacfe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ *.o *.2bpp +*.tilemap is.gb is.gb.sym png/map/*.s png/map/*.inc +dev clips/ diff --git a/Makefile b/Makefile index 3a3ea7f..d8ac8d1 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ PYTHON ?= python # Graphics SPRITE_PNG := $(shell find png/sprite -type f -name '*.png') - +BG_PNG := $(shell find png/bg -type f -name '*.png') MAP_PNG := $(shell find png/map -type f -name '*.png' -not -name '*_coll.png') MAP_COLL := $(shell find png/map -type f -name '*_coll.png') @@ -10,6 +10,7 @@ MAP_COLL := $(shell find png/map -type f -name '*_coll.png') MAP_S := $(MAP_PNG:%.png=%.s) MAP_INC := $(MAP_PNG:%.png=%.inc) SPRITE_2BPP := $(SPRITE_PNG:%.png=%.2bpp) +BG_DATA := $(BG_PNG:%.png=%.2bpp) $(BG_PNG:%.png=%.tilemap) # Code SFILES := $(shell find src -type f -name '*.s') @@ -24,6 +25,7 @@ is.gb is.gb.sym: $(OFILES) $(OFILES): $(MAP_INC) $(OFILES): $(SPRITE_2BPP) +$(OFILES): $(BG_DATA) %.o: %.s @echo "[ASSEMBLE] $<" @@ -37,6 +39,10 @@ png/sprite/%.2bpp: png/sprite/%.png @echo "[SPRITE] $<" @rgbgfx -o $@ $< +png/bg/%.2bpp png/bg/%.tilemap: png/bg/%.png + @echo "[BG] $<" + @rgbgfx -T -u -o "$(shell dirname $<)/$(shell basename --suffix=.png $<).2bpp" $< + clean: - @rm -f is.gb is.gb.sym $(OFILES) $(MAP_S) $(MAP_INC) $(SPRITE_2BPP) + @rm -f is.gb is.gb.sym $(OFILES) $(MAP_S) $(MAP_INC) $(SPRITE_2BPP) $(BG_DATA) @echo "All build files removed" diff --git a/inc/game.inc b/inc/game.inc new file mode 100644 index 0000000..74e105e --- /dev/null +++ b/inc/game.inc @@ -0,0 +1,2 @@ +DEF GAME_STATEF_TITLE EQU (1 << 0) +DEF GAME_STATEF_GAME EQU (1 << 1) diff --git a/png/bg/title.aseprite b/png/bg/title.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..cb144f6cd80fee8d377ad21ed4459be4006ea067 GIT binary patch literal 2888 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 literal 0 HcmV?d00001 diff --git a/png/bg/title.png b/png/bg/title.png new file mode 100644 index 0000000000000000000000000000000000000000..aeec6c7ebdcc08b5ba8e7b9f463a7ae5c0b4f31d GIT binary patch literal 2259 zcmbVO`!^E~A4Xr7q>_Ez=DJEFcadRR(Ol+!Ei}VRlX}B2m&v8pB$|}ve#saK+mM(T zBG=00rG;|IoyjFE_t*El|H1pi=lPuTdCqyxd474G&l7uF^OM3rVICfylSm7M4c&n~ zeV8{@VTe?AoTHTvVoCVkH34?(G06 zL()MVIkZ%yc7zG08A-}jc@Z(o(BI-Sc5DnRLI>Fm!*+^@r2L^3r&f!-yi-~@RD^H8 zu6T$Z0DxVbCCiXclK`k}+1B(7lD#!wNQoxA>eM5ju1QE*Mqa=)SQ9G*BxnQe4A z770eQ4^ez;W!^L=8A}IJe4e+7MFgicr?xV){wB(2OnY=Rx+AT#_Yq2(9;)}fvriD3 ziG;K5lG#i)9j3t@JLBKcU!1u=Dr)MWYqeP^^fbL_t1jmN!SOWhT4~vD*iyr*{FK{` zJZq*yP@_q=1lMgP=)fID)qxVKi4sah(T!uhO(%j|__&3X=DcS@vYD{V?TX(Q|eQSwO zLx2>>m*;o9Tnz?!Ooq*b(l+u)-||2ccJ;sCnOCSf*rxZ)^qT&Pnl)V)y=%=wx0^g- zMs!n(7~lIKXwBXmUysn8qH}4&a~M&}?c$ZEUgDfQENR#4M^}B2&fAeb5Y2yqp%t zN{f+C9KfiXxNL7@6Krfm0deaZN#)mZqfd4C12RfCwy`LU=fI8yx6@%6Hlf#cQ8H}+ zE~m)cX4v6@y=r%9J^iOR#2L$#3+XKl?@x7GPaS}92Sq=@BAUvkmKbo0XG~PE?&ZLA z=cz}k@{nqU+!DOPi1%XUt?+6r@8Bang7qi*?xbUi@7sC+a@X}Ke|cPHxbod(&v zOr5m$QNRqBU2+rb;7f73q&r~^OU6U>r3U$4X=5$htXJdiH|+jWd15{0)XQiDCk;e! z-{Tv}GXXZFmyYywu)mnX&BN}g;U+yuw7DU2p|ZgCQ%s==#Pbp6OR#HIrYrEAUwq8Z zncq`a+kHxi_cDrx_V*ylS^mmM;NPeBBLX6w6hc~|rv&`fah`Nfg=Uu%{SXynKXPT- z`5eCYa+0CZQ2jrOcOsjJ?dg6ZP)u1h}OvSI9?)o#X(URoX;l7IB{<3wHT{%Pd;Gp~_XbyMXo03W1FlDt+VhagIks zr#*Yek}Ff&&YwI#b)p}fPG=rjD;{2W<{+ujK=Vot{}IY^&PvGT5SDP` z^H~U01(eUY|7~O9kEh^WFHy)~udhIhO^WnxRa5RmgT%|>j|OUgIb{)RDn66&i*nBq zTv-j$_*FclN$uv%S?!U{GXV3|Q_dCar6=X2cmIm3)4)e!K3bOg&oaf^c7r|P&2P9s& zw}xv91STv?-M%m|=8TYXoZ!!W;AvL>it$%oj?(J%QP=w&hZ 255 +; @param bc Pointer to the destination region +; @param hl Pointer to the source region +; @param de Size (in bytes) to copy. Must be >0 +; @destroy a, b, c, d, e, h, l +memcpy16:: + ld a, [hli] ; 8 + ld [bc], a ; 8 + inc bc ; 8 + + dec de ; 8 + xor a ; 4 + or d ; 4 + or e ; 4 + + jr nz, memcpy16 ; 12/8 + ret ; 16 + ; Fill a memory region with a value ; @param hl Pointer to the destination region ; @param a Byte to fill with