Bald mascot and one-word MatGames title on the loading screen

This commit is contained in:
enne2
2026-10-11 01:59:38 +02:00
parent 4a04635f41
commit db2b57775c
7 changed files with 102 additions and 23 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 159 KiB

+16 -11
View File
@@ -9,17 +9,21 @@ The stock Godot boot splash (logo plus "GODOT Game engine") is replaced by the
## Asset ## Asset
`assets/branding/boot_splash.png`, 1024x1218, palette PNG with alpha `assets/branding/boot_splash.png`, 1024x1185, palette PNG with alpha
(256 colors, 95 alpha levels), about 150 KB. Subject: cartoon zombie head and bust, (256 colors, 95 alpha levels), about 159 KB. Subject: cartoon zombie head and bust,
unsettling grin, thumbs up, with "Mat Games" below in a phosphor-terminal typeface. bald scalp with a sparse hair fringe on the sides, unsettling grin, thumbs up, with
"MatGames" below (one word, no space) in a phosphor-terminal typeface.
Provenance is recorded in `tools/branding/manifest.json`: Provenance is recorded in `tools/branding/manifest.json`:
- mascot: generated with `agy_generate` (Antigravity direct API, model - mascot: generated with `agy_generate` (Antigravity direct API, model
`gemini-3.1-flash-image`) on 2026-10-11 from no third-party source material; the `gemini-3.1-flash-image`) on 2026-10-11 from no third-party source material; the
provider terms do not claim ownership of the output. Raw source kept at provider terms do not claim ownership of the output. A second AI pass (`agy_edit`)
`tools/branding/raw/` with its SHA256. Note that an image generator does not emit kept the face, grin, thumbs-up hand, shirt, pose and flat background and changed
real alpha, so the flat magenta background is keyed out locally; only the hair to a bald scalp with a side fringe; both files and their SHA256 are
kept in `tools/branding/raw/` and the edit is recorded under `mascot_derived_from`.
Note that an image generator does not emit real alpha, so the flat magenta
background is keyed out locally;
- lettering: drawn by script, not by the generator, because generated text is - lettering: drawn by script, not by the generator, because generated text is
unreliable. Font `tools/branding/fonts/VT323-Regular.ttf`, glyphs of the DEC VT320 unreliable. Font `tools/branding/fonts/VT323-Regular.ttf`, glyphs of the DEC VT320
terminal, licensed **SIL Open Font License 1.1** (license text kept next to it in terminal, licensed **SIL Open Font License 1.1** (license text kept next to it in
@@ -41,7 +45,8 @@ packed into the export (`tools/*` is already excluded by the export preset).
pink tongue or the blue shirt because their red and blue are not both above green; pink tongue or the blue shirt because their red and blue are not both above green;
4. crops to the subject, applies a 50 px fade at the bottom to soften the frame cut 4. crops to the subject, applies a 50 px fade at the bottom to soften the frame cut
of the generated bust, and scales to 1024 px wide with 40 px side padding; of the generated bust, and scales to 1024 px wide with 40 px side padding;
5. draws the title with VT323 in amber over a blurred glow layer; 5. draws the title with VT323 in amber over a blurred glow layer. The title defaults
to the one-word form `MatGames`; pass `--title` to change it;
6. quantizes to 256 colors (no dither) and writes the PNG plus the manifest. 6. quantizes to 256 colors (no dither) and writes the PNG plus the manifest.
```sh ```sh
@@ -66,11 +71,11 @@ ratio; the exported shell confirms the result with the classes
## Verification ## Verification
- Exported `index.png` has the same 1024x1218 dimensions as the master. It is - Exported `index.png` has the same 1024x1185 dimensions as the master. It is
re-encoded by the exporter to 32-bit RGBA (about 475 KB), so the bytes are not re-encoded by the exporter to 32-bit RGBA (about 496 KB), so the bytes are not
identical; composited on black the two images differ by at most 6.4/255 on identical; composited on black the two images differ by at most 6.4/255 on
0.14% of pixels, all with alpha below 20, i.e. invisible. The release keeps the 0.13% of pixels, all with alpha below 20, i.e. invisible. The release keeps the
150 KB master in the repository and ships a gzip sidecar. 159 KB master in the repository and ships a gzip sidecar.
- The exported shell contains no "Game engine" text and the splash image has an - The exported shell contains no "Game engine" text and the splash image has an
empty `alt`. empty `alt`.
- `html/export_icon=false`, so no favicon is exported: the browser tab still shows - `html/export_icon=false`, so no favicon is exported: the browser tab still shows
+16
View File
@@ -1,5 +1,21 @@
# Web build and compressed deployment # Web build and compressed deployment
## Bald mascot release: 1194f239fcbd91d6
Title is now the one-word `MatGames` and the mascot has a bald scalp with a side
fringe (AI edit of the previous generation, see `docs/BRANDING.md`). PCK 4,347,536
bytes; gzip payload total 12,796,287 bytes. Backup `index-before-bald.html`.
Cleanup after this deploy: the three older directories (ddba14dd80539f19,
9a376a3dbf674069, 7ebf03fe3c88be15) were removed with approval, leaving
1194f239fcbd91d6 (live) and 097e6c64b42640ad (previous): 272 MB -> 110 MB, free space
1,5 GB. The same guarded procedure was used (hash read from the live base href,
hex validation, containment check, kept-list exclusion, `rm -rf --` with absolute
paths) and the post-checks passed: root 200 with the new base href, live PCK
byte-identical, previous release still served, removed release 404, and the live
loading screen captured in the browser.
## Loading screen branding release: 097e6c64b42640ad ## Loading screen branding release: 097e6c64b42640ad
See `docs/BRANDING.md`: black boot splash background and the "Mat Games" mascot in See `docs/BRANDING.md`: black boot splash background and the "Mat Games" mascot in
+16 -9
View File
@@ -3,28 +3,28 @@
"file": "assets/branding/boot_splash.png", "file": "assets/branding/boot_splash.png",
"size": [ "size": [
1024, 1024,
1218 1185
], ],
"mode": "P", "mode": "P",
"palette_colors": 256, "palette_colors": 256,
"sha256": "78524be4ba17ab04afe56d16b00954989457f9af247367f7c4b0f9ed8ea2dec4" "sha256": "4b4bab87b5038915d5a7493c6ee134cd654293036d093e71d210cbad6359bdb2"
}, },
"mascot_source": { "mascot_source": {
"file": "tools/branding/raw/agy_generate_20261010234423_0.jpg", "file": "tools/branding/raw/agy_edit_20261010235510_0.jpg",
"sha256": "5929495ff606fbcdd74f52a37304f3b569315bcd1fc0fef812b5fd7689dc1396" "sha256": "913184c2e2e3dd5357f7729988859c8e038e4561ba18af7cb60f12644f7f6994"
}, },
"generator": { "generator": {
"tool": "agy_generate (Antigravity direct API)", "tool": "agy_generate (Antigravity direct API)",
"model": "gemini-3.1-flash-image", "model": "gemini-3.1-flash-image",
"date": "2026-10-11", "date": "2026-10-11",
"prompt": "single cartoon zombie head-and-bust mascot, unsettling wide grin, thumbs up, 2D cartoon style with bold outlines, flat magenta chroma-key background, no text and no logo", "prompt": "single cartoon zombie head-and-bust mascot, unsettling wide grin, thumbs up, 2D cartoon style with bold outlines, flat magenta chroma-key background, no text and no logo; then edited to a bald scalp with a sparse hair fringe on the sides only",
"terms_note": "generated from no third-party source material; the provider terms do not claim ownership of the output. The generator emits no real alpha channel, so the background is keyed out locally by this script." "terms_note": "generated from no third-party source material; the provider terms do not claim ownership of the output. The generator emits no real alpha channel, so the background is keyed out locally by this script."
}, },
"chroma_key": { "chroma_key": {
"background_rgb": [ "background_rgb": [
250, 246,
4, 1,
247 237
], ],
"transparent_below": 55, "transparent_below": 55,
"opaque_above": 130 "opaque_above": 130
@@ -34,5 +34,12 @@
"font": "tools/branding/fonts/VT323-Regular.ttf", "font": "tools/branding/fonts/VT323-Regular.ttf",
"license": "SIL Open Font License 1.1 (tools/branding/fonts/OFL.txt)" "license": "SIL Open Font License 1.1 (tools/branding/fonts/OFL.txt)"
}, },
"bottom_fade_px": 50 "bottom_fade_px": 50,
"mascot_derived_from": [
{
"file": "tools/branding/raw/agy_generate_20261010234423_0.jpg",
"sha256": "5929495ff606fbcdd74f52a37304f3b569315bcd1fc0fef812b5fd7689dc1396",
"edit": "AI edit (agy_edit): keep face, grin, thumbs up, shirt, pose and flat background; change the hair to a bald scalp with a sparse fringe on the sides only"
}
]
} }
Binary file not shown.

After

Width:  |  Height:  |  Size: 505 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://co32s8aqwa3bj"
path="res://.godot/imported/agy_edit_20261010235510_0.jpg-d9de74481e03780407b2a1aacf263683.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://tools/branding/raw/agy_edit_20261010235510_0.jpg"
dest_files=["res://.godot/imported/agy_edit_20261010235510_0.jpg-d9de74481e03780407b2a1aacf263683.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
+12 -1
View File
@@ -20,6 +20,8 @@ parser.add_argument('--bottom-fade', type=int, default=50,
help='soften the generator frame cut at the bottom of the bust') help='soften the generator frame cut at the bottom of the bust')
parser.add_argument('--colors', type=int, default=256, parser.add_argument('--colors', type=int, default=256,
help='palette colors for the shipped PNG; 0 keeps 32-bit RGBA') help='palette colors for the shipped PNG; 0 keeps 32-bit RGBA')
parser.add_argument('--generated-from', type=pathlib.Path, default=None,
help='pre-edit generation this file was derived from, for provenance')
args = parser.parse_args() args = parser.parse_args()
args.raw = args.raw.resolve() args.raw = args.raw.resolve()
root = pathlib.Path(__file__).resolve().parents[1] root = pathlib.Path(__file__).resolve().parents[1]
@@ -108,7 +110,8 @@ manifest.update({
'date': '2026-10-11', 'date': '2026-10-11',
'prompt': ('single cartoon zombie head-and-bust mascot, unsettling wide grin, thumbs up, ' 'prompt': ('single cartoon zombie head-and-bust mascot, unsettling wide grin, thumbs up, '
'2D cartoon style with bold outlines, flat magenta chroma-key background, ' '2D cartoon style with bold outlines, flat magenta chroma-key background, '
'no text and no logo'), 'no text and no logo; then edited to a bald scalp with a sparse hair fringe '
'on the sides only'),
'terms_note': ('generated from no third-party source material; the provider terms do not claim ' 'terms_note': ('generated from no third-party source material; the provider terms do not claim '
'ownership of the output. The generator emits no real alpha channel, so the ' 'ownership of the output. The generator emits no real alpha channel, so the '
'background is keyed out locally by this script.'), 'background is keyed out locally by this script.'),
@@ -118,5 +121,13 @@ manifest.update({
'license': 'SIL Open Font License 1.1 (tools/branding/fonts/OFL.txt)'}, 'license': 'SIL Open Font License 1.1 (tools/branding/fonts/OFL.txt)'},
'bottom_fade_px': args.bottom_fade, 'bottom_fade_px': args.bottom_fade,
}) })
if args.generated_from is not None:
chain = manifest.get('mascot_derived_from', [])
manifest['mascot_derived_from'] = chain + [{
'file': str(args.generated_from.resolve().relative_to(root)),
'sha256': hashlib.sha256(args.generated_from.read_bytes()).hexdigest(),
'edit': 'AI edit (agy_edit): keep face, grin, thumbs up, shirt, pose and flat background; '
'change the hair to a bald scalp with a sparse fringe on the sides only',
}]
(source_tools / 'manifest.json').write_text(json.dumps(manifest, indent=2) + '\n') (source_tools / 'manifest.json').write_text(json.dumps(manifest, indent=2) + '\n')
print(out, canvas.size, canvas.mode, 'mascot', mascot.size) print(out, canvas.size, canvas.mode, 'mascot', mascot.size)