Updated font, added interactions and testing frames.

This commit is contained in:
2025-03-05 18:52:56 -06:00
parent 150b67cc7a
commit 05bdd76508
10 changed files with 306 additions and 10 deletions

248
assets/createimg.py Normal file
View File

@ -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)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -11,7 +11,7 @@ tileset_t TILESETS[TILESET_COUNT] = {
// TILESET_NULL
{ 0, 0 },
// TILESET_FONT
{ 1, 88 }
{ 16, 14 }
};
tilesetid_t TILESET_SLOTS[TILESET_SLOT_COUNT] = {

View File

@ -32,6 +32,8 @@ void entityInit(
// Call init
assertNotNull(ENTITY_CALLBACKS[type].init, "Entity type init callback err.");
ENTITY_CALLBACKS[type].init(ent);
entityTurn(ent, FACING_DIRECTION_SOUTH);
}
void entityUpdate(entity_t *ent) {
@ -61,7 +63,20 @@ void entityTurn(entity_t *ent, const facingdir_t dir) {
assertTrue(dir < FACING_DIRECTION_COUNT, "Invalid facing direction");
ent->direction = 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;
}

View File

@ -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);
bool_t entityInteract(entity_t *entity);

View File

@ -48,3 +48,18 @@ 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;
}

View File

@ -34,3 +34,17 @@ void facingDirGetRelative(const facingdir_t dir, int8_t *x, int8_t *y);
* @param y The y position to add to.
*/
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
);

View File

@ -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));
}

View File

@ -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);
void npcInteract(entity_t *player, entity_t *ent);

View File

@ -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;
}