From 05bdd76508dd42dfc6be84915c901e821d73e8f9 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Wed, 5 Mar 2025 18:52:56 -0600 Subject: [PATCH] Updated font, added interactions and testing frames. --- assets/createimg.py | 248 ++++++++++++++++++ assets/textures/8x8.png | Bin 1868 -> 1334 bytes src/dusk/display/tileset.c | 2 +- src/dusk/overworld/entity/entity.c | 21 +- src/dusk/overworld/entity/entity.h | 4 +- src/dusk/overworld/entity/facing.c | 15 ++ src/dusk/overworld/entity/facing.h | 16 +- src/dusk/overworld/entity/npc.c | 5 +- src/dusk/overworld/entity/npc.h | 3 +- .../shader/entityshader/entity_frag.glsl | 2 + 10 files changed, 306 insertions(+), 10 deletions(-) create mode 100644 assets/createimg.py diff --git a/assets/createimg.py b/assets/createimg.py new file mode 100644 index 0000000..8c32678 --- /dev/null +++ b/assets/createimg.py @@ -0,0 +1,248 @@ +from PIL import Image + +font8x8_ib8x8u = [ + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # 0000 (uni0000.dup1) + [0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e], # 0001 (uni0001) + [0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e], # 0002 (uni0002) + [0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00], # 0003 (uni0003) + [0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00], # 0004 (uni0004) + [0x38, 0x7c, 0x38, 0xfe, 0xfe, 0x7c, 0x38, 0x7c], # 0005 (uni0005) + [0x10, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x7c], # 0006 (uni0006) + [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00], # 0007 (uni0007) + [0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff], # 0008 (uni0008) + [0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00], # 0009 (uni0009) + [0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff], # 000a (uni000A) + [0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78], # 000b (uni000B) + [0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18], # 000c (uni000C) + [0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0], # 000d (uni000D) + [0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0], # 000e (uni000E) + [0x99, 0x5a, 0x3c, 0xe7, 0xe7, 0x3c, 0x5a, 0x99], # 000f (uni000F) + [0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00], # 0010 (uni0010) + [0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00], # 0011 (uni0011) + [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18], # 0012 (uni0012) + [0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00], # 0013 (uni0013) + [0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00], # 0014 (uni0014) + [0x3e, 0x63, 0x38, 0x6c, 0x6c, 0x38, 0xcc, 0x78], # 0015 (uni0015) + [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00], # 0016 (uni0016) + [0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff], # 0017 (uni0017) + [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00], # 0018 (uni0018) + [0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00], # 0019 (uni0019) + [0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00], # 001a (uni001A) + [0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00], # 001b (uni001B) + [0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00], # 001c (uni001C) + [0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00], # 001d (uni001D) + [0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00], # 001e (uni001E) + [0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00], # 001f (uni001F) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # 0020 (space) + [0x30, 0x78, 0x78, 0x30, 0x30, 0x00, 0x30, 0x00], # 0021 (exclam) + [0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00], # 0022 (quotedbl) + [0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00], # 0023 (numbersign) + [0x30, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x30, 0x00], # 0024 (dollar) + [0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00], # 0025 (percent) + [0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00], # 0026 (ampersand) + [0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00], # 0027 (quotesingle) + [0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00], # 0028 (parenleft) + [0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00], # 0029 (parenright) + [0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00], # 002a (asterisk) + [0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00], # 002b (plus) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60], # 002c (comma) + [0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00], # 002d (hyphen) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00], # 002e (period) + [0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00], # 002f (slash) + [0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x00], # 0030 (zero) + [0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x00], # 0031 (one) + [0x78, 0xcc, 0x0c, 0x38, 0x60, 0xc4, 0xfc, 0x00], # 0032 (two) + [0x78, 0xcc, 0x0c, 0x38, 0x0c, 0xcc, 0x78, 0x00], # 0033 (three) + [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00], # 0034 (four) + [0xfc, 0xc0, 0xf8, 0x0c, 0x0c, 0xcc, 0x78, 0x00], # 0035 (five) + [0x38, 0x60, 0xc0, 0xf8, 0xcc, 0xcc, 0x78, 0x00], # 0036 (six) + [0xfc, 0xcc, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00], # 0037 (seven) + [0x78, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0x78, 0x00], # 0038 (eight) + [0x78, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70, 0x00], # 0039 (nine) + [0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00], # 003a (colon) + [0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0x00], # 003b (semicolon) + [0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x00], # 003c (less) + [0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00], # 003d (equal) + [0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00], # 003e (greater) + [0x78, 0xcc, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00], # 003f (question) + [0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00], # 0040 (at) + [0x30, 0x78, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0x00], # 0041 (A) + [0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00], # 0042 (B) + [0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00], # 0043 (C) + [0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00], # 0044 (D) + [0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00], # 0045 (E) + [0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00], # 0046 (F) + [0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3e, 0x00], # 0047 (G) + [0xcc, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc, 0x00], # 0048 (H) + [0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00], # 0049 (I) + [0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00], # 004a (J) + [0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00], # 004b (K) + [0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00], # 004c (L) + [0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00], # 004d (M) + [0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00], # 004e (N) + [0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], # 004f (O) + [0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], # 0050 (P) + [0x78, 0xcc, 0xcc, 0xcc, 0xdc, 0x78, 0x1c, 0x00], # 0051 (Q) + [0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00], # 0052 (R) + [0x78, 0xcc, 0xe0, 0x70, 0x1c, 0xcc, 0x78, 0x00], # 0053 (S) + [0xfc, 0xb4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00], # 0054 (T) + [0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfc, 0x00], # 0055 (U) + [0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00], # 0056 (V) + [0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00], # 0057 (W) + [0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00], # 0058 (X) + [0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x30, 0x78, 0x00], # 0059 (Y) + [0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00], # 005a (Z) + [0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00], # 005b (bracketleft) + [0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00], # 005c (backslash) + [0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00], # 005d (bracketright) + [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], # 005e (asciicircum) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff], # 005f (underscore) + [0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], # 0060 (grave) + [0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], # 0061 (a) + [0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xdc, 0x00], # 0062 (b) + [0x00, 0x00, 0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x00], # 0063 (c) + [0x1c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00], # 0064 (d) + [0x00, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00], # 0065 (e) + [0x38, 0x6c, 0x60, 0xf0, 0x60, 0x60, 0xf0, 0x00], # 0066 (f) + [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], # 0067 (g) + [0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00], # 0068 (h) + [0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00], # 0069 (i) + [0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78], # 006a (j) + [0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00], # 006b (k) + [0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00], # 006c (l) + [0x00, 0x00, 0xcc, 0xfe, 0xfe, 0xd6, 0xc6, 0x00], # 006d (m) + [0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0x00], # 006e (n) + [0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00], # 006f (o) + [0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0], # 0070 (p) + [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e], # 0071 (q) + [0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0xf0, 0x00], # 0072 (r) + [0x00, 0x00, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x00], # 0073 (s) + [0x10, 0x30, 0x7c, 0x30, 0x30, 0x34, 0x18, 0x00], # 0074 (t) + [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], # 0075 (u) + [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00], # 0076 (v) + [0x00, 0x00, 0xc6, 0xd6, 0xfe, 0xfe, 0x6c, 0x00], # 0077 (w) + [0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00], # 0078 (x) + [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], # 0079 (y) + [0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00], # 007a (z) + [0x1c, 0x30, 0x30, 0xe0, 0x30, 0x30, 0x1c, 0x00], # 007b (braceleft) + [0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00], # 007c (bar) + [0xe0, 0x30, 0x30, 0x1c, 0x30, 0x30, 0xe0, 0x00], # 007d (braceright) + [0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # 007e (asciitilde) + [0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00], # 007f (uni007F) + # --------------------------- 160-255 --------------------------- + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # 00a0 (uni00A0) + [0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00], # 00a1 (exclamdown) + [0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18], # 00a2 (cent) + [0x38, 0x6c, 0x64, 0xf0, 0x60, 0xe6, 0xfc, 0x00], # 00a3 (sterling) + [0x00, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0x00], # 00a4 (currency) + [0xcc, 0xcc, 0x78, 0xfc, 0x30, 0xfc, 0x30, 0x30], # 00a5 (yen) + [0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00], # 00a6 (brokenbar) + [0x3e, 0x63, 0x38, 0x6c, 0x6c, 0x38, 0xcc, 0x78], # 00a7 (section) + [0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # 00a8 (dieresis) + [0x7e, 0x81, 0x9d, 0xa1, 0xa1, 0x9d, 0x81, 0x7e], # 00a9 (copyright) + [0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00], # 00aa (ordfeminine) + [0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00], # 00ab (guillemotleft) + [0x00, 0x00, 0x00, 0xfc, 0x0c, 0x0c, 0x00, 0x00], # 00ac (logicalnot) + [0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], # 00ad (uni00AD) + [0x7e, 0x81, 0xb9, 0xa5, 0xb9, 0xa5, 0x81, 0x7e], # 00ae (registered) + [0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # 00af (macron) + [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], # 00b0 (degree) + [0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0xfc, 0x00], # 00b1 (plusminus) + [0x70, 0x18, 0x30, 0x60, 0x78, 0x00, 0x00, 0x00], # 00b2 (uni00B2) + [0x70, 0x18, 0x30, 0x18, 0x70, 0x00, 0x00, 0x00], # 00b3 (uni00B3) + [0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00], # 00b4 (acute) + [0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0xc0], # 00b5 (mu) + [0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00], # 00b6 (paragraph) + [0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00], # 00b7 (periodcentered) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x38], # 00b8 (cedilla) + [0x30, 0x70, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00], # 00b9 (uni00B9) + [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00], # 00ba (ordmasculine) + [0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00], # 00bb (guillemotright) + [0xc3, 0xc6, 0xcc, 0xdb, 0x37, 0x6f, 0xcf, 0x03], # 00bc (onequarter) + [0xc3, 0xc6, 0xcc, 0xde, 0x33, 0x66, 0xcc, 0x0f], # 00bd (onehalf) + [0xe0, 0x33, 0x66, 0x3c, 0xfb, 0x37, 0x6f, 0xc3], # 00be (threequarters) + [0x30, 0x00, 0x30, 0x60, 0xc0, 0xcc, 0x78, 0x00], # 00bf (questiondown) + [0xc0, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], # 00c0 (Agrave) + [0x06, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], # 00c1 (Aacute) + [0x7c, 0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x00], # 00c2 (Acircumflex) + [0x76, 0xdc, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x00], # 00c3 (Atilde) + [0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], # 00c4 (Adieresis) + [0x30, 0x30, 0x00, 0x78, 0xcc, 0xfc, 0xcc, 0x00], # 00c5 (Aring) + [0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00], # 00c6 (AE) + [0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x18, 0x0c, 0x78], # 00c7 (Ccedilla) + [0xe0, 0x00, 0xfc, 0x60, 0x78, 0x60, 0xfc, 0x00], # 00c8 (Egrave) + [0x1c, 0x00, 0xfc, 0x60, 0x78, 0x60, 0xfc, 0x00], # 00c9 (Eacute) + [0x78, 0xcc, 0xfc, 0x60, 0x78, 0x60, 0xfc, 0x00], # 00ca (Ecircumflex) + [0xcc, 0x00, 0xfc, 0x60, 0x78, 0x60, 0xfc, 0x00], # 00cb (Edieresis) + [0xe0, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00], # 00cc (Igrave) + [0x1c, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00], # 00cd (Iacute) + [0x7e, 0xc3, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00], # 00ce (Icircumflex) + [0xcc, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00], # 00cf (Idieresis) + [0xf8, 0x6c, 0x66, 0xf6, 0x66, 0x6c, 0xf8, 0x00], # 00d0 (Eth) + [0xfc, 0x00, 0xcc, 0xec, 0xfc, 0xdc, 0xcc, 0x00], # 00d1 (Ntilde) + [0xc0, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00], # 00d2 (Ograve) + [0x06, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00], # 00d3 (Oacute) + [0x7c, 0xc6, 0x38, 0x6c, 0xc6, 0x6c, 0x38, 0x00], # 00d4 (Ocircumflex) + [0x76, 0xdc, 0x38, 0x6c, 0xc6, 0x6c, 0x38, 0x00], # 00d5 (Otilde) + [0xc3, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x00], # 00d6 (Odieresis) + [0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00, 0x00], # 00d7 (multiply) + [0x3a, 0x6c, 0xce, 0xd6, 0xe6, 0x6c, 0xb8, 0x00], # 00d8 (Oslash) + [0xe0, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00], # 00d9 (Ugrave) + [0x1c, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00], # 00da (Uacute) + [0x7c, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], # 00db (Ucircumflex) + [0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00], # 00dc (Udieresis) + [0x1c, 0x00, 0xcc, 0xcc, 0x78, 0x30, 0x78, 0x00], # 00dd (Yacute) + [0xf0, 0x60, 0x7c, 0x66, 0x7c, 0x60, 0xf0, 0x00], # 00de (Thorn) + [0x78, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xcc, 0x00], # 00df (germandbls) + [0xe0, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00], # 00e0 (agrave) + [0x1c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00], # 00e1 (aacute) + [0x7e, 0xc3, 0x3c, 0x06, 0x3e, 0x66, 0x3f, 0x00], # 00e2 (acircumflex) + [0x76, 0xdc, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00], # 00e3 (atilde) + [0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00], # 00e4 (adieresis) + [0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00], # 00e5 (aring) + [0x00, 0x00, 0x7f, 0x0c, 0x7f, 0xcc, 0x7f, 0x00], # 00e6 (ae) + [0x00, 0x00, 0x78, 0xc0, 0xc0, 0x78, 0x0c, 0x38], # 00e7 (ccedilla) + [0xe0, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00], # 00e8 (egrave) + [0x1c, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00], # 00e9 (eacute) + [0x7e, 0xc3, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00], # 00ea (ecircumflex) + [0xcc, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00], # 00eb (edieresis) + [0xe0, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00], # 00ec (igrave) + [0x38, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00], # 00ed (iacute) + [0x7c, 0xc6, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], # 00ee (icircumflex) + [0xcc, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00], # 00ef (idieresis) + [0x30, 0x7e, 0x0c, 0x7c, 0xcc, 0xcc, 0x78, 0x00], # 00f0 (eth) + [0x00, 0xf8, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0x00], # 00f1 (ntilde) + [0x00, 0xe0, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00], # 00f2 (ograve) + [0x00, 0x1c, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00], # 00f3 (oacute) + [0x78, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00], # 00f4 (ocircumflex) + [0x76, 0xdc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00], # 00f5 (otilde) + [0x00, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00], # 00f6 (odieresis) + [0x30, 0x30, 0x00, 0xfc, 0x00, 0x30, 0x30, 0x00], # 00f7 (divide) + [0x00, 0x02, 0x7c, 0xce, 0xd6, 0xe6, 0x7c, 0x80], # 00f8 (oslash) + [0x00, 0xe0, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00], # 00f9 (ugrave) + [0x00, 0x1c, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00], # 00fa (uacute) + [0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00], # 00fb (ucircumflex) + [0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00], # 00fc (udieresis) + [0x00, 0x1c, 0x00, 0xcc, 0xcc, 0x7c, 0x0c, 0x78], # 00fd (yacute) + [0xe0, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0xf0], # 00fe (thorn) + [0x00, 0xcc, 0x00, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], # 00ff (ydieresis) +] + +def create_tileset(font_data, tile_size=8, tiles_per_row=16): + num_tiles = len(font_data) + rows = (num_tiles + tiles_per_row - 1) // tiles_per_row + img_width = tiles_per_row * tile_size + img_height = rows * tile_size + image = Image.new('1', (img_width, img_height), 0) # Create a new white image + + for index, char_data in enumerate(font_data): + x = (index % tiles_per_row) * tile_size + y = (index // tiles_per_row) * tile_size + for row in range(tile_size): + for col in range(tile_size): + if char_data[row] & (1 << (7 - col)): + image.putpixel((x + col, y + row), 1) # Set pixel to black + + image.save('font_tileset.png') + +create_tileset(font8x8_ib8x8u) diff --git a/assets/textures/8x8.png b/assets/textures/8x8.png index 46f927b9979aa63652572c0470f0c99e96bb771a..20c8e34bc3af2e66aaee7768c20cd72d9c579f95 100644 GIT binary patch literal 1334 zcmV-61If=HLrilHp) zKNM3!DZ+>l7CopW6~WmDVN6((k}lRV=;7KON+OhG9tPu@!I&_CMcpo=RUdZk7sl3B?_dgbR{Z@;s0I%-@lH|2N07<2i%qQpn`-UV_2SBFwe?{=S!`};z zF6H^s67;=JJOBDsE(;Z0T0kiU0K#`FTzH8}1*NH|W1;jp_>yzy80g-)3f7oYul?w| z4FwOl{puyeXc4w(1q3JF;x|`5Cq2>PwA=EOr}VgTthg+^;IwHy$pR<{Iexse&>sER zo$D@d0oa0N_(fDj#etqU;QEqne4XtBIFfFRv-RsmpWP!_NCld)qZ54PX}}l6yz}Ul zoLHSfqkVw}*S|rg+cD7NY4ZWAd25*uQ?K9T-^5=sU`u(|hg)U_Arg*NmxTsx! z5kME&qAc+f{F9HIj*MBCj>Dn$ov~xIanL?Wi=2zS6FtDu#D$8*d&cd&(CN@QkItml zJY!8=c*F77GvSL5@+fkx=;pWBhsfY!QXlLc5(12&~nUBWDsK!YHc_604JNkHW4vZ#4NMxK*@CeLPi~Nzm#`?Il8A9a2CPlXa_oZl`12Ey!;>x z3mrw_I27TtD2~yjlyOP5lQsY}J`St+;A=o+AtB*l&1pC`W*EwBqfwK!N^;{FH4kVV3!oaoOJ`^FJj_^vEEs;$;Y-TQgA1r$9u=(e zw*^zQ{*C||R26W$UAlS_0iR#{#9$~|ci<7AR1s-qxB_qmL54g_*5L@?2wdH0I9vkl zvb&pVQRSnLoZtd1R?W=JFJpn3%DzY2w&%4lRh`9b0p`y0FYIfvhdK{iisile3vc|> zpDN%qil+H(@H1mkNbo=Vk28RO9ewb_$%)?NSu@Y?LeFllMS3Aj%b`ijEraVuiK|x) z7+@D`6+?By3_PGo-;;Hq?!0{WA`p`eqzkzA-Ol4CCHHXIdnMjlo;s`uz!nSnG{$2_ zd{2&H(X*RtyPQqSO;gT8R&m`ZQPC%hpoeMkfk9nmO3 zy-u|R(3u@bJKYBM-@WDoT|KgfU#tRY*6kq+!h~lmEw|Q;hP2!=soONbZZaY2E)Zdb z^gZ~&|Df*;*>f$2kqz8(Xa^U`lx%Q&0cOxB4IpbgtN|Uk*9VX{`RXQE8<2FDpQ^`` zMj|v2t}&bxDTUTBEt|w>k(P}q`(`3VpgA3_X7e(@pZ+}tXa}0fMsg~V@97srr_TU#T# zCmmMc5V`jM|FdrX3k_1qRogBbtE= zpVx9uV0tIuHbaF?W~<|tNN+*K?pHQ~R>#s?)FO9OJEhzFITD&U{ni~urytX|bzIKl zSAMAbc$&o(=b2@ldSCX)U+SLnL{vCsU(zgAqcGEqQw2;5Up@^BR#iDw%CpBoXN_9q z>8Oy0ToZ+*_)RazT<5&pmN8wCt?b%S*}nPrR3o}C@2Y!ZANMTosd<%d`pmT|RXtah zu3!7;HADIo^EH>N+-BP+=suBr`*NGuM1xez^9!EtGj5HJX{|JAOv_qw-{JG^Q+u;KW|C!uF_*c4XH zHHePoTwzmSallz=SD_D+QupF-Z+=v@Ua^$6 z@w(i7l*6dI`QZx*=|ugnQE#gMY8raErinbVTBYqcwL>I3=jiTE zCT+iGwNGq!P3wNmi@z(<)19Av|F=i6KTguhkYUaV>Ez!v-=Du0o5+#!-gVa5>+0V) zJ5s}~WbT-o`}S>D{=}p$BfEHW-t!_ky9?ZJ!(LyRd95^-k)D)aPr32d#m zTlDY$oo_S36b?ObJM-T6-P#8)INz}qavc1hA n$sZ4A+Wg{Lzy9NI)}QjTj&h}RE^reDmJAG@u6{1-oD!Mdirection = dir; - ent->frame = 1 + (dir * 3); + switch(dir) { + case FACING_DIRECTION_SOUTH: + ent->frame = 25; + break; + case FACING_DIRECTION_NORTH: + ent->frame = 24; + break; + case FACING_DIRECTION_EAST: + ent->frame = 26; + break; + case FACING_DIRECTION_WEST: + ent->frame = 27; + break; + } } void entityMove(entity_t *ent, const facingdir_t dir) { @@ -114,7 +129,7 @@ bool_t entityIsMoving(const entity_t *ent) { return ent->subX != 0 || ent->subY != 0; } -bool_t entityInteract(const entity_t *ent) { +bool_t entityInteract(entity_t *ent) { assertNotNull(ent, "Entity cannot be NULL."); assertTrue(ent->type == ENTITY_TYPE_PLAYER, "Entity should be player."); if(entityIsMoving(ent)) return false; @@ -129,7 +144,7 @@ bool_t entityInteract(const entity_t *ent) { assertTrue(target->type < ENTITY_TYPE_COUNT, "Invalid entity type."); if(ENTITY_CALLBACKS[target->type].interact == NULL) return false; - ENTITY_CALLBACKS[target->type].interact(target); + ENTITY_CALLBACKS[target->type].interact(ent, target); return true; } \ No newline at end of file diff --git a/src/dusk/overworld/entity/entity.h b/src/dusk/overworld/entity/entity.h index f095099..52bd52c 100644 --- a/src/dusk/overworld/entity/entity.h +++ b/src/dusk/overworld/entity/entity.h @@ -21,7 +21,7 @@ typedef enum { typedef struct { void (*init)(entity_t *); void (*update)(entity_t *); - void (*interact)(entity_t *); + void (*interact)(entity_t *, entity_t *); } entitycallback_t; typedef struct _entity_t { @@ -86,4 +86,4 @@ bool_t entityIsMoving(const entity_t *entity); * @param entity The entity that is doing the interaction. * @return TRUE if an entity was interacted with, FALSE otherwise. */ -bool_t entityInteract(const entity_t *entity); \ No newline at end of file +bool_t entityInteract(entity_t *entity); \ No newline at end of file diff --git a/src/dusk/overworld/entity/facing.c b/src/dusk/overworld/entity/facing.c index 27b4354..3b0cfce 100644 --- a/src/dusk/overworld/entity/facing.c +++ b/src/dusk/overworld/entity/facing.c @@ -47,4 +47,19 @@ void facingDirAdd(const facingdir_t dir, uint8_t *x, uint8_t *y) { *x += dx; *y += dy; +} + +facingdir_t facingDirFace( + const uint8_t x1, const uint8_t y1, + const uint8_t x2, const uint8_t y2 +) { + if(x1 == x2) { + if(y1 < y2) return FACING_DIRECTION_SOUTH; + if(y1 > y2) return FACING_DIRECTION_NORTH; + } else if(y1 == y2) { + if(x1 < x2) return FACING_DIRECTION_WEST; + if(x1 > x2) return FACING_DIRECTION_EAST; + } + + return FACING_DIRECTION_SOUTH; } \ No newline at end of file diff --git a/src/dusk/overworld/entity/facing.h b/src/dusk/overworld/entity/facing.h index 07a1e5b..ce845c9 100644 --- a/src/dusk/overworld/entity/facing.h +++ b/src/dusk/overworld/entity/facing.h @@ -33,4 +33,18 @@ void facingDirGetRelative(const facingdir_t dir, int8_t *x, int8_t *y); * @param x The x position to add to. * @param y The y position to add to. */ -void facingDirAdd(const facingdir_t dir, uint8_t *x, uint8_t *y); \ No newline at end of file +void facingDirAdd(const facingdir_t dir, uint8_t *x, uint8_t *y); + +/** + * Returns the facing direction to face from one position to another. + * + * @param x1 The x position to face from. + * @param y1 The y position to face from. + * @param x2 The x position to face to. + * @param y2 The y position to face to. + * @return The facing direction to face from one position to another. + */ +facingdir_t facingDirFace( + const uint8_t x1, const uint8_t y1, + const uint8_t x2, const uint8_t y2 +); \ No newline at end of file diff --git a/src/dusk/overworld/entity/npc.c b/src/dusk/overworld/entity/npc.c index 45c66ba..882b814 100644 --- a/src/dusk/overworld/entity/npc.c +++ b/src/dusk/overworld/entity/npc.c @@ -5,7 +5,7 @@ * https://opensource.org/licenses/MIT */ -#include "npc.h" +#include "entity.h" void npcInit(entity_t *ent) { } @@ -13,6 +13,7 @@ void npcInit(entity_t *ent) { void npcUpdate(entity_t *ent) { } -void npcInteract(entity_t *ent) { +void npcInteract(entity_t *player, entity_t *ent) { printf("Interact\n"); + entityTurn(ent, facingDirFace(player->x, player->y, ent->x, ent->y)); } \ No newline at end of file diff --git a/src/dusk/overworld/entity/npc.h b/src/dusk/overworld/entity/npc.h index b29d97f..f5290a8 100644 --- a/src/dusk/overworld/entity/npc.h +++ b/src/dusk/overworld/entity/npc.h @@ -31,6 +31,7 @@ void npcUpdate(entity_t *ent); /** * Handles interaction with an NPC. * + * @param player The player entity interacting. * @param ent The entity to interact with. */ -void npcInteract(entity_t *ent); \ No newline at end of file +void npcInteract(entity_t *player, entity_t *ent); \ No newline at end of file diff --git a/src/duskgl/display/shader/entityshader/entity_frag.glsl b/src/duskgl/display/shader/entityshader/entity_frag.glsl index 1d70729..89731b7 100644 --- a/src/duskgl/display/shader/entityshader/entity_frag.glsl +++ b/src/duskgl/display/shader/entityshader/entity_frag.glsl @@ -15,5 +15,7 @@ out vec4 FragColor; void main() { vec4 tColor = tilesetGetColor(uint(TILESET_SLOT_ENTITIES), v_TextureCoord); + if(tColor.a == 0.0) discard; + if(tColor.r == 0.0) discard; FragColor = vec4(1, 1, 1, 1) * tColor; }