From f6db38084ece6ecf3f0f423308051e8800a027a4 Mon Sep 17 00:00:00 2001 From: Gamatek Date: Sun, 23 Nov 2025 16:55:08 +0100 Subject: [PATCH] Added Chess --- apps/Chess/Makefile | 34 ++ apps/Chess/app.elf | Bin 0 -> 452956 bytes apps/Chess/app.icon | Bin 0 -> 293 bytes apps/Chess/assets/bishop.h | 233 ++++++++++ apps/Chess/assets/bishop.png | Bin 0 -> 376 bytes apps/Chess/assets/bishop1.h | 233 ++++++++++ apps/Chess/assets/bishop1.png | Bin 0 -> 390 bytes apps/Chess/assets/king.h | 233 ++++++++++ apps/Chess/assets/king.png | Bin 0 -> 403 bytes apps/Chess/assets/king1.h | 233 ++++++++++ apps/Chess/assets/king1.png | Bin 0 -> 438 bytes apps/Chess/assets/knight.h | 233 ++++++++++ apps/Chess/assets/knight.png | Bin 0 -> 381 bytes apps/Chess/assets/knight1.h | 233 ++++++++++ apps/Chess/assets/knight1.png | Bin 0 -> 398 bytes apps/Chess/assets/pawn.h | 233 ++++++++++ apps/Chess/assets/pawn.png | Bin 0 -> 313 bytes apps/Chess/assets/pawn1.h | 233 ++++++++++ apps/Chess/assets/pawn1.png | Bin 0 -> 337 bytes apps/Chess/assets/queen.h | 233 ++++++++++ apps/Chess/assets/queen.png | Bin 0 -> 378 bytes apps/Chess/assets/queen1.h | 233 ++++++++++ apps/Chess/assets/queen1.png | Bin 0 -> 390 bytes apps/Chess/assets/rook.h | 233 ++++++++++ apps/Chess/assets/rook.png | Bin 0 -> 378 bytes apps/Chess/assets/rook1.h | 233 ++++++++++ apps/Chess/assets/rook1.png | Bin 0 -> 379 bytes apps/Chess/board.c | 97 +++++ apps/Chess/board.h | 20 + apps/Chess/chess_defs.h | 51 +++ apps/Chess/icon.png | Bin 0 -> 702 bytes apps/Chess/icon.xcf | Bin 0 -> 4822 bytes apps/Chess/img2h.py | 75 ++++ apps/Chess/main.c | 362 ++++++++++++++++ apps/Chess/minimax.c | 384 +++++++++++++++++ apps/Chess/minimax.h | 12 + apps/Chess/moves.c | 769 ++++++++++++++++++++++++++++++++++ apps/Chess/moves.h | 35 ++ apps/Chess/sources.mak | 7 + apps/Chess/ui.c | 498 ++++++++++++++++++++++ apps/Chess/ui.h | 21 + apps/apps.js | 1 + 42 files changed, 5162 insertions(+) create mode 100644 apps/Chess/Makefile create mode 100644 apps/Chess/app.elf create mode 100644 apps/Chess/app.icon create mode 100644 apps/Chess/assets/bishop.h create mode 100644 apps/Chess/assets/bishop.png create mode 100644 apps/Chess/assets/bishop1.h create mode 100644 apps/Chess/assets/bishop1.png create mode 100644 apps/Chess/assets/king.h create mode 100644 apps/Chess/assets/king.png create mode 100644 apps/Chess/assets/king1.h create mode 100644 apps/Chess/assets/king1.png create mode 100644 apps/Chess/assets/knight.h create mode 100644 apps/Chess/assets/knight.png create mode 100644 apps/Chess/assets/knight1.h create mode 100644 apps/Chess/assets/knight1.png create mode 100644 apps/Chess/assets/pawn.h create mode 100644 apps/Chess/assets/pawn.png create mode 100644 apps/Chess/assets/pawn1.h create mode 100644 apps/Chess/assets/pawn1.png create mode 100644 apps/Chess/assets/queen.h create mode 100644 apps/Chess/assets/queen.png create mode 100644 apps/Chess/assets/queen1.h create mode 100644 apps/Chess/assets/queen1.png create mode 100644 apps/Chess/assets/rook.h create mode 100644 apps/Chess/assets/rook.png create mode 100644 apps/Chess/assets/rook1.h create mode 100644 apps/Chess/assets/rook1.png create mode 100644 apps/Chess/board.c create mode 100644 apps/Chess/board.h create mode 100644 apps/Chess/chess_defs.h create mode 100644 apps/Chess/icon.png create mode 100644 apps/Chess/icon.xcf create mode 100644 apps/Chess/img2h.py create mode 100644 apps/Chess/main.c create mode 100644 apps/Chess/minimax.c create mode 100644 apps/Chess/minimax.h create mode 100644 apps/Chess/moves.c create mode 100644 apps/Chess/moves.h create mode 100644 apps/Chess/sources.mak create mode 100644 apps/Chess/ui.c create mode 100644 apps/Chess/ui.h diff --git a/apps/Chess/Makefile b/apps/Chess/Makefile new file mode 100644 index 00000000..96b41eb8 --- /dev/null +++ b/apps/Chess/Makefile @@ -0,0 +1,34 @@ +API=../../api +CC=arm-none-eabi-gcc +OBJCOPY=arm-none-eabi-objcopy +AR=arm-none-eabi-ar +CFLAGS=-DNDEBUG -ggdb3 -I$(API) -Os -mcpu=cortex-m7 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard -fno-common -fdata-sections -ffunction-sections -fno-exceptions +LDFLAGS=-Wl,-L$(API) -Wl,--gc-sections -Wl,--entry=entrypoint --specs=nosys.specs -nostartfiles -Wl,-Ur -lapi + +%.o: %.c + $(CC) $(CFLAGS) -c $< + +ifeq ($(OS),Windows_NT) +# Windows Version +all: app.elf app.icon + +$(API)/libapi.a: + $(MAKE) -C $(API) + +app.elf: main.o board.o moves.o minimax.o ui.o $(API)/libapi.a + $(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS) + +app.icon: icon.png + python ../../tool/png2icon.py $< $@ + +clean: + rm -f *.elf *.o *.icon + +else +# Linux Version +app.elf: main.o + $(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS) + +clean: + rm -f *.elf *.o +endif diff --git a/apps/Chess/app.elf b/apps/Chess/app.elf new file mode 100644 index 0000000000000000000000000000000000000000..30fe8c5e873dd6e70747e81af3e77321e0c67f27 GIT binary patch literal 452956 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

ZrW>JTikJeS9iw-urxToscy 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�P!s$ufiGxA1;x7yJB7gu&mh(h+{NZ6BFO$gU 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%0DM@3iuBvg5}IED?F)#NrC>)K5O$YY9&R{BW3fw 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

*ck!qmZEkAm}n=|_PA!?Og}K_ivpYL-IN0$ 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


P$&{0KkCukc6w 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 KwIDm#y8i<&eN$Ng literal 0 HcmV?d00001 diff --git a/apps/Chess/app.icon b/apps/Chess/app.icon new file mode 100644 index 0000000000000000000000000000000000000000..1dc183b3ad860881ba044900290fd3bad400f790 GIT binary patch literal 293 zcmWgs&&be!|9|cK*!MQinHX%dV&B)kzYi2#Ukend1#;$n2MR0IzK>yG%VDsKeIJ{_ zz|X{B#gN3na)W_ChrySrfPvuwL;n5$HqSw71O05C-~Ydkkw1^Yl_85kJ~odbLO=Gs z2V*Fc4@mH{zNZ%x12d5IUy3P=K|$_16N6gJHYNsz-MvfyOkj=< z2SiYTe;*?&-!2xg0zMxWJ~bu~^M5>0o?{v-UjfL_!~8{T|7-aFFtPF*aIiv@0$mJL zrv`MkAXtF^kidT_{wkqxrW3;aVZxF8Mk3Mte4>&3uSDb7j*0PaV07gIQj5fc0{(*l E07}4Ivj6}9 literal 0 HcmV?d00001 diff --git a/apps/Chess/assets/bishop.h b/apps/Chess/assets/bishop.h new file mode 100644 index 00000000..9ea1f75b --- /dev/null +++ b/apps/Chess/assets/bishop.h @@ -0,0 +1,233 @@ +#ifndef __BISHOP_H__ +#define __BISHOP_H__ + +#include + +const uint16_t bishop_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xDEDB, 0xDEDB, 0xDEDB, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, + 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define BISHOP_WIDTH 42 +#define BISHOP_HEIGHT 42 + +#endif // __BISHOP_H__ diff --git a/apps/Chess/assets/bishop.png b/apps/Chess/assets/bishop.png new file mode 100644 index 0000000000000000000000000000000000000000..a75a9af74b75ec252a25178285963ac3fb59f7d8 GIT binary patch literal 376 zcmV-;0f+vHP)@riX+_v|6FVIiDRRCpoXx;j=e8v9VI!@_n8c zQ&kuBsPa8(^bZHSF`9}6xW{os-rKf8_k9n22=jVw5_Mzr!CX>w(==#j^e83@H;KA2 zYTktcNt^(uXIa*8lc*b`saSw}Sr!nVrU|+n_=w`qgyp~&aqs(%uU6MJ^db1?h2B%0 z$BWv{W^!Ycv51ksi$KP^n{jh<+qOI}dWT`au-MbUO`>j$T6R6~1q5(k-TVW+;v+YS zx-t3{^o(2NXehc#v=}we4Yrg-gYg(1@;h1Ej>CMOXR&8pSFzr89oM7QF6cSB99kPc zaOYT5nB$|5f?h~1sT7JFxHY$WcEP(|^Ut24h_ literal 0 HcmV?d00001 diff --git a/apps/Chess/assets/bishop1.h b/apps/Chess/assets/bishop1.h new file mode 100644 index 00000000..83b515a6 --- /dev/null +++ b/apps/Chess/assets/bishop1.h @@ -0,0 +1,233 @@ +#ifndef __BISHOP1_H__ +#define __BISHOP1_H__ + +#include + +const uint16_t bishop1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x4A49, 0x2945, 0x2945, 0x2945, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x2945, 0x2945, 0x2945, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x2945, + 0x2945, 0x2945, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, + 0x39C7, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, + 0x39C7, 0x39C7, 0x39C7, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, + 0x39C7, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, + 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, + 0x5ACB, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, + 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, 0x4A49, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, + 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, + 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define BISHOP1_WIDTH 42 +#define BISHOP1_HEIGHT 42 + +#endif // __BISHOP1_H__ diff --git a/apps/Chess/assets/bishop1.png b/apps/Chess/assets/bishop1.png new file mode 100644 index 0000000000000000000000000000000000000000..9725f5edbd616fa0c9f9944387b4d43308358950 GIT binary patch literal 390 zcmV;10eSw3P)_wtkK+KfX_^=-#x_lZ9=9Y=cSY_;4-1(@WsF+UGX;wV*3gr`n;E6S>F9+5|uG( kLeE$~puL`C5|uIf1Q3)=9Mibi3IG5A07*qoM6N<$g5XK4=Kufz literal 0 HcmV?d00001 diff --git a/apps/Chess/assets/king.h b/apps/Chess/assets/king.h new file mode 100644 index 00000000..babb3488 --- /dev/null +++ b/apps/Chess/assets/king.h @@ -0,0 +1,233 @@ +#ifndef __KING_H__ +#define __KING_H__ + +#include + +const uint16_t king_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, + 0xAD55, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define KING_WIDTH 42 +#define KING_HEIGHT 42 + +#endif // __KING_H__ diff --git a/apps/Chess/assets/king.png b/apps/Chess/assets/king.png new file mode 100644 index 0000000000000000000000000000000000000000..8da73d0ccbfd88f223ca0936aa764831dce47eec GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{irxz!>G};usRad3D-d-X;fuma8|| zOD{;c25`;|U^iLx{n3-t&&2xYXB=Ce7~6NUW;^@$+ok)%H(jw^`CiMutn~lJo5x;6 z>KwB5o%|{8dT5md+e;-r`}1mn(u@6zEEn%ycloW$`bVCLlUMX!T&sD-B|qTt-^hAz ze))rSS96878cHRL*~vYald(}_(fjJSV_WV1hh9J9*Y<`LtmDf8^>QlZRV&Ce!$jmMHOONdftvsc)`nK7&y0<` + +const uint16_t king1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, + 0x2945, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, 0x4A49, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, + 0x4A49, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x5ACB, 0x5ACB, 0x5ACB, + 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, + 0x5ACB, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x5ACB, 0x5ACB, 0x5ACB, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, + 0x5ACB, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, 0x4A49, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, + 0x4A49, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, + 0x4A49, 0x4A49, 0x4A49, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define KING1_WIDTH 42 +#define KING1_HEIGHT 42 + +#endif // __KING1_H__ diff --git a/apps/Chess/assets/king1.png b/apps/Chess/assets/king1.png new file mode 100644 index 0000000000000000000000000000000000000000..720cfa0f02bdf5b385d81d821a1cff1d0171836f GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{irxz*y_);usRad3D;}-ew1pmba6; z6;#xemNR=TaPV5d{7XUQ(ekF^j)(xb4`*A0Nvk&mNE7aev+Kzg=tJEvj4b zr+CHh?z3iY=aU%UEz+3q-Ng68V+$wtkKg|02yHd|m7teiGVgiBxfg*pnjnE)=B+bc z$Y$+{`?~zg2i+a=rL$dfdyW}0%gaAVjbu8wN#{cBbw_r=_h0vH+qv9I@(TAMwLs~` zpAMwo$-Qk9wxFk=_;2Umuu##G``<6@F+08K?AALulUMWxcFs%g|MD#PK*!GbhtKAT z2IyJg*$f=$Uu9E$+JLEdFm9yDlDXvKPO)T=u&**i@gLU4QoXolO0*$IX_FtNhfG z&;QIiZ%Nqp%qxsp5&sLM{YBi98DExVI?S~H-#8!B1JCY-j(zZ&j+ dNdY;+e*VY!rRViueF4S?gQu&X%Q~loCICE-*5m*H literal 0 HcmV?d00001 diff --git a/apps/Chess/assets/knight.h b/apps/Chess/assets/knight.h new file mode 100644 index 00000000..8e97c09d --- /dev/null +++ b/apps/Chess/assets/knight.h @@ -0,0 +1,233 @@ +#ifndef __KNIGHT_H__ +#define __KNIGHT_H__ + +#include + +const uint16_t knight_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define KNIGHT_WIDTH 42 +#define KNIGHT_HEIGHT 42 + +#endif // __KNIGHT_H__ diff --git a/apps/Chess/assets/knight.png b/apps/Chess/assets/knight.png new file mode 100644 index 0000000000000000000000000000000000000000..5da9551c6688a0f9615da71cfa82d27a5af8f47d GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{irx!06)X;usRad3DA?-X;eTm!mgC zVhffCWj*o`zrtv4^`Py@gp*Iwr~i#Vm}1lWI%VdWVvz8b zh@S`5J9n?ke(*SRgAVt#>!qz}f_r&Wq^5HIN|JF?FWlT-`1zM?)Uv>t3&dgzo zHrepCmj7?}gv=1N6|V714m;bW%e67eKV`Gy@l(9K!Y80x?*3ovBp(K6cDc>-K1<&& z&rby!mvzy2x=hkH2J`tPW-&`aBCif+zZ5Ne-d6KvyK=kxP?78^OnzL2~uUt%;F#J(@! W9A~N8>R$j1Rt8U3KbLh*2~7ahG^X$X literal 0 HcmV?d00001 diff --git a/apps/Chess/assets/knight1.h b/apps/Chess/assets/knight1.h new file mode 100644 index 00000000..a20fd72c --- /dev/null +++ b/apps/Chess/assets/knight1.h @@ -0,0 +1,233 @@ +#ifndef __KNIGHT1_H__ +#define __KNIGHT1_H__ + +#include + +const uint16_t knight1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, + 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, + 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, + 0x528A, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, + 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, + 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, + 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, + 0x4228, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4228, 0x4228, 0x4228, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, + 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x0000, 0x0000, 0x0000, + 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x4228, 0x4228, 0x4228, 0x39C7, + 0x39C7, 0x39C7, 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x4228, 0x4228, + 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x4228, 0x4228, 0x4228, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, + 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x4228, 0x4228, + 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, + 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, + 0x528A, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, + 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, + 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, + 0x4228, 0x4228, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, + 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, + 0x528A, 0x4228, 0x4228, 0x4228, 0x0000, 0x0000, 0x0000, 0x528A, + 0x528A, 0x528A, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define KNIGHT1_WIDTH 42 +#define KNIGHT1_HEIGHT 42 + +#endif // __KNIGHT1_H__ diff --git a/apps/Chess/assets/knight1.png b/apps/Chess/assets/knight1.png new file mode 100644 index 0000000000000000000000000000000000000000..c534b8d6c843a501d7a6077f79644620896fedd8 GIT binary patch literal 398 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{irxz!>W3;usRa`F4gcSF?dgOZLmm zJx$sA4;=S4WUqg~%M!jz;Lf(CQxiFURyu0)Y+3F3tLJb{C1-Bo=GuANj6y^M)H{EB zzW!4qDY-bz#o@jQ@1^MLqE#~PFA^mdC?ERu?!1su=P8M^UG>L1as#e!ovxG5tT*Gi zQ#wQuWi|+E>LRIhVR;bDz6pbXFz#O4IeF(~rnn zJt?-H8?OVhIO2NorvtT5+-3AJ&XV_qOEN*>;=ro45Vh ptPa!?C|q@{r14wTB%qZqxVf#eZtoBMTLKJc22WQ%mvv4FO#le6xoZFb literal 0 HcmV?d00001 diff --git a/apps/Chess/assets/pawn.h b/apps/Chess/assets/pawn.h new file mode 100644 index 00000000..eac419c5 --- /dev/null +++ b/apps/Chess/assets/pawn.h @@ -0,0 +1,233 @@ +#ifndef __PAWN_H__ +#define __PAWN_H__ + +#include + +const uint16_t pawn_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, + 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, + 0xD6BA, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define PAWN_WIDTH 42 +#define PAWN_HEIGHT 42 + +#endif // __PAWN_H__ diff --git a/apps/Chess/assets/pawn.png b/apps/Chess/assets/pawn.png new file mode 100644 index 0000000000000000000000000000000000000000..c34cce530913fb24015c67f8965081fdd918c2f1 GIT binary patch literal 313 zcmV-90mlA`P)9*KYQFvp&Asxol=6s%d$YT$T{P7nkMK&h;o~8)J&ldW+By#d)qeY>!Rn) zIBKTQD)h`Qgn-*mYy&fnnkiJ&biwu|(ER6lMwHQySkal#pa*WA@4PN=`0Pfn`YL+hzB1oS zi>;aa-tbGVYUAR=-8awjyeLP{ZnV(izrID%lW)AO!_l9(Ru$R-51UCjUY0rR00000 LNkvXXu0mjfx@?ph literal 0 HcmV?d00001 diff --git a/apps/Chess/assets/pawn1.h b/apps/Chess/assets/pawn1.h new file mode 100644 index 00000000..e227ce90 --- /dev/null +++ b/apps/Chess/assets/pawn1.h @@ -0,0 +1,233 @@ +#ifndef __PAWN1_H__ +#define __PAWN1_H__ + +#include + +const uint16_t pawn1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, 0x4228, + 0x4228, 0x4228, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, + 0x4228, 0x4228, 0x4228, 0x4228, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, + 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, + 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x528A, 0x528A, 0x528A, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, + 0x528A, 0x528A, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x528A, 0x528A, 0x528A, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, + 0x4228, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, + 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, + 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, + 0x528A, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, + 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define PAWN1_WIDTH 42 +#define PAWN1_HEIGHT 42 + +#endif // __PAWN1_H__ diff --git a/apps/Chess/assets/pawn1.png b/apps/Chess/assets/pawn1.png new file mode 100644 index 0000000000000000000000000000000000000000..b90295d768481aabbcab80c91e2f73a34b8ee300 GIT binary patch literal 337 zcmV-X0j~auP)wN5M*t7hQ=`7!THoWwc1%mH)Y zzZ|$V{_c}mzq-FWv!kCCR}*Lr3g8~c5e~2G3Qff{O?b>XL+^ssw;D&)1p1&XxSHZl zDRHZ_%ByiyO`uKaw`~KyuIr$eWr3CwY8+J)C@blnU_|oo`yQVu`WPeL@1nXtHIAwY zv}V==H(l#XDHJiZ_a1s*>rt0G4AeMkfr7V?Fh_-qL^IV1_}v0#aR>p8Qeg?7x^X34 zgC4ktVL1I4y4#=U8D;En2P-ZhzC{n*bbaR@?plU{C4A}8!rta_aZ3ek=%t)I+F{T7 jqoVNrV;qKF*m3s)g-%E80%ZYs00000NkvXXu0mjfG8>R2 literal 0 HcmV?d00001 diff --git a/apps/Chess/assets/queen.h b/apps/Chess/assets/queen.h new file mode 100644 index 00000000..4e1d429e --- /dev/null +++ b/apps/Chess/assets/queen.h @@ -0,0 +1,233 @@ +#ifndef __QUEEN_H__ +#define __QUEEN_H__ + +#include + +const uint16_t queen_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x0000, + 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, + 0xDEDB, 0xDEDB, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, + 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define QUEEN_WIDTH 42 +#define QUEEN_HEIGHT 42 + +#endif // __QUEEN_H__ diff --git a/apps/Chess/assets/queen.png b/apps/Chess/assets/queen.png new file mode 100644 index 0000000000000000000000000000000000000000..90f2667276bafb7672d71ddf8adb82c6b4fb9cd8 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{irx!071d;usRad3D-B-ev<4XYZ@F z78`{pr*!xnQsX(udG5`HOL97|wdbp;gr@rW{otG?FMsLotyur`)#qmF&)O#*`hR1@ zu?$_Y2lJM3R_5PklXYsaJM#4TNfoW+F9&0?O74G;IQPOZQZq$ps$tbmZef*=tOnm_ z**L2ON-oaV=~=_6*1Ru`Bj2d=l*HB*f?FS^zCQEz{D?({c|P+v-amO?YL%}#c}35~HS5w@mfkuXyQ|-4k&)Z^UGrW(;C}G; z@=go(a=+!D=Yh=Cbvth%^=iEx*x_Q9R(qet-+#re0Mf1Vg?G1g`syX>AY1k^Jlq!Y UGSIK95*Vfop00i_>zopr05i0yeE + +const uint16_t queen1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, 0x4A49, + 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x0000, + 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, + 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, + 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define QUEEN1_WIDTH 42 +#define QUEEN1_HEIGHT 42 + +#endif // __QUEEN1_H__ diff --git a/apps/Chess/assets/queen1.png b/apps/Chess/assets/queen1.png new file mode 100644 index 0000000000000000000000000000000000000000..b238f175b078cf1237374221e89d771584a9e76b GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{irx!07Ag;usRad3D-G-ev<4m&qE; z4##=c9AN7?u%O4u-<>t7sbz`9+5|&B>-e5U8V!f{usCB|ckD^y2fu%D%Rh%1b)J$a-90ba|DxQx8@8!Hw^UvE z>cbw-@P7Weql!D6t>%6Q>CP~zIyNz|{tMXgi%(p98GF6)lSSVJ#s9xz;u%1evn^zQ heZM2tA7o%H(>wMcTc=l#BZ1+|;OXk;vd$@?2>^8svUmUh literal 0 HcmV?d00001 diff --git a/apps/Chess/assets/rook.h b/apps/Chess/assets/rook.h new file mode 100644 index 00000000..b9696a27 --- /dev/null +++ b/apps/Chess/assets/rook.h @@ -0,0 +1,233 @@ +#ifndef __ROOK_H__ +#define __ROOK_H__ + +#include + +const uint16_t rook_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, + 0xD6BA, 0xD6BA, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, + 0xD6BA, 0xD6BA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, + 0xD6BA, 0xD6BA, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, + 0xD6BA, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xD6BA, 0xD6BA, 0xD6BA, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xC638, 0xC638, 0xC638, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, +}; + +#define ROOK_WIDTH 42 +#define ROOK_HEIGHT 42 + +#endif // __ROOK_H__ diff --git a/apps/Chess/assets/rook.png b/apps/Chess/assets/rook.png new file mode 100644 index 0000000000000000000000000000000000000000..8d43fad203e05280f9d5a807997a5c00d11c4826 GIT binary patch literal 378 zcmV-=0fqjFP)k=2QHi@A4PEzz66}@FWOcB=HcMChWK~A&@kfQ)g#Pn(7_bq%7>$!!Dsx zLKTIlpW02ypNXa$)Sn9(qjwL;zVFdi*EO^y+O|b$+cszx<2d4N(=^bQkRd8#)D^uI z$FZKB^s1_G`MR#qQ6WQA#%MVDuIrMiP1BTI=S7}$UiWAjqB2I4=jtnp>_mGa`=BT3 zNrtG5(Inq YpAPP03WgzLvH$=807*qoM6N<$f}b(0_W%F@ literal 0 HcmV?d00001 diff --git a/apps/Chess/assets/rook1.h b/apps/Chess/assets/rook1.h new file mode 100644 index 00000000..a6488e73 --- /dev/null +++ b/apps/Chess/assets/rook1.h @@ -0,0 +1,233 @@ +#ifndef __ROOK1_H__ +#define __ROOK1_H__ + +#include + +const uint16_t rook1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, + 0x52AA, 0x52AA, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x1082, 0x1082, 0x1082, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x52AA, 0x52AA, 0x52AA, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x1082, 0x1082, + 0x1082, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x52AA, 0x52AA, 0x52AA, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, + 0x1082, 0x1082, 0x1082, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, 0x52AA, 0x52AA, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x1082, 0x1082, 0x1082, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, + 0x52AA, 0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x1082, 0x1082, 0x1082, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x52AA, 0x52AA, 0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x1082, 0x1082, + 0x1082, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, + 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, + 0x1082, 0x1082, 0x1082, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, + 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x1082, 0x1082, 0x1082, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, + 0x4A49, 0x4A49, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x39E7, 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x1082, 0x1082, 0x1082, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, 0x39E7, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, + 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39E7, + 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x39E7, 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, + 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, + 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, + 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, + 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x3186, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, + 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, + 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x52AA, 0x52AA, 0x52AA, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, 0x39E7, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, + 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, 0x52AA, 0x52AA, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, + 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, + 0x52AA, 0x52AA, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, + 0x39E7, 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, 0x52AA, + 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x4A49, 0x4A49, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, + 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x52AA, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, + 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, +}; + +#define ROOK1_WIDTH 42 +#define ROOK1_HEIGHT 42 + +#endif // __ROOK1_H__ diff --git a/apps/Chess/assets/rook1.png b/apps/Chess/assets/rook1.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f6d2e99a7ae62600afff9457ea074c59ed76c7 GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{irx!06=Z;usRa`8L9lugO7x`SHY- z;~yB_*)+I+GUJ31jQ;}!A-f*Q%Ymm&p3pJ=4HvaANjqHU9OFB2BV~FYKL0n`8OON7nl7yq&rU& zB4F<;yk_NVsTqvX=d-pQOBI=_`0Cu%>ALZ^F9u5Qn3DqHpOT6E_@mn_V;0-X%6W}9 z{kDI;d#=R#^;b@M%w1l|7u%ZtDE;)t%{qA#E=vecf=Z z?(AkUBcSMXfCQFT2p&9GbCwebp6xXyq8GoGA&~pC5w>8J_d*`&0 RFkqlEc)I$ztaD0e0sv^Os|Nr8 literal 0 HcmV?d00001 diff --git a/apps/Chess/board.c b/apps/Chess/board.c new file mode 100644 index 00000000..0a64b113 --- /dev/null +++ b/apps/Chess/board.c @@ -0,0 +1,97 @@ +#include "board.h" +#include + +void init_board(char board[BOARD_SIZE][BOARD_SIZE]) +{ + // Clear board + for (int x = 0; x < BOARD_SIZE; x++) { + for (int y = 0; y < BOARD_SIZE; y++) { + board[x][y] = EMPTY; + } + } + + // White pieces (y=0, y=1) + board[0][0] = WHITE_R; + board[1][0] = WHITE_N; + board[2][0] = WHITE_B; + board[3][0] = WHITE_Q; + board[4][0] = WHITE_K; + board[5][0] = WHITE_B; + board[6][0] = WHITE_N; + board[7][0] = WHITE_R; + + for (int x = 0; x < BOARD_SIZE; x++) { + board[x][1] = WHITE_P; + } + + // Black pieces (y=7, y=6) + board[0][7] = BLACK_R; + board[1][7] = BLACK_N; + board[2][7] = BLACK_B; + board[3][7] = BLACK_Q; + board[4][7] = BLACK_K; + board[5][7] = BLACK_B; + board[6][7] = BLACK_N; + board[7][7] = BLACK_R; + + for (int x = 0; x < BOARD_SIZE; x++) { + board[x][6] = BLACK_P; + } +} + +void copyBoard(char board[BOARD_SIZE][BOARD_SIZE], char boardCopy[BOARD_SIZE][BOARD_SIZE]) +{ + for (int x = 0; x < BOARD_SIZE; x++) { + for (int y = 0; y < BOARD_SIZE; y++) { + boardCopy[x][y] = board[x][y]; + } + } +} + +void makeMove(char board[BOARD_SIZE][BOARD_SIZE], int x1, int y1, int x2, int y2) +{ + board[x2][y2] = board[x1][y1]; + board[x1][y1] = EMPTY; +} + +int isWhite(char ch) +{ + switch (ch) { + case WHITE_B: + case WHITE_K: + case WHITE_Q: + case WHITE_N: + case WHITE_R: + case WHITE_P: + return 1; + default: + return 0; + } +} + +int isBlack(char ch) +{ + switch (ch) { + case BLACK_B: + case BLACK_K: + case BLACK_Q: + case BLACK_N: + case BLACK_R: + case BLACK_P: + return 1; + default: + return 0; + } +} + +char whichType(char p) +{ + return p; // Placeholder if needed, or just return the char +} + +int is_move_king_white = 0; +int is_move_king_black = 0; +int is_move_right_rook_white = 0; +int is_move_left_rook_white = 0; +int is_move_right_rook_black = 0; +int is_move_left_rook_black = 0; diff --git a/apps/Chess/board.h b/apps/Chess/board.h new file mode 100644 index 00000000..42440f0f --- /dev/null +++ b/apps/Chess/board.h @@ -0,0 +1,20 @@ +#ifndef BOARD_H +#define BOARD_H + +#include "chess_defs.h" + +void init_board(char board[BOARD_SIZE][BOARD_SIZE]); +void copyBoard(char board[BOARD_SIZE][BOARD_SIZE], char boardCopy[BOARD_SIZE][BOARD_SIZE]); +void makeMove(char board[BOARD_SIZE][BOARD_SIZE], int x1, int y1, int x2, int y2); +int isWhite(char ch); +int isBlack(char ch); +char whichType(char p); + +extern int is_move_king_white; +extern int is_move_king_black; +extern int is_move_right_rook_white; +extern int is_move_left_rook_white; +extern int is_move_right_rook_black; +extern int is_move_left_rook_black; + +#endif diff --git a/apps/Chess/chess_defs.h b/apps/Chess/chess_defs.h new file mode 100644 index 00000000..59d68e9c --- /dev/null +++ b/apps/Chess/chess_defs.h @@ -0,0 +1,51 @@ +#ifndef CHESS_DEFS_H +#define CHESS_DEFS_H + +#include +#include +#include + +#define BOARD_SIZE 8 + +// Piece definitions (matching Chess-In-C-master) +#define WHITE_P 'm' +#define WHITE_B 'b' +#define WHITE_N 'n' +#define WHITE_R 'r' +#define WHITE_Q 'q' +#define WHITE_K 'k' + +#define BLACK_P 'M' +#define BLACK_B 'B' +#define BLACK_N 'N' +#define BLACK_R 'R' +#define BLACK_Q 'Q' +#define BLACK_K 'K' + +#define EMPTY ' ' + +#define WHITE 1 +#define BLACK 0 + +#define COLOR_BLACK 0x0000 // #000000 +#define COLOR_WHITE 0xFFFF // #FFFFFF +#define COLOR_RED 0xF800 // #FF0000 +#define COLOR_UPSILON 0x7D19 // #7BA1CD +#define COLOR_TRANSPARENT 0xF81F +#define COLOR_SQUARE_LIGHT 0xEF7A // #EBECD0 +#define COLOR_SQUARE_DARK 0x74AA // #739552 +#define COLOR_MOVE_INDICATOR 0x7BEF + +typedef struct Position { + int x; + int y; +} Pos; + +typedef struct Move { + char type; + Pos pos_start; + Pos pos_end; + struct Move* next; +} Move; + +#endif diff --git a/apps/Chess/icon.png b/apps/Chess/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..64a3527af63158941e9693d2925e2698f8024c72 GIT binary patch literal 702 zcmV;v0zv(WP)z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vGi!vFvd!vV){sAK>D00(qQO+^Rk3lkP1EJY&RivR!u z6iGxuRA}Dqn$617Koo}GGwDnM$)cq<*Nr4C0(aUDse{c<(XwD5YSGK~WUYTHpJP zdbkh*%CZDALu-vBNsuJT&F&<{E1)hzRTT z8bkyI0A*Ru9t;4oEJFwZRaJG$I_GdYon{X<1hm$InL&rcA$ad$j6p16W+fqY8jS9?r-_3p*W1@p=ng&{HsG=yq%u&HP=aA<)l-Bw@qZmW1wMf$x#+a^J_H)5= z2kh^EwOVyWWjMfHRTZqYFvei9SU@Q?i{jBV4V-gG)AS5>53Ub0<9Iy6IS21OraZDp kL{LgWYmGe5|Csju4LOo3l%M-iGXMYp07*qoM6N<$f+&|Pk^lez literal 0 HcmV?d00001 diff --git a/apps/Chess/icon.xcf b/apps/Chess/icon.xcf new file mode 100644 index 0000000000000000000000000000000000000000..60aaf93d9066c22e37812754bdac3944ddfe404c GIT binary patch literal 4822 zcmeHK&u<$=6n30Aq;b-;YM~(Yuq-7`tFC{9wn?kR5viawDk5sBC{iyQdu*?|-Zi`9 z#zCO;%pZVIB_vL$N2L4#T>38{aY7uB-K42g`Q|3^^1a#JWF5sZ5tZPOXT6|haeNsNdl1Xp(mj|J$Rgg4$S`AJVy$A8rlba1NxSS!zkZ` z`7e|w@)%mtifW!Ic}vT}6v8+??~K`eNoSI6>RR^v;8-r7F?G`#lptdQO7iX4jo57L zLn)`5Dwn0y6-mCIJm5E;Ox~ZEkfr2#47hNJ0o{&bXvG8O_K`sU+rEYO8q_ zrEF+i(u_=j+2B;nT+U`3j)5P*E^H@LfG*xZ(B>^O!?IS}*X5K7OSZHmoa9=O zdC*oLGKE{Jf#q1t;4arJfuem44^*9T&RlEGw2CU1WVOsq8M9!~dO6GBqLyZ}2k;NSkMXvc4`MSkaj$kZmydd4U`RP2| zqiCHDq-2qCHLG&fi()u6HB%|-(nDrZ*rsEtcrqq2BV%Uq!lz?*KmS;njLoD6r~Hm- zWb71I^OB(!*|hu-Rvo`d*&d(OxINFTJ8H3{GdVpe;Ww24wR0EI@fI`kydbA9U->8O zFSM*6U+zNw%+e4hm19+MI@N`Io8hx86ZbCiSWbV?g@13igPfj7O(s%TyY%?-5IyD# zCO6~PX?wVXFAuQ{_)lS{kB&*m^_*6jmbsS8$x_+Ur{x0YrE7_VVaL_1xxnH`jRZ9( z@LCgcdMdHgd(S($S1iSe7~eN+Q;FTTPl*$d$OE@BTn!la!na|dy_5FSV~K0@jIzVo4~w~ogV{0b9^`r=tUJE^+Zv4tzr}pPQrNqA z8y3+BuMA*K5yWU8v=VjO+R8b^@hHBC`%!$6GrL~|Wzb=3|5^Sz*dK%rgibn0UpmYxx2YAPRr{+llY)`-55;Bh+`za41OwLTP?SLR0}wn2k9&4HP$?+h zVKoX!=VDO&^UNQ{Ya6}<;JZ!3K!)etQat@OvKM^&a`;bV*o7{tgd$GTQ>6p96DNjD zKevxAhyNfae6Psk=z^MgkhjdTk)3WLBRK3O z#9xy)&T;y1_KF`8?*)(GpX-kJZ7_^bt_$gPwqMnsja9dw)n7%N&DM+B`o>seb7Q?) zZ-t%h*6Lck(Oi4pa-0`y$;Red-Fa0VZ){bY^>q~M^=BL7jqQ!q+NDOTR=w2d`5$Ym z3NN>7&qXZ!2Sw&kG#=Wpzrm$m=^ literal 0 HcmV?d00001 diff --git a/apps/Chess/img2h.py b/apps/Chess/img2h.py new file mode 100644 index 00000000..bd01a2b3 --- /dev/null +++ b/apps/Chess/img2h.py @@ -0,0 +1,75 @@ +from PIL import Image +import sys +import os + +def convert_to_rgb565(r, g, b): + # Convert RGB888 to RGB565 + r = (r >> 3) & 0x1F + g = (g >> 2) & 0x3F + b = (b >> 3) & 0x1F + return (r << 11) | (g << 5) | b + +def png_to_header(png_path, header_path, variable_name): + # Open image with alpha channel support + img = Image.open(png_path) + img = img.convert("RGBA") # Keep alpha channel + width, height = img.size + + # Convert pixels to RGB565 + pixels = [] + for y in range(height): + for x in range(width): + r, g, b, a = img.getpixel((x, y)) + + # Convert transparent pixels (alpha < 128) to bright pink (magic color for transparency) + if a < 128: + r, g, b = 255, 0, 255 # Bright pink (magenta) 0xF81F in RGB565 + + pixel = convert_to_rgb565(r, g, b) + pixels.append(pixel) + + # Generate header file + with open(header_path, "w") as f: + f.write(f"#ifndef __{variable_name.upper()}_H__\n") + f.write(f"#define __{variable_name.upper()}_H__\n\n") + f.write("#include \n\n") + + # Write pixel data + f.write("const uint16_t {variable_name}_data[] = {{\n") + for i in range(0, len(pixels), 8): + line = ["0x%04X" % p for p in pixels[i:i+8]] + f.write(" " + ", ".join(line) + ",\n") + f.write("};\n\n") + + # Write image info + f.write(f"#define {variable_name.upper()}_WIDTH {width}\n") + f.write(f"#define {variable_name.upper()}_HEIGHT {height}\n\n") + + f.write(f"#endif // __{variable_name.upper()}_H__\n") + +if __name__ == "__main__": + # Convert all PNG files in assets directory + assets_dir = "assets" + + if not os.path.exists(assets_dir): + print(f"Error: {assets_dir} directory not found") + sys.exit(1) + + png_files = [f for f in os.listdir(assets_dir) if f.endswith(".png")] + + if not png_files: + print(f"No PNG files found in {assets_dir}") + sys.exit(1) + + for png_file in png_files: + png_path = os.path.join(assets_dir, png_file) + variable_name = os.path.splitext(png_file)[0].replace("-", "_") + header_path = os.path.join(assets_dir, f"{variable_name}.h") + + try: + png_to_header(png_path, header_path, variable_name) + print(f"Converted {png_file} -> {variable_name}.h") + except Exception: + print(f"Error converting {png_file}: {Exception}") + + print(f"\nDone! Converted {len(png_files)} files.") diff --git a/apps/Chess/main.c b/apps/Chess/main.c new file mode 100644 index 00000000..c7bc673d --- /dev/null +++ b/apps/Chess/main.c @@ -0,0 +1,362 @@ +#include "board.h" +#include "chess_defs.h" +#include "extapp_api.h" +#include "minimax.h" +#include "moves.h" +#include "ui.h" +#include +#include +#include +#include + +typedef enum { + MODE_PVP, + MODE_PVAI +} GameMode; + +GameMode game_mode = MODE_PVP; +int ai_difficulty = 1; // 0=Easy, 1=Normal, 2=Hard +char board[BOARD_SIZE][BOARD_SIZE]; +bool white_turn = true; +Move* current_possible_moves = NULL; + +void waitForKeyPressed() +{ + while (!extapp_scanKeyboard()) { + extapp_msleep(10); + } +} + +void waitForKeyReleased() +{ + while (extapp_scanKeyboard()) { + extapp_msleep(10); + } +} + +void extapp_main() +{ + waitForKeyReleased(); + + while (true) { + int cursor_row = 4; + int cursor_col = 4; + bool piece_selected = false; + int selected_row = -1; + int selected_col = -1; + + // Menu Loop + int menu_option = 0; + bool menu_active = true; + + srand(extapp_millis()); // Seed random number generator + + while (menu_active) { + const char* diff_text = "Normal"; + if (ai_difficulty == 0) + diff_text = "Easy"; + else if (ai_difficulty == 2) + diff_text = "Hard"; + + MenuItem main_items[] = { + { "Player vs Player", NULL }, + { "Player vs AI", NULL }, + { "AI difficulty", diff_text } + }; + + int choice = show_menu("CHESS", main_items, 3, menu_option); + + if (choice == -1) { + return; + } + + menu_option = choice; + + if (choice == 0) { + game_mode = MODE_PVP; + menu_active = false; + } else if (choice == 1) { + game_mode = MODE_PVAI; + menu_active = false; + } else if (choice == 2) { + MenuItem diff_items[] = { + { "Easy", NULL }, + { "Normal", NULL }, + { "Hard", NULL } + }; + int diff = show_menu("CHESS", diff_items, 3, ai_difficulty); + if (diff != -1) { + ai_difficulty = diff; + } + } + } + + init_board(board); + white_turn = true; + char last_move_str[16] = ""; + + waitForKeyReleased(); + + extapp_pushRectUniform(0, 0, LCD_WIDTH, LCD_HEIGHT, COLOR_WHITE); + + int check_row = -1; + int check_col = -1; + if (isCheck(board, white_turn ? WHITE : BLACK) == 1) { + Pos kPos = kingPosition(board, white_turn ? WHITE : BLACK); + if (kPos.x != -1) { + check_col = kPos.x; + check_row = 7 - kPos.y; + } + } + + draw_board(board, cursor_row, cursor_col, false, NULL, check_row, check_col); + draw_info_panel(board, cursor_row, cursor_col, false, -1, -1, white_turn, (check_row != -1), last_move_str); + + bool back_to_menu = false; + uint64_t last_cursor_move_time = 0; + + while (true) { + // AI Turn + if (game_mode == MODE_PVAI && !white_turn) { + extapp_msleep(100); // Small delay + + // Generate moves for AI (Black) + Move* ai_moves = getMoves(board, BLACK); + if (ai_moves == NULL || ai_moves->type == 'l' || ai_moves->type == 't') { + // Game Over + if (ai_moves) + freeMoves(ai_moves); + extapp_drawTextLarge("GAME OVER", 100, 100, COLOR_RED, COLOR_WHITE, false); + waitForKeyReleased(); + waitForKeyPressed(); + back_to_menu = true; + break; + } + + // Run Minimax avec difficulté variable + // 0=Easy (depth 1), 1=Normal (depth 2), 2=Hard (depth 3) + int depth = ai_difficulty + 1; + Move* best_move = minimaxManager(board, ai_moves, BLACK, depth, '\0'); + + if (best_move != NULL) { + // Apply move + makeMove(board, best_move->pos_start.x, best_move->pos_start.y, best_move->pos_end.x, best_move->pos_end.y); + snprintf(last_move_str, sizeof(last_move_str), "%c%d -> %c%d", 'a' + best_move->pos_start.x, best_move->pos_start.y + 1, 'a' + best_move->pos_end.x, best_move->pos_end.y + 1); + // Handle promotion (auto queen for AI for now) + if (best_move->type != 'c' && best_move->type != 'a' && best_move->type != 'l' && best_move->type != 't') { + if (board[best_move->pos_end.x][best_move->pos_end.y] == BLACK_P && best_move->pos_end.y == 0) { + board[best_move->pos_end.x][best_move->pos_end.y] = BLACK_Q; + } + } + + freeMoves(best_move); + white_turn = !white_turn; + } else { + // No move found? + } + + check_row = -1; + check_col = -1; + if (isCheck(board, white_turn ? WHITE : BLACK) == 1) { + Pos kPos = kingPosition(board, white_turn ? WHITE : BLACK); + if (kPos.x != -1) { + check_col = kPos.x; + check_row = 7 - kPos.y; + } + } + + draw_board(board, cursor_row, cursor_col, false, NULL, check_row, check_col); + draw_info_panel(board, cursor_row, cursor_col, false, -1, -1, white_turn, (check_row != -1), last_move_str); + continue; + } + + uint64_t keys = extapp_scanKeyboard(); + uint64_t current_time = extapp_millis(); + if (keys & SCANCODE_Home) { + return; + } + if (keys & SCANCODE_Back) { + break; + } + + // OK key to select/move + if (keys & SCANCODE_OK || keys & SCANCODE_EXE) { + if (!piece_selected) { + // Select a piece + int bx = cursor_col; + int by = 7 - cursor_row; + char piece = board[bx][by]; + + if (piece != EMPTY) { + bool is_white_piece = isWhite(piece); + if ((white_turn && is_white_piece) || (!white_turn && !is_white_piece)) { + piece_selected = true; + selected_row = cursor_row; + selected_col = cursor_col; + + // Calculate possible moves for this piece + if (current_possible_moves) + freeMoves(current_possible_moves); + + Move* all_moves = getMoves(board, white_turn ? WHITE : BLACK); + + // Filter moves starting from (bx, by) + Move* filtered_moves = NULL; + Move* m = all_moves; + while (m != NULL) { + if (m->pos_start.x == bx && m->pos_start.y == by) { + Move* new_node = cloneMove(m); + new_node->next = filtered_moves; + filtered_moves = new_node; + } + m = m->next; + } + freeMoves(all_moves); + current_possible_moves = filtered_moves; + + // Optimization: Only redraw the selected square and possible moves + // Redraw selected square + draw_square(board, cursor_row, cursor_col, true, false, (cursor_row == check_row && cursor_col == check_col)); + + // Redraw possible moves + Move* pm = current_possible_moves; + while (pm != NULL) { + int r = 7 - pm->pos_end.y; + int c = pm->pos_end.x; + if (r != cursor_row || c != cursor_col) { + draw_square(board, r, c, false, true, (r == check_row && c == check_col)); + } + pm = pm->next; + } + + draw_info_panel(board, cursor_row, cursor_col, piece_selected, selected_row, selected_col, white_turn, (check_row != -1), last_move_str); + waitForKeyReleased(); + } + } + } else { + // Move or deselect + // Check if cursor pos is in possible moves + int target_x = cursor_col; + int target_y = 7 - cursor_row; + + bool valid_move = false; + Move* m = current_possible_moves; + Move* selected_move = NULL; + + while (m != NULL) { + if (m->pos_end.x == target_x && m->pos_end.y == target_y) { + valid_move = true; + selected_move = m; + break; + } + m = m->next; + } + + if (valid_move) { + // Perform the move + makeMove(board, selected_move->pos_start.x, selected_move->pos_start.y, selected_move->pos_end.x, selected_move->pos_end.y); + snprintf(last_move_str, sizeof(last_move_str), "%c%d -> %c%d", 'a' + selected_move->pos_start.x, selected_move->pos_start.y + 1, 'a' + selected_move->pos_end.x, selected_move->pos_end.y + 1); + + // Handle promotion (ask user? default to Queen for now) + if (board[target_x][target_y] == WHITE_P && target_y == 7) { + board[target_x][target_y] = WHITE_Q; + } else if (board[target_x][target_y] == BLACK_P && target_y == 0) { + board[target_x][target_y] = BLACK_Q; + } + + white_turn = !white_turn; // Switch turn + piece_selected = false; + selected_row = -1; + selected_col = -1; + if (current_possible_moves) { + freeMoves(current_possible_moves); + current_possible_moves = NULL; + } + + check_row = -1; + check_col = -1; + if (isCheck(board, white_turn ? WHITE : BLACK) == 1) { + Pos kPos = kingPosition(board, white_turn ? WHITE : BLACK); + if (kPos.x != -1) { + check_col = kPos.x; + check_row = 7 - kPos.y; + } + } + + draw_board(board, cursor_row, cursor_col, false, NULL, check_row, check_col); + draw_info_panel(board, cursor_row, cursor_col, false, -1, -1, white_turn, (check_row != -1), last_move_str); + } else { + // Deselect + piece_selected = false; + selected_row = -1; + selected_col = -1; + if (current_possible_moves) { + // Optimization: Clear move indicators + Move* pm = current_possible_moves; + while (pm != NULL) { + int r = 7 - pm->pos_end.y; + int c = pm->pos_end.x; + if (r != cursor_row || c != cursor_col) { + draw_square(board, r, c, false, false, (r == check_row && c == check_col)); + } + pm = pm->next; + } + freeMoves(current_possible_moves); + current_possible_moves = NULL; + } + + // Redraw cursor square + draw_square(board, cursor_row, cursor_col, true, false, (cursor_row == check_row && cursor_col == check_col)); + + draw_info_panel(board, cursor_row, cursor_col, false, -1, -1, white_turn, (check_row != -1), last_move_str); + } + waitForKeyReleased(); + } + } + + int new_row = cursor_row; + int new_col = cursor_col; + + if (current_time - last_cursor_move_time > 150) { + if (keys & SCANCODE_Up) { + new_row--; + } + if (keys & SCANCODE_Down) { + new_row++; + } + if (keys & SCANCODE_Left) { + new_col--; + } + if (keys & SCANCODE_Right) { + new_col++; + } + } + + if (new_row < 0) + new_row = 0; + if (new_row > 7) + new_row = 7; + if (new_col < 0) + new_col = 0; + if (new_col > 7) + new_col = 7; + + if (new_row != cursor_row || new_col != cursor_col) { + draw_cursor_move(board, cursor_row, cursor_col, new_row, new_col, current_possible_moves, check_row, check_col); + cursor_row = new_row; + cursor_col = new_col; + draw_info_panel(board, cursor_row, cursor_col, piece_selected, selected_row, selected_col, white_turn, (check_row != -1), last_move_str); + last_cursor_move_time = current_time; + } + + extapp_msleep(10); + } + + if (current_possible_moves) { + freeMoves(current_possible_moves); + current_possible_moves = NULL; + } + } + + return; +} \ No newline at end of file diff --git a/apps/Chess/minimax.c b/apps/Chess/minimax.c new file mode 100644 index 00000000..33c50c92 --- /dev/null +++ b/apps/Chess/minimax.c @@ -0,0 +1,384 @@ +#include "minimax.h" +#include +#include + +#define INF 100000 +#define VAL_P 10 +#define VAL_N 30 +#define VAL_B 35 +#define VAL_R 50 +#define VAL_Q 90 +#define VAL_K 900 + +unsigned int boardConter = 1; + +// Piece-Square Tables +const int knightScore[8][8] = { + { 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 2, 2, 2, 2, 2, 2, 1 }, { 1, 2, 3, 3, 3, 3, 2, 1 }, { 1, 2, 3, 4, 4, 3, 2, 1 }, + { 1, 2, 3, 4, 4, 3, 2, 1 }, { 1, 2, 3, 3, 3, 3, 2, 1 }, { 1, 2, 2, 2, 2, 2, 2, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1 } +}; +const int bishopScore[8][8] = { + { 4, 3, 2, 1, 1, 2, 3, 4 }, { 3, 4, 3, 2, 2, 3, 4, 3 }, { 2, 3, 4, 3, 3, 4, 3, 2 }, { 1, 2, 3, 4, 4, 3, 2, 1 }, + { 1, 2, 3, 4, 4, 3, 2, 1 }, { 2, 3, 4, 3, 3, 4, 3, 2 }, { 3, 4, 3, 2, 2, 3, 4, 3 }, { 4, 3, 2, 1, 1, 2, 3, 4 } +}; +const int queenScore[8][8] = { + { 1, 1, 1, 3, 1, 1, 1, 1 }, { 1, 2, 3, 3, 3, 1, 1, 1 }, { 1, 4, 3, 3, 3, 4, 2, 1 }, { 1, 2, 3, 3, 3, 2, 2, 1 }, + { 1, 2, 3, 3, 3, 2, 2, 1 }, { 1, 4, 3, 3, 3, 4, 2, 1 }, { 1, 2, 3, 3, 3, 1, 1, 1 }, { 1, 1, 1, 3, 1, 1, 1, 1 } +}; +const int rookScore[8][8] = { + { 4, 3, 4, 4, 4, 4, 3, 4 }, { 4, 4, 4, 4, 4, 4, 4, 4 }, { 1, 1, 2, 3, 3, 2, 1, 1 }, { 1, 2, 3, 4, 4, 3, 2, 1 }, + { 1, 2, 3, 4, 4, 3, 2, 1 }, { 1, 1, 2, 3, 3, 2, 1, 1 }, { 4, 4, 4, 4, 4, 4, 4, 4 }, { 4, 3, 4, 4, 4, 4, 3, 4 } +}; +const int whitePawnScore[8][8] = { + { 8, 8, 8, 8, 8, 8, 8, 8 }, { 8, 8, 8, 8, 8, 8, 8, 8 }, { 5, 6, 6, 7, 7, 6, 6, 5 }, { 2, 3, 3, 5, 5, 3, 3, 2 }, + { 1, 2, 3, 4, 4, 3, 2, 1 }, { 1, 2, 3, 3, 3, 3, 2, 1 }, { 1, 1, 1, 0, 0, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0, 0, 0 } +}; +const int blackPawnScore[8][8] = { + { 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 0, 0, 1, 1, 1 }, { 1, 2, 3, 3, 3, 3, 2, 1 }, { 1, 2, 3, 4, 4, 3, 2, 1 }, + { 2, 3, 3, 5, 5, 3, 3, 2 }, { 5, 6, 6, 7, 7, 6, 6, 5 }, { 8, 8, 8, 8, 8, 8, 8, 8 }, { 8, 8, 8, 8, 8, 8, 8, 8 } +}; + +int get_piece_value(char piece, int x, int y) +{ + int base = 0; + int pos_val = 0; + int table_y = 7 - y; + int table_x = x; + + switch (piece) { + case WHITE_P: + base = VAL_P; + pos_val = whitePawnScore[table_y][table_x]; + break; + case WHITE_N: + base = VAL_N; + pos_val = knightScore[table_y][table_x]; + break; + case WHITE_B: + base = VAL_B; + pos_val = bishopScore[table_y][table_x]; + break; + case WHITE_R: + base = VAL_R; + pos_val = rookScore[table_y][table_x]; + break; + case WHITE_Q: + base = VAL_Q; + pos_val = queenScore[table_y][table_x]; + break; + case WHITE_K: + base = VAL_K; + pos_val = 0; + break; + case BLACK_P: + base = VAL_P; + pos_val = blackPawnScore[table_y][table_x]; + break; + case BLACK_N: + base = VAL_N; + pos_val = knightScore[table_y][table_x]; + break; + case BLACK_B: + base = VAL_B; + pos_val = bishopScore[table_y][table_x]; + break; + case BLACK_R: + base = VAL_R; + pos_val = rookScore[table_y][table_x]; + break; + case BLACK_Q: + base = VAL_Q; + pos_val = queenScore[table_y][table_x]; + break; + case BLACK_K: + base = VAL_K; + pos_val = 0; + break; + default: + return 0; + } + return base + pos_val; +} + +int scoring(int color, char board[BOARD_SIZE][BOARD_SIZE]) +{ + int score_w = 0; + int score_b = 0; + for (int x = 0; x < BOARD_SIZE; x++) { + for (int y = 0; y < BOARD_SIZE; y++) { + char p = board[x][y]; + if (p == EMPTY) + continue; + if (p >= 'a' && p <= 'z') { // White + score_w += get_piece_value(p, x, y); + } else { // Black + score_b += get_piece_value(p, x, y); + } + } + } + return (color == WHITE) ? (score_w - score_b) : (score_b - score_w); +} + +int countMoves(Move* moves) +{ + int counter = 0; + if (moves == NULL || moves->type == 'l' || moves->type == 't') + return 0; + while (moves != NULL) { + counter++; + moves = moves->next; + } + return counter; +} + +int isPromotionMin(Move* m, int color) +{ + if (color && m->type == 'm') { + if (m->pos_end.y == 7) + return 1; + } else if (!color && m->type == 'M') { + if (m->pos_end.y == 0) + return 1; + } + return 0; +} + +char whichPiece(int i, int color) +{ + if (color) { + if (i == 0) + return ('b'); + else if (i == 1) + return ('n'); + else if (i == 2) + return ('r'); + else if (i == 3) + return ('q'); + } else { + if (i == 0) + return ('B'); + else if (i == 1) + return ('N'); + else if (i == 2) + return ('R'); + else if (i == 3) + return ('Q'); + } + return '\0'; +} + +Move* promotion(int color, Move* moves) +{ + Move* retList = NULL; + Move* current = NULL; + for (int i = 0; i < 4; i++) { + if (retList == NULL) { + retList = cloneMove(moves); + if (retList == NULL) + return NULL; + retList->type = whichPiece(i, color); + current = retList; + } else { + current->next = cloneMove(moves); + if (current->next == NULL) { + free(retList); + return NULL; + } + current = current->next; + current->type = whichPiece(i, color); + } + } + return retList; +} + +int negamax(int depth, char board[BOARD_SIZE][BOARD_SIZE], int color, int alpha, int beta) +{ + boardConter++; + + if (depth == 0) { + return scoring(color, board); + } + + Move* moves = getMoves(board, color); + if (moves == NULL) + return 0; + + if (moves->type == 'l') { // Checkmate + freeMoves(moves); + return -INF + (100 - depth); + } + if (moves->type == 't') { // Stalemate + freeMoves(moves); + return 0; + } + + Move* m = moves; + int bestVal = -INF; + + while (m != NULL) { + char piece = board[m->pos_start.x][m->pos_start.y]; + char eatpiece = board[m->pos_end.x][m->pos_end.y]; + + Move* movesToProcess = m; + Move* nextMove = m->next; + Move* promoList = NULL; + + if (isPromotionMin(m, color)) { + promoList = promotion(color, m); + movesToProcess = promoList; + } else { + m->next = NULL; + } + + Move* subM = movesToProcess; + while (subM != NULL) { + if (subM->type == 'c') { + makeMove(board, subM->pos_start.x, subM->pos_start.y, subM->pos_end.x, subM->pos_end.y); + makeMove(board, 4, 7 * (1 - color), 4 - (2 * (left_right(subM->pos_start.x) - 2)), 7 * (1 - color)); + } else { + makeMove(board, subM->pos_start.x, subM->pos_start.y, subM->pos_end.x, subM->pos_end.y); + board[subM->pos_end.x][subM->pos_end.y] = subM->type; + } + + int val = -negamax(depth - 1, board, 1 - color, -beta, -alpha); + + board[subM->pos_start.x][subM->pos_start.y] = piece; + board[subM->pos_end.x][subM->pos_end.y] = eatpiece; + if (subM->type == 'c') { + board[4][7 * (1 - color)] = (color == WHITE) ? 'k' : 'K'; + board[(4) - (2 * (left_right(subM->pos_start.x) - 2))][7 * (1 - color)] = EMPTY; + } + + if (val > bestVal) { + bestVal = val; + } + if (bestVal > alpha) { + alpha = bestVal; + } + if (alpha >= beta) { + if (promoList) { + // Should free remaining promo moves if any, but we rely on freeMoves(moves) later? + // No, promoList is separate. + // But we are in a sub-loop. + } + break; + } + + subM = subM->next; + } + + if (promoList) + freeMoves(promoList); + else + m->next = nextMove; + + if (alpha >= beta) + break; + + m = nextMove; + } + + freeMoves(moves); + return bestVal; +} + +Move* shuffleMoves(Move* head) +{ + if (!head || !head->next) + return head; + int count = countMoves(head); + Move** array = (Move**)malloc(count * sizeof(Move*)); + if (!array) + return head; + Move* curr = head; + for (int i = 0; i < count; i++) { + array[i] = curr; + curr = curr->next; + } + for (int i = count - 1; i > 0; i--) { + int j = rand() % (i + 1); + Move* temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + head = array[0]; + curr = head; + for (int i = 1; i < count; i++) { + curr->next = array[i]; + curr = curr->next; + } + curr->next = NULL; + free(array); + return head; +} + +Move* minimaxManager(char board[BOARD_SIZE][BOARD_SIZE], Move* moves, int color, unsigned int depth, char score) +{ + moves = shuffleMoves(moves); + boardConter = 1; + + int bestVal = -INF; + Move* bestMove = NULL; + int alpha = -INF; + int beta = INF; + + Move* m = moves; + while (m != NULL) { + char piece = board[m->pos_start.x][m->pos_start.y]; + char eatpiece = board[m->pos_end.x][m->pos_end.y]; + + Move* movesToProcess = m; + Move* nextMove = m->next; + Move* promoList = NULL; + + if (isPromotionMin(m, color)) { + promoList = promotion(color, m); + movesToProcess = promoList; + } else { + m->next = NULL; + } + + Move* subM = movesToProcess; + while (subM != NULL) { + if (subM->type == 'c') { + makeMove(board, subM->pos_start.x, subM->pos_start.y, subM->pos_end.x, subM->pos_end.y); + makeMove(board, 4, 7 * (1 - color), 4 - (2 * (left_right(subM->pos_start.x) - 2)), 7 * (1 - color)); + } else { + makeMove(board, subM->pos_start.x, subM->pos_start.y, subM->pos_end.x, subM->pos_end.y); + board[subM->pos_end.x][subM->pos_end.y] = subM->type; + } + + int val = -negamax(depth - 1, board, 1 - color, -beta, -alpha); + + board[subM->pos_start.x][subM->pos_start.y] = piece; + board[subM->pos_end.x][subM->pos_end.y] = eatpiece; + if (subM->type == 'c') { + board[4][7 * (1 - color)] = (color == WHITE) ? 'k' : 'K'; + board[(4) - (2 * (left_right(subM->pos_start.x) - 2))][7 * (1 - color)] = EMPTY; + } + + if (val > bestVal) { + bestVal = val; + if (bestMove) + freeMoves(bestMove); + bestMove = cloneMove(subM); + bestMove->next = NULL; + } + if (bestVal > alpha) { + alpha = bestVal; + } + + subM = subM->next; + } + + if (promoList) + freeMoves(promoList); + else + m->next = nextMove; + + m = nextMove; + } + + freeMoves(moves); + return bestMove; +} diff --git a/apps/Chess/minimax.h b/apps/Chess/minimax.h new file mode 100644 index 00000000..19d827b8 --- /dev/null +++ b/apps/Chess/minimax.h @@ -0,0 +1,12 @@ +#ifndef MINIMAX_H +#define MINIMAX_H + +#include "board.h" +#include "chess_defs.h" +#include "moves.h" + +#define valBest 700 + +Move* minimaxManager(char board[BOARD_SIZE][BOARD_SIZE], Move* moves, int color, unsigned int depth, char score); + +#endif diff --git a/apps/Chess/moves.c b/apps/Chess/moves.c new file mode 100644 index 00000000..de716cce --- /dev/null +++ b/apps/Chess/moves.c @@ -0,0 +1,769 @@ +#include "moves.h" +#include "board.h" +#include +#include + +// Forward declarations +Move *pawnMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *bishopMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *rookMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *knightMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *queenMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *kingMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *castelingMove(char board[BOARD_SIZE][BOARD_SIZE], int color, int side, Move *moves); +int isKingMove(int color); +int whichRook(int color, int side); + +void freeMoves(Move *moves) +{ + Move *current = moves; + while (moves != NULL) + { + Move *next = moves->next; + free(moves); + moves = next; + } +} + +Move *createMove(int x, int y, int xnew, int ynew, char type) +{ + Move *retMove = (Move *)malloc(sizeof(Move)); + if (retMove == NULL) + return NULL; + + retMove->pos_start.x = x; + retMove->pos_start.y = y; + retMove->pos_end.x = xnew; + retMove->pos_end.y = ynew; + retMove->type = type; + retMove->next = NULL; + return retMove; +} + +Move *cloneMove(Move *move) +{ + if (move == NULL) + return NULL; + return createMove(move->pos_start.x, move->pos_start.y, move->pos_end.x, move->pos_end.y, move->type); +} + +Move *legalMove(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int xnew, int ynew, int color, Move *moves) +{ + int flag; + if ((0 <= xnew) && (xnew < BOARD_SIZE) && (0 <= ynew) && (ynew < BOARD_SIZE)) + { + char target = board[xnew][ynew]; + if ((target == EMPTY) || (color && isBlack(target)) || (color == 0 && isWhite(target))) + { + // Make move + char piece = board[x][y]; + board[xnew][ynew] = piece; + board[x][y] = EMPTY; + + flag = isCheck(board, color); + + // Unmake move + board[x][y] = piece; + board[xnew][ynew] = target; + + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, xnew, ynew, piece); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + moves = node; + } + else + { + node->next = moves; + moves = node; + } + } + } + } + return moves; +} + +Move *pawnMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + char boardCopy[BOARD_SIZE][BOARD_SIZE]; + int flag; + if (color) + { + if (board[x][y + 1] == EMPTY) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x, y + 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x, y + 1, WHITE_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (y == 1 && board[x][y + 2] == EMPTY) + { // two steps from the starting position + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x, y + 2); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x, y + 2, WHITE_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (x > 0 && isBlack(board[x - 1][y + 1])) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x - 1, y + 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x - 1, y + 1, WHITE_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (x < BOARD_SIZE - 1 && isBlack(board[x + 1][y + 1])) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x + 1, y + 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x + 1, y + 1, WHITE_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + } + else + { + if (board[x][y - 1] == EMPTY) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x, y - 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x, y - 1, BLACK_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (y == BOARD_SIZE - 2 && board[x][y - 2] == EMPTY) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x, y - 2); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x, y - 2, BLACK_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (x > 0 && isWhite(board[x - 1][y - 1])) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x - 1, y - 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x - 1, y - 1, BLACK_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (x < BOARD_SIZE - 1 && isWhite(board[x + 1][y - 1])) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x + 1, y - 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x + 1, y - 1, BLACK_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + } + return moves; +} + +Move *bishopMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + int left_up = 1; + int right_up = 1; + int left_down = 1; + int right_down = 1; + for (int k = 1; k < BOARD_SIZE; k++) + { + if (right_up) + { + moves = legalMove(board, x, y, x + k, y + k, color, moves); + if (moves == NULL) + return NULL; + if ((x + k == BOARD_SIZE - 1) || (y + k == BOARD_SIZE - 1)) + right_up = 0; + if ((x == BOARD_SIZE - 1) || (y == BOARD_SIZE - 1) || board[x + k][y + k] != EMPTY) + right_up = 0; + } + if (left_up) + { + moves = legalMove(board, x, y, x - k, y + k, color, moves); + if (moves == NULL) + return NULL; + if ((y + k == BOARD_SIZE - 1) || (x - k == 0)) + left_up = 0; + if ((x == 0) || (y == BOARD_SIZE - 1) || board[x - k][y + k] != EMPTY) + left_up = 0; + } + if (left_down) + { + moves = legalMove(board, x, y, x - k, y - k, color, moves); + if (moves == NULL) + return NULL; + if ((x - k == 0) || (y - k == 0)) + left_down = 0; + if ((x == 0) || (y == 0) || board[x - k][y - k] != EMPTY) + left_down = 0; + } + if (right_down) + { + moves = legalMove(board, x, y, x + k, y - k, color, moves); + if (moves == NULL) + return NULL; + if ((y - k == 0) || (x + k == BOARD_SIZE - 1)) + right_down = 0; + if ((x == BOARD_SIZE - 1) || (y == 0) || board[x + k][y - k] != EMPTY) + right_down = 0; + } + } + return moves; +} + +Move *rookMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + int left = 1; + int right = 1; + int down = 1; + int up = 1; + for (int k = 1; k < BOARD_SIZE; k++) + { + if (up) + { + moves = legalMove(board, x, y, x, y + k, color, moves); + if (moves == NULL) + return NULL; + if (y + k == BOARD_SIZE - 1) + up = 0; + if ((y == BOARD_SIZE - 1) || board[x][y + k] != EMPTY) + up = 0; + } + if (down) + { + moves = legalMove(board, x, y, x, y - k, color, moves); + if (moves == NULL) + return NULL; + if (y - k == 0) + down = 0; + if ((y == 0) || board[x][y - k] != EMPTY) + down = 0; + } + if (left) + { + moves = legalMove(board, x, y, x - k, y, color, moves); + if (moves == NULL) + return NULL; + if (x - k == 0) + left = 0; + if ((x == 0) || board[x - k][y] != EMPTY) + left = 0; + } + if (right) + { + moves = legalMove(board, x, y, x + k, y, color, moves); + if (moves == NULL) + return NULL; + if (x + k == BOARD_SIZE - 1) + right = 0; + if ((x == BOARD_SIZE - 1) || board[x + k][y] != EMPTY) + right = 0; + } + } + if (board[x][y] == 'r' - (32 * (1 - color))) + { + if (((isKingMove(color)) == 0) && board[4][7 - (7 * color)] == KING(color)) + { + if (whichRook(color, 0) == 0 && x == 0 && y == 7 - (7 * color) && board[0][7 - (7 * color)] == ROOK(color)) + { + moves = castelingMove(board, color, 0, moves); + if (moves == NULL) + { + return NULL; + } + } + if (whichRook(color, 1) == 0 && x == 7 && y == 7 - (7 * color) && board[7][7 - (7 * color)] == ROOK(color)) + { + moves = castelingMove(board, color, 1, moves); + if (moves == NULL) + { + return NULL; + } + } + } + } + return moves; +} + +Move *knightMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + for (int i = 0; i < BOARD_SIZE; i++) + { + moves = legalMove(board, x, y, x + ((left_right(i) - 2) * (direction(i))), y + ((up_down(i) - 2) * (direction(BOARD_SIZE - 1 - i))), color, moves); + if (moves == NULL) + return NULL; + } + return moves; +} + +Move *queenMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + moves = bishopMovesList(board, x, y, color, moves); + moves = rookMovesList(board, x, y, color, moves); + return moves; +} + +Move *kingMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + int y2 = 0, x2 = 0; + for (int i = 0; i < BOARD_SIZE; i++) + { + y2 = (((direction_to_go(i)) / 10) - 1); + x2 = (((direction_to_go(i)) % 10) - 1); + moves = legalMove(board, x, y, x + x2, y + y2, color, moves); + if (moves == NULL) + return NULL; + } + return moves; +} + +int isKingMove(int color) +{ + if (color) + return is_move_king_white; + else + return is_move_king_black; +} + +int whichRook(int color, int side) +{ + if (color == 1 && side == 1) + return is_move_right_rook_white; + if (color == 1 && side == 0) + return is_move_left_rook_white; + if (color == 0 && side == 1) + return is_move_right_rook_black; + if (color == 0 && side == 0) + return is_move_left_rook_black; + return -1; +} + +Move *getMoves(char board[BOARD_SIZE][BOARD_SIZE], int color) +{ + Move *moves = (Move *)malloc(sizeof(Move)); + if (moves == NULL) + return NULL; + moves->type = 'a'; + moves->pos_start.x = -1; + moves->pos_start.y = -1; + moves->pos_end.x = -1; + moves->pos_end.y = -1; + moves->next = NULL; + for (int x = 0; x < BOARD_SIZE; x++) + { + for (int y = 0; y < BOARD_SIZE; y++) + { + if (!color) + { + switch (board[x][y]) + { + case BLACK_B: + moves = bishopMovesList(board, x, y, color, moves); + break; + case BLACK_K: + moves = kingMovesList(board, x, y, color, moves); + break; + case BLACK_Q: + moves = queenMovesList(board, x, y, color, moves); + break; + case BLACK_N: + moves = knightMovesList(board, x, y, color, moves); + break; + case BLACK_R: + moves = rookMovesList(board, x, y, color, moves); + break; + case BLACK_P: + moves = pawnMovesList(board, x, y, color, moves); + break; + } + } + else + { + switch (board[x][y]) + { + case WHITE_B: + moves = bishopMovesList(board, x, y, color, moves); + break; + case WHITE_K: + moves = kingMovesList(board, x, y, color, moves); + break; + case WHITE_Q: + moves = queenMovesList(board, x, y, color, moves); + break; + case WHITE_N: + moves = knightMovesList(board, x, y, color, moves); + break; + case WHITE_R: + moves = rookMovesList(board, x, y, color, moves); + break; + case WHITE_P: + moves = pawnMovesList(board, x, y, color, moves); + break; + } + } + if (moves == NULL) + return NULL; + } + } + if (moves->type == 'a') + { + int isCheckBool = isCheck(board, color); + if (isCheckBool == 0) + return NULL; + if (isCheckBool == 1) + moves->type = 'l'; + else + moves->type = 't'; + } + return moves; +} + +Pos kingPosition(char board[BOARD_SIZE][BOARD_SIZE], int color) +{ + Pos pos; + pos.x = -1; + pos.y = -1; + for (int x = 0; x < BOARD_SIZE; x++) + { + for (int y = 0; y < BOARD_SIZE; y++) + { + if (color && board[x][y] == WHITE_K) + { + pos.x = x; + pos.y = y; + return pos; + } + if (color == 0 && board[x][y] == BLACK_K) + { + pos.x = x; + pos.y = y; + return pos; + } + } + } + return pos; +} + +int isCheck(char board[BOARD_SIZE][BOARD_SIZE], int color) +{ + Pos pos = kingPosition(board, color); + int x1 = 0, y1 = 0, x2 = 0, y2 = 0; + if (pos.x == -1) + { + return 0; + } + if (color && (pos.y + 1) < BOARD_SIZE) + { + if ((pos.x + 1) < BOARD_SIZE) + { + if (board[pos.x + 1][pos.y + 1] == BLACK_P) + { + return 1; + } + } + if ((pos.x - 1) > -1) + { + if (board[pos.x - 1][pos.y + 1] == BLACK_P) + { + return 1; + } + } + } + if (color == 0 && (pos.y - 1) > -1) + { + if ((pos.x + 1) < BOARD_SIZE) + { + if (board[pos.x + 1][pos.y - 1] == WHITE_P) + { + return 1; + } + } + if ((pos.x - 1) > -1) + { + if (board[pos.x - 1][pos.y - 1] == WHITE_P) + { + return 1; + } + } + } + for (int i = 0; i < BOARD_SIZE; i++) + { + x1 = ((direction(BOARD_SIZE - i - 1))) * ((up_down(i)) - 2); + y1 = ((direction(i))) * ((left_right(i)) - 2); + x2 = (((direction_to_go(i)) / 10) - 1); + y2 = (((direction_to_go(i)) % 10) - 1); + if ((0 <= pos.y + y1) && (pos.y + y1 < BOARD_SIZE) && (0 <= pos.x + x1) && (pos.x + x1 < BOARD_SIZE)) + { + if (board[pos.x + x1][pos.y + y1] == KNIGHT(!color)) + { + return 1; + } + } + if ((0 <= pos.y + y2) && (pos.y + y2 < BOARD_SIZE) && (0 <= pos.x + x2) && (pos.x + x2 < BOARD_SIZE)) + { + if (board[pos.x + x2][pos.y + y2] == KING(!color)) + { + return 1; + } + } + for (int j = 1; j < BOARD_SIZE; j++) + { + y1 = j * (((direction_to_go(i)) / 10) - 1); + x1 = j * (((direction_to_go(i)) % 10) - 1); + if ((0 <= (pos.y + y1) && (pos.y + y1) < BOARD_SIZE) && (0 <= (pos.x + x1) && (pos.x + x1) < BOARD_SIZE)) + { + if (board[pos.x + x1][pos.y + y1] != EMPTY) + { + if ((board[pos.x + x1][pos.y + y1] == QUEEN(!color)) || (board[pos.x + x1][pos.y + y1] == type(!color, i))) + { + return 1; + } + break; + } + } + } + } + return -1; +} + +int isEmpty(char board[BOARD_SIZE][BOARD_SIZE], int color, int side) +{ + for (int i = 1; i < 4; i++) + { + if ((4) + (i * (left_right(2 * (1 - side)) - 2)) > 0 && ((4) + (i * (left_right(2 * (1 - side)) - 2)) < (BOARD_SIZE - 1))) + { + if (board[(4) + (i * ((left_right(2 * (1 - side)) - 2)))][(7 - (7 * color))] != EMPTY) + { + return 0; + } + } + } + return 1; +} + +Move *castelingMove(char board[BOARD_SIZE][BOARD_SIZE], int color, int side, Move *moves) +{ + char boardCopy[BOARD_SIZE][BOARD_SIZE]; + Move *node; + int flag = isCheck(board, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + if (isEmpty(board, color, side)) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, 7 * side, (7 - (7 * color)), (4) + (left_right(2 * (1 - side)) - 2), (7 - (7 * color))); + makeMove(boardCopy, (4), (7 - (7 * color)), (4) + 2 * (left_right(2 * (1 - side)) - 2), (7 - (7 * color))); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + node = createMove(7 * side, (7 - (7 * color)), (4) + (left_right(2 * (1 - side)) - 2), (7 - (7 * color)), 'c'); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + freeMoves(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + } + return moves; +} diff --git a/apps/Chess/moves.h b/apps/Chess/moves.h new file mode 100644 index 00000000..351939bf --- /dev/null +++ b/apps/Chess/moves.h @@ -0,0 +1,35 @@ +#ifndef MOVES_H +#define MOVES_H + +#include "board.h" +#include "chess_defs.h" + +#define direction(x) ((x > 3) ? (2) : (1)) +#define up_down(x) ((x % 2 < 1) ? (3) : (1)) +#define left_right(x) (((x / 2) % 2 < 1) ? (3) : (1)) + +#define direction_to_go(x) ((x > 3) ? deg_0_180(x % 4) : deg_180_360(x % 4)) +#define deg_0_180(x) ((x > 1) ? or_0_45(x % 2) : or_90_135(x % 2)) +#define deg_180_360(x) ((x > 1) ? or_180_225(x % 2) : or_270_315(x % 2)) +#define or_0_45(x) ((x > 0) ? (12) : (22)) +#define or_90_135(x) ((x % 2 > 0) ? (21) : (20)) +#define or_180_225(x) ((x > 0) ? (10) : (0)) +#define or_270_315(x) ((x % 2 > 0) ? (1) : (2)) + +#define type(color, i) ((color) ? (white_Orthogonal_Diagonal(i)) : (black_Orthogonal_Diagonal(i))) +#define white_Orthogonal_Diagonal(i) ((i % 2 < 1) ? (WHITE_B) : (WHITE_R)) +#define black_Orthogonal_Diagonal(i) ((i % 2 < 1) ? (BLACK_B) : (BLACK_R)) +#define QUEEN(color) ((color) ? (WHITE_Q) : (BLACK_Q)) +#define KNIGHT(color) ((color) ? (WHITE_N) : (BLACK_N)) +#define KING(color) ((color) ? (WHITE_K) : (BLACK_K)) +#define ROOK(color) ((color) ? (WHITE_R) : (BLACK_R)) + +Move* getMoves(char board[BOARD_SIZE][BOARD_SIZE], int color); +void freeMoves(Move* moves); +int isCheck(char board[BOARD_SIZE][BOARD_SIZE], int color); +Move* createMove(int x, int y, int xnew, int ynew, char type); +Move* legalMove(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int xnew, int ynew, int color, Move* moves); +Move* cloneMove(Move* move); +Pos kingPosition(char board[BOARD_SIZE][BOARD_SIZE], int color); + +#endif diff --git a/apps/Chess/sources.mak b/apps/Chess/sources.mak new file mode 100644 index 00000000..1d526c9e --- /dev/null +++ b/apps/Chess/sources.mak @@ -0,0 +1,7 @@ +app_external_src += $(addprefix $(EXTAPP_PATH)/,\ + main.c \ + board.c \ + moves.c \ + minimax.c \ + ui.c \ +) diff --git a/apps/Chess/ui.c b/apps/Chess/ui.c new file mode 100644 index 00000000..2ac9bd1e --- /dev/null +++ b/apps/Chess/ui.c @@ -0,0 +1,498 @@ +#include "ui.h" + +#include +#include + +#include "board.h" +#include "extapp_api.h" + +// Include assets +#include "assets/bishop.h" +#include "assets/bishop1.h" +#include "assets/king.h" +#include "assets/king1.h" +#include "assets/knight.h" +#include "assets/knight1.h" +#include "assets/pawn.h" +#include "assets/pawn1.h" +#include "assets/queen.h" +#include "assets/queen1.h" +#include "assets/rook.h" +#include "assets/rook1.h" + +// Board dimensions +#define BOARD_X 0 +#define BOARD_Y 0 +#define SQUARE_SIZE (LCD_HEIGHT / 8) +#define PIECE_SCALE 0.7 +#define INFO_PANEL_X (8 * SQUARE_SIZE) +#define INFO_PANEL_WIDTH (LCD_WIDTH - INFO_PANEL_X) + +// Colors +#define COLOR_MENU_BG 0xFFDF // #FFFAFF +#define COLOR_OPTION_BG 0xFFFF // #FFFEFF +#define COLOR_OPTION_ACTIVE_BG 0xE71C // #E6E2E6 +#define COLOR_TRIANGLE 0xFD70 // #FFAD83 +#define COLOR_BORDER 0xEF7D // #EEEEEE +#define COLOR_SUBTEXT 0x6B6D // #6A6D6A +#define COLOR_SELECTION_OVERLAY 0xFFE0 // #FFFF00 +#define COLOR_MASK_LSB 0xF7DE +#define COLOR_CHECK 0xEB0A // #EB6150 + +// Menu layout +#define MENU_MARGIN_TOP 38 +#define MENU_MARGIN_SIDE 15 +#define MENU_OPTION_WIDTH (LCD_WIDTH - 2 * MENU_MARGIN_SIDE) +#define MENU_OPTION_HEIGHT 34 + +void draw_piece_to_buffer(uint16_t* buffer, int buffer_width, int buffer_height, char piece) +{ + const uint16_t* piece_data = NULL; + int width = 0, height = 0; + + switch (piece) { + case WHITE_P: + piece_data = pawn_data; + width = PAWN_WIDTH; + height = PAWN_HEIGHT; + break; + case BLACK_P: + piece_data = pawn1_data; + width = PAWN1_WIDTH; + height = PAWN1_HEIGHT; + break; + case WHITE_R: + piece_data = rook_data; + width = ROOK_WIDTH; + height = ROOK_HEIGHT; + break; + case BLACK_R: + piece_data = rook1_data; + width = ROOK1_WIDTH; + height = ROOK1_HEIGHT; + break; + case WHITE_N: + piece_data = knight_data; + width = KNIGHT_WIDTH; + height = KNIGHT_HEIGHT; + break; + case BLACK_N: + piece_data = knight1_data; + width = KNIGHT1_WIDTH; + height = KNIGHT1_HEIGHT; + break; + case WHITE_B: + piece_data = bishop_data; + width = BISHOP_WIDTH; + height = BISHOP_HEIGHT; + break; + case BLACK_B: + piece_data = bishop1_data; + width = BISHOP1_WIDTH; + height = BISHOP1_HEIGHT; + break; + case WHITE_Q: + piece_data = queen_data; + width = QUEEN_WIDTH; + height = QUEEN_HEIGHT; + break; + case BLACK_Q: + piece_data = queen1_data; + width = QUEEN1_WIDTH; + height = QUEEN1_HEIGHT; + break; + case WHITE_K: + piece_data = king_data; + width = KING_WIDTH; + height = KING_HEIGHT; + break; + case BLACK_K: + piece_data = king1_data; + width = KING1_WIDTH; + height = KING1_HEIGHT; + break; + default: + return; + } + + if (piece_data == NULL) + return; + + int scaled_width = (int)(width * PIECE_SCALE); + int scaled_height = (int)(height * PIECE_SCALE); + int offset_x = (buffer_width - scaled_width) / 2; + int offset_y = (buffer_height - scaled_height) / 2; + + for (int py = 0; py < scaled_height; py++) { + for (int px = 0; px < scaled_width; px++) { + int orig_x = (int)(px / PIECE_SCALE); + int orig_y = (int)(py / PIECE_SCALE); + if (orig_x >= width) + orig_x = width - 1; + if (orig_y >= height) + orig_y = height - 1; + + uint16_t color = piece_data[orig_y * width + orig_x]; + if (color != COLOR_TRANSPARENT) { + int buf_x = offset_x + px; + int buf_y = offset_y + py; + if (buf_x >= 0 && buf_x < buffer_width && buf_y >= 0 && buf_y < buffer_height) { + buffer[buf_y * buffer_width + buf_x] = color; + } + } + } + } +} + +void draw_move_indicator_to_buffer(uint16_t* buffer, int buffer_width, int buffer_height) +{ + int center_x = buffer_width / 2; + int center_y = buffer_height / 2; + int radius = buffer_width / 6; + + for (int dy = -radius; dy <= radius; dy++) { + for (int dx = -radius; dx <= radius; dx++) { + if (dx * dx + dy * dy <= radius * radius) { + int x = center_x + dx; + int y = center_y + dy; + if (x >= 0 && x < buffer_width && y >= 0 && y < buffer_height) { + uint16_t existing_pixel = buffer[y * buffer_width + x]; + uint16_t r = (existing_pixel >> 11) & 0x1F; + uint16_t g = (existing_pixel >> 5) & 0x3F; + uint16_t b = existing_pixel & 0x1F; + + // Apply rgba(0, 0, 0, 0.45) -> multiply by 0.55 + r = (r * 55) / 100; + g = (g * 55) / 100; + b = (b * 55) / 100; + + uint16_t blended = (r << 11) | (g << 5) | b; + buffer[y * buffer_width + x] = blended; + } + } + } + } +} + +void draw_square(char board[BOARD_SIZE][BOARD_SIZE], int row, int col, bool selected, bool is_possible_move, bool is_check) +{ + int x = BOARD_X + col * SQUARE_SIZE; + int y = BOARD_Y + row * SQUARE_SIZE; + + uint16_t buffer[SQUARE_SIZE * SQUARE_SIZE]; + + bool is_light = ((row + col) % 2 == 0); + uint16_t bg_color = is_light ? COLOR_SQUARE_LIGHT : COLOR_SQUARE_DARK; + uint16_t text_color = is_light ? COLOR_SQUARE_DARK : COLOR_SQUARE_LIGHT; + + if (is_check) { + // Blend bg_color with COLOR_CHECK (alpha 0.8) + int r_src = (COLOR_CHECK >> 11) & 0x1F; + int g_src = (COLOR_CHECK >> 5) & 0x3F; + int b_src = (COLOR_CHECK) & 0x1F; + + int r_dst = (bg_color >> 11) & 0x1F; + int g_dst = (bg_color >> 5) & 0x3F; + int b_dst = (bg_color) & 0x1F; + + int r = (r_src * 8 + r_dst * 2) / 10; + int g = (g_src * 8 + g_dst * 2) / 10; + int b = (b_src * 8 + b_dst * 2) / 10; + + bg_color = (r << 11) | (g << 5) | b; + } + + // Fill background + for (int i = 0; i < SQUARE_SIZE * SQUARE_SIZE; i++) { + buffer[i] = bg_color; + } + + // Draw selection + if (selected) { + for (int i = 0; i < SQUARE_SIZE * SQUARE_SIZE; i++) { + buffer[i] = ((buffer[i] & COLOR_MASK_LSB) >> 1) + ((COLOR_SELECTION_OVERLAY & COLOR_MASK_LSB) >> 1); + } + bg_color = ((bg_color & COLOR_MASK_LSB) >> 1) + ((COLOR_SELECTION_OVERLAY & COLOR_MASK_LSB) >> 1); + } + + // Draw piece + int board_x = col; + int board_y = 7 - row; + if (board[board_x][board_y] != EMPTY) { + draw_piece_to_buffer(buffer, SQUARE_SIZE, SQUARE_SIZE, board[board_x][board_y]); + } + + // Draw move indicator + if (is_possible_move) { + draw_move_indicator_to_buffer(buffer, SQUARE_SIZE, SQUARE_SIZE); + } + + // Push buffer + extapp_pushRect(x, y, SQUARE_SIZE, SQUARE_SIZE, buffer); + + // Draw coordinates + char buffer_text[2] = { 0, 0 }; + if (col == 0) { + buffer_text[0] = '8' - row; + extapp_drawTextSmall(buffer_text, x + 2, y + 2, text_color, bg_color, false); + } + + if (row == 7) { + buffer_text[0] = 'a' + col; + extapp_drawTextSmall(buffer_text, x + SQUARE_SIZE - 9, y + SQUARE_SIZE - 12, text_color, bg_color, false); + } +} + +void draw_cursor_move(char board[BOARD_SIZE][BOARD_SIZE], int old_row, int old_col, int new_row, int new_col, + Move* possible_moves, int check_row, int check_col) +{ + bool old_is_move = false; + bool new_is_move = false; + + if (possible_moves != NULL) { + Move* m = possible_moves; + while (m != NULL) { + int r = 7 - m->pos_end.y; + int c = m->pos_end.x; + if (r == old_row && c == old_col) + old_is_move = true; + if (r == new_row && c == new_col) + new_is_move = true; + m = m->next; + } + } + + bool old_is_check = (old_row == check_row && old_col == check_col); + bool new_is_check = (new_row == check_row && new_col == check_col); + + draw_square(board, old_row, old_col, false, old_is_move, old_is_check); + draw_square(board, new_row, new_col, true, new_is_move, new_is_check); +} + +void draw_board(char board[BOARD_SIZE][BOARD_SIZE], int sel_row, int sel_col, bool show_moves, Move* possible_moves, int check_row, int check_col) +{ + bool moves_map[8][8]; + memset(moves_map, 0, sizeof(moves_map)); + + if (show_moves && possible_moves != NULL) { + Move* m = possible_moves; + while (m != NULL) { + // Map move coordinates (x,y) to screen coordinates (row,col) + // x = col + // y = 7 - row => row = 7 - y + int r = 7 - m->pos_end.y; + int c = m->pos_end.x; + if (r >= 0 && r < 8 && c >= 0 && c < 8) { + moves_map[r][c] = true; + } + m = m->next; + } + } + + for (int row = 0; row < 8; row++) { + for (int col = 0; col < 8; col++) { + bool is_check = (row == check_row && col == check_col); + draw_square(board, row, col, (row == sel_row && col == sel_col), moves_map[row][col], is_check); + } + } +} + +const char* get_piece_name(char piece) +{ + switch (piece) { + case WHITE_P: + return "Pawn W"; + case BLACK_P: + return "Pawn B"; + case WHITE_R: + return "Rook W"; + case BLACK_R: + return "Rook B"; + case WHITE_N: + return "Knight W"; + case BLACK_N: + return "Knight B"; + case WHITE_B: + return "Bishop W"; + case BLACK_B: + return "Bishop B"; + case WHITE_Q: + return "Queen W"; + case BLACK_Q: + return "Queen B"; + case WHITE_K: + return "King W"; + case BLACK_K: + return "King B"; + default: + return ""; + } +} + +void draw_info_panel(char board[BOARD_SIZE][BOARD_SIZE], int cursor_row, int cursor_col, bool piece_selected, + int selected_row, int selected_col, bool white_turn, bool is_check, const char* last_move_str) +{ + int x = INFO_PANEL_X; + int y = 0; + int width = INFO_PANEL_WIDTH; + + extapp_pushRectUniform(x, y, width, LCD_HEIGHT, COLOR_WHITE); + + int offset_y = 5; + extapp_drawTextSmall("Turn:", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + offset_y += 12; + if (white_turn) { + extapp_drawTextSmall("White", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + } else { + extapp_drawTextSmall("Black", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + } + + if (is_check) { + offset_y += 20; + extapp_drawTextSmall("CHECK!", x + 5, offset_y, 0xF800, COLOR_WHITE, false); // Red color + } + + offset_y += 20; + extapp_drawTextSmall("Position:", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + offset_y += 12; + char pos[4]; + pos[0] = 'a' + cursor_col; + pos[1] = '8' - cursor_row; + pos[2] = '\0'; + extapp_drawTextSmall(pos, x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + + if (last_move_str && last_move_str[0] != '\0') { + offset_y += 20; + extapp_drawTextSmall("Last Move:", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + offset_y += 12; + extapp_drawTextSmall(last_move_str, x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + } + + if (piece_selected && selected_row >= 0 && selected_col >= 0) { + offset_y += 20; + extapp_drawTextSmall("Selected:", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + offset_y += 12; + // Map selected_row/col to board coords + int bx = selected_col; + int by = 7 - selected_row; + const char* piece_name = get_piece_name(board[bx][by]); + extapp_drawTextSmall(piece_name, x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + } +} + +static void draw_menu_triangle(int x, int y) +{ + for (int i = 0; i < 8; i++) { + int y_off = (i * 5) / 8; + int h = 10 - 2 * y_off; + if (h > 0) { + extapp_pushRectUniform(x + i, y + y_off, 1, h, COLOR_TRIANGLE); + } + } +} + +/// @brief +/// @param index +/// @param text +/// @param selected +/// @param has_sub +/// @param sub_text +static void draw_menu_option(int index, const char* text, bool selected, bool has_sub, const char* sub_text, bool draw_borders) +{ + int x = MENU_MARGIN_SIDE; + int y = MENU_MARGIN_TOP + index * (MENU_OPTION_HEIGHT - 1); + int w = MENU_OPTION_WIDTH; + int h = MENU_OPTION_HEIGHT; + + uint16_t bg_color = selected ? COLOR_OPTION_ACTIVE_BG : COLOR_OPTION_BG; + + // Fill background + extapp_pushRectUniform(x + 1, y + 1, w - 2, h - 2, bg_color); + + // Draw borders + if (draw_borders) { + extapp_pushRectUniform(x, y, w, 1, COLOR_BORDER); // Top + extapp_pushRectUniform(x, y + h - 1, w, 1, COLOR_BORDER); // Bottom + extapp_pushRectUniform(x, y, 1, h, COLOR_BORDER); // Left + extapp_pushRectUniform(x + w - 1, y, 1, h, COLOR_BORDER); // Right + } + + // Text + extapp_drawTextLarge(text, x + 11, y + 7, COLOR_BLACK, bg_color, false); + + // Triangle + if (has_sub) { + int triangle_x = x + w - 10 - 8; + draw_menu_triangle(triangle_x, y + 12); + + if (sub_text != NULL) { + int text_w = extapp_drawTextLarge(sub_text, 0, 0, 0, 0, true); + int text_x = triangle_x + 8 - text_w; + extapp_drawTextSmall(sub_text, text_x, y + 11, COLOR_SUBTEXT, bg_color, false); + } + } +} + +int show_menu(const char* title, const MenuItem* items, int count, int initial_selection) +{ + int selected = initial_selection; + if (selected < 0) + selected = 0; + if (selected >= count) + selected = count - 1; + + // Wait for key release + while (extapp_scanKeyboard()) { + extapp_msleep(10); + } + + // Initial Draw + extapp_pushRectUniform(0, 0, LCD_WIDTH, LCD_HEIGHT, COLOR_MENU_BG); + + if (title) { + extapp_pushRectUniform(0, 0, LCD_WIDTH, 18, COLOR_UPSILON); + int t_width = strlen(title) * 7; + extapp_drawTextSmall(title, (LCD_WIDTH - t_width) / 2, 3, COLOR_WHITE, COLOR_UPSILON, false); + } + + for (int i = 0; i < count; i++) { + draw_menu_option(i, items[i].text, i == selected, items[i].sub_text != NULL, items[i].sub_text, true); + } + + uint64_t last_move_time = 0; + while (true) { + uint64_t keys = extapp_scanKeyboard(); + uint64_t current_time = extapp_millis(); + int old_selected = selected; + bool selection_changed = false; + + if (current_time - last_move_time > 150) { + if (keys & SCANCODE_Up) { + if (selected > 0) { + selected--; + selection_changed = true; + } + } else if (keys & SCANCODE_Down) { + if (selected < count - 1) { + selected++; + selection_changed = true; + } + } + } + + if (keys & SCANCODE_OK || keys & SCANCODE_EXE) { + return selected; + } else if (keys & SCANCODE_Home || keys & SCANCODE_Back) { + return -1; + } + + if (selection_changed) { + extapp_waitForVBlank(); + draw_menu_option(old_selected, items[old_selected].text, false, items[old_selected].sub_text != NULL, items[old_selected].sub_text, false); + draw_menu_option(selected, items[selected].text, true, items[selected].sub_text != NULL, items[selected].sub_text, false); + last_move_time = current_time; + } + + extapp_msleep(10); + } +} diff --git a/apps/Chess/ui.h b/apps/Chess/ui.h new file mode 100644 index 00000000..f9f1729d --- /dev/null +++ b/apps/Chess/ui.h @@ -0,0 +1,21 @@ +#ifndef UI_H +#define UI_H + +#include "chess_defs.h" +#include + +typedef struct { + const char* text; + const char* sub_text; +} MenuItem; + +void draw_board(char board[BOARD_SIZE][BOARD_SIZE], int sel_row, int sel_col, bool show_moves, Move* possible_moves, int check_row, int check_col); +void draw_square(char board[BOARD_SIZE][BOARD_SIZE], int row, int col, bool selected, bool is_possible_move, bool is_check); +void draw_cursor_move(char board[BOARD_SIZE][BOARD_SIZE], int old_row, int old_col, int new_row, int new_col, Move* possible_moves, int check_row, int check_col); +void draw_info_panel(char board[BOARD_SIZE][BOARD_SIZE], int cursor_row, int cursor_col, bool piece_selected, int selected_row, int selected_col, bool white_turn, bool is_check, const char* last_move_str); + +// Generic menu function that handles the loop and drawing +// Returns the selected index, or -1 if Back/Home was pressed +int show_menu(const char* title, const MenuItem* items, int count, int initial_selection); + +#endif diff --git a/apps/apps.js b/apps/apps.js index 20d34bbd..394131da 100644 --- a/apps/apps.js +++ b/apps/apps.js @@ -17,5 +17,6 @@ angular.module('nwas').service('apps', function() { { name: "Compressor", description: {en: "Compress your files", fr: "Compressez vos fichiers"} }, { name: "Backup", description: {en: "Backup scripts wirelessly", fr: "Sauvegardez vos fichiers sans fil"} }, { name: "HoldemPoker", description: {en: "A Texas Hold'em Poker Game", fr: "Un jeu de Texas Hold'em"} }, + { name: "Chess", description: {en: "Chess Game", fr: "Jeu d'échecs"} }, ]; });