diff --git a/cmake/icon/ge007.ico b/cmake/icon/ge007.ico index 4eaaad63..63d3ace7 100644 Binary files a/cmake/icon/ge007.ico and b/cmake/icon/ge007.ico differ diff --git a/docs/dev/findings-index.csv b/docs/dev/findings-index.csv index 0a7c629f..e02d3ed6 100644 --- a/docs/dev/findings-index.csv +++ b/docs/dev/findings-index.csv @@ -313,6 +313,7 @@ D567,FIXED,Front-end PC Options with a pad pulled the game's crosshair to the to D568,FIXED,F10 dropdown popup drawn empty and misplaced for a long list on a mid-page row (negative top) —,FIXED 2026-10-06 (port only: D569,?,Crosshair color follows the PD port:,CHANGED 2026-10-06 (maintainer request; old presets migrate to Custom RGB) D570,FIXED,Scaled crosshair (Crosshair size != 100%) showed a faint copy of the top bar's tip under the bottom bar (WRAP tile flags) —,FIXED 2026-10-06 (port only: +D571,?,"Project icon restyled to the in-game sight red as pixel art (exe, window, favicon) —",CHANGED 2026-10-06 (maintainer request; make_icon.py; social preview unchanged) D407,CLOSED,Tanks cannot be boarded/exited on PC —,CLOSED (2026-09-28 bookkeeping: D408,FIXED,Game.SkipIntro skips the post-mission failure dossier:,FIXED 2026-09-30 (SkipIntro hook gated to first boot; live dossier check owed). D415,FIXED,"Shooting a light fixture does not ""kill"" its flickering light (Bunker, Caverns):",FIXED (2026-09-29 bookkeeping: diff --git a/docs/dev/findings.md b/docs/dev/findings.md index d4bc84db..75c85bca 100644 --- a/docs/dev/findings.md +++ b/docs/dev/findings.md @@ -721,6 +721,7 @@ covers D24–D69; the log continues in §H (D32 procedure, D70–D121). | D568 | **F10 dropdown popup drawn empty and misplaced for a long list on a mid-page row (negative top)** — full `## D568` entry at file tail | FIXED 2026-10-06 (port only: `ddGeom` keeps the popup on screen; 1280x800 before/after capture) | | D569 | **Crosshair color follows the PD port: Original or Custom RGB, left/right stepper, 0-255 sliders** — full `## D569` entry at file tail | CHANGED 2026-10-06 (maintainer request; old presets migrate to Custom RGB) | | D570 | **Scaled crosshair (Crosshair size != 100%) showed a faint copy of the top bar's tip under the bottom bar (WRAP tile flags)** — full `## D570` entry at file tail | FIXED 2026-10-06 (port only: CLAMP when scaled in `gunDrawSight` + F10 pointer; 100% unchanged, Dam gate PASS) | +| D571 | **Project icon restyled to the in-game sight red as pixel art (exe, window, favicon)** — full `## D571` entry at file tail | CHANGED 2026-10-06 (maintainer request; make_icon.py; social preview unchanged) | | D407 | **Tanks cannot be boarded/exited on PC — the v0.4.0 use/reload split (D378/D393) removed the B-button tap the engine's tank handlers in `bondview2.c` consume (user report 2026-09-28, Runway/Streets)** — full `## D407` entry at file tail | **CLOSED (2026-09-28 bookkeeping: tank board/exit accepted by the user; shipped in v0.4.0).** Earlier: PARTIAL (fix landed in v0.4.0, port-only): present `GE_CONT_B` on the use (E / pad A) rising edge only while `g_PlayerIsInTank == 1` or `g_BondCanEnterTank != 0`; E keeps its D378 no-reload-fallback semantics elsewhere, N64 layout unaffected. D407(b) same cycle: front PC Options page-edge highlight clamp + mouse-wheel / W-S paging (wheel queue consumed on the menu, D223); its wheel mapping shipped inverted and was fixed to match W/S (wheel up = step up). D407(c): board-animation lockout, menu-accept B gate in tank states, in-tank aim routed through the legacy velocity stick + `Input.TankAimScale` knob. RESOLVED 2026-09-28: all port-only (src/game zero-diff), 10 TANKDBG probes stripped, release binary verified clean, user live tank drive signed off (board + exit OK, aim feel good). | | D408 | **`Game.SkipIntro` skips the post-mission failure dossier: with it on, entering a level then aborting (watch Z+A) or dying (KIA) returns straight to the menus — no REPORT / "Mission status: KILLED IN ACTION / ABORTED" screen** (user report 2026-09-28; save/AllUnlocked ruled out) — full `## D408` entry at file tail | FIXED 2026-09-30 (SkipIntro hook gated to first boot; live dossier check owed). | | D415 | **Shooting a light fixture does not "kill" its flickering light (Bunker, Caverns): the fixture takes the hit but the flicker keeps going (community report, issue #87 comment by the reporter, 2026-09-28, 00 Agent playthrough of v0.4.0).** — full `## D415` entry at file tail | FIXED (2026-09-29 bookkeeping: root-caused and fixed as D430 + D431, user-verified vs GEPD/1964 on Caverns 2026-09-29; #119). Earlier: ROOT-CAUSED as D430 (see there); fix in tree, live check owed. | @@ -18377,3 +18378,15 @@ image-table entry with CLAMP flags to `texSelect` when the scale is not 1.0; at 100% the original call is unchanged (Dam gate PASS). The F10 crosshair pointer (`optionsoverlay.c`, always non-integer scale) gets the same clamp. **Verified:** 105% Custom green capture clean below the bar; Dam gate PASS. + +## D571: Project icon restyled: in-game sight red, pixel-art grid — CHANGED 2026-10-06 (maintainer request) + +The D550 mark (gold, smooth vector ring) is redrawn by `tools_pc/make_icon.py` +as pixel art in the in-game sight's red (core RGB 200,40,48; a lighter 225,120,130 +tip texel on each bar like the sprite's anti-aliasing) on #050607: hand-tuned +16/24/32 grids (1-px ring, 2-px bars, open centre), larger sizes scaled with +NEAREST (48 = 24 grid x2, 64..512 = 32 grid). Original procedural art (no ROM or +capture data). Outputs regenerated: exe `.ico`, `docs/favicon.ico` (byte copy), +`docs/img/icon/ge007-icon.png`, `port/fast3d/ge007_icon.h` (now written with LF). +`--check` passes; two runs byte-identical. The social preview card is unchanged +(maintainer decision). diff --git a/docs/favicon.ico b/docs/favicon.ico index 4eaaad63..63d3ace7 100644 Binary files a/docs/favicon.ico and b/docs/favicon.ico differ diff --git a/docs/img/icon/ge007-icon.png b/docs/img/icon/ge007-icon.png index afaeb031..0f048167 100644 Binary files a/docs/img/icon/ge007-icon.png and b/docs/img/icon/ge007-icon.png differ diff --git a/port/fast3d/ge007_icon.h b/port/fast3d/ge007_icon.h index 07bceb84..546f2371 100644 --- a/port/fast3d/ge007_icon.h +++ b/port/fast3d/ge007_icon.h @@ -10,37 +10,37 @@ #define GE007_ICON_SIZE 32 static const uint8_t ge007_icon_rgba[GE007_ICON_SIZE][GE007_ICON_SIZE][4] = { - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 7, 7,255},{ 6, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 2, 4, 6,255},{ 2, 4, 6,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 6, 7,255},{ 17, 14, 10,255},{ 17, 14, 10,255},{ 6, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 7, 7,255},{ 2, 4, 6,255},{ 16, 14, 10,255},{211,147, 53,255},{211,147, 53,255},{ 16, 14, 10,255},{ 2, 4, 6,255},{ 5, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 8, 7, 7,255},{ 5, 5, 7,255},{ 21, 17, 11,255},{226,157, 57,255},{226,157, 57,255},{ 21, 17, 11,255},{ 5, 5, 7,255},{ 8, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 8, 7, 8,255},{ 9, 8, 8,255},{ 13, 11, 9,255},{ 10, 9, 8,255},{ 17, 14, 9,255},{222,154, 56,255},{222,154, 56,255},{ 17, 14, 9,255},{ 10, 9, 8,255},{ 13, 11, 9,255},{ 9, 8, 8,255},{ 8, 7, 8,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 7, 7,255},{ 9, 8, 8,255},{ 10, 9, 8,255},{ 10, 9, 8,255},{ 0, 1, 5,255},{ 0, 0, 3,255},{ 29, 22, 12,255},{224,156, 56,255},{224,156, 56,255},{ 29, 22, 12,255},{ 0, 0, 3,255},{ 0, 1, 5,255},{ 10, 9, 8,255},{ 10, 9, 8,255},{ 9, 8, 8,255},{ 6, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 7, 7,255},{ 9, 8, 8,255},{ 12, 10, 9,255},{ 6, 6, 7,255},{ 3, 3, 6,255},{ 70, 50, 22,255},{130, 91, 35,255},{216,150, 54,255},{233,162, 58,255},{233,162, 58,255},{216,150, 54,255},{130, 91, 35,255},{ 70, 50, 22,255},{ 3, 3, 6,255},{ 6, 6, 7,255},{ 12, 10, 9,255},{ 9, 8, 8,255},{ 6, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 7, 7,255},{ 9, 8, 8,255},{ 10, 9, 8,255},{ 1, 2, 6,255},{ 20, 15, 10,255},{162,113, 42,255},{249,173, 62,255},{255,184, 66,255},{226,157, 57,255},{231,160, 58,255},{231,160, 58,255},{226,157, 57,255},{255,184, 66,255},{249,173, 62,255},{162,113, 42,255},{ 20, 15, 10,255},{ 1, 2, 6,255},{ 10, 9, 8,255},{ 9, 8, 8,255},{ 6, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 9, 8, 8,255},{ 12, 10, 9,255},{ 5, 4, 6,255},{ 74, 52, 23,255},{222,154, 56,255},{251,174, 62,255},{218,151, 55,255},{112, 78, 31,255},{ 35, 25, 14,255},{223,155, 56,255},{223,155, 56,255},{ 35, 25, 14,255},{112, 78, 31,255},{218,151, 55,255},{251,174, 62,255},{222,154, 56,255},{ 74, 52, 23,255},{ 5, 4, 6,255},{ 12, 10, 9,255},{ 9, 8, 8,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 8, 7, 8,255},{ 11, 9, 8,255},{ 6, 6, 7,255},{ 17, 13, 10,255},{223,155, 56,255},{255,180, 64,255},{164,114, 43,255},{ 20, 15, 10,255},{ 0, 0, 3,255},{ 16, 13, 10,255},{222,155, 56,255},{222,155, 56,255},{ 16, 13, 10,255},{ 0, 0, 3,255},{ 20, 15, 10,255},{164,114, 43,255},{255,180, 64,255},{223,155, 56,255},{ 17, 13, 10,255},{ 6, 6, 7,255},{ 11, 9, 8,255},{ 8, 7, 8,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 9, 8, 8,255},{ 10, 9, 8,255},{ 3, 3, 6,255},{161,112, 42,255},{251,174, 62,255},{165,115, 43,255},{ 8, 6, 7,255},{ 5, 5, 7,255},{ 10, 9, 8,255},{ 21, 17, 10,255},{226,157, 57,255},{226,157, 57,255},{ 21, 17, 10,255},{ 10, 9, 8,255},{ 5, 5, 7,255},{ 8, 6, 7,255},{165,115, 43,255},{251,174, 62,255},{161,112, 42,255},{ 3, 3, 6,255},{ 10, 9, 8,255},{ 9, 8, 8,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 7, 7,255},{ 8, 7, 7,255},{ 13, 11, 9,255},{ 3, 3, 5,255},{ 70, 50, 22,255},{248,173, 62,255},{218,152, 55,255},{ 17, 13, 10,255},{ 6, 6, 7,255},{ 14, 11, 9,255},{ 6, 6, 7,255},{ 19, 16, 10,255},{212,147, 53,255},{212,147, 53,255},{ 19, 16, 10,255},{ 6, 6, 7,255},{ 14, 11, 9,255},{ 6, 6, 7,255},{ 17, 13, 10,255},{218,152, 55,255},{248,173, 62,255},{ 70, 50, 22,255},{ 3, 3, 5,255},{ 13, 11, 9,255},{ 8, 7, 7,255},{ 6, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 2, 4, 6,255},{ 5, 5, 7,255},{ 10, 9, 8,255},{ 0, 0, 3,255},{130, 91, 35,255},{254,184, 65,255},{112, 79, 31,255},{ 0, 0, 4,255},{ 10, 9, 8,255},{ 6, 6, 7,255},{ 9, 8, 8,255},{ 10, 8, 8,255},{ 20, 16, 11,255},{ 20, 16, 11,255},{ 10, 8, 8,255},{ 9, 8, 8,255},{ 6, 6, 7,255},{ 10, 9, 8,255},{ 0, 0, 4,255},{112, 79, 31,255},{254,184, 65,255},{130, 91, 35,255},{ 0, 0, 3,255},{ 10, 9, 8,255},{ 5, 5, 7,255},{ 2, 4, 6,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 6, 7,255},{ 16, 13, 9,255},{ 21, 16, 11,255},{ 17, 14, 10,255},{ 30, 22, 12,255},{216,150, 54,255},{225,157, 57,255},{ 34, 26, 13,255},{ 17, 13, 9,255},{ 21, 17, 11,255},{ 20, 15, 10,255},{ 10, 8, 8,255},{ 9, 8, 8,255},{ 6, 6, 7,255},{ 6, 6, 7,255},{ 9, 8, 8,255},{ 10, 8, 8,255},{ 20, 15, 10,255},{ 21, 17, 11,255},{ 17, 13, 9,255},{ 34, 26, 13,255},{225,157, 57,255},{216,150, 54,255},{ 30, 22, 12,255},{ 17, 14, 10,255},{ 21, 16, 11,255},{ 16, 13, 9,255},{ 6, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 6, 7, 7,255},{ 2, 4, 6,255},{ 17, 14, 10,255},{212,147, 53,255},{226,157, 57,255},{222,154, 56,255},{224,156, 56,255},{233,162, 58,255},{231,160, 58,255},{223,155, 56,255},{223,154, 56,255},{226,157, 57,255},{212,147, 53,255},{ 21, 16, 11,255},{ 6, 6, 7,255},{ 11, 10, 8,255},{ 11, 10, 8,255},{ 6, 6, 7,255},{ 21, 16, 11,255},{212,147, 53,255},{226,157, 57,255},{223,154, 56,255},{223,155, 56,255},{231,160, 58,255},{233,162, 58,255},{224,156, 56,255},{222,154, 56,255},{226,157, 57,255},{212,147, 53,255},{ 17, 14, 10,255},{ 2, 4, 6,255},{ 6, 7, 7,255}}, - {{ 6, 7, 7,255},{ 2, 4, 6,255},{ 17, 14, 10,255},{212,147, 53,255},{226,157, 57,255},{222,154, 56,255},{224,156, 56,255},{233,162, 58,255},{231,160, 58,255},{223,155, 56,255},{223,154, 56,255},{226,157, 57,255},{212,147, 53,255},{ 21, 16, 11,255},{ 6, 6, 7,255},{ 11, 10, 8,255},{ 11, 10, 8,255},{ 6, 6, 7,255},{ 21, 16, 11,255},{212,147, 53,255},{226,157, 57,255},{223,154, 56,255},{223,155, 56,255},{231,160, 58,255},{233,162, 58,255},{224,156, 56,255},{222,154, 56,255},{226,157, 57,255},{212,147, 53,255},{ 17, 14, 10,255},{ 2, 4, 6,255},{ 6, 7, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 6, 7,255},{ 16, 13, 9,255},{ 21, 16, 11,255},{ 17, 14, 10,255},{ 30, 22, 12,255},{216,150, 54,255},{225,157, 57,255},{ 34, 26, 13,255},{ 17, 13, 9,255},{ 21, 17, 11,255},{ 20, 15, 10,255},{ 10, 8, 8,255},{ 9, 8, 8,255},{ 6, 6, 7,255},{ 6, 6, 7,255},{ 9, 8, 8,255},{ 10, 8, 8,255},{ 20, 15, 10,255},{ 21, 17, 11,255},{ 17, 13, 9,255},{ 34, 26, 13,255},{225,157, 57,255},{216,150, 54,255},{ 30, 22, 12,255},{ 17, 14, 10,255},{ 21, 16, 11,255},{ 16, 13, 9,255},{ 6, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 2, 4, 6,255},{ 5, 5, 7,255},{ 10, 9, 8,255},{ 0, 0, 3,255},{130, 91, 35,255},{254,184, 65,255},{112, 79, 31,255},{ 0, 0, 4,255},{ 10, 9, 8,255},{ 6, 6, 7,255},{ 9, 8, 8,255},{ 10, 8, 8,255},{ 20, 16, 11,255},{ 20, 16, 11,255},{ 10, 8, 8,255},{ 9, 8, 8,255},{ 6, 6, 7,255},{ 10, 9, 8,255},{ 0, 0, 4,255},{112, 79, 31,255},{254,184, 65,255},{130, 91, 35,255},{ 0, 0, 3,255},{ 10, 9, 8,255},{ 5, 5, 7,255},{ 2, 4, 6,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 7, 7,255},{ 8, 7, 7,255},{ 13, 11, 9,255},{ 3, 3, 5,255},{ 70, 50, 22,255},{248,173, 62,255},{218,152, 55,255},{ 17, 13, 10,255},{ 6, 6, 7,255},{ 14, 11, 9,255},{ 6, 6, 7,255},{ 19, 16, 10,255},{212,147, 53,255},{212,147, 53,255},{ 19, 16, 10,255},{ 6, 6, 7,255},{ 14, 11, 9,255},{ 6, 6, 7,255},{ 17, 13, 10,255},{218,152, 55,255},{248,173, 62,255},{ 70, 50, 22,255},{ 3, 3, 5,255},{ 13, 11, 9,255},{ 8, 7, 7,255},{ 6, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 9, 8, 8,255},{ 10, 9, 8,255},{ 3, 3, 6,255},{161,112, 42,255},{251,174, 62,255},{165,115, 43,255},{ 8, 6, 7,255},{ 5, 5, 7,255},{ 10, 9, 8,255},{ 21, 17, 10,255},{226,157, 57,255},{226,157, 57,255},{ 21, 17, 10,255},{ 10, 9, 8,255},{ 5, 5, 7,255},{ 8, 6, 7,255},{165,115, 43,255},{251,174, 62,255},{161,112, 42,255},{ 3, 3, 6,255},{ 10, 9, 8,255},{ 9, 8, 8,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 8, 7, 8,255},{ 11, 9, 8,255},{ 6, 6, 7,255},{ 17, 13, 10,255},{223,155, 56,255},{255,180, 64,255},{164,114, 43,255},{ 20, 15, 10,255},{ 0, 0, 3,255},{ 16, 13, 10,255},{222,155, 56,255},{222,155, 56,255},{ 16, 13, 10,255},{ 0, 0, 3,255},{ 20, 15, 10,255},{164,114, 43,255},{255,180, 64,255},{223,155, 56,255},{ 17, 13, 10,255},{ 6, 6, 7,255},{ 11, 9, 8,255},{ 8, 7, 8,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 9, 8, 8,255},{ 12, 10, 9,255},{ 5, 4, 6,255},{ 74, 52, 23,255},{222,154, 56,255},{251,174, 62,255},{218,151, 55,255},{112, 78, 31,255},{ 35, 25, 14,255},{223,155, 56,255},{223,155, 56,255},{ 35, 25, 14,255},{112, 78, 31,255},{218,151, 55,255},{251,174, 62,255},{222,154, 56,255},{ 74, 52, 23,255},{ 5, 4, 6,255},{ 12, 10, 9,255},{ 9, 8, 8,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 7, 7,255},{ 9, 8, 8,255},{ 10, 9, 8,255},{ 1, 2, 6,255},{ 20, 15, 10,255},{162,113, 42,255},{249,173, 62,255},{255,184, 66,255},{226,157, 57,255},{231,160, 58,255},{231,160, 58,255},{226,157, 57,255},{255,184, 66,255},{249,173, 62,255},{162,113, 42,255},{ 20, 15, 10,255},{ 1, 2, 6,255},{ 10, 9, 8,255},{ 9, 8, 8,255},{ 6, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 7, 7,255},{ 9, 8, 8,255},{ 12, 10, 9,255},{ 6, 6, 7,255},{ 3, 3, 6,255},{ 70, 50, 22,255},{130, 91, 35,255},{216,150, 54,255},{233,162, 58,255},{233,162, 58,255},{216,150, 54,255},{130, 91, 35,255},{ 70, 50, 22,255},{ 3, 3, 6,255},{ 6, 6, 7,255},{ 12, 10, 9,255},{ 9, 8, 8,255},{ 6, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 7, 7,255},{ 9, 8, 8,255},{ 10, 9, 8,255},{ 10, 9, 8,255},{ 0, 1, 5,255},{ 0, 0, 3,255},{ 29, 22, 12,255},{224,156, 56,255},{224,156, 56,255},{ 29, 22, 12,255},{ 0, 0, 3,255},{ 0, 1, 5,255},{ 10, 9, 8,255},{ 10, 9, 8,255},{ 9, 8, 8,255},{ 6, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 8, 7, 8,255},{ 9, 8, 8,255},{ 13, 11, 9,255},{ 10, 9, 8,255},{ 17, 14, 9,255},{222,154, 56,255},{222,154, 56,255},{ 17, 14, 9,255},{ 10, 9, 8,255},{ 13, 11, 9,255},{ 9, 8, 8,255},{ 8, 7, 8,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 8, 7, 7,255},{ 5, 5, 7,255},{ 21, 17, 11,255},{226,157, 57,255},{226,157, 57,255},{ 21, 17, 11,255},{ 5, 5, 7,255},{ 8, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 7, 7,255},{ 2, 4, 6,255},{ 16, 14, 10,255},{211,147, 53,255},{211,147, 53,255},{ 16, 14, 10,255},{ 2, 4, 6,255},{ 5, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 6, 7,255},{ 17, 14, 10,255},{ 17, 14, 10,255},{ 6, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 2, 4, 6,255},{ 2, 4, 6,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, - {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 6, 7, 7,255},{ 6, 7, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}} + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{225,120,130,255},{225,120,130,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{225,120,130,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{225,120,130,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{225,120,130,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{225,120,130,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{200, 40, 48,255},{200, 40, 48,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{225,120,130,255},{225,120,130,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}}, + {{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255},{ 5, 6, 7,255}} }; #endif /* GE007_ICON_H */ diff --git a/tools_pc/make_icon.py b/tools_pc/make_icon.py index ecd36cf8..c04729a6 100644 --- a/tools_pc/make_icon.py +++ b/tools_pc/make_icon.py @@ -5,7 +5,9 @@ The mark is an ORIGINAL generic version of the GE default aim crosshair: a circle with four lines (N/S/E/W) crossing the circle's edge and extending well past it, open at the centre. Proportions are measured from the game's own default crosshair (thin ring, long bars, open centre). -Site gold (#e8a13a) on near-black (#050607). +Drawn on a small pixel grid (32x32 master, hand-tuned 16/24) and scaled +with NEAREST, in the in-game sight red (core RGB 200,40,48; lighter edge +texels 225,120,130) on near-black (#050607). No glow/gradients/blur. A circle-plus-ticks reticle is a generic functional shape (no logo art, wordmark or screenshot copied, cf. tree-hygiene rule 4: repo imagery must not be derivative game content). @@ -45,64 +47,56 @@ OUT_FAVICON = ROOT / "docs" / "favicon.ico" # --- palette ----------------------------------------------------------------- BG = (5, 6, 7) # site near-black -GOLD = (232, 161, 58) # site gold (#e8a13a) +RED = (200, 40, 48) # in-game sight red (core texels) +RED_EDGE = (225, 120, 130) # lighter AA-edge texel tint + + +# pixel-grid parameters per master grid size N: +# (ring radius, ring half-band, bar width (even), gap radius, reach radius) +# radii are in pixels from the exact centre (N/2 - 0.5 is the centre pixel +# coordinate, so every shape is mirror-symmetric by construction). +_GRIDS = { + 16: (4.6, 0.6, 2, 2.0, 7.5), + 24: (6.6, 0.55, 2, 3.0, 11.5), + 32: (9.2, 0.55, 2, 4.0, 14.5), +} + + +def _master(n: int) -> Image.Image: + """Hand-tuned low-res mark on an n x n pixel grid (no anti-aliasing: + hard pixels in the sight's red, the outermost bar texel and ring + corners get the lighter edge tint like the sprite's AA texels).""" + ring_r, band, bar_w, gap, reach = _GRIDS[n] + img = Image.new("RGBA", (n, n), BG + (255,)) + px = img.load() + c = (n - 1) / 2.0 + hw = bar_w / 2.0 + for y in range(n): + for x in range(n): + dx, dy = abs(x - c), abs(y - c) + d = (dx * dx + dy * dy) ** 0.5 + col = None + if abs(d - ring_r) <= band: + col = RED + # bars: |perp| < hw, along-axis distance in [gap, reach] + for along, perp in ((dx, dy), (dy, dx)): + if perp < hw and gap <= along <= reach: + col = RED_EDGE if along > reach - 1 else RED + if col is not None: + px[x, y] = col + (255,) + return img def _crosshair(size: int, small: bool = False) -> Image.Image: - """The generic GE default crosshair: a circle with N/S/E/W lines - crossing its edge and extending well past it, open centre, in site gold - (#e8a13a); proportions measured from the game's own default crosshair - (thin ring, long bars, open centre). Rendered at 2x for AA, then - downsized. small: a chunkier variant (thicker strokes, wider gap) so - the mark survives 16px in the .ico small slots (and the 32px window - icon).""" - S = size * 2 - img = Image.new("RGBA", (S, S), BG + (255,)) - dr = ImageDraw.Draw(img, "RGBA") - # Exact centre = the line between the two middle supersample pixels - # (continuous coordinate S/2; pixel i covers [i, i+1)). Every shape is - # drawn symmetric about it with inclusive PIL coordinates, so each size - # is pixel-exactly mirror-symmetric (checked by _symmetric()). - c = S // 2 - - def rr(v: float) -> int: - return int(round(S * v / 512)) - - def even(v: float) -> int: - return max(2, 2 * int(round(S * v / 512 / 2))) - - def disc(r: int) -> list: - return [c - r, c - r, c + r - 1, c + r - 1] - - # faint gold glow behind the reticle (kept very subtle: flat + calm) - glow = Image.new("RGBA", (S, S), (0, 0, 0, 0)) - gd = ImageDraw.Draw(glow) - gr = rr(190 if small else 200) - for i in range(24, 0, -1): - g = gr * i // 24 - if g > 0: - gd.ellipse(disc(g), fill=GOLD + (4,)) - img.alpha_composite(glow) - - # the reticle: a circle + four bars (N/S/E/W) crossing the circle's - # edge and extending well past it, with an open centre -- proportions - # measured off the game's own default crosshair (thin ring, long bars; - # bar reach ~1.45x the ring's outer radius, centre gap ~0.30x). - # Small sizes get the chunky variant (thicker strokes, wider gap so - # it stays open at 16px). - circle_r = rr(140 if small else 150) # outer radius of the ring - ring_w = rr(34 if small else 16) # ring stroke width - bar_w = even(30 if small else 14) # bar stroke width (even: symmetric) - reach = rr(205 if small else 218) - gap = rr(52 if small else 45) - hw = bar_w // 2 - - dr.ellipse(disc(circle_r), outline=GOLD + (255,), width=ring_w) - for a, b in ((c - reach, c - gap - 1), (c + gap, c + reach - 1)): - dr.rectangle([c - hw, a, c + hw - 1, b], fill=GOLD + (255,)) # vertical - dr.rectangle([a, c - hw, b, c + hw - 1], fill=GOLD + (255,)) # horizontal - - return img.resize((size, size), Image.LANCZOS) + """Retro red crosshair: the 16/24/32 hand-tuned grids are used 1:1 for + the small slots; everything else is the 32 master (24 for 48px) scaled with NEAREST + (hard pixel edges).""" + if small and size in (16, 24, 32): + return _master(size) + # integer pixel scale only (48 = 2x the 24 grid) keeps pixels square + # and the mark exactly centred. + grid = 24 if size == 48 else 32 + return _master(grid).resize((size, size), Image.NEAREST) @@ -167,7 +161,8 @@ def make_header() -> None: # top level of the [32][32][4] initializer (1024 > first dim 32 -> # "too many initializers"). rows.append(" {" + ",".join(row) + "}") - OUT_HEADER.write_text( + with open(OUT_HEADER, "w", newline="\n") as fh: + fh.write( "/* Generated by tools_pc/make_icon.py -- do not edit by hand.\n" " * The project mark (a generic version of the GE default aim\n" " * crosshair) as a 32x32 RGBA array, row-major, plain R,G,B,A\n"