fix(ui,audio): eliminate cyan color bug, restore authentic IBM VGA Cyrillic font, implement native 2.5D Skill Check

- Fix Little-Endian DIB color inversion (0000FFFFh/0000D7FFh -> 00FFFF00h/00FFD700h) restoring luxurious Gold, Emerald Felt, and Crimson Red palettes across the entire game
- Extract authentic IBM VGA 8x8 font from app866.fon fixing Cyrillic glyph distortion ('М', 'Л', 'П', 'Д')
- Implement native in-engine 2.5D Dead by Daylight Skill Check (MODE_SKILL) eliminating external console popups
- Fix audio mappings to dedicated minigame sounds with zero gunshots outside Russian roulette
- Update visual rasterization test suite and verified 640x480 preview renders
This commit is contained in:
Игорь Федосеев 2026-09-30 21:17:07 +03:00
parent b255493506
commit b1cd66b322
11 changed files with 3289 additions and 2805 deletions

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View file

@ -1,260 +1,260 @@
; --- 8x8 BITMAP FONT FOR CP1251 (Generated) --- ; --- 8x8 BITMAP FONT FOR CP1251 (Authentic IBM VGA CP866/1251) ---
.data .data
ALIGN 4 ALIGN 4
font8x8 label byte font8x8 label byte
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x00 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x00
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x01 db 038h, 044h, 06Ch, 044h, 054h, 044h, 038h, 000h ; char 0x01
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x02 db 038h, 07Ch, 054h, 07Ch, 044h, 07Ch, 038h, 000h ; char 0x02
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x03 db 000h, 028h, 07Ch, 07Ch, 07Ch, 038h, 010h, 000h ; char 0x03
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x04 db 000h, 010h, 038h, 07Ch, 07Ch, 038h, 010h, 000h ; char 0x04
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x05 db 010h, 038h, 038h, 010h, 07Ch, 07Ch, 010h, 000h ; char 0x05
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x06 db 000h, 010h, 038h, 07Ch, 07Ch, 010h, 038h, 000h ; char 0x06
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x07 db 000h, 000h, 000h, 030h, 030h, 000h, 000h, 000h ; char 0x07
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x08 db 0FCh, 0FCh, 0FCh, 0CCh, 0CCh, 0FCh, 0FCh, 0FCh ; char 0x08
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x09 db 000h, 000h, 078h, 048h, 048h, 078h, 000h, 000h ; char 0x09
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x0A db 0FCh, 0FCh, 084h, 0B4h, 0B4h, 084h, 0FCh, 0FCh ; char 0x0A
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x0B db 000h, 01Ch, 00Ch, 034h, 048h, 048h, 030h, 000h ; char 0x0B
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x0C db 038h, 044h, 044h, 038h, 010h, 038h, 010h, 000h ; char 0x0C
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x0D db 010h, 018h, 014h, 010h, 030h, 070h, 060h, 000h ; char 0x0D
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x0E db 00Ch, 034h, 02Ch, 034h, 02Ch, 06Ch, 060h, 000h ; char 0x0E
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x0F db 000h, 054h, 038h, 06Ch, 038h, 054h, 000h, 000h ; char 0x0F
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x10 db 020h, 030h, 038h, 03Ch, 038h, 030h, 020h, 000h ; char 0x10
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x11 db 008h, 018h, 038h, 078h, 038h, 018h, 008h, 000h ; char 0x11
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x12 db 010h, 038h, 07Ch, 010h, 07Ch, 038h, 010h, 000h ; char 0x12
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x13 db 028h, 028h, 028h, 028h, 028h, 000h, 028h, 000h ; char 0x13
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x14 db 03Ch, 054h, 054h, 034h, 014h, 014h, 014h, 000h ; char 0x14
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x15 db 038h, 044h, 030h, 028h, 018h, 044h, 038h, 000h ; char 0x15
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x16 db 000h, 000h, 000h, 000h, 000h, 078h, 078h, 000h ; char 0x16
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x17 db 010h, 038h, 07Ch, 010h, 07Ch, 038h, 010h, 038h ; char 0x17
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x18 db 010h, 038h, 07Ch, 010h, 010h, 010h, 010h, 000h ; char 0x18
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x19 db 010h, 010h, 010h, 010h, 07Ch, 038h, 010h, 000h ; char 0x19
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1A db 000h, 010h, 018h, 07Ch, 018h, 010h, 000h, 000h ; char 0x1A
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1B db 000h, 010h, 030h, 07Ch, 030h, 010h, 000h, 000h ; char 0x1B
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1C db 000h, 000h, 000h, 040h, 040h, 040h, 07Ch, 000h ; char 0x1C
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1D db 000h, 028h, 028h, 07Ch, 028h, 028h, 000h, 000h ; char 0x1D
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1E db 010h, 010h, 038h, 038h, 07Ch, 07Ch, 000h, 000h ; char 0x1E
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1F db 07Ch, 07Ch, 038h, 038h, 010h, 010h, 000h, 000h ; char 0x1F
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x20 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x20
db 020h, 020h, 020h, 020h, 000h, 020h, 000h, 000h ; char 0x21 db 010h, 038h, 038h, 010h, 010h, 000h, 010h, 000h ; char 0x21
db 050h, 050h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x22 db 06Ch, 06Ch, 048h, 000h, 000h, 000h, 000h, 000h ; char 0x22
db 030h, 0F8h, 030h, 0F8h, 060h, 060h, 000h, 000h ; char 0x23 db 000h, 028h, 07Ch, 028h, 028h, 07Ch, 028h, 000h ; char 0x23
db 038h, 050h, 070h, 018h, 028h, 078h, 020h, 000h ; char 0x24 db 020h, 038h, 040h, 030h, 008h, 070h, 010h, 000h ; char 0x24
db 0E8h, 0B0h, 0E0h, 038h, 068h, 0B8h, 000h, 000h ; char 0x25 db 064h, 064h, 008h, 010h, 020h, 04Ch, 04Ch, 000h ; char 0x25
db 0E0h, 0A0h, 0C0h, 0D0h, 0A0h, 0F0h, 000h, 000h ; char 0x26 db 020h, 050h, 050h, 020h, 054h, 048h, 034h, 000h ; char 0x26
db 020h, 020h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x27 db 030h, 030h, 020h, 000h, 000h, 000h, 000h, 000h ; char 0x27
db 020h, 040h, 040h, 040h, 040h, 040h, 020h, 010h ; char 0x28 db 010h, 020h, 020h, 020h, 020h, 020h, 010h, 000h ; char 0x28
db 020h, 010h, 010h, 010h, 010h, 010h, 020h, 040h ; char 0x29 db 020h, 010h, 010h, 010h, 010h, 010h, 020h, 000h ; char 0x29
db 020h, 070h, 070h, 020h, 000h, 000h, 000h, 000h ; char 0x2A db 000h, 028h, 038h, 07Ch, 038h, 028h, 000h, 000h ; char 0x2A
db 000h, 020h, 020h, 0F8h, 020h, 020h, 000h, 000h ; char 0x2B db 000h, 010h, 010h, 07Ch, 010h, 010h, 000h, 000h ; char 0x2B
db 000h, 000h, 000h, 000h, 000h, 020h, 020h, 040h ; char 0x2C db 000h, 000h, 000h, 000h, 000h, 030h, 030h, 020h ; char 0x2C
db 000h, 000h, 000h, 070h, 000h, 000h, 000h, 000h ; char 0x2D db 000h, 000h, 000h, 07Ch, 000h, 000h, 000h, 000h ; char 0x2D
db 000h, 000h, 000h, 000h, 000h, 020h, 000h, 000h ; char 0x2E db 000h, 000h, 000h, 000h, 000h, 030h, 030h, 000h ; char 0x2E
db 008h, 010h, 010h, 020h, 020h, 020h, 040h, 000h ; char 0x2F db 000h, 004h, 008h, 010h, 020h, 040h, 000h, 000h ; char 0x2F
db 060h, 090h, 0B0h, 0D0h, 090h, 060h, 000h, 000h ; char 0x30 db 038h, 044h, 04Ch, 054h, 064h, 044h, 038h, 000h ; char 0x30
db 020h, 060h, 020h, 020h, 020h, 070h, 000h, 000h ; char 0x31 db 010h, 030h, 010h, 010h, 010h, 010h, 038h, 000h ; char 0x31
db 038h, 048h, 008h, 010h, 020h, 078h, 000h, 000h ; char 0x32 db 038h, 044h, 004h, 018h, 020h, 040h, 07Ch, 000h ; char 0x32
db 078h, 008h, 030h, 008h, 008h, 070h, 000h, 000h ; char 0x33 db 038h, 044h, 004h, 038h, 004h, 044h, 038h, 000h ; char 0x33
db 030h, 030h, 050h, 090h, 0F8h, 010h, 000h, 000h ; char 0x34 db 008h, 018h, 028h, 048h, 07Ch, 008h, 008h, 000h ; char 0x34
db 078h, 040h, 070h, 008h, 008h, 070h, 000h, 000h ; char 0x35 db 07Ch, 040h, 040h, 078h, 004h, 044h, 038h, 000h ; char 0x35
db 038h, 060h, 078h, 048h, 048h, 030h, 000h, 000h ; char 0x36 db 018h, 020h, 040h, 078h, 044h, 044h, 038h, 000h ; char 0x36
db 078h, 008h, 010h, 010h, 020h, 020h, 000h, 000h ; char 0x37 db 07Ch, 004h, 008h, 010h, 020h, 020h, 020h, 000h ; char 0x37
db 078h, 048h, 030h, 048h, 048h, 070h, 000h, 000h ; char 0x38 db 038h, 044h, 044h, 038h, 044h, 044h, 038h, 000h ; char 0x38
db 060h, 090h, 090h, 0F0h, 010h, 0E0h, 000h, 000h ; char 0x39 db 038h, 044h, 044h, 03Ch, 004h, 008h, 030h, 000h ; char 0x39
db 000h, 000h, 020h, 000h, 000h, 020h, 000h, 000h ; char 0x3A db 000h, 000h, 030h, 030h, 000h, 030h, 030h, 000h ; char 0x3A
db 000h, 000h, 020h, 000h, 000h, 020h, 020h, 040h ; char 0x3B db 000h, 000h, 030h, 030h, 000h, 030h, 030h, 020h ; char 0x3B
db 000h, 010h, 020h, 040h, 020h, 010h, 000h, 000h ; char 0x3C db 008h, 010h, 020h, 040h, 020h, 010h, 008h, 000h ; char 0x3C
db 000h, 000h, 078h, 000h, 078h, 000h, 000h, 000h ; char 0x3D db 000h, 000h, 07Ch, 000h, 000h, 07Ch, 000h, 000h ; char 0x3D
db 000h, 040h, 020h, 010h, 020h, 040h, 000h, 000h ; char 0x3E db 020h, 010h, 008h, 004h, 008h, 010h, 020h, 000h ; char 0x3E
db 060h, 010h, 010h, 070h, 000h, 040h, 000h, 000h ; char 0x3F db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x3F
db 030h, 048h, 0B8h, 0B8h, 0B8h, 0A8h, 080h, 070h ; char 0x40 db 038h, 044h, 05Ch, 054h, 05Ch, 040h, 038h, 000h ; char 0x40
db 020h, 050h, 050h, 050h, 070h, 050h, 000h, 000h ; char 0x41 db 038h, 044h, 044h, 044h, 07Ch, 044h, 044h, 000h ; char 0x41
db 078h, 048h, 070h, 048h, 048h, 070h, 000h, 000h ; char 0x42 db 078h, 044h, 044h, 078h, 044h, 044h, 078h, 000h ; char 0x42
db 070h, 080h, 080h, 080h, 080h, 070h, 000h, 000h ; char 0x43 db 038h, 044h, 040h, 040h, 040h, 044h, 038h, 000h ; char 0x43
db 0E0h, 090h, 090h, 090h, 090h, 0E0h, 000h, 000h ; char 0x44 db 078h, 044h, 044h, 044h, 044h, 044h, 078h, 000h ; char 0x44
db 070h, 040h, 070h, 040h, 040h, 070h, 000h, 000h ; char 0x45 db 07Ch, 040h, 040h, 078h, 040h, 040h, 07Ch, 000h ; char 0x45
db 070h, 040h, 070h, 040h, 040h, 040h, 000h, 000h ; char 0x46 db 07Ch, 040h, 040h, 078h, 040h, 040h, 040h, 000h ; char 0x46
db 070h, 080h, 0B0h, 090h, 090h, 070h, 000h, 000h ; char 0x47 db 038h, 044h, 040h, 05Ch, 044h, 044h, 03Ch, 000h ; char 0x47
db 090h, 090h, 0F0h, 090h, 090h, 090h, 000h, 000h ; char 0x48 db 044h, 044h, 044h, 07Ch, 044h, 044h, 044h, 000h ; char 0x48
db 070h, 020h, 020h, 020h, 020h, 070h, 000h, 000h ; char 0x49 db 038h, 010h, 010h, 010h, 010h, 010h, 038h, 000h ; char 0x49
db 070h, 010h, 010h, 010h, 010h, 070h, 000h, 000h ; char 0x4A db 004h, 004h, 004h, 004h, 044h, 044h, 038h, 000h ; char 0x4A
db 048h, 050h, 060h, 060h, 050h, 048h, 000h, 000h ; char 0x4B db 044h, 048h, 050h, 060h, 050h, 048h, 044h, 000h ; char 0x4B
db 040h, 040h, 040h, 040h, 040h, 070h, 000h, 000h ; char 0x4C db 040h, 040h, 040h, 040h, 040h, 040h, 07Ch, 000h ; char 0x4C
db 010h, 0B0h, 0B0h, 050h, 010h, 010h, 000h, 000h ; char 0x4D db 044h, 06Ch, 054h, 044h, 044h, 044h, 044h, 000h ; char 0x4D
db 050h, 050h, 070h, 070h, 050h, 050h, 000h, 000h ; char 0x4E db 044h, 064h, 054h, 04Ch, 044h, 044h, 044h, 000h ; char 0x4E
db 070h, 088h, 088h, 088h, 088h, 070h, 000h, 000h ; char 0x4F db 038h, 044h, 044h, 044h, 044h, 044h, 038h, 000h ; char 0x4F
db 070h, 048h, 048h, 070h, 040h, 040h, 000h, 000h ; char 0x50 db 078h, 044h, 044h, 078h, 040h, 040h, 040h, 000h ; char 0x50
db 070h, 088h, 088h, 088h, 088h, 070h, 020h, 018h ; char 0x51 db 038h, 044h, 044h, 044h, 054h, 048h, 034h, 000h ; char 0x51
db 070h, 048h, 048h, 070h, 048h, 048h, 000h, 000h ; char 0x52 db 078h, 044h, 044h, 078h, 048h, 044h, 044h, 000h ; char 0x52
db 038h, 040h, 060h, 018h, 008h, 070h, 000h, 000h ; char 0x53 db 038h, 044h, 040h, 038h, 004h, 044h, 038h, 000h ; char 0x53
db 0F8h, 020h, 020h, 020h, 020h, 020h, 000h, 000h ; char 0x54 db 07Ch, 010h, 010h, 010h, 010h, 010h, 010h, 000h ; char 0x54
db 090h, 090h, 090h, 090h, 090h, 060h, 000h, 000h ; char 0x55 db 044h, 044h, 044h, 044h, 044h, 044h, 038h, 000h ; char 0x55
db 050h, 050h, 050h, 050h, 050h, 020h, 000h, 000h ; char 0x56 db 044h, 044h, 044h, 044h, 044h, 028h, 010h, 000h ; char 0x56
db 050h, 050h, 070h, 050h, 050h, 050h, 000h, 000h ; char 0x57 db 044h, 044h, 054h, 054h, 054h, 054h, 028h, 000h ; char 0x57
db 088h, 050h, 020h, 020h, 050h, 088h, 000h, 000h ; char 0x58 db 044h, 044h, 028h, 010h, 028h, 044h, 044h, 000h ; char 0x58
db 088h, 050h, 050h, 020h, 020h, 020h, 000h, 000h ; char 0x59 db 044h, 044h, 044h, 028h, 010h, 010h, 010h, 000h ; char 0x59
db 0F0h, 020h, 020h, 040h, 040h, 0F0h, 000h, 000h ; char 0x5A db 078h, 008h, 010h, 020h, 040h, 040h, 078h, 000h ; char 0x5A
db 060h, 040h, 040h, 040h, 040h, 040h, 040h, 060h ; char 0x5B db 038h, 020h, 020h, 020h, 020h, 020h, 038h, 000h ; char 0x5B
db 040h, 020h, 020h, 020h, 010h, 010h, 008h, 000h ; char 0x5C db 000h, 040h, 020h, 010h, 008h, 004h, 000h, 000h ; char 0x5C
db 030h, 010h, 010h, 010h, 010h, 010h, 010h, 030h ; char 0x5D db 038h, 008h, 008h, 008h, 008h, 008h, 038h, 000h ; char 0x5D
db 020h, 050h, 050h, 000h, 000h, 000h, 000h, 000h ; char 0x5E db 010h, 028h, 044h, 000h, 000h, 000h, 000h, 000h ; char 0x5E
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0F8h ; char 0x5F db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FCh ; char 0x5F
db 020h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x60 db 030h, 030h, 010h, 000h, 000h, 000h, 000h, 000h ; char 0x60
db 000h, 000h, 078h, 008h, 078h, 078h, 000h, 000h ; char 0x61 db 000h, 000h, 038h, 004h, 03Ch, 044h, 03Ch, 000h ; char 0x61
db 040h, 040h, 078h, 048h, 048h, 070h, 000h, 000h ; char 0x62 db 040h, 040h, 078h, 044h, 044h, 044h, 078h, 000h ; char 0x62
db 000h, 000h, 030h, 040h, 040h, 070h, 000h, 000h ; char 0x63 db 000h, 000h, 038h, 044h, 040h, 044h, 038h, 000h ; char 0x63
db 010h, 010h, 070h, 090h, 090h, 0F0h, 000h, 000h ; char 0x64 db 004h, 004h, 03Ch, 044h, 044h, 044h, 03Ch, 000h ; char 0x64
db 000h, 000h, 038h, 078h, 040h, 038h, 000h, 000h ; char 0x65 db 000h, 000h, 038h, 044h, 078h, 040h, 038h, 000h ; char 0x65
db 038h, 020h, 0F0h, 020h, 020h, 020h, 000h, 000h ; char 0x66 db 018h, 020h, 020h, 078h, 020h, 020h, 020h, 000h ; char 0x66
db 000h, 000h, 0F0h, 090h, 0F0h, 080h, 0F0h, 0F0h ; char 0x67 db 000h, 000h, 03Ch, 044h, 044h, 03Ch, 004h, 038h ; char 0x67
db 040h, 040h, 078h, 048h, 048h, 048h, 000h, 000h ; char 0x68 db 040h, 040h, 070h, 048h, 048h, 048h, 048h, 000h ; char 0x68
db 010h, 000h, 070h, 010h, 010h, 078h, 000h, 000h ; char 0x69 db 010h, 000h, 010h, 010h, 010h, 010h, 018h, 000h ; char 0x69
db 010h, 000h, 070h, 010h, 010h, 010h, 010h, 070h ; char 0x6A db 008h, 000h, 018h, 008h, 008h, 008h, 048h, 030h ; char 0x6A
db 040h, 040h, 050h, 060h, 050h, 048h, 000h, 000h ; char 0x6B db 040h, 040h, 048h, 050h, 060h, 050h, 048h, 000h ; char 0x6B
db 070h, 010h, 010h, 010h, 010h, 078h, 000h, 000h ; char 0x6C db 010h, 010h, 010h, 010h, 010h, 010h, 018h, 000h ; char 0x6C
db 000h, 000h, 0F8h, 0A8h, 0A8h, 0A8h, 000h, 000h ; char 0x6D db 000h, 000h, 068h, 054h, 054h, 044h, 044h, 000h ; char 0x6D
db 000h, 000h, 078h, 048h, 048h, 048h, 000h, 000h ; char 0x6E db 000h, 000h, 070h, 048h, 048h, 048h, 048h, 000h ; char 0x6E
db 000h, 000h, 060h, 090h, 090h, 060h, 000h, 000h ; char 0x6F db 000h, 000h, 038h, 044h, 044h, 044h, 038h, 000h ; char 0x6F
db 000h, 000h, 078h, 048h, 048h, 070h, 040h, 040h ; char 0x70 db 000h, 000h, 078h, 044h, 044h, 044h, 078h, 040h ; char 0x70
db 000h, 000h, 070h, 090h, 090h, 0F0h, 010h, 010h ; char 0x71 db 000h, 000h, 03Ch, 044h, 044h, 044h, 03Ch, 004h ; char 0x71
db 000h, 000h, 078h, 048h, 040h, 040h, 000h, 000h ; char 0x72 db 000h, 000h, 058h, 024h, 020h, 020h, 070h, 000h ; char 0x72
db 000h, 000h, 078h, 060h, 018h, 078h, 000h, 000h ; char 0x73 db 000h, 000h, 038h, 040h, 038h, 004h, 038h, 000h ; char 0x73
db 000h, 040h, 0F0h, 040h, 040h, 070h, 000h, 000h ; char 0x74 db 000h, 020h, 078h, 020h, 020h, 028h, 010h, 000h ; char 0x74
db 000h, 000h, 048h, 048h, 048h, 078h, 000h, 000h ; char 0x75 db 000h, 000h, 048h, 048h, 048h, 058h, 028h, 000h ; char 0x75
db 000h, 000h, 050h, 050h, 050h, 020h, 000h, 000h ; char 0x76 db 000h, 000h, 044h, 044h, 044h, 028h, 010h, 000h ; char 0x76
db 000h, 000h, 088h, 0B0h, 070h, 050h, 000h, 000h ; char 0x77 db 000h, 000h, 044h, 044h, 054h, 07Ch, 028h, 000h ; char 0x77
db 000h, 000h, 088h, 070h, 050h, 088h, 000h, 000h ; char 0x78 db 000h, 000h, 048h, 048h, 030h, 048h, 048h, 000h ; char 0x78
db 000h, 000h, 050h, 050h, 050h, 020h, 020h, 0C0h ; char 0x79 db 000h, 000h, 048h, 048h, 048h, 038h, 010h, 060h ; char 0x79
db 000h, 000h, 070h, 020h, 020h, 070h, 000h, 000h ; char 0x7A db 000h, 000h, 078h, 008h, 030h, 040h, 078h, 000h ; char 0x7A
db 030h, 020h, 020h, 040h, 020h, 020h, 020h, 030h ; char 0x7B db 018h, 020h, 020h, 060h, 020h, 020h, 018h, 000h ; char 0x7B
db 020h, 020h, 020h, 020h, 020h, 020h, 020h, 020h ; char 0x7C db 010h, 010h, 010h, 000h, 010h, 010h, 010h, 000h ; char 0x7C
db 060h, 020h, 020h, 010h, 020h, 020h, 020h, 060h ; char 0x7D db 030h, 008h, 008h, 00Ch, 008h, 008h, 030h, 000h ; char 0x7D
db 000h, 000h, 000h, 0D0h, 070h, 000h, 000h, 000h ; char 0x7E db 028h, 050h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x7E
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x7F db 010h, 038h, 06Ch, 044h, 044h, 07Ch, 000h, 000h ; char 0x7F
db 0E0h, 040h, 070h, 048h, 048h, 050h, 000h, 000h ; char 0x80 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x80
db 070h, 040h, 040h, 040h, 040h, 040h, 000h, 000h ; char 0x81 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x81
db 000h, 000h, 000h, 000h, 000h, 020h, 020h, 040h ; char 0x82 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x82
db 020h, 000h, 070h, 040h, 040h, 040h, 000h, 000h ; char 0x83 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x83
db 000h, 000h, 000h, 000h, 000h, 050h, 0F0h, 000h ; char 0x84 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x84
db 000h, 000h, 000h, 000h, 000h, 0A8h, 000h, 000h ; char 0x85 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x85
db 020h, 070h, 020h, 020h, 020h, 000h, 000h, 000h ; char 0x86 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x86
db 020h, 070h, 020h, 020h, 070h, 020h, 000h, 000h ; char 0x87 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x87
db 030h, 040h, 0E0h, 040h, 0E0h, 070h, 000h, 000h ; char 0x88 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x88
db 0E0h, 0E0h, 038h, 0C0h, 0FCh, 0FCh, 000h, 000h ; char 0x89 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x89
db 0E0h, 0A0h, 0B8h, 0A8h, 0A8h, 0B8h, 000h, 000h ; char 0x8A db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8A
db 000h, 000h, 020h, 040h, 040h, 020h, 000h, 000h ; char 0x8B db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8B
db 0A0h, 0A0h, 0F8h, 0A8h, 0A8h, 0B8h, 000h, 000h ; char 0x8C db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8C
db 048h, 050h, 060h, 060h, 050h, 048h, 000h, 000h ; char 0x8D db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8D
db 0E0h, 040h, 078h, 048h, 048h, 048h, 000h, 000h ; char 0x8E db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8E
db 088h, 088h, 088h, 088h, 088h, 0F8h, 020h, 000h ; char 0x8F db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8F
db 040h, 0E0h, 040h, 078h, 048h, 048h, 008h, 010h ; char 0x90 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x90
db 010h, 020h, 020h, 000h, 000h, 000h, 000h, 000h ; char 0x91 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x91
db 020h, 020h, 040h, 000h, 000h, 000h, 000h, 000h ; char 0x92 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x92
db 050h, 0A0h, 0A0h, 000h, 000h, 000h, 000h, 000h ; char 0x93 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x93
db 050h, 050h, 0A0h, 000h, 000h, 000h, 000h, 000h ; char 0x94 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x94
db 000h, 000h, 070h, 070h, 070h, 000h, 000h, 000h ; char 0x95 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x95
db 000h, 000h, 000h, 078h, 000h, 000h, 000h, 000h ; char 0x96 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x96
db 000h, 000h, 000h, 0F8h, 000h, 000h, 000h, 000h ; char 0x97 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x97
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x98 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x98
db 0E8h, 0B8h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x99 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x99
db 000h, 000h, 060h, 078h, 068h, 0B8h, 000h, 000h ; char 0x9A db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9A
db 000h, 000h, 020h, 010h, 010h, 020h, 000h, 000h ; char 0x9B db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9B
db 000h, 000h, 0A0h, 0F8h, 0A8h, 0B8h, 000h, 000h ; char 0x9C db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9C
db 020h, 000h, 058h, 070h, 050h, 048h, 000h, 000h ; char 0x9D db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9D
db 0F0h, 040h, 078h, 048h, 048h, 048h, 000h, 000h ; char 0x9E db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9E
db 000h, 000h, 050h, 050h, 050h, 070h, 020h, 000h ; char 0x9F db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9F
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0xA0 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0xA0
db 050h, 050h, 050h, 020h, 020h, 040h, 000h, 000h ; char 0xA1 db 054h, 054h, 044h, 03Ch, 004h, 044h, 038h, 000h ; char 0xA1
db 070h, 000h, 050h, 050h, 050h, 020h, 020h, 0C0h ; char 0xA2 db 048h, 030h, 048h, 048h, 048h, 038h, 010h, 060h ; char 0xA2
db 070h, 010h, 010h, 010h, 010h, 070h, 000h, 000h ; char 0xA3 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xA3
db 088h, 070h, 050h, 050h, 070h, 088h, 000h, 000h ; char 0xA4 db 000h, 0CCh, 078h, 0CCh, 078h, 0CCh, 000h, 000h ; char 0xA4
db 070h, 040h, 040h, 040h, 040h, 040h, 000h, 000h ; char 0xA5 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xA5
db 020h, 020h, 020h, 000h, 020h, 020h, 020h, 020h ; char 0xA6 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xA6
db 070h, 040h, 070h, 048h, 038h, 008h, 078h, 000h ; char 0xA7 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xA7
db 070h, 040h, 070h, 040h, 040h, 070h, 000h, 000h ; char 0xA8 db 028h, 07Ch, 040h, 078h, 040h, 040h, 07Ch, 000h ; char 0xA8
db 070h, 088h, 0A8h, 0A8h, 088h, 070h, 000h, 000h ; char 0xA9 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xA9
db 070h, 080h, 0F0h, 080h, 080h, 070h, 000h, 000h ; char 0xAA db 038h, 044h, 040h, 070h, 040h, 044h, 038h, 000h ; char 0xAA
db 000h, 048h, 090h, 090h, 048h, 000h, 000h, 000h ; char 0xAB db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xAB
db 000h, 000h, 000h, 078h, 008h, 000h, 000h, 000h ; char 0xAC db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xAC
db 000h, 000h, 000h, 070h, 000h, 000h, 000h, 000h ; char 0xAD db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xAD
db 070h, 088h, 0A8h, 070h, 000h, 000h, 000h, 000h ; char 0xAE db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xAE
db 070h, 020h, 020h, 020h, 020h, 070h, 000h, 000h ; char 0xAF db 044h, 010h, 010h, 010h, 010h, 010h, 038h, 000h ; char 0xAF
db 078h, 048h, 078h, 000h, 000h, 000h, 000h, 000h ; char 0xB0 db 030h, 048h, 048h, 030h, 000h, 000h, 000h, 000h ; char 0xB0
db 000h, 020h, 0F8h, 020h, 000h, 0F8h, 000h, 000h ; char 0xB1 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB1
db 070h, 020h, 020h, 020h, 020h, 070h, 000h, 000h ; char 0xB2 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB2
db 010h, 000h, 070h, 010h, 010h, 078h, 000h, 000h ; char 0xB3 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB3
db 000h, 010h, 070h, 040h, 040h, 040h, 000h, 000h ; char 0xB4 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB4
db 000h, 000h, 048h, 048h, 048h, 07Ch, 040h, 040h ; char 0xB5 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB5
db 070h, 0D0h, 0D0h, 050h, 010h, 010h, 070h, 000h ; char 0xB6 db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB6
db 000h, 000h, 000h, 020h, 000h, 000h, 000h, 000h ; char 0xB7 db 000h, 000h, 000h, 020h, 000h, 000h, 000h, 000h ; char 0xB7
db 050h, 000h, 038h, 078h, 040h, 038h, 000h, 000h ; char 0xB8 db 028h, 000h, 038h, 044h, 078h, 040h, 038h, 000h ; char 0xB8
db 0D8h, 0D8h, 0C0h, 0D8h, 0C0h, 0C0h, 000h, 000h ; char 0xB9 db 09Ch, 0DCh, 0D0h, 0B0h, 0BCh, 090h, 090h, 000h ; char 0xB9
db 000h, 000h, 038h, 078h, 040h, 038h, 000h, 000h ; char 0xBA db 000h, 000h, 038h, 044h, 070h, 044h, 038h, 000h ; char 0xBA
db 090h, 048h, 048h, 090h, 000h, 000h, 000h, 000h ; char 0xBB db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xBB
db 010h, 000h, 070h, 010h, 010h, 010h, 010h, 070h ; char 0xBC db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xBC
db 038h, 040h, 060h, 018h, 008h, 070h, 000h, 000h ; char 0xBD db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xBD
db 000h, 000h, 078h, 060h, 018h, 078h, 000h, 000h ; char 0xBE db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xBE
db 050h, 000h, 070h, 010h, 010h, 078h, 000h, 000h ; char 0xBF db 028h, 000h, 010h, 010h, 010h, 010h, 018h, 000h ; char 0xBF
db 020h, 050h, 050h, 050h, 070h, 050h, 000h, 000h ; char 0xC0 db 038h, 044h, 044h, 044h, 07Ch, 044h, 044h, 000h ; char 0xC0
db 078h, 040h, 070h, 048h, 048h, 070h, 000h, 000h ; char 0xC1 db 07Ch, 040h, 040h, 078h, 044h, 044h, 078h, 000h ; char 0xC1
db 078h, 048h, 070h, 048h, 048h, 070h, 000h, 000h ; char 0xC2 db 078h, 044h, 044h, 078h, 044h, 044h, 078h, 000h ; char 0xC2
db 070h, 040h, 040h, 040h, 040h, 040h, 000h, 000h ; char 0xC3 db 07Ch, 040h, 040h, 040h, 040h, 040h, 040h, 000h ; char 0xC3
db 070h, 050h, 050h, 050h, 050h, 0F8h, 088h, 000h ; char 0xC4 db 038h, 048h, 048h, 048h, 048h, 048h, 0FCh, 084h ; char 0xC4
db 070h, 040h, 070h, 040h, 040h, 070h, 000h, 000h ; char 0xC5 db 07Ch, 040h, 040h, 078h, 040h, 040h, 07Ch, 000h ; char 0xC5
db 0A8h, 070h, 070h, 070h, 0A8h, 0A8h, 000h, 000h ; char 0xC6 db 054h, 054h, 054h, 038h, 054h, 054h, 054h, 000h ; char 0xC6
db 0F0h, 010h, 0E0h, 010h, 010h, 0E0h, 000h, 000h ; char 0xC7 db 070h, 088h, 008h, 070h, 008h, 088h, 070h, 000h ; char 0xC7
db 048h, 058h, 058h, 068h, 068h, 048h, 000h, 000h ; char 0xC8 db 044h, 044h, 044h, 04Ch, 054h, 064h, 044h, 000h ; char 0xC8
db 048h, 058h, 058h, 068h, 068h, 048h, 000h, 000h ; char 0xC9 db 038h, 044h, 044h, 04Ch, 054h, 064h, 044h, 000h ; char 0xC9
db 048h, 050h, 060h, 060h, 050h, 048h, 000h, 000h ; char 0xCA db 044h, 048h, 050h, 060h, 050h, 048h, 044h, 000h ; char 0xCA
db 0E0h, 0A0h, 0A0h, 0A0h, 0A0h, 020h, 000h, 000h ; char 0xCB db 01Ch, 024h, 024h, 024h, 024h, 024h, 064h, 000h ; char 0xCB
db 010h, 0B0h, 0B0h, 050h, 010h, 010h, 000h, 000h ; char 0xCC db 044h, 06Ch, 054h, 044h, 044h, 044h, 044h, 000h ; char 0xCC
db 090h, 090h, 0F0h, 090h, 090h, 090h, 000h, 000h ; char 0xCD db 044h, 044h, 044h, 07Ch, 044h, 044h, 044h, 000h ; char 0xCD
db 070h, 088h, 088h, 088h, 088h, 070h, 000h, 000h ; char 0xCE db 038h, 044h, 044h, 044h, 044h, 044h, 038h, 000h ; char 0xCE
db 078h, 048h, 048h, 048h, 048h, 048h, 000h, 000h ; char 0xCF db 07Ch, 044h, 044h, 044h, 044h, 044h, 044h, 000h ; char 0xCF
db 070h, 048h, 048h, 070h, 040h, 040h, 000h, 000h ; char 0xD0 db 078h, 044h, 044h, 078h, 040h, 040h, 040h, 000h ; char 0xD0
db 070h, 080h, 080h, 080h, 080h, 070h, 000h, 000h ; char 0xD1 db 038h, 044h, 040h, 040h, 040h, 044h, 038h, 000h ; char 0xD1
db 0F8h, 020h, 020h, 020h, 020h, 020h, 000h, 000h ; char 0xD2 db 07Ch, 010h, 010h, 010h, 010h, 010h, 010h, 000h ; char 0xD2
db 050h, 050h, 050h, 020h, 020h, 040h, 000h, 000h ; char 0xD3 db 044h, 044h, 044h, 03Ch, 004h, 044h, 038h, 000h ; char 0xD3
db 020h, 070h, 0A8h, 0A8h, 070h, 020h, 000h, 000h ; char 0xD4 db 038h, 054h, 054h, 054h, 038h, 010h, 010h, 000h ; char 0xD4
db 088h, 050h, 020h, 020h, 050h, 088h, 000h, 000h ; char 0xD5 db 044h, 044h, 028h, 010h, 028h, 044h, 044h, 000h ; char 0xD5
db 050h, 050h, 050h, 050h, 050h, 078h, 008h, 000h ; char 0xD6 db 048h, 048h, 048h, 048h, 048h, 048h, 07Ch, 004h ; char 0xD6
db 090h, 090h, 090h, 070h, 010h, 010h, 000h, 000h ; char 0xD7 db 044h, 044h, 044h, 03Ch, 004h, 004h, 004h, 000h ; char 0xD7
db 0A8h, 0A8h, 0A8h, 0A8h, 0A8h, 0F8h, 000h, 000h ; char 0xD8 db 054h, 054h, 054h, 054h, 054h, 054h, 07Ch, 000h ; char 0xD8
db 0A8h, 0A8h, 0A8h, 0A8h, 0A8h, 0F8h, 008h, 000h ; char 0xD9 db 054h, 054h, 054h, 054h, 054h, 054h, 07Ch, 004h ; char 0xD9
db 0C0h, 040h, 070h, 048h, 048h, 070h, 000h, 000h ; char 0xDA db 0E0h, 0A0h, 020h, 038h, 024h, 024h, 038h, 000h ; char 0xDA
db 090h, 090h, 0F0h, 0B0h, 0B0h, 0D0h, 000h, 000h ; char 0xDB db 044h, 044h, 044h, 074h, 04Ch, 04Ch, 074h, 000h ; char 0xDB
db 040h, 040h, 070h, 048h, 048h, 070h, 000h, 000h ; char 0xDC db 040h, 040h, 040h, 078h, 044h, 044h, 078h, 000h ; char 0xDC
db 070h, 008h, 078h, 008h, 008h, 070h, 000h, 000h ; char 0xDD db 038h, 044h, 004h, 01Ch, 004h, 044h, 038h, 000h ; char 0xDD
db 0B8h, 0A8h, 0E8h, 0A8h, 0A8h, 0B8h, 000h, 000h ; char 0xDE db 048h, 054h, 054h, 074h, 054h, 054h, 048h, 000h ; char 0xDE
db 070h, 090h, 090h, 070h, 050h, 090h, 000h, 000h ; char 0xDF db 03Ch, 044h, 044h, 03Ch, 024h, 044h, 044h, 000h ; char 0xDF
db 000h, 000h, 078h, 008h, 078h, 078h, 000h, 000h ; char 0xE0 db 000h, 000h, 038h, 004h, 03Ch, 044h, 03Ch, 000h ; char 0xE0
db 060h, 078h, 048h, 048h, 030h, 000h, 000h, 000h ; char 0xE1 db 004h, 038h, 040h, 078h, 044h, 044h, 038h, 000h ; char 0xE1
db 000h, 000h, 078h, 070h, 048h, 078h, 000h, 000h ; char 0xE2 db 000h, 000h, 078h, 044h, 078h, 044h, 078h, 000h ; char 0xE2
db 000h, 000h, 070h, 040h, 040h, 040h, 000h, 000h ; char 0xE3 db 000h, 000h, 078h, 048h, 040h, 040h, 040h, 000h ; char 0xE3
db 000h, 000h, 070h, 050h, 050h, 0F8h, 088h, 000h ; char 0xE4 db 000h, 000h, 038h, 048h, 048h, 048h, 0FCh, 084h ; char 0xE4
db 000h, 000h, 038h, 078h, 040h, 038h, 000h, 000h ; char 0xE5 db 000h, 000h, 038h, 044h, 078h, 040h, 038h, 000h ; char 0xE5
db 000h, 000h, 0A8h, 070h, 070h, 0A8h, 000h, 000h ; char 0xE6 db 000h, 000h, 054h, 054h, 038h, 054h, 054h, 000h ; char 0xE6
db 000h, 000h, 078h, 030h, 008h, 078h, 000h, 000h ; char 0xE7 db 000h, 000h, 038h, 044h, 018h, 044h, 038h, 000h ; char 0xE7
db 000h, 000h, 048h, 058h, 068h, 048h, 000h, 000h ; char 0xE8 db 000h, 000h, 044h, 04Ch, 054h, 064h, 044h, 000h ; char 0xE8
db 070h, 000h, 048h, 058h, 068h, 048h, 000h, 000h ; char 0xE9 db 000h, 018h, 044h, 04Ch, 054h, 064h, 044h, 000h ; char 0xE9
db 000h, 000h, 058h, 070h, 050h, 048h, 000h, 000h ; char 0xEA db 000h, 000h, 048h, 050h, 060h, 050h, 048h, 000h ; char 0xEA
db 000h, 000h, 070h, 050h, 050h, 090h, 000h, 000h ; char 0xEB db 000h, 000h, 038h, 048h, 048h, 048h, 088h, 000h ; char 0xEB
db 000h, 000h, 050h, 070h, 0B0h, 088h, 000h, 000h ; char 0xEC db 000h, 000h, 044h, 06Ch, 054h, 044h, 044h, 000h ; char 0xEC
db 000h, 000h, 048h, 078h, 048h, 048h, 000h, 000h ; char 0xED db 000h, 000h, 044h, 044h, 07Ch, 044h, 044h, 000h ; char 0xED
db 000h, 000h, 060h, 090h, 090h, 060h, 000h, 000h ; char 0xEE db 000h, 000h, 038h, 044h, 044h, 044h, 038h, 000h ; char 0xEE
db 000h, 000h, 078h, 048h, 048h, 048h, 000h, 000h ; char 0xEF db 000h, 000h, 07Ch, 044h, 044h, 044h, 044h, 000h ; char 0xEF
db 000h, 000h, 078h, 048h, 048h, 070h, 040h, 040h ; char 0xF0 db 000h, 000h, 078h, 044h, 044h, 044h, 078h, 040h ; char 0xF0
db 000h, 000h, 030h, 040h, 040h, 070h, 000h, 000h ; char 0xF1 db 000h, 000h, 038h, 044h, 040h, 044h, 038h, 000h ; char 0xF1
db 000h, 000h, 0F8h, 020h, 020h, 020h, 000h, 000h ; char 0xF2 db 000h, 000h, 07Ch, 010h, 010h, 010h, 010h, 000h ; char 0xF2
db 000h, 000h, 050h, 050h, 050h, 020h, 020h, 0C0h ; char 0xF3 db 000h, 000h, 048h, 048h, 048h, 038h, 010h, 060h ; char 0xF3
db 020h, 020h, 078h, 0A8h, 0A8h, 070h, 020h, 020h ; char 0xF4 db 000h, 000h, 038h, 054h, 054h, 038h, 010h, 000h ; char 0xF4
db 000h, 000h, 088h, 070h, 050h, 088h, 000h, 000h ; char 0xF5 db 000h, 000h, 048h, 048h, 030h, 048h, 048h, 000h ; char 0xF5
db 000h, 000h, 050h, 050h, 050h, 078h, 008h, 000h ; char 0xF6 db 000h, 000h, 048h, 048h, 048h, 048h, 07Ch, 004h ; char 0xF6
db 000h, 000h, 048h, 078h, 008h, 008h, 000h, 000h ; char 0xF7 db 000h, 000h, 044h, 044h, 03Ch, 004h, 004h, 000h ; char 0xF7
db 000h, 000h, 0A8h, 0A8h, 0A8h, 0F8h, 000h, 000h ; char 0xF8 db 000h, 000h, 054h, 054h, 054h, 054h, 07Ch, 000h ; char 0xF8
db 000h, 000h, 0A8h, 0A8h, 0A8h, 0F8h, 008h, 000h ; char 0xF9 db 000h, 000h, 054h, 054h, 054h, 054h, 07Ch, 004h ; char 0xF9
db 000h, 000h, 0C0h, 078h, 048h, 078h, 000h, 000h ; char 0xFA db 000h, 000h, 0E0h, 0A0h, 038h, 024h, 038h, 000h ; char 0xFA
db 000h, 000h, 090h, 0F0h, 0B0h, 0F0h, 000h, 000h ; char 0xFB db 000h, 000h, 044h, 044h, 074h, 04Ch, 074h, 000h ; char 0xFB
db 000h, 000h, 040h, 078h, 048h, 078h, 000h, 000h ; char 0xFC db 000h, 000h, 040h, 040h, 078h, 044h, 078h, 000h ; char 0xFC
db 000h, 000h, 070h, 078h, 008h, 070h, 000h, 000h ; char 0xFD db 000h, 000h, 038h, 044h, 01Ch, 044h, 038h, 000h ; char 0xFD
db 000h, 000h, 0B0h, 0F0h, 0B0h, 0B0h, 000h, 000h ; char 0xFE db 000h, 000h, 048h, 054h, 074h, 054h, 048h, 000h ; char 0xFE
db 000h, 000h, 0F0h, 090h, 070h, 090h, 000h, 000h ; char 0xFF db 000h, 000h, 03Ch, 044h, 03Ch, 024h, 044h, 000h ; char 0xFF

BIN
poker.exe

Binary file not shown.

View file

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
"""
Generate 100% authentic, pixel-perfect 8x8 IBM VGA bitmap font for CP1251 in font8x8.inc.
Extracts official IBM VGA 8x8 font resources directly from C:\\Windows\\Fonts\\app866.fon,
mapping CP1251 characters to the corresponding CP866 Cyrillic glyphs.
"""
import struct
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[2]
FONT_INC = REPO_ROOT / 'font8x8.inc'
# Load authentic 8x8 font from app866.fon (Resource at offset 8784: 8x8, 256 glyphs)
with open('C:/Windows/Fonts/app866.fon', 'rb') as f:
fon_data = f.read()
font_res = fon_data[8784:8784+3211]
raw_glyphs = {}
for ch in range(256):
entry_off = 0x76 + ch * 4
w, off = struct.unpack('<HH', font_res[entry_off:entry_off+4])
raw_glyphs[ch] = list(font_res[off:off+8])
# Build complete 256-glyph CP1251 table
cp1251_font = []
for b in range(256):
if b < 128:
cp1251_font.append(raw_glyphs[b])
else:
try:
char = bytes([b]).decode('cp1251')
b866 = char.encode('cp866')[0]
cp1251_font.append(raw_glyphs[b866])
except Exception:
cp1251_font.append(raw_glyphs[ord('?')])
# Write font8x8.inc in CP1251 encoding
with open(FONT_INC, 'w', encoding='cp1251') as f:
f.write("; --- 8x8 BITMAP FONT FOR CP1251 (Authentic IBM VGA CP866/1251) ---\n")
f.write(".data\nALIGN 4\nfont8x8 label byte\n")
for idx, glyph in enumerate(cp1251_font):
b_str = ", ".join(f"0{b:02X}h" for b in glyph)
f.write(f"db {b_str} ; char 0x{idx:02X}\n")
print(f"[SUCCESS] Generated authentic, pixel-perfect font8x8.inc ({len(cp1251_font)} glyphs)")

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,13 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
"""
Visual simulation & rasterization test for 2.5D Casino Minigames.
Renders pixel-perfect 640x480 (320x240 upscaled 2x) PNG previews of:
- Coin Flip (Монетка)
- Craps / Dice (Кости)
- Skulls & Cups (Напёрстки)
- Dead by Daylight Skill Check (Проверка реакции)
Uses authentic IBM VGA 8x8 font and correct 0x00RRGGBB Little-Endian DIB color space.
"""
import math import math
from pathlib import Path from pathlib import Path
from PIL import Image from PIL import Image
@ -26,10 +35,14 @@ class RasterBuffer:
self.pixels = [(0, 0, 0)] * (SCREEN_W * SCREEN_H) self.pixels = [(0, 0, 0)] * (SCREEN_W * SCREEN_H)
def to_rgb(self, c): def to_rgb(self, c):
# 0x00BBGGRR format # 0x00RRGGBB format:
r = c & 0xFF # In x86 Little-Endian StretchDIBits (BI_RGB 32-bit):
# byte 0 = Blue (c & 0xFF)
# byte 1 = Green ((c >> 8) & 0xFF)
# byte 2 = Red ((c >> 16) & 0xFF)
r = (c >> 16) & 0xFF
g = (c >> 8) & 0xFF g = (c >> 8) & 0xFF
b = (c >> 16) & 0xFF b = c & 0xFF
return (r, g, b) return (r, g, b)
def draw_box(self, x, y, w, h, color): def draw_box(self, x, y, w, h, color):
@ -65,7 +78,7 @@ class RasterBuffer:
if isinstance(ch, str): if isinstance(ch, str):
try: try:
code = ch.encode('cp1251')[0] code = ch.encode('cp1251')[0]
except: except Exception:
code = ord(ch) & 0xFF code = ord(ch) & 0xFF
else: else:
code = ch & 0xFF code = ch & 0xFF
@ -87,25 +100,23 @@ class RasterBuffer:
w = len(text) * 8 + 8 w = len(text) * 8 + 8
h = 13 h = 13
if is_active: if is_active:
border_c = 0x0000FFFF border_c = 0x00FFFF00 # Bright Yellow border
fill_c = 0x001B4B22 fill_c = 0x001B4B22 # Casino Green fill
txt_c = 0x0000FFFF txt_c = 0x00FFFF00 # Bright Yellow text
else: else:
border_c = 0x00606870 border_c = 0x00606870 # Slate border
fill_c = 0x001A1C22 fill_c = 0x001A1C22 # Charcoal fill
txt_c = 0x00D0D8E0 txt_c = 0x00D0D8E0 # Silver text
self.draw_box(x, y + 2, w, h, 0x0008080C) # shadow self.draw_box(x, y + 2, w, h, 0x0008080C) # shadow
self.draw_box_border(x, y, w, h, fill_c, border_c, 1) self.draw_box_border(x, y, w, h, fill_c, border_c, 1)
self.draw_string(x + 4, y + 3, text, txt_c) self.draw_string(x + 4, y + 3, text, txt_c)
return w + 4 return w + 4
def draw_chip_stack(self, x, y, count=3): def draw_chip_stack(self, x, y, count=3):
# Draw stack of 3D casino clay chips
for i in range(count): for i in range(count):
cy = y - i * 4 cy = y - i * 4
self.draw_box(x + 2, cy + 5, 20, 2, 0x00041006) # shadow self.draw_box(x + 2, cy + 5, 20, 2, 0x00061004) # shadow
self.draw_box_border(x, cy, 24, 6, 0x001515B8, 0x00FFFFFF, 1) self.draw_box_border(x, cy, 24, 6, 0x00B81515, 0x00FFFFFF, 1) # Red chip
# white stripe inlays
self.draw_box(x + 4, cy + 1, 3, 4, 0x00FFFFFF) self.draw_box(x + 4, cy + 1, 3, 4, 0x00FFFFFF)
self.draw_box(x + 17, cy + 1, 3, 4, 0x00FFFFFF) self.draw_box(x + 17, cy + 1, 3, 4, 0x00FFFFFF)
@ -128,12 +139,13 @@ class RasterBuffer:
self.draw_pixel(cur_x, cur_y, inner_color) self.draw_pixel(cur_x, cur_y, inner_color)
if rx >= 14 and relief == 1: if rx >= 14 and relief == 1:
gold_dark = 0x00007A9A gold_dark = 0x009A7A00 # Dark Gold relief
# Imperial Eagle gold_bright = 0x00FFD700
# Double-headed imperial eagle relief
self.draw_box(cx - 3, cy - 14, 7, 2, gold_dark) self.draw_box(cx - 3, cy - 14, 7, 2, gold_dark)
self.draw_box(cx - 4, cy - 12, 9, 2, gold_dark) self.draw_box(cx - 4, cy - 12, 9, 2, gold_dark)
self.draw_box(cx - 2, cy - 9, 5, 12, gold_dark) self.draw_box(cx - 2, cy - 9, 5, 12, gold_dark)
self.draw_box(cx - 1, cy - 8, 3, 10, 0x0000D7FF) self.draw_box(cx - 1, cy - 8, 3, 10, gold_bright)
self.draw_box(cx - 10, cy - 8, 7, 3, gold_dark) self.draw_box(cx - 10, cy - 8, 7, 3, gold_dark)
self.draw_box(cx - 13, cy - 5, 10, 3, gold_dark) self.draw_box(cx - 13, cy - 5, 10, 3, gold_dark)
self.draw_box(cx - 11, cy - 2, 7, 3, gold_dark) self.draw_box(cx - 11, cy - 2, 7, 3, gold_dark)
@ -143,29 +155,30 @@ class RasterBuffer:
self.draw_box(cx - 4, cy + 4, 9, 3, gold_dark) self.draw_box(cx - 4, cy + 4, 9, 3, gold_dark)
self.draw_box(cx - 3, cy + 7, 7, 3, gold_dark) self.draw_box(cx - 3, cy + 7, 7, 3, gold_dark)
elif rx >= 14 and relief == 2: elif rx >= 14 and relief == 2:
gold_dark = 0x00007A9A gold_dark = 0x009A7A00
# Roman numeral 'I' gold_bright = 0x00FFD700
# Roman numeral 'I' & laurel crown
self.draw_box(cx - 5, cy - 10, 11, 3, gold_dark) self.draw_box(cx - 5, cy - 10, 11, 3, gold_dark)
self.draw_box(cx - 2, cy - 7, 5, 14, gold_dark) self.draw_box(cx - 2, cy - 7, 5, 14, gold_dark)
self.draw_box(cx - 1, cy - 6, 3, 12, 0x0000D7FF) self.draw_box(cx - 1, cy - 6, 3, 12, gold_bright)
self.draw_box(cx - 6, cy + 7, 13, 3, gold_dark) self.draw_box(cx - 6, cy + 7, 13, 3, gold_dark)
for w_dy in [-10, -5, 0, 5, 9]: for w_dy in [-10, -5, 0, 5, 9]:
self.draw_box(cx - 12, cy + w_dy, 2, 2, gold_dark) self.draw_box(cx - 12, cy + w_dy, 2, 2, gold_dark)
self.draw_box(cx + 11, cy + w_dy, 2, 2, gold_dark) self.draw_box(cx + 11, cy + w_dy, 2, 2, gold_dark)
def draw_craps_die(self, x, y, size, val): def draw_craps_die(self, x, y, size, val):
self.draw_box(x + 3, y + size, size, 3, 0x00031408) self.draw_box(x + 3, y + size, size, 3, 0x00081403)
self.draw_box(x + size, y + 3, 3, size, 0x00031408) self.draw_box(x + size, y + 3, 3, size, 0x00081403)
body_color = 0x00F0F4FA body_color = 0x00FAF4F0
bevel_color = 0x00C0C6D0 bevel_color = 0x00D0C6C0
border_color = 0x00353540 border_color = 0x00403535
self.draw_box_border(x, y, size, size, body_color, border_color, 1) self.draw_box_border(x, y, size, size, body_color, border_color, 1)
self.draw_box(x + 1, y + 1, size - 2, 1, 0x00FFFFFF) self.draw_box(x + 1, y + 1, size - 2, 1, 0x00FFFFFF)
self.draw_box(x + 1, y + 1, 1, size - 2, 0x00FFFFFF) self.draw_box(x + 1, y + 1, 1, size - 2, 0x00FFFFFF)
self.draw_box(x + 1, y + size - 2, size - 2, 1, bevel_color) self.draw_box(x + 1, y + size - 2, size - 2, 1, bevel_color)
self.draw_box(x + size - 2, y + 1, 1, size - 2, bevel_color) self.draw_box(x + size - 2, y + 1, 1, size - 2, bevel_color)
pip_c = 0x001515C8 pip_c = 0x00C81515 # Red ruby pips
pip_r = 3 pip_r = 3
if val in [1, 3, 5]: if val in [1, 3, 5]:
self.draw_circle(x + size // 2, y + size // 2, pip_r, pip_c) self.draw_circle(x + size // 2, y + size // 2, pip_r, pip_c)
@ -183,35 +196,36 @@ class RasterBuffer:
def draw_gothic_cup(self, x, y, cup_id, is_lifted=False, has_ball=False): def draw_gothic_cup(self, x, y, cup_id, is_lifted=False, has_ball=False):
lift_y = y - 36 if is_lifted else y lift_y = y - 36 if is_lifted else y
if not is_lifted: if not is_lifted:
self.draw_box(x + 6, y + 42, 36, 4, 0x000A0410) self.draw_box(x + 6, y + 42, 36, 4, 0x0010040A)
else: else:
self.draw_box(x + 10, y + 42, 28, 2, 0x0012061A) self.draw_box(x + 10, y + 42, 28, 2, 0x001A0612)
if is_lifted and has_ball: if is_lifted and has_ball:
self.draw_glowing_orb(x + 24, y + 26) self.draw_glowing_orb(x + 24, y + 26)
self.draw_box_border(x + 6, lift_y + 36, 36, 6, 0x00221A30, 0x0000B0D0, 1) self.draw_box_border(x + 6, lift_y + 36, 36, 6, 0x00301A22, 0x00D0B000, 1)
self.draw_box(x + 18, lift_y + 28, 12, 8, 0x00332545) self.draw_box(x + 18, lift_y + 28, 12, 8, 0x00452533)
self.draw_box(x + 22, lift_y + 28, 4, 8, 0x0055406E) self.draw_box(x + 22, lift_y + 28, 4, 8, 0x006E4055)
self.draw_box_border(x + 8, lift_y + 8, 32, 20, 0x002D1E40, 0x0000D7FF, 1) self.draw_box_border(x + 8, lift_y + 8, 32, 20, 0x00401E2D, 0x00FFD700, 1)
self.draw_box(x + 14, lift_y + 10, 6, 16, 0x00503570) self.draw_box(x + 14, lift_y + 10, 6, 16, 0x00703550)
self.draw_box(x + 17, lift_y + 10, 3, 16, 0x007850A0) self.draw_box(x + 17, lift_y + 10, 3, 16, 0x00A05078)
self.draw_box_border(x + 4, lift_y + 2, 40, 7, 0x00150A20, 0x0000FFFF, 1) self.draw_box_border(x + 4, lift_y + 2, 40, 7, 0x00200A15, 0x00FFFF00, 1)
self.draw_box(x + 12, lift_y + 4, 16, 2, 0x0000FFFF) self.draw_box(x + 12, lift_y + 4, 16, 2, 0x00FFFF00)
self.draw_box(x + 21, lift_y + 12, 6, 5, 0x0000D7FF) # Skull face relief on goblet
self.draw_box(x + 22, lift_y + 17, 4, 3, 0x0000D7FF) self.draw_box(x + 21, lift_y + 12, 6, 5, 0x00FFD700)
self.draw_pixel(x + 22, lift_y + 14, 0x00150A20) self.draw_box(x + 22, lift_y + 17, 4, 3, 0x00FFD700)
self.draw_pixel(x + 24, lift_y + 14, 0x00150A20) self.draw_pixel(x + 22, lift_y + 14, 0x00200A15)
self.draw_string(x + 21, lift_y + 24, str(cup_id), 0x0000FFFF) self.draw_pixel(x + 24, lift_y + 14, 0x00200A15)
self.draw_string(x + 21, lift_y + 24, str(cup_id), 0x00FFFF00)
def draw_glowing_orb(self, cx, cy): def draw_glowing_orb(self, cx, cy):
self.draw_circle(cx, cy, 14, 0x00081E2E) self.draw_circle(cx, cy, 14, 0x002E1E08)
self.draw_circle(cx, cy, 11, 0x00103A58) self.draw_circle(cx, cy, 11, 0x00583A10)
self.draw_circle(cx, cy, 8, 0x001A588A) self.draw_circle(cx, cy, 8, 0x008A581A)
self.draw_circle(cx, cy, 6, 0x0000B0E0) self.draw_circle(cx, cy, 6, 0x00D0B000)
self.draw_circle(cx, cy, 4, 0x0000E0FF) self.draw_circle(cx, cy, 4, 0x00FFE000)
self.draw_circle(cx - 1, cy - 1, 2, 0x00A0FFFF) self.draw_circle(cx - 1, cy - 1, 2, 0x00FFFF80)
self.draw_pixel(cx - 2, cy - 2, 0x00FFFFFF) self.draw_pixel(cx - 2, cy - 2, 0x00FFFFFF)
def save(self, filename): def save(self, filename):
@ -222,158 +236,216 @@ class RasterBuffer:
print(f"Saved {out_path}") print(f"Saved {out_path}")
# ============================================================================== # ==============================================================================
# 1. RENDER COIN GAME # 1. RENDER COIN GAME (Монетка)
# ============================================================================== # ==============================================================================
def render_coin(filename='coin_preview.png'): def render_coin(filename='coin_preview.png'):
b = RasterBuffer() b = RasterBuffer()
b.draw_box(0, 0, 320, 240, 0x00060914) # Mahogany cabinet b.draw_box(0, 0, 320, 240, 0x00140906) # Mahogany cabinet
b.draw_box_border(6, 6, 308, 228, 0x000F1522, 0x001B2E48, 3) b.draw_box_border(6, 6, 308, 228, 0x0022150F, 0x00482E1B, 3)
for cx in [12, 306]: for cx in [12, 306]:
for cy in [12, 226]: for cy in [12, 226]:
b.draw_box(cx, cy, 3, 3, 0x0000D7FF) b.draw_box(cx, cy, 3, 3, 0x00FFD700)
b.draw_pixel(cx + 1, cy + 1, 0x00FFFFFF) b.draw_pixel(cx + 1, cy + 1, 0x00FFFFFF)
b.draw_box_border(20, 12, 280, 26, 0x000A101C, 0x0000D7FF, 2) b.draw_box_border(20, 12, 280, 26, 0x001C100A, 0x00FFD700, 2)
b.draw_string(44, 21, '*** З О Л О Т А Я М О Н Е Т А ***', 0x0000FFFF) b.draw_string(44, 21, '* * * З О Л О Т А Я М О Н Е Т А * * *', 0x00FFFF00)
for bx in range(24, 296, 12): for bx in range(24, 296, 12):
b.draw_pixel(bx, 13, 0x0000FFFF) b.draw_pixel(bx, 13, 0x00FFFF00)
b.draw_pixel(bx, 36, 0x0000D7FF) b.draw_pixel(bx, 36, 0x00FFD700)
# Status meters # Status meters
b.draw_box_border(20, 44, 110, 18, 0x000A1A0E, 0x001A4B22, 1) b.draw_box_border(20, 44, 110, 18, 0x000E1A0A, 0x00224B1A, 1)
b.draw_string(24, 49, 'БАНК: $12500', 0x0050FF50) b.draw_string(24, 49, 'БАНК: $12500', 0x003CFF3C)
b.draw_box_border(190, 44, 110, 18, 0x001A100A, 0x003A2814, 1) b.draw_box_border(190, 44, 110, 18, 0x001A100A, 0x003A2814, 1)
b.draw_string(194, 49, 'СТАВКА: $50 [W/S]', 0x0000D7FF) b.draw_string(194, 49, 'СТАВКА: $250', 0x00FFD700)
# Center Dish # Side indicators
b.draw_circle(160, 110, 46, 0x000090C0) # Left: Heads (Selected)
b.draw_circle(160, 110, 44, 0x0000D7FF) b.draw_box(20, 72, 76, 68, 0x000A101C)
b.draw_circle(160, 110, 41, 0x00180824) b.draw_box_border(20, 72, 76, 68, 0x00101828, 0x00FFFF00, 2)
b.draw_string(30, 78, '[1] ОРЁЛ', 0x00FFFF00)
b.draw_coin_ellipse(58, 106, 14, 14, 0x00D0A000, 0x00FFD700, 1)
b.draw_string(24, 126, 'ВЫБРАНО', 0x003CFF3C)
# Coin at rest (Heads) # Right: Tails
b.draw_coin_ellipse(160, 110, 26, 26, 0x0000A0D0, 0x0000D7FF, relief=1) b.draw_box(224, 72, 76, 68, 0x000A101C)
b.draw_box_border(224, 72, 76, 68, 0x00101828, 0x00404855, 1)
b.draw_string(234, 78, '[2] РЕШКА', 0x00D0D8E0)
b.draw_coin_ellipse(262, 106, 14, 14, 0x00A08000, 0x00D0B000, 2)
# Left: [1] ОРЕЛ (Active) # Center coin spotlight
b.draw_box_border(20, 72, 76, 52, 0x001C3822, 0x0000FFFF, 2) b.draw_circle(160, 110, 48, 0x00121620)
b.draw_string(28, 78, '[1] ОРЁЛ', 0x0000FFFF) b.draw_circle(160, 110, 44, 0x00FFD700)
b.draw_coin_ellipse(58, 106, 12, 12, 0x0000A0D0, 0x0000D7FF, relief=1) b.draw_circle(160, 110, 42, 0x000E141E)
b.draw_coin_ellipse(160, 110, 26, 26, 0x00D0A000, 0x00FFD700, 1)
# Right: [2] РЕШКА # Result Banner
b.draw_box_border(224, 72, 76, 52, 0x00121620, 0x00404855, 1) b.draw_box_border(44, 154, 232, 22, 0x000E141E, 0x003CFF3C, 1)
b.draw_string(232, 78, '[2] РЕШКА', 0x0090A0B0) b.draw_string(60, 161, 'ПОБЕДА: +$500! СЕРИЯ x3', 0x003CFF3C)
b.draw_coin_ellipse(262, 106, 12, 12, 0x000080A0, 0x0000B0D0, relief=2)
# Streak # Bottom Keycaps
b.draw_box_border(44, 154, 232, 20, 0x000E141E, 0x0000D7FF, 1) kx = 16
b.draw_string(52, 160, 'СЕРИЯ: [X] [X] [X] [ ] [ ] x4!', 0x0000FFFF) kx += b.draw_keycap(kx, 192, '[1] ОРЁЛ', is_active=True)
kx += b.draw_keycap(kx, 192, '[2] РЕШКА', is_active=False)
kx += b.draw_keycap(kx, 192, '[SPACE]', is_active=True)
b.draw_keycap(kx, 192, '[ESC]', is_active=False)
# Keycaps
b.draw_box(16, 194, 288, 1, 0x001E2E40)
b.draw_keycap(22, 202, '1:ОРЁЛ', is_active=True)
b.draw_keycap(88, 202, '2:РЕШКА')
b.draw_keycap(160, 202, 'ПРОБЕЛ:БРОСОК', is_active=True)
b.draw_keycap(274, 202, 'ESC')
b.save(filename) b.save(filename)
# ============================================================================== # ==============================================================================
# 2. RENDER DICE GAME # 2. RENDER DICE GAME (Кости)
# ============================================================================== # ==============================================================================
def render_dice(filename='dice_preview.png'): def render_dice(filename='dice_preview.png'):
b = RasterBuffer() b = RasterBuffer()
# Emerald felt b.draw_box(0, 0, 320, 240, 0x00140906) # Mahogany frame
b.draw_box(0, 0, 320, 240, 0x00082E12) b.draw_box_border(6, 6, 308, 228, 0x000A3816, 0x00FFD700, 2) # Deep Green Felt
# Oak wood border & leather bumper
b.draw_box_border(4, 4, 312, 232, 0x00093816, 0x00122244, 3)
b.draw_box_border(8, 8, 304, 224, 0x000A3F19, 0x0005140A, 2)
# Pyramidal backboard rubber diamond texture along top
for bx in range(12, 308, 12):
b.draw_box(bx + 4, 11, 4, 4, 0x00041006)
b.draw_pixel(bx + 5, 12, 0x000F4820)
# Header # Header
b.draw_string(48, 20, '==== G R A N D C R A P S T A B L E ====', 0x0000D7FF) b.draw_box_border(20, 12, 280, 26, 0x00072E13, 0x00FFD700, 2)
b.draw_string(72, 32, '[ PASS LINE ] [ ANY CRAPS ]', 0x0000B0A0) b.draw_string(48, 21, '=== G R A N D C R A P S ===', 0x00FFFF00)
# Status # Status
b.draw_box_border(16, 46, 100, 16, 0x0006240E, 0x000E5022, 1) b.draw_box_border(20, 44, 110, 18, 0x00072E13, 0x001B4B22, 1)
b.draw_string(20, 50, 'БАНК: $12500', 0x0050FF50) b.draw_string(24, 49, 'БАНК: $12500', 0x003CFF3C)
b.draw_box_border(204, 46, 100, 16, 0x0006240E, 0x000E5022, 1) b.draw_box_border(190, 44, 110, 18, 0x00072E13, 0x001B4B22, 1)
b.draw_string(208, 50, 'СТАВКА: $50 [W/S]', 0x0000D7FF) b.draw_string(194, 49, 'СТАВКА: $100', 0x00FFD700)
# Betting Zones # Betting Pass Lines
# Left: [1] ЧЕТ (Active with chip stack!) # [1] ЧЁТ
b.draw_box_border(16, 68, 88, 54, 0x000B441D, 0x0000FFFF, 2) b.draw_box_border(16, 70, 88, 48, 0x00072E13, 0x00FFFF00, 2)
b.draw_string(24, 74, '[1] ЧЁТ', 0x0000FFFF) b.draw_string(30, 76, '[1] ЧЁТ', 0x00FFFF00)
b.draw_string(20, 86, '2 4 6 8 10 12', 0x0000D7FF) b.draw_string(22, 90, ' 2 4 6 8 10 ', 0x00FFD700)
b.draw_chip_stack(48, 110, count=4) b.draw_string(26, 104, 'ВЫБРАНО', 0x003CFF3C)
# Right: [2] НЕЧЕТ # [2] НЕЧЕТ
b.draw_box_border(216, 68, 88, 54, 0x00073014, 0x001A602A, 1) b.draw_box_border(216, 70, 88, 48, 0x00072E13, 0x001B4B22, 1)
b.draw_string(224, 74, '[2] НЕЧЕТ', 0x0080B090) b.draw_string(226, 76, '[2] НЕЧЕТ', 0x00D0D8E0)
b.draw_string(222, 86, '3 5 7 9 11', 0x00508060) b.draw_string(224, 90, ' 3 5 7 9 11 ', 0x0080B090)
# Center Dice Field # Center Craps Table: 2 Dice
b.draw_box_border(112, 68, 96, 54, 0x00072E13, 0x00145826, 1) b.draw_craps_die(116, 80, 36, 4)
# Draw Two Precision Dice b.draw_craps_die(168, 76, 36, 6)
b.draw_craps_die(120, 76, 36, 4)
b.draw_craps_die(164, 76, 36, 6)
# Score Plaque # Sum & Result
b.draw_box_border(36, 130, 248, 30, 0x00051D0C, 0x0000D7FF, 1) b.draw_box_border(36, 132, 248, 36, 0x00072E13, 0x00FFD700, 1)
b.draw_string(44, 135, 'СУММА: 4 + 6 = 10 (ЧЁТ)', 0x0000FFFF) b.draw_string(48, 138, 'СУММА: 4 + 6 = 10 (ЧЁТ)', 0x00FFFF00)
b.draw_string(68, 147, 'ВЫИГРЫШ: +$100! (x2)', 0x0050FF50) b.draw_string(68, 152, 'ВЫИГРЫШ: +$200! (x2)', 0x003CFF3C)
# Keycaps # Keycaps
b.draw_box(16, 188, 288, 1, 0x00104820) kx = 16
b.draw_keycap(20, 198, '1:ЧЁТ', is_active=True) kx += b.draw_keycap(kx, 192, '[1] ЧЁТ', is_active=True)
b.draw_keycap(82, 198, '2:НЕЧЕТ') kx += b.draw_keycap(kx, 192, '[2] НЕЧЕТ', is_active=False)
b.draw_keycap(160, 198, 'ПРОБЕЛ:БРОСОК', is_active=True) kx += b.draw_keycap(kx, 192, '[SPACE]', is_active=True)
b.draw_keycap(274, 198, 'ESC') b.draw_keycap(kx, 192, '[ESC]', is_active=False)
b.save(filename) b.save(filename)
# ============================================================================== # ==============================================================================
# 3. RENDER SKULLS GAME # 3. RENDER SKULLS GAME (Напёрстки)
# ============================================================================== # ==============================================================================
def render_skulls(filename='skulls_preview.png'): def render_skulls(filename='skulls_preview.png'):
b = RasterBuffer() b = RasterBuffer()
# Dark gothic table with purple velvet b.draw_box(0, 0, 320, 240, 0x00140906)
b.draw_box(0, 0, 320, 240, 0x000D0612) b.draw_box_border(6, 6, 308, 228, 0x00300F22, 0x00FFD700, 2) # Gothic Purple
b.draw_box_border(4, 4, 312, 232, 0x00160B20, 0x00321845, 3)
b.draw_box_border(8, 8, 304, 224, 0x00220F30, 0x0000D7FF, 1)
# Header # Header
b.draw_box_border(24, 12, 272, 24, 0x0012081A, 0x0000D7FF, 2) b.draw_box_border(20, 12, 280, 26, 0x001A0812, 0x00FFD700, 2)
b.draw_string(48, 20, '+ + + Н А П Ё Р С Т К И С К В Е Р Н Ы + + +', 0x0000FFFF) b.draw_string(44, 21, '* * * Н А П Ё Р С Т К И * * *', 0x00FFFF00)
# Status # Status
b.draw_box_border(20, 42, 110, 16, 0x000D0616, 0x00401858, 1) b.draw_box_border(20, 44, 110, 18, 0x001A0812, 0x00452033, 1)
b.draw_string(24, 46, 'БАНК: $12500', 0x0050FF50) b.draw_string(24, 49, 'БАНК: $12500', 0x003CFF3C)
b.draw_box_border(190, 42, 110, 16, 0x000D0616, 0x00401858, 1) b.draw_box_border(190, 44, 110, 18, 0x001A0812, 0x00452033, 1)
b.draw_string(194, 46, 'СТАВКА: $50 [W/S]', 0x0000D7FF) b.draw_string(194, 49, 'СТАВКА: $300', 0x00FFD700)
# Table Runner # Subtitle
b.draw_box_border(16, 66, 288, 114, 0x001A0B25, 0x00452060, 1) b.draw_string(40, 62, 'ВЫИГРЫШ: +$900! (x3) ВЫ УГАДАЛИ!', 0x003CFF3C)
# Narrative banner # 3 Cups: Cup 2 lifted revealing gold ball
b.draw_string(40, 74, 'СЛЕДИ ЗА ЗОЛОТЫМ ОКОМ СУДЬБЫ...', 0x0000FFFF) b.draw_gothic_cup(36, 114, 1, is_lifted=False, has_ball=False)
b.draw_gothic_cup(136, 114, 2, is_lifted=True, has_ball=True)
b.draw_gothic_cup(236, 114, 3, is_lifted=False, has_ball=False)
# Draw 3 Gothic Cups (Cup 2 is lifted revealing glowing orb!) # Selection indicators
b.draw_gothic_cup(48, 100, 1, is_lifted=False) b.draw_string(54, 168, '[ 1 ]', 0x00D0D8E0)
b.draw_gothic_cup(136, 100, 2, is_lifted=True, has_ball=True) b.draw_string(150, 168, '[ 2 ]', 0x00FFFF00)
b.draw_gothic_cup(224, 100, 3, is_lifted=False) b.draw_string(250, 168, '[ 3 ]', 0x00D0D8E0)
# Keycaps # Keycaps
b.draw_box(16, 190, 288, 1, 0x003A1850) kx = 16
b.draw_keycap(18, 200, '1:КУБОК') kx += b.draw_keycap(kx, 192, '[1]', is_active=False)
b.draw_keycap(82, 200, '2:КУБОК', is_active=True) kx += b.draw_keycap(kx, 192, '[2]', is_active=True)
b.draw_keycap(146, 200, '3:КУБОК') kx += b.draw_keycap(kx, 192, '[3]', is_active=False)
b.draw_keycap(212, 200, 'ПРОБЕЛ', is_active=True) kx += b.draw_keycap(kx, 192, '[SPACE] СТАРТ', is_active=True)
b.draw_keycap(274, 200, 'ESC') b.draw_keycap(kx, 192, '[ESC]', is_active=False)
b.save(filename)
# ==============================================================================
# 4. RENDER SKILL CHECK GAME (Dead by Daylight Survivor Check)
# ==============================================================================
def render_skill(filename='skill_preview.png'):
b = RasterBuffer()
# Industrial survivor steel bezel
b.draw_box(0, 0, 320, 240, 0x00121416)
b.draw_box_border(6, 6, 308, 228, 0x001A1D20, 0x00FFD700, 2)
# Header
b.draw_box_border(20, 12, 280, 26, 0x00121418, 0x00FFD700, 2)
b.draw_string(44, 21, '* * * Н А П Ё Р С Т К И * * *', 0x00FFFF00)
# Status
b.draw_box_border(20, 44, 110, 18, 0x00121418, 0x002A3540, 1)
b.draw_string(24, 49, 'БАНК: $12500', 0x003CFF3C)
b.draw_box_border(190, 44, 110, 18, 0x00121418, 0x002A3540, 1)
b.draw_string(194, 49, 'СТАВКА: $200', 0x00FFD700)
# Survivor progress
b.draw_string(24, 70, 'ХИТ: 3 / 5', 0x003CFF3C)
b.draw_string(180, 70, 'ПРОМАХ: 1 / 3', 0x00FF6464)
# Tension Dial / Track: X=50 to 270, Y=100 to 134
track_x = 50
track_y = 102
track_w = 220
track_h = 32
# Outer frame
b.draw_box_border(track_x, track_y, track_w, track_h, 0x000F1114, 0x00404855, 2)
# Calibrated ticks
for tx in range(track_x + 10, track_x + track_w - 10, 12):
b.draw_box(tx, track_y + 2, 1, 6, 0x00303845)
b.draw_box(tx, track_y + track_h - 8, 1, 6, 0x00303845)
# Normal Success Zone (Green): X=150 to 198 (48px)
b.draw_box_border(150, track_y + 4, 48, track_h - 8, 0x00155020, 0x003CFF3C, 1)
# Great / Perfect Sweet Spot (Gold): X=186 to 198 (12px)
b.draw_box_border(186, track_y + 4, 12, track_h - 8, 0x00FFD700, 0x00FFFF00, 1)
b.draw_string(156, track_y + 10, 'HIT!', 0x003CFF3C)
# Needle at X=190 (Inside Great Zone!)
needle_x = 190
b.draw_box(needle_x - 1, track_y - 4, 3, track_h + 8, 0x00FFFFFF)
b.draw_box(needle_x - 2, track_y - 6, 5, 2, 0x00FF3030)
b.draw_box(needle_x - 2, track_y + track_h + 4, 5, 2, 0x00FF3030)
# Prompt text
b.draw_string(52, 150, 'ОТЛИЧНО! GREAT SKILL CHECK!', 0x00FFFF00)
b.draw_string(76, 166, 'НАЖМИТЕ [ПРОБЕЛ] В ЗОНЕ', 0x00D0D8E0)
# Bottom Keycaps
kx = 16
kx += b.draw_keycap(kx, 192, '[SPACE] РЕАКЦИЯ', is_active=True)
kx += b.draw_keycap(kx, 192, '[ВВЕРХ/ВНИЗ]', is_active=False)
b.draw_keycap(kx, 192, '[ESC]', is_active=False)
b.save(filename) b.save(filename)
if __name__ == '__main__': if __name__ == '__main__':
render_coin() render_coin()
render_dice() render_dice()
render_skulls() render_skulls()
print("All 3 minigames previews rendered successfully!") render_skill()
print("[ALL DONE] All 4 previews successfully generated!")