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
ALIGN 4
font8x8 label byte
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x00
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x01
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x02
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x03
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x04
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x05
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x06
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x07
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x08
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x09
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x0A
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x0B
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x0C
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x0D
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x0E
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x0F
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x10
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x11
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x12
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x13
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x14
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x15
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x16
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x17
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x18
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x19
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1A
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1B
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1C
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1D
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1E
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x1F
db 038h, 044h, 06Ch, 044h, 054h, 044h, 038h, 000h ; char 0x01
db 038h, 07Ch, 054h, 07Ch, 044h, 07Ch, 038h, 000h ; char 0x02
db 000h, 028h, 07Ch, 07Ch, 07Ch, 038h, 010h, 000h ; char 0x03
db 000h, 010h, 038h, 07Ch, 07Ch, 038h, 010h, 000h ; char 0x04
db 010h, 038h, 038h, 010h, 07Ch, 07Ch, 010h, 000h ; char 0x05
db 000h, 010h, 038h, 07Ch, 07Ch, 010h, 038h, 000h ; char 0x06
db 000h, 000h, 000h, 030h, 030h, 000h, 000h, 000h ; char 0x07
db 0FCh, 0FCh, 0FCh, 0CCh, 0CCh, 0FCh, 0FCh, 0FCh ; char 0x08
db 000h, 000h, 078h, 048h, 048h, 078h, 000h, 000h ; char 0x09
db 0FCh, 0FCh, 084h, 0B4h, 0B4h, 084h, 0FCh, 0FCh ; char 0x0A
db 000h, 01Ch, 00Ch, 034h, 048h, 048h, 030h, 000h ; char 0x0B
db 038h, 044h, 044h, 038h, 010h, 038h, 010h, 000h ; char 0x0C
db 010h, 018h, 014h, 010h, 030h, 070h, 060h, 000h ; char 0x0D
db 00Ch, 034h, 02Ch, 034h, 02Ch, 06Ch, 060h, 000h ; char 0x0E
db 000h, 054h, 038h, 06Ch, 038h, 054h, 000h, 000h ; char 0x0F
db 020h, 030h, 038h, 03Ch, 038h, 030h, 020h, 000h ; char 0x10
db 008h, 018h, 038h, 078h, 038h, 018h, 008h, 000h ; char 0x11
db 010h, 038h, 07Ch, 010h, 07Ch, 038h, 010h, 000h ; char 0x12
db 028h, 028h, 028h, 028h, 028h, 000h, 028h, 000h ; char 0x13
db 03Ch, 054h, 054h, 034h, 014h, 014h, 014h, 000h ; char 0x14
db 038h, 044h, 030h, 028h, 018h, 044h, 038h, 000h ; char 0x15
db 000h, 000h, 000h, 000h, 000h, 078h, 078h, 000h ; char 0x16
db 010h, 038h, 07Ch, 010h, 07Ch, 038h, 010h, 038h ; char 0x17
db 010h, 038h, 07Ch, 010h, 010h, 010h, 010h, 000h ; char 0x18
db 010h, 010h, 010h, 010h, 07Ch, 038h, 010h, 000h ; char 0x19
db 000h, 010h, 018h, 07Ch, 018h, 010h, 000h, 000h ; char 0x1A
db 000h, 010h, 030h, 07Ch, 030h, 010h, 000h, 000h ; char 0x1B
db 000h, 000h, 000h, 040h, 040h, 040h, 07Ch, 000h ; char 0x1C
db 000h, 028h, 028h, 07Ch, 028h, 028h, 000h, 000h ; char 0x1D
db 010h, 010h, 038h, 038h, 07Ch, 07Ch, 000h, 000h ; char 0x1E
db 07Ch, 07Ch, 038h, 038h, 010h, 010h, 000h, 000h ; char 0x1F
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x20
db 020h, 020h, 020h, 020h, 000h, 020h, 000h, 000h ; char 0x21
db 050h, 050h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x22
db 030h, 0F8h, 030h, 0F8h, 060h, 060h, 000h, 000h ; char 0x23
db 038h, 050h, 070h, 018h, 028h, 078h, 020h, 000h ; char 0x24
db 0E8h, 0B0h, 0E0h, 038h, 068h, 0B8h, 000h, 000h ; char 0x25
db 0E0h, 0A0h, 0C0h, 0D0h, 0A0h, 0F0h, 000h, 000h ; char 0x26
db 020h, 020h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x27
db 020h, 040h, 040h, 040h, 040h, 040h, 020h, 010h ; char 0x28
db 020h, 010h, 010h, 010h, 010h, 010h, 020h, 040h ; char 0x29
db 020h, 070h, 070h, 020h, 000h, 000h, 000h, 000h ; char 0x2A
db 000h, 020h, 020h, 0F8h, 020h, 020h, 000h, 000h ; char 0x2B
db 000h, 000h, 000h, 000h, 000h, 020h, 020h, 040h ; char 0x2C
db 000h, 000h, 000h, 070h, 000h, 000h, 000h, 000h ; char 0x2D
db 000h, 000h, 000h, 000h, 000h, 020h, 000h, 000h ; char 0x2E
db 008h, 010h, 010h, 020h, 020h, 020h, 040h, 000h ; char 0x2F
db 060h, 090h, 0B0h, 0D0h, 090h, 060h, 000h, 000h ; char 0x30
db 020h, 060h, 020h, 020h, 020h, 070h, 000h, 000h ; char 0x31
db 038h, 048h, 008h, 010h, 020h, 078h, 000h, 000h ; char 0x32
db 078h, 008h, 030h, 008h, 008h, 070h, 000h, 000h ; char 0x33
db 030h, 030h, 050h, 090h, 0F8h, 010h, 000h, 000h ; char 0x34
db 078h, 040h, 070h, 008h, 008h, 070h, 000h, 000h ; char 0x35
db 038h, 060h, 078h, 048h, 048h, 030h, 000h, 000h ; char 0x36
db 078h, 008h, 010h, 010h, 020h, 020h, 000h, 000h ; char 0x37
db 078h, 048h, 030h, 048h, 048h, 070h, 000h, 000h ; char 0x38
db 060h, 090h, 090h, 0F0h, 010h, 0E0h, 000h, 000h ; char 0x39
db 000h, 000h, 020h, 000h, 000h, 020h, 000h, 000h ; char 0x3A
db 000h, 000h, 020h, 000h, 000h, 020h, 020h, 040h ; char 0x3B
db 000h, 010h, 020h, 040h, 020h, 010h, 000h, 000h ; char 0x3C
db 000h, 000h, 078h, 000h, 078h, 000h, 000h, 000h ; char 0x3D
db 000h, 040h, 020h, 010h, 020h, 040h, 000h, 000h ; char 0x3E
db 060h, 010h, 010h, 070h, 000h, 040h, 000h, 000h ; char 0x3F
db 030h, 048h, 0B8h, 0B8h, 0B8h, 0A8h, 080h, 070h ; char 0x40
db 020h, 050h, 050h, 050h, 070h, 050h, 000h, 000h ; char 0x41
db 078h, 048h, 070h, 048h, 048h, 070h, 000h, 000h ; char 0x42
db 070h, 080h, 080h, 080h, 080h, 070h, 000h, 000h ; char 0x43
db 0E0h, 090h, 090h, 090h, 090h, 0E0h, 000h, 000h ; char 0x44
db 070h, 040h, 070h, 040h, 040h, 070h, 000h, 000h ; char 0x45
db 070h, 040h, 070h, 040h, 040h, 040h, 000h, 000h ; char 0x46
db 070h, 080h, 0B0h, 090h, 090h, 070h, 000h, 000h ; char 0x47
db 090h, 090h, 0F0h, 090h, 090h, 090h, 000h, 000h ; char 0x48
db 070h, 020h, 020h, 020h, 020h, 070h, 000h, 000h ; char 0x49
db 070h, 010h, 010h, 010h, 010h, 070h, 000h, 000h ; char 0x4A
db 048h, 050h, 060h, 060h, 050h, 048h, 000h, 000h ; char 0x4B
db 040h, 040h, 040h, 040h, 040h, 070h, 000h, 000h ; char 0x4C
db 010h, 0B0h, 0B0h, 050h, 010h, 010h, 000h, 000h ; char 0x4D
db 050h, 050h, 070h, 070h, 050h, 050h, 000h, 000h ; char 0x4E
db 070h, 088h, 088h, 088h, 088h, 070h, 000h, 000h ; char 0x4F
db 070h, 048h, 048h, 070h, 040h, 040h, 000h, 000h ; char 0x50
db 070h, 088h, 088h, 088h, 088h, 070h, 020h, 018h ; char 0x51
db 070h, 048h, 048h, 070h, 048h, 048h, 000h, 000h ; char 0x52
db 038h, 040h, 060h, 018h, 008h, 070h, 000h, 000h ; char 0x53
db 0F8h, 020h, 020h, 020h, 020h, 020h, 000h, 000h ; char 0x54
db 090h, 090h, 090h, 090h, 090h, 060h, 000h, 000h ; char 0x55
db 050h, 050h, 050h, 050h, 050h, 020h, 000h, 000h ; char 0x56
db 050h, 050h, 070h, 050h, 050h, 050h, 000h, 000h ; char 0x57
db 088h, 050h, 020h, 020h, 050h, 088h, 000h, 000h ; char 0x58
db 088h, 050h, 050h, 020h, 020h, 020h, 000h, 000h ; char 0x59
db 0F0h, 020h, 020h, 040h, 040h, 0F0h, 000h, 000h ; char 0x5A
db 060h, 040h, 040h, 040h, 040h, 040h, 040h, 060h ; char 0x5B
db 040h, 020h, 020h, 020h, 010h, 010h, 008h, 000h ; char 0x5C
db 030h, 010h, 010h, 010h, 010h, 010h, 010h, 030h ; char 0x5D
db 020h, 050h, 050h, 000h, 000h, 000h, 000h, 000h ; char 0x5E
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0F8h ; char 0x5F
db 020h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x60
db 000h, 000h, 078h, 008h, 078h, 078h, 000h, 000h ; char 0x61
db 040h, 040h, 078h, 048h, 048h, 070h, 000h, 000h ; char 0x62
db 000h, 000h, 030h, 040h, 040h, 070h, 000h, 000h ; char 0x63
db 010h, 010h, 070h, 090h, 090h, 0F0h, 000h, 000h ; char 0x64
db 000h, 000h, 038h, 078h, 040h, 038h, 000h, 000h ; char 0x65
db 038h, 020h, 0F0h, 020h, 020h, 020h, 000h, 000h ; char 0x66
db 000h, 000h, 0F0h, 090h, 0F0h, 080h, 0F0h, 0F0h ; char 0x67
db 040h, 040h, 078h, 048h, 048h, 048h, 000h, 000h ; char 0x68
db 010h, 000h, 070h, 010h, 010h, 078h, 000h, 000h ; char 0x69
db 010h, 000h, 070h, 010h, 010h, 010h, 010h, 070h ; char 0x6A
db 040h, 040h, 050h, 060h, 050h, 048h, 000h, 000h ; char 0x6B
db 070h, 010h, 010h, 010h, 010h, 078h, 000h, 000h ; char 0x6C
db 000h, 000h, 0F8h, 0A8h, 0A8h, 0A8h, 000h, 000h ; char 0x6D
db 000h, 000h, 078h, 048h, 048h, 048h, 000h, 000h ; char 0x6E
db 000h, 000h, 060h, 090h, 090h, 060h, 000h, 000h ; char 0x6F
db 000h, 000h, 078h, 048h, 048h, 070h, 040h, 040h ; char 0x70
db 000h, 000h, 070h, 090h, 090h, 0F0h, 010h, 010h ; char 0x71
db 000h, 000h, 078h, 048h, 040h, 040h, 000h, 000h ; char 0x72
db 000h, 000h, 078h, 060h, 018h, 078h, 000h, 000h ; char 0x73
db 000h, 040h, 0F0h, 040h, 040h, 070h, 000h, 000h ; char 0x74
db 000h, 000h, 048h, 048h, 048h, 078h, 000h, 000h ; char 0x75
db 000h, 000h, 050h, 050h, 050h, 020h, 000h, 000h ; char 0x76
db 000h, 000h, 088h, 0B0h, 070h, 050h, 000h, 000h ; char 0x77
db 000h, 000h, 088h, 070h, 050h, 088h, 000h, 000h ; char 0x78
db 000h, 000h, 050h, 050h, 050h, 020h, 020h, 0C0h ; char 0x79
db 000h, 000h, 070h, 020h, 020h, 070h, 000h, 000h ; char 0x7A
db 030h, 020h, 020h, 040h, 020h, 020h, 020h, 030h ; char 0x7B
db 020h, 020h, 020h, 020h, 020h, 020h, 020h, 020h ; char 0x7C
db 060h, 020h, 020h, 010h, 020h, 020h, 020h, 060h ; char 0x7D
db 000h, 000h, 000h, 0D0h, 070h, 000h, 000h, 000h ; char 0x7E
db 0F8h, 088h, 0A8h, 0A8h, 088h, 0F8h, 000h, 000h ; char 0x7F
db 0E0h, 040h, 070h, 048h, 048h, 050h, 000h, 000h ; char 0x80
db 070h, 040h, 040h, 040h, 040h, 040h, 000h, 000h ; char 0x81
db 000h, 000h, 000h, 000h, 000h, 020h, 020h, 040h ; char 0x82
db 020h, 000h, 070h, 040h, 040h, 040h, 000h, 000h ; char 0x83
db 000h, 000h, 000h, 000h, 000h, 050h, 0F0h, 000h ; char 0x84
db 000h, 000h, 000h, 000h, 000h, 0A8h, 000h, 000h ; char 0x85
db 020h, 070h, 020h, 020h, 020h, 000h, 000h, 000h ; char 0x86
db 020h, 070h, 020h, 020h, 070h, 020h, 000h, 000h ; char 0x87
db 030h, 040h, 0E0h, 040h, 0E0h, 070h, 000h, 000h ; char 0x88
db 0E0h, 0E0h, 038h, 0C0h, 0FCh, 0FCh, 000h, 000h ; char 0x89
db 0E0h, 0A0h, 0B8h, 0A8h, 0A8h, 0B8h, 000h, 000h ; char 0x8A
db 000h, 000h, 020h, 040h, 040h, 020h, 000h, 000h ; char 0x8B
db 0A0h, 0A0h, 0F8h, 0A8h, 0A8h, 0B8h, 000h, 000h ; char 0x8C
db 048h, 050h, 060h, 060h, 050h, 048h, 000h, 000h ; char 0x8D
db 0E0h, 040h, 078h, 048h, 048h, 048h, 000h, 000h ; char 0x8E
db 088h, 088h, 088h, 088h, 088h, 0F8h, 020h, 000h ; char 0x8F
db 040h, 0E0h, 040h, 078h, 048h, 048h, 008h, 010h ; char 0x90
db 010h, 020h, 020h, 000h, 000h, 000h, 000h, 000h ; char 0x91
db 020h, 020h, 040h, 000h, 000h, 000h, 000h, 000h ; char 0x92
db 050h, 0A0h, 0A0h, 000h, 000h, 000h, 000h, 000h ; char 0x93
db 050h, 050h, 0A0h, 000h, 000h, 000h, 000h, 000h ; char 0x94
db 000h, 000h, 070h, 070h, 070h, 000h, 000h, 000h ; char 0x95
db 000h, 000h, 000h, 078h, 000h, 000h, 000h, 000h ; char 0x96
db 000h, 000h, 000h, 0F8h, 000h, 000h, 000h, 000h ; char 0x97
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x98
db 0E8h, 0B8h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x99
db 000h, 000h, 060h, 078h, 068h, 0B8h, 000h, 000h ; char 0x9A
db 000h, 000h, 020h, 010h, 010h, 020h, 000h, 000h ; char 0x9B
db 000h, 000h, 0A0h, 0F8h, 0A8h, 0B8h, 000h, 000h ; char 0x9C
db 020h, 000h, 058h, 070h, 050h, 048h, 000h, 000h ; char 0x9D
db 0F0h, 040h, 078h, 048h, 048h, 048h, 000h, 000h ; char 0x9E
db 000h, 000h, 050h, 050h, 050h, 070h, 020h, 000h ; char 0x9F
db 010h, 038h, 038h, 010h, 010h, 000h, 010h, 000h ; char 0x21
db 06Ch, 06Ch, 048h, 000h, 000h, 000h, 000h, 000h ; char 0x22
db 000h, 028h, 07Ch, 028h, 028h, 07Ch, 028h, 000h ; char 0x23
db 020h, 038h, 040h, 030h, 008h, 070h, 010h, 000h ; char 0x24
db 064h, 064h, 008h, 010h, 020h, 04Ch, 04Ch, 000h ; char 0x25
db 020h, 050h, 050h, 020h, 054h, 048h, 034h, 000h ; char 0x26
db 030h, 030h, 020h, 000h, 000h, 000h, 000h, 000h ; char 0x27
db 010h, 020h, 020h, 020h, 020h, 020h, 010h, 000h ; char 0x28
db 020h, 010h, 010h, 010h, 010h, 010h, 020h, 000h ; char 0x29
db 000h, 028h, 038h, 07Ch, 038h, 028h, 000h, 000h ; char 0x2A
db 000h, 010h, 010h, 07Ch, 010h, 010h, 000h, 000h ; char 0x2B
db 000h, 000h, 000h, 000h, 000h, 030h, 030h, 020h ; char 0x2C
db 000h, 000h, 000h, 07Ch, 000h, 000h, 000h, 000h ; char 0x2D
db 000h, 000h, 000h, 000h, 000h, 030h, 030h, 000h ; char 0x2E
db 000h, 004h, 008h, 010h, 020h, 040h, 000h, 000h ; char 0x2F
db 038h, 044h, 04Ch, 054h, 064h, 044h, 038h, 000h ; char 0x30
db 010h, 030h, 010h, 010h, 010h, 010h, 038h, 000h ; char 0x31
db 038h, 044h, 004h, 018h, 020h, 040h, 07Ch, 000h ; char 0x32
db 038h, 044h, 004h, 038h, 004h, 044h, 038h, 000h ; char 0x33
db 008h, 018h, 028h, 048h, 07Ch, 008h, 008h, 000h ; char 0x34
db 07Ch, 040h, 040h, 078h, 004h, 044h, 038h, 000h ; char 0x35
db 018h, 020h, 040h, 078h, 044h, 044h, 038h, 000h ; char 0x36
db 07Ch, 004h, 008h, 010h, 020h, 020h, 020h, 000h ; char 0x37
db 038h, 044h, 044h, 038h, 044h, 044h, 038h, 000h ; char 0x38
db 038h, 044h, 044h, 03Ch, 004h, 008h, 030h, 000h ; char 0x39
db 000h, 000h, 030h, 030h, 000h, 030h, 030h, 000h ; char 0x3A
db 000h, 000h, 030h, 030h, 000h, 030h, 030h, 020h ; char 0x3B
db 008h, 010h, 020h, 040h, 020h, 010h, 008h, 000h ; char 0x3C
db 000h, 000h, 07Ch, 000h, 000h, 07Ch, 000h, 000h ; char 0x3D
db 020h, 010h, 008h, 004h, 008h, 010h, 020h, 000h ; char 0x3E
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x3F
db 038h, 044h, 05Ch, 054h, 05Ch, 040h, 038h, 000h ; char 0x40
db 038h, 044h, 044h, 044h, 07Ch, 044h, 044h, 000h ; char 0x41
db 078h, 044h, 044h, 078h, 044h, 044h, 078h, 000h ; char 0x42
db 038h, 044h, 040h, 040h, 040h, 044h, 038h, 000h ; char 0x43
db 078h, 044h, 044h, 044h, 044h, 044h, 078h, 000h ; char 0x44
db 07Ch, 040h, 040h, 078h, 040h, 040h, 07Ch, 000h ; char 0x45
db 07Ch, 040h, 040h, 078h, 040h, 040h, 040h, 000h ; char 0x46
db 038h, 044h, 040h, 05Ch, 044h, 044h, 03Ch, 000h ; char 0x47
db 044h, 044h, 044h, 07Ch, 044h, 044h, 044h, 000h ; char 0x48
db 038h, 010h, 010h, 010h, 010h, 010h, 038h, 000h ; char 0x49
db 004h, 004h, 004h, 004h, 044h, 044h, 038h, 000h ; char 0x4A
db 044h, 048h, 050h, 060h, 050h, 048h, 044h, 000h ; char 0x4B
db 040h, 040h, 040h, 040h, 040h, 040h, 07Ch, 000h ; char 0x4C
db 044h, 06Ch, 054h, 044h, 044h, 044h, 044h, 000h ; char 0x4D
db 044h, 064h, 054h, 04Ch, 044h, 044h, 044h, 000h ; char 0x4E
db 038h, 044h, 044h, 044h, 044h, 044h, 038h, 000h ; char 0x4F
db 078h, 044h, 044h, 078h, 040h, 040h, 040h, 000h ; char 0x50
db 038h, 044h, 044h, 044h, 054h, 048h, 034h, 000h ; char 0x51
db 078h, 044h, 044h, 078h, 048h, 044h, 044h, 000h ; char 0x52
db 038h, 044h, 040h, 038h, 004h, 044h, 038h, 000h ; char 0x53
db 07Ch, 010h, 010h, 010h, 010h, 010h, 010h, 000h ; char 0x54
db 044h, 044h, 044h, 044h, 044h, 044h, 038h, 000h ; char 0x55
db 044h, 044h, 044h, 044h, 044h, 028h, 010h, 000h ; char 0x56
db 044h, 044h, 054h, 054h, 054h, 054h, 028h, 000h ; char 0x57
db 044h, 044h, 028h, 010h, 028h, 044h, 044h, 000h ; char 0x58
db 044h, 044h, 044h, 028h, 010h, 010h, 010h, 000h ; char 0x59
db 078h, 008h, 010h, 020h, 040h, 040h, 078h, 000h ; char 0x5A
db 038h, 020h, 020h, 020h, 020h, 020h, 038h, 000h ; char 0x5B
db 000h, 040h, 020h, 010h, 008h, 004h, 000h, 000h ; char 0x5C
db 038h, 008h, 008h, 008h, 008h, 008h, 038h, 000h ; char 0x5D
db 010h, 028h, 044h, 000h, 000h, 000h, 000h, 000h ; char 0x5E
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FCh ; char 0x5F
db 030h, 030h, 010h, 000h, 000h, 000h, 000h, 000h ; char 0x60
db 000h, 000h, 038h, 004h, 03Ch, 044h, 03Ch, 000h ; char 0x61
db 040h, 040h, 078h, 044h, 044h, 044h, 078h, 000h ; char 0x62
db 000h, 000h, 038h, 044h, 040h, 044h, 038h, 000h ; char 0x63
db 004h, 004h, 03Ch, 044h, 044h, 044h, 03Ch, 000h ; char 0x64
db 000h, 000h, 038h, 044h, 078h, 040h, 038h, 000h ; char 0x65
db 018h, 020h, 020h, 078h, 020h, 020h, 020h, 000h ; char 0x66
db 000h, 000h, 03Ch, 044h, 044h, 03Ch, 004h, 038h ; char 0x67
db 040h, 040h, 070h, 048h, 048h, 048h, 048h, 000h ; char 0x68
db 010h, 000h, 010h, 010h, 010h, 010h, 018h, 000h ; char 0x69
db 008h, 000h, 018h, 008h, 008h, 008h, 048h, 030h ; char 0x6A
db 040h, 040h, 048h, 050h, 060h, 050h, 048h, 000h ; char 0x6B
db 010h, 010h, 010h, 010h, 010h, 010h, 018h, 000h ; char 0x6C
db 000h, 000h, 068h, 054h, 054h, 044h, 044h, 000h ; char 0x6D
db 000h, 000h, 070h, 048h, 048h, 048h, 048h, 000h ; char 0x6E
db 000h, 000h, 038h, 044h, 044h, 044h, 038h, 000h ; char 0x6F
db 000h, 000h, 078h, 044h, 044h, 044h, 078h, 040h ; char 0x70
db 000h, 000h, 03Ch, 044h, 044h, 044h, 03Ch, 004h ; char 0x71
db 000h, 000h, 058h, 024h, 020h, 020h, 070h, 000h ; char 0x72
db 000h, 000h, 038h, 040h, 038h, 004h, 038h, 000h ; char 0x73
db 000h, 020h, 078h, 020h, 020h, 028h, 010h, 000h ; char 0x74
db 000h, 000h, 048h, 048h, 048h, 058h, 028h, 000h ; char 0x75
db 000h, 000h, 044h, 044h, 044h, 028h, 010h, 000h ; char 0x76
db 000h, 000h, 044h, 044h, 054h, 07Ch, 028h, 000h ; char 0x77
db 000h, 000h, 048h, 048h, 030h, 048h, 048h, 000h ; char 0x78
db 000h, 000h, 048h, 048h, 048h, 038h, 010h, 060h ; char 0x79
db 000h, 000h, 078h, 008h, 030h, 040h, 078h, 000h ; char 0x7A
db 018h, 020h, 020h, 060h, 020h, 020h, 018h, 000h ; char 0x7B
db 010h, 010h, 010h, 000h, 010h, 010h, 010h, 000h ; char 0x7C
db 030h, 008h, 008h, 00Ch, 008h, 008h, 030h, 000h ; char 0x7D
db 028h, 050h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0x7E
db 010h, 038h, 06Ch, 044h, 044h, 07Ch, 000h, 000h ; char 0x7F
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x80
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x81
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x82
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x83
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x84
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x85
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x86
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x87
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x88
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x89
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8A
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8B
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8C
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8D
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8E
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x8F
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x90
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x91
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x92
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x93
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x94
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x95
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x96
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x97
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x98
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x99
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9A
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9B
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9C
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9D
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9E
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0x9F
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h ; char 0xA0
db 050h, 050h, 050h, 020h, 020h, 040h, 000h, 000h ; char 0xA1
db 070h, 000h, 050h, 050h, 050h, 020h, 020h, 0C0h ; char 0xA2
db 070h, 010h, 010h, 010h, 010h, 070h, 000h, 000h ; char 0xA3
db 088h, 070h, 050h, 050h, 070h, 088h, 000h, 000h ; char 0xA4
db 070h, 040h, 040h, 040h, 040h, 040h, 000h, 000h ; char 0xA5
db 020h, 020h, 020h, 000h, 020h, 020h, 020h, 020h ; char 0xA6
db 070h, 040h, 070h, 048h, 038h, 008h, 078h, 000h ; char 0xA7
db 070h, 040h, 070h, 040h, 040h, 070h, 000h, 000h ; char 0xA8
db 070h, 088h, 0A8h, 0A8h, 088h, 070h, 000h, 000h ; char 0xA9
db 070h, 080h, 0F0h, 080h, 080h, 070h, 000h, 000h ; char 0xAA
db 000h, 048h, 090h, 090h, 048h, 000h, 000h, 000h ; char 0xAB
db 000h, 000h, 000h, 078h, 008h, 000h, 000h, 000h ; char 0xAC
db 000h, 000h, 000h, 070h, 000h, 000h, 000h, 000h ; char 0xAD
db 070h, 088h, 0A8h, 070h, 000h, 000h, 000h, 000h ; char 0xAE
db 070h, 020h, 020h, 020h, 020h, 070h, 000h, 000h ; char 0xAF
db 078h, 048h, 078h, 000h, 000h, 000h, 000h, 000h ; char 0xB0
db 000h, 020h, 0F8h, 020h, 000h, 0F8h, 000h, 000h ; char 0xB1
db 070h, 020h, 020h, 020h, 020h, 070h, 000h, 000h ; char 0xB2
db 010h, 000h, 070h, 010h, 010h, 078h, 000h, 000h ; char 0xB3
db 000h, 010h, 070h, 040h, 040h, 040h, 000h, 000h ; char 0xB4
db 000h, 000h, 048h, 048h, 048h, 07Ch, 040h, 040h ; char 0xB5
db 070h, 0D0h, 0D0h, 050h, 010h, 010h, 070h, 000h ; char 0xB6
db 054h, 054h, 044h, 03Ch, 004h, 044h, 038h, 000h ; char 0xA1
db 048h, 030h, 048h, 048h, 048h, 038h, 010h, 060h ; char 0xA2
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xA3
db 000h, 0CCh, 078h, 0CCh, 078h, 0CCh, 000h, 000h ; char 0xA4
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xA5
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xA6
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xA7
db 028h, 07Ch, 040h, 078h, 040h, 040h, 07Ch, 000h ; char 0xA8
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xA9
db 038h, 044h, 040h, 070h, 040h, 044h, 038h, 000h ; char 0xAA
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xAB
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xAC
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xAD
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xAE
db 044h, 010h, 010h, 010h, 010h, 010h, 038h, 000h ; char 0xAF
db 030h, 048h, 048h, 030h, 000h, 000h, 000h, 000h ; char 0xB0
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB1
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB2
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB3
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB4
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB5
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xB6
db 000h, 000h, 000h, 020h, 000h, 000h, 000h, 000h ; char 0xB7
db 050h, 000h, 038h, 078h, 040h, 038h, 000h, 000h ; char 0xB8
db 0D8h, 0D8h, 0C0h, 0D8h, 0C0h, 0C0h, 000h, 000h ; char 0xB9
db 000h, 000h, 038h, 078h, 040h, 038h, 000h, 000h ; char 0xBA
db 090h, 048h, 048h, 090h, 000h, 000h, 000h, 000h ; char 0xBB
db 010h, 000h, 070h, 010h, 010h, 010h, 010h, 070h ; char 0xBC
db 038h, 040h, 060h, 018h, 008h, 070h, 000h, 000h ; char 0xBD
db 000h, 000h, 078h, 060h, 018h, 078h, 000h, 000h ; char 0xBE
db 050h, 000h, 070h, 010h, 010h, 078h, 000h, 000h ; char 0xBF
db 020h, 050h, 050h, 050h, 070h, 050h, 000h, 000h ; char 0xC0
db 078h, 040h, 070h, 048h, 048h, 070h, 000h, 000h ; char 0xC1
db 078h, 048h, 070h, 048h, 048h, 070h, 000h, 000h ; char 0xC2
db 070h, 040h, 040h, 040h, 040h, 040h, 000h, 000h ; char 0xC3
db 070h, 050h, 050h, 050h, 050h, 0F8h, 088h, 000h ; char 0xC4
db 070h, 040h, 070h, 040h, 040h, 070h, 000h, 000h ; char 0xC5
db 0A8h, 070h, 070h, 070h, 0A8h, 0A8h, 000h, 000h ; char 0xC6
db 0F0h, 010h, 0E0h, 010h, 010h, 0E0h, 000h, 000h ; char 0xC7
db 048h, 058h, 058h, 068h, 068h, 048h, 000h, 000h ; char 0xC8
db 048h, 058h, 058h, 068h, 068h, 048h, 000h, 000h ; char 0xC9
db 048h, 050h, 060h, 060h, 050h, 048h, 000h, 000h ; char 0xCA
db 0E0h, 0A0h, 0A0h, 0A0h, 0A0h, 020h, 000h, 000h ; char 0xCB
db 010h, 0B0h, 0B0h, 050h, 010h, 010h, 000h, 000h ; char 0xCC
db 090h, 090h, 0F0h, 090h, 090h, 090h, 000h, 000h ; char 0xCD
db 070h, 088h, 088h, 088h, 088h, 070h, 000h, 000h ; char 0xCE
db 078h, 048h, 048h, 048h, 048h, 048h, 000h, 000h ; char 0xCF
db 070h, 048h, 048h, 070h, 040h, 040h, 000h, 000h ; char 0xD0
db 070h, 080h, 080h, 080h, 080h, 070h, 000h, 000h ; char 0xD1
db 0F8h, 020h, 020h, 020h, 020h, 020h, 000h, 000h ; char 0xD2
db 050h, 050h, 050h, 020h, 020h, 040h, 000h, 000h ; char 0xD3
db 020h, 070h, 0A8h, 0A8h, 070h, 020h, 000h, 000h ; char 0xD4
db 088h, 050h, 020h, 020h, 050h, 088h, 000h, 000h ; char 0xD5
db 050h, 050h, 050h, 050h, 050h, 078h, 008h, 000h ; char 0xD6
db 090h, 090h, 090h, 070h, 010h, 010h, 000h, 000h ; char 0xD7
db 0A8h, 0A8h, 0A8h, 0A8h, 0A8h, 0F8h, 000h, 000h ; char 0xD8
db 0A8h, 0A8h, 0A8h, 0A8h, 0A8h, 0F8h, 008h, 000h ; char 0xD9
db 0C0h, 040h, 070h, 048h, 048h, 070h, 000h, 000h ; char 0xDA
db 090h, 090h, 0F0h, 0B0h, 0B0h, 0D0h, 000h, 000h ; char 0xDB
db 040h, 040h, 070h, 048h, 048h, 070h, 000h, 000h ; char 0xDC
db 070h, 008h, 078h, 008h, 008h, 070h, 000h, 000h ; char 0xDD
db 0B8h, 0A8h, 0E8h, 0A8h, 0A8h, 0B8h, 000h, 000h ; char 0xDE
db 070h, 090h, 090h, 070h, 050h, 090h, 000h, 000h ; char 0xDF
db 000h, 000h, 078h, 008h, 078h, 078h, 000h, 000h ; char 0xE0
db 060h, 078h, 048h, 048h, 030h, 000h, 000h, 000h ; char 0xE1
db 000h, 000h, 078h, 070h, 048h, 078h, 000h, 000h ; char 0xE2
db 000h, 000h, 070h, 040h, 040h, 040h, 000h, 000h ; char 0xE3
db 000h, 000h, 070h, 050h, 050h, 0F8h, 088h, 000h ; char 0xE4
db 000h, 000h, 038h, 078h, 040h, 038h, 000h, 000h ; char 0xE5
db 000h, 000h, 0A8h, 070h, 070h, 0A8h, 000h, 000h ; char 0xE6
db 000h, 000h, 078h, 030h, 008h, 078h, 000h, 000h ; char 0xE7
db 000h, 000h, 048h, 058h, 068h, 048h, 000h, 000h ; char 0xE8
db 070h, 000h, 048h, 058h, 068h, 048h, 000h, 000h ; char 0xE9
db 000h, 000h, 058h, 070h, 050h, 048h, 000h, 000h ; char 0xEA
db 000h, 000h, 070h, 050h, 050h, 090h, 000h, 000h ; char 0xEB
db 000h, 000h, 050h, 070h, 0B0h, 088h, 000h, 000h ; char 0xEC
db 000h, 000h, 048h, 078h, 048h, 048h, 000h, 000h ; char 0xED
db 000h, 000h, 060h, 090h, 090h, 060h, 000h, 000h ; char 0xEE
db 000h, 000h, 078h, 048h, 048h, 048h, 000h, 000h ; char 0xEF
db 000h, 000h, 078h, 048h, 048h, 070h, 040h, 040h ; char 0xF0
db 000h, 000h, 030h, 040h, 040h, 070h, 000h, 000h ; char 0xF1
db 000h, 000h, 0F8h, 020h, 020h, 020h, 000h, 000h ; char 0xF2
db 000h, 000h, 050h, 050h, 050h, 020h, 020h, 0C0h ; char 0xF3
db 020h, 020h, 078h, 0A8h, 0A8h, 070h, 020h, 020h ; char 0xF4
db 000h, 000h, 088h, 070h, 050h, 088h, 000h, 000h ; char 0xF5
db 000h, 000h, 050h, 050h, 050h, 078h, 008h, 000h ; char 0xF6
db 000h, 000h, 048h, 078h, 008h, 008h, 000h, 000h ; char 0xF7
db 000h, 000h, 0A8h, 0A8h, 0A8h, 0F8h, 000h, 000h ; char 0xF8
db 000h, 000h, 0A8h, 0A8h, 0A8h, 0F8h, 008h, 000h ; char 0xF9
db 000h, 000h, 0C0h, 078h, 048h, 078h, 000h, 000h ; char 0xFA
db 000h, 000h, 090h, 0F0h, 0B0h, 0F0h, 000h, 000h ; char 0xFB
db 000h, 000h, 040h, 078h, 048h, 078h, 000h, 000h ; char 0xFC
db 000h, 000h, 070h, 078h, 008h, 070h, 000h, 000h ; char 0xFD
db 000h, 000h, 0B0h, 0F0h, 0B0h, 0B0h, 000h, 000h ; char 0xFE
db 000h, 000h, 0F0h, 090h, 070h, 090h, 000h, 000h ; char 0xFF
db 028h, 000h, 038h, 044h, 078h, 040h, 038h, 000h ; char 0xB8
db 09Ch, 0DCh, 0D0h, 0B0h, 0BCh, 090h, 090h, 000h ; char 0xB9
db 000h, 000h, 038h, 044h, 070h, 044h, 038h, 000h ; char 0xBA
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xBB
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xBC
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xBD
db 038h, 044h, 004h, 018h, 010h, 000h, 010h, 000h ; char 0xBE
db 028h, 000h, 010h, 010h, 010h, 010h, 018h, 000h ; char 0xBF
db 038h, 044h, 044h, 044h, 07Ch, 044h, 044h, 000h ; char 0xC0
db 07Ch, 040h, 040h, 078h, 044h, 044h, 078h, 000h ; char 0xC1
db 078h, 044h, 044h, 078h, 044h, 044h, 078h, 000h ; char 0xC2
db 07Ch, 040h, 040h, 040h, 040h, 040h, 040h, 000h ; char 0xC3
db 038h, 048h, 048h, 048h, 048h, 048h, 0FCh, 084h ; char 0xC4
db 07Ch, 040h, 040h, 078h, 040h, 040h, 07Ch, 000h ; char 0xC5
db 054h, 054h, 054h, 038h, 054h, 054h, 054h, 000h ; char 0xC6
db 070h, 088h, 008h, 070h, 008h, 088h, 070h, 000h ; char 0xC7
db 044h, 044h, 044h, 04Ch, 054h, 064h, 044h, 000h ; char 0xC8
db 038h, 044h, 044h, 04Ch, 054h, 064h, 044h, 000h ; char 0xC9
db 044h, 048h, 050h, 060h, 050h, 048h, 044h, 000h ; char 0xCA
db 01Ch, 024h, 024h, 024h, 024h, 024h, 064h, 000h ; char 0xCB
db 044h, 06Ch, 054h, 044h, 044h, 044h, 044h, 000h ; char 0xCC
db 044h, 044h, 044h, 07Ch, 044h, 044h, 044h, 000h ; char 0xCD
db 038h, 044h, 044h, 044h, 044h, 044h, 038h, 000h ; char 0xCE
db 07Ch, 044h, 044h, 044h, 044h, 044h, 044h, 000h ; char 0xCF
db 078h, 044h, 044h, 078h, 040h, 040h, 040h, 000h ; char 0xD0
db 038h, 044h, 040h, 040h, 040h, 044h, 038h, 000h ; char 0xD1
db 07Ch, 010h, 010h, 010h, 010h, 010h, 010h, 000h ; char 0xD2
db 044h, 044h, 044h, 03Ch, 004h, 044h, 038h, 000h ; char 0xD3
db 038h, 054h, 054h, 054h, 038h, 010h, 010h, 000h ; char 0xD4
db 044h, 044h, 028h, 010h, 028h, 044h, 044h, 000h ; char 0xD5
db 048h, 048h, 048h, 048h, 048h, 048h, 07Ch, 004h ; char 0xD6
db 044h, 044h, 044h, 03Ch, 004h, 004h, 004h, 000h ; char 0xD7
db 054h, 054h, 054h, 054h, 054h, 054h, 07Ch, 000h ; char 0xD8
db 054h, 054h, 054h, 054h, 054h, 054h, 07Ch, 004h ; char 0xD9
db 0E0h, 0A0h, 020h, 038h, 024h, 024h, 038h, 000h ; char 0xDA
db 044h, 044h, 044h, 074h, 04Ch, 04Ch, 074h, 000h ; char 0xDB
db 040h, 040h, 040h, 078h, 044h, 044h, 078h, 000h ; char 0xDC
db 038h, 044h, 004h, 01Ch, 004h, 044h, 038h, 000h ; char 0xDD
db 048h, 054h, 054h, 074h, 054h, 054h, 048h, 000h ; char 0xDE
db 03Ch, 044h, 044h, 03Ch, 024h, 044h, 044h, 000h ; char 0xDF
db 000h, 000h, 038h, 004h, 03Ch, 044h, 03Ch, 000h ; char 0xE0
db 004h, 038h, 040h, 078h, 044h, 044h, 038h, 000h ; char 0xE1
db 000h, 000h, 078h, 044h, 078h, 044h, 078h, 000h ; char 0xE2
db 000h, 000h, 078h, 048h, 040h, 040h, 040h, 000h ; char 0xE3
db 000h, 000h, 038h, 048h, 048h, 048h, 0FCh, 084h ; char 0xE4
db 000h, 000h, 038h, 044h, 078h, 040h, 038h, 000h ; char 0xE5
db 000h, 000h, 054h, 054h, 038h, 054h, 054h, 000h ; char 0xE6
db 000h, 000h, 038h, 044h, 018h, 044h, 038h, 000h ; char 0xE7
db 000h, 000h, 044h, 04Ch, 054h, 064h, 044h, 000h ; char 0xE8
db 000h, 018h, 044h, 04Ch, 054h, 064h, 044h, 000h ; char 0xE9
db 000h, 000h, 048h, 050h, 060h, 050h, 048h, 000h ; char 0xEA
db 000h, 000h, 038h, 048h, 048h, 048h, 088h, 000h ; char 0xEB
db 000h, 000h, 044h, 06Ch, 054h, 044h, 044h, 000h ; char 0xEC
db 000h, 000h, 044h, 044h, 07Ch, 044h, 044h, 000h ; char 0xED
db 000h, 000h, 038h, 044h, 044h, 044h, 038h, 000h ; char 0xEE
db 000h, 000h, 07Ch, 044h, 044h, 044h, 044h, 000h ; char 0xEF
db 000h, 000h, 078h, 044h, 044h, 044h, 078h, 040h ; char 0xF0
db 000h, 000h, 038h, 044h, 040h, 044h, 038h, 000h ; char 0xF1
db 000h, 000h, 07Ch, 010h, 010h, 010h, 010h, 000h ; char 0xF2
db 000h, 000h, 048h, 048h, 048h, 038h, 010h, 060h ; char 0xF3
db 000h, 000h, 038h, 054h, 054h, 038h, 010h, 000h ; char 0xF4
db 000h, 000h, 048h, 048h, 030h, 048h, 048h, 000h ; char 0xF5
db 000h, 000h, 048h, 048h, 048h, 048h, 07Ch, 004h ; char 0xF6
db 000h, 000h, 044h, 044h, 03Ch, 004h, 004h, 000h ; char 0xF7
db 000h, 000h, 054h, 054h, 054h, 054h, 07Ch, 000h ; char 0xF8
db 000h, 000h, 054h, 054h, 054h, 054h, 07Ch, 004h ; char 0xF9
db 000h, 000h, 0E0h, 0A0h, 038h, 024h, 038h, 000h ; char 0xFA
db 000h, 000h, 044h, 044h, 074h, 04Ch, 074h, 000h ; char 0xFB
db 000h, 000h, 040h, 040h, 078h, 044h, 078h, 000h ; char 0xFC
db 000h, 000h, 038h, 044h, 01Ch, 044h, 038h, 000h ; char 0xFD
db 000h, 000h, 048h, 054h, 074h, 054h, 048h, 000h ; char 0xFE
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 -*-
"""
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
from pathlib import Path
from PIL import Image
@ -26,10 +35,14 @@ class RasterBuffer:
self.pixels = [(0, 0, 0)] * (SCREEN_W * SCREEN_H)
def to_rgb(self, c):
# 0x00BBGGRR format
r = c & 0xFF
# 0x00RRGGBB format:
# 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
b = (c >> 16) & 0xFF
b = c & 0xFF
return (r, g, b)
def draw_box(self, x, y, w, h, color):
@ -65,7 +78,7 @@ class RasterBuffer:
if isinstance(ch, str):
try:
code = ch.encode('cp1251')[0]
except:
except Exception:
code = ord(ch) & 0xFF
else:
code = ch & 0xFF
@ -87,25 +100,23 @@ class RasterBuffer:
w = len(text) * 8 + 8
h = 13
if is_active:
border_c = 0x0000FFFF
fill_c = 0x001B4B22
txt_c = 0x0000FFFF
border_c = 0x00FFFF00 # Bright Yellow border
fill_c = 0x001B4B22 # Casino Green fill
txt_c = 0x00FFFF00 # Bright Yellow text
else:
border_c = 0x00606870
fill_c = 0x001A1C22
txt_c = 0x00D0D8E0
border_c = 0x00606870 # Slate border
fill_c = 0x001A1C22 # Charcoal fill
txt_c = 0x00D0D8E0 # Silver text
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_string(x + 4, y + 3, text, txt_c)
return w + 4
def draw_chip_stack(self, x, y, count=3):
# Draw stack of 3D casino clay chips
for i in range(count):
cy = y - i * 4
self.draw_box(x + 2, cy + 5, 20, 2, 0x00041006) # shadow
self.draw_box_border(x, cy, 24, 6, 0x001515B8, 0x00FFFFFF, 1)
# white stripe inlays
self.draw_box(x + 2, cy + 5, 20, 2, 0x00061004) # shadow
self.draw_box_border(x, cy, 24, 6, 0x00B81515, 0x00FFFFFF, 1) # Red chip
self.draw_box(x + 4, 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)
if rx >= 14 and relief == 1:
gold_dark = 0x00007A9A
# Imperial Eagle
gold_dark = 0x009A7A00 # Dark Gold relief
gold_bright = 0x00FFD700
# Double-headed imperial eagle relief
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 - 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 - 13, cy - 5, 10, 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 - 3, cy + 7, 7, 3, gold_dark)
elif rx >= 14 and relief == 2:
gold_dark = 0x00007A9A
# Roman numeral 'I'
gold_dark = 0x009A7A00
gold_bright = 0x00FFD700
# Roman numeral 'I' & laurel crown
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 - 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)
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 + 11, cy + w_dy, 2, 2, gold_dark)
def draw_craps_die(self, x, y, size, val):
self.draw_box(x + 3, y + size, size, 3, 0x00031408)
self.draw_box(x + size, y + 3, 3, size, 0x00031408)
body_color = 0x00F0F4FA
bevel_color = 0x00C0C6D0
border_color = 0x00353540
self.draw_box(x + 3, y + size, size, 3, 0x00081403)
self.draw_box(x + size, y + 3, 3, size, 0x00081403)
body_color = 0x00FAF4F0
bevel_color = 0x00D0C6C0
border_color = 0x00403535
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, 1, size - 2, 0x00FFFFFF)
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)
pip_c = 0x001515C8
pip_c = 0x00C81515 # Red ruby pips
pip_r = 3
if val in [1, 3, 5]:
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):
lift_y = y - 36 if is_lifted else y
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:
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:
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(x + 18, lift_y + 28, 12, 8, 0x00332545)
self.draw_box(x + 22, lift_y + 28, 4, 8, 0x0055406E)
self.draw_box_border(x + 8, lift_y + 8, 32, 20, 0x002D1E40, 0x0000D7FF, 1)
self.draw_box(x + 14, lift_y + 10, 6, 16, 0x00503570)
self.draw_box(x + 17, lift_y + 10, 3, 16, 0x007850A0)
self.draw_box_border(x + 4, lift_y + 2, 40, 7, 0x00150A20, 0x0000FFFF, 1)
self.draw_box(x + 12, lift_y + 4, 16, 2, 0x0000FFFF)
self.draw_box_border(x + 6, lift_y + 36, 36, 6, 0x00301A22, 0x00D0B000, 1)
self.draw_box(x + 18, lift_y + 28, 12, 8, 0x00452533)
self.draw_box(x + 22, lift_y + 28, 4, 8, 0x006E4055)
self.draw_box_border(x + 8, lift_y + 8, 32, 20, 0x00401E2D, 0x00FFD700, 1)
self.draw_box(x + 14, lift_y + 10, 6, 16, 0x00703550)
self.draw_box(x + 17, lift_y + 10, 3, 16, 0x00A05078)
self.draw_box_border(x + 4, lift_y + 2, 40, 7, 0x00200A15, 0x00FFFF00, 1)
self.draw_box(x + 12, lift_y + 4, 16, 2, 0x00FFFF00)
self.draw_box(x + 21, lift_y + 12, 6, 5, 0x0000D7FF)
self.draw_box(x + 22, lift_y + 17, 4, 3, 0x0000D7FF)
self.draw_pixel(x + 22, lift_y + 14, 0x00150A20)
self.draw_pixel(x + 24, lift_y + 14, 0x00150A20)
self.draw_string(x + 21, lift_y + 24, str(cup_id), 0x0000FFFF)
# Skull face relief on goblet
self.draw_box(x + 21, lift_y + 12, 6, 5, 0x00FFD700)
self.draw_box(x + 22, lift_y + 17, 4, 3, 0x00FFD700)
self.draw_pixel(x + 22, lift_y + 14, 0x00200A15)
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):
self.draw_circle(cx, cy, 14, 0x00081E2E)
self.draw_circle(cx, cy, 11, 0x00103A58)
self.draw_circle(cx, cy, 8, 0x001A588A)
self.draw_circle(cx, cy, 6, 0x0000B0E0)
self.draw_circle(cx, cy, 4, 0x0000E0FF)
self.draw_circle(cx - 1, cy - 1, 2, 0x00A0FFFF)
self.draw_circle(cx, cy, 14, 0x002E1E08)
self.draw_circle(cx, cy, 11, 0x00583A10)
self.draw_circle(cx, cy, 8, 0x008A581A)
self.draw_circle(cx, cy, 6, 0x00D0B000)
self.draw_circle(cx, cy, 4, 0x00FFE000)
self.draw_circle(cx - 1, cy - 1, 2, 0x00FFFF80)
self.draw_pixel(cx - 2, cy - 2, 0x00FFFFFF)
def save(self, filename):
@ -222,158 +236,216 @@ class RasterBuffer:
print(f"Saved {out_path}")
# ==============================================================================
# 1. RENDER COIN GAME
# 1. RENDER COIN GAME (Монетка)
# ==============================================================================
def render_coin(filename='coin_preview.png'):
b = RasterBuffer()
b.draw_box(0, 0, 320, 240, 0x00060914) # Mahogany cabinet
b.draw_box_border(6, 6, 308, 228, 0x000F1522, 0x001B2E48, 3)
b.draw_box(0, 0, 320, 240, 0x00140906) # Mahogany cabinet
b.draw_box_border(6, 6, 308, 228, 0x0022150F, 0x00482E1B, 3)
for cx in [12, 306]:
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_box_border(20, 12, 280, 26, 0x000A101C, 0x0000D7FF, 2)
b.draw_string(44, 21, '*** З О Л О Т А Я М О Н Е Т А ***', 0x0000FFFF)
b.draw_box_border(20, 12, 280, 26, 0x001C100A, 0x00FFD700, 2)
b.draw_string(44, 21, '* * * З О Л О Т А Я М О Н Е Т А * * *', 0x00FFFF00)
for bx in range(24, 296, 12):
b.draw_pixel(bx, 13, 0x0000FFFF)
b.draw_pixel(bx, 36, 0x0000D7FF)
b.draw_pixel(bx, 13, 0x00FFFF00)
b.draw_pixel(bx, 36, 0x00FFD700)
# Status meters
b.draw_box_border(20, 44, 110, 18, 0x000A1A0E, 0x001A4B22, 1)
b.draw_string(24, 49, 'БАНК: $12500', 0x0050FF50)
b.draw_box_border(20, 44, 110, 18, 0x000E1A0A, 0x00224B1A, 1)
b.draw_string(24, 49, 'БАНК: $12500', 0x003CFF3C)
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
b.draw_circle(160, 110, 46, 0x000090C0)
b.draw_circle(160, 110, 44, 0x0000D7FF)
b.draw_circle(160, 110, 41, 0x00180824)
# Side indicators
# Left: Heads (Selected)
b.draw_box(20, 72, 76, 68, 0x000A101C)
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)
b.draw_coin_ellipse(160, 110, 26, 26, 0x0000A0D0, 0x0000D7FF, relief=1)
# Right: Tails
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)
b.draw_box_border(20, 72, 76, 52, 0x001C3822, 0x0000FFFF, 2)
b.draw_string(28, 78, '[1] ОРЁЛ', 0x0000FFFF)
b.draw_coin_ellipse(58, 106, 12, 12, 0x0000A0D0, 0x0000D7FF, relief=1)
# Center coin spotlight
b.draw_circle(160, 110, 48, 0x00121620)
b.draw_circle(160, 110, 44, 0x00FFD700)
b.draw_circle(160, 110, 42, 0x000E141E)
b.draw_coin_ellipse(160, 110, 26, 26, 0x00D0A000, 0x00FFD700, 1)
# Right: [2] РЕШКА
b.draw_box_border(224, 72, 76, 52, 0x00121620, 0x00404855, 1)
b.draw_string(232, 78, '[2] РЕШКА', 0x0090A0B0)
b.draw_coin_ellipse(262, 106, 12, 12, 0x000080A0, 0x0000B0D0, relief=2)
# Result Banner
b.draw_box_border(44, 154, 232, 22, 0x000E141E, 0x003CFF3C, 1)
b.draw_string(60, 161, 'ПОБЕДА: +$500! СЕРИЯ x3', 0x003CFF3C)
# Streak
b.draw_box_border(44, 154, 232, 20, 0x000E141E, 0x0000D7FF, 1)
b.draw_string(52, 160, 'СЕРИЯ: [X] [X] [X] [ ] [ ] x4!', 0x0000FFFF)
# Bottom Keycaps
kx = 16
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)
# ==============================================================================
# 2. RENDER DICE GAME
# 2. RENDER DICE GAME (Кости)
# ==============================================================================
def render_dice(filename='dice_preview.png'):
b = RasterBuffer()
# Emerald felt
b.draw_box(0, 0, 320, 240, 0x00082E12)
# 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)
b.draw_box(0, 0, 320, 240, 0x00140906) # Mahogany frame
b.draw_box_border(6, 6, 308, 228, 0x000A3816, 0x00FFD700, 2) # Deep Green Felt
# Header
b.draw_string(48, 20, '==== G R A N D C R A P S T A B L E ====', 0x0000D7FF)
b.draw_string(72, 32, '[ PASS LINE ] [ ANY CRAPS ]', 0x0000B0A0)
b.draw_box_border(20, 12, 280, 26, 0x00072E13, 0x00FFD700, 2)
b.draw_string(48, 21, '=== G R A N D C R A P S ===', 0x00FFFF00)
# Status
b.draw_box_border(16, 46, 100, 16, 0x0006240E, 0x000E5022, 1)
b.draw_string(20, 50, 'БАНК: $12500', 0x0050FF50)
b.draw_box_border(204, 46, 100, 16, 0x0006240E, 0x000E5022, 1)
b.draw_string(208, 50, 'СТАВКА: $50 [W/S]', 0x0000D7FF)
b.draw_box_border(20, 44, 110, 18, 0x00072E13, 0x001B4B22, 1)
b.draw_string(24, 49, 'БАНК: $12500', 0x003CFF3C)
b.draw_box_border(190, 44, 110, 18, 0x00072E13, 0x001B4B22, 1)
b.draw_string(194, 49, 'СТАВКА: $100', 0x00FFD700)
# Betting Zones
# Left: [1] ЧЕТ (Active with chip stack!)
b.draw_box_border(16, 68, 88, 54, 0x000B441D, 0x0000FFFF, 2)
b.draw_string(24, 74, '[1] ЧЁТ', 0x0000FFFF)
b.draw_string(20, 86, '2 4 6 8 10 12', 0x0000D7FF)
b.draw_chip_stack(48, 110, count=4)
# Betting Pass Lines
# [1] ЧЁТ
b.draw_box_border(16, 70, 88, 48, 0x00072E13, 0x00FFFF00, 2)
b.draw_string(30, 76, '[1] ЧЁТ', 0x00FFFF00)
b.draw_string(22, 90, ' 2 4 6 8 10 ', 0x00FFD700)
b.draw_string(26, 104, 'ВЫБРАНО', 0x003CFF3C)
# Right: [2] НЕЧЕТ
b.draw_box_border(216, 68, 88, 54, 0x00073014, 0x001A602A, 1)
b.draw_string(224, 74, '[2] НЕЧЕТ', 0x0080B090)
b.draw_string(222, 86, '3 5 7 9 11', 0x00508060)
# [2] НЕЧЕТ
b.draw_box_border(216, 70, 88, 48, 0x00072E13, 0x001B4B22, 1)
b.draw_string(226, 76, '[2] НЕЧЕТ', 0x00D0D8E0)
b.draw_string(224, 90, ' 3 5 7 9 11 ', 0x0080B090)
# Center Dice Field
b.draw_box_border(112, 68, 96, 54, 0x00072E13, 0x00145826, 1)
# Draw Two Precision Dice
b.draw_craps_die(120, 76, 36, 4)
b.draw_craps_die(164, 76, 36, 6)
# Center Craps Table: 2 Dice
b.draw_craps_die(116, 80, 36, 4)
b.draw_craps_die(168, 76, 36, 6)
# Score Plaque
b.draw_box_border(36, 130, 248, 30, 0x00051D0C, 0x0000D7FF, 1)
b.draw_string(44, 135, 'СУММА: 4 + 6 = 10 (ЧЁТ)', 0x0000FFFF)
b.draw_string(68, 147, 'ВЫИГРЫШ: +$100! (x2)', 0x0050FF50)
# Sum & Result
b.draw_box_border(36, 132, 248, 36, 0x00072E13, 0x00FFD700, 1)
b.draw_string(48, 138, 'СУММА: 4 + 6 = 10 (ЧЁТ)', 0x00FFFF00)
b.draw_string(68, 152, 'ВЫИГРЫШ: +$200! (x2)', 0x003CFF3C)
# Keycaps
b.draw_box(16, 188, 288, 1, 0x00104820)
b.draw_keycap(20, 198, '1:ЧЁТ', is_active=True)
b.draw_keycap(82, 198, '2:НЕЧЕТ')
b.draw_keycap(160, 198, 'ПРОБЕЛ:БРОСОК', is_active=True)
b.draw_keycap(274, 198, 'ESC')
kx = 16
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)
b.save(filename)
# ==============================================================================
# 3. RENDER SKULLS GAME
# 3. RENDER SKULLS GAME (Напёрстки)
# ==============================================================================
def render_skulls(filename='skulls_preview.png'):
b = RasterBuffer()
# Dark gothic table with purple velvet
b.draw_box(0, 0, 320, 240, 0x000D0612)
b.draw_box_border(4, 4, 312, 232, 0x00160B20, 0x00321845, 3)
b.draw_box_border(8, 8, 304, 224, 0x00220F30, 0x0000D7FF, 1)
b.draw_box(0, 0, 320, 240, 0x00140906)
b.draw_box_border(6, 6, 308, 228, 0x00300F22, 0x00FFD700, 2) # Gothic Purple
# Header
b.draw_box_border(24, 12, 272, 24, 0x0012081A, 0x0000D7FF, 2)
b.draw_string(48, 20, '+ + + Н А П Ё Р С Т К И С К В Е Р Н Ы + + +', 0x0000FFFF)
b.draw_box_border(20, 12, 280, 26, 0x001A0812, 0x00FFD700, 2)
b.draw_string(44, 21, '* * * Н А П Ё Р С Т К И * * *', 0x00FFFF00)
# Status
b.draw_box_border(20, 42, 110, 16, 0x000D0616, 0x00401858, 1)
b.draw_string(24, 46, 'БАНК: $12500', 0x0050FF50)
b.draw_box_border(190, 42, 110, 16, 0x000D0616, 0x00401858, 1)
b.draw_string(194, 46, 'СТАВКА: $50 [W/S]', 0x0000D7FF)
b.draw_box_border(20, 44, 110, 18, 0x001A0812, 0x00452033, 1)
b.draw_string(24, 49, 'БАНК: $12500', 0x003CFF3C)
b.draw_box_border(190, 44, 110, 18, 0x001A0812, 0x00452033, 1)
b.draw_string(194, 49, 'СТАВКА: $300', 0x00FFD700)
# Table Runner
b.draw_box_border(16, 66, 288, 114, 0x001A0B25, 0x00452060, 1)
# Subtitle
b.draw_string(40, 62, 'ВЫИГРЫШ: +$900! (x3) ВЫ УГАДАЛИ!', 0x003CFF3C)
# Narrative banner
b.draw_string(40, 74, 'СЛЕДИ ЗА ЗОЛОТЫМ ОКОМ СУДЬБЫ...', 0x0000FFFF)
# 3 Cups: Cup 2 lifted revealing gold ball
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!)
b.draw_gothic_cup(48, 100, 1, is_lifted=False)
b.draw_gothic_cup(136, 100, 2, is_lifted=True, has_ball=True)
b.draw_gothic_cup(224, 100, 3, is_lifted=False)
# Selection indicators
b.draw_string(54, 168, '[ 1 ]', 0x00D0D8E0)
b.draw_string(150, 168, '[ 2 ]', 0x00FFFF00)
b.draw_string(250, 168, '[ 3 ]', 0x00D0D8E0)
# Keycaps
b.draw_box(16, 190, 288, 1, 0x003A1850)
b.draw_keycap(18, 200, '1:КУБОК')
b.draw_keycap(82, 200, '2:КУБОК', is_active=True)
b.draw_keycap(146, 200, '3:КУБОК')
b.draw_keycap(212, 200, 'ПРОБЕЛ', is_active=True)
b.draw_keycap(274, 200, 'ESC')
kx = 16
kx += b.draw_keycap(kx, 192, '[1]', is_active=False)
kx += b.draw_keycap(kx, 192, '[2]', is_active=True)
kx += b.draw_keycap(kx, 192, '[3]', is_active=False)
kx += b.draw_keycap(kx, 192, '[SPACE] СТАРТ', is_active=True)
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)
if __name__ == '__main__':
render_coin()
render_dice()
render_skulls()
print("All 3 minigames previews rendered successfully!")
render_skill()
print("[ALL DONE] All 4 previews successfully generated!")