Rename to Work-Death Balance, add mascot favicon and rebalance rifle/grenade damage
This commit is contained in:
+40
-19
@@ -1,7 +1,8 @@
|
||||
# Loading screen branding
|
||||
# Work-Death Balance — loading screen and favicon
|
||||
|
||||
The stock Godot boot splash (logo plus "GODOT Game engine") is replaced by the
|
||||
"Mat Games" mascot on a black background. This applies to both surfaces:
|
||||
The game is named **Work-Death Balance** in the menu, native window, HTML title,
|
||||
description and loading screen. **MatGames** remains the studio signature.
|
||||
The stock Godot boot splash is replaced by the existing nerd-zombie mascot on black. This applies to both surfaces:
|
||||
|
||||
- the browser loading screen: the exported `index.png` referenced by
|
||||
`<img id="status-splash">` in the HTML shell, drawn over `#status`;
|
||||
@@ -10,10 +11,10 @@ The stock Godot boot splash (logo plus "GODOT Game engine") is replaced by the
|
||||
## Asset
|
||||
|
||||
`assets/branding/boot_splash.png`, 1024x1315, palette PNG with alpha
|
||||
(256 colors, 95 alpha levels), about 171 KB. Subject: cartoon zombie head and bust,
|
||||
(256 colors, antialiased alpha), about 174 KB. Subject: cartoon zombie head and bust,
|
||||
bald scalp with a sparse hair fringe on the sides, thick nerd glasses, unsettling grin,
|
||||
thumbs up, with "MatGames" (one word, no space) in a phosphor-terminal typeface and
|
||||
the subtitle `"...because he was bored..."` beneath it.
|
||||
thumbs up, with **Work-Death Balance** in the VT323 phosphor-terminal typeface and
|
||||
the subtitle `MatGames — "...because he was bored..."` beneath it.
|
||||
|
||||
Provenance is recorded in `tools/branding/manifest.json`:
|
||||
|
||||
@@ -34,7 +35,7 @@ Provenance is recorded in `tools/branding/manifest.json`:
|
||||
and redistribution, including commercially, as long as the font is not sold on its
|
||||
own. SHA256 `cf4de751ada78ceac033dbe16a687742939995b77bc2a052ae17a4957958594d`.
|
||||
|
||||
Only the final PNG lives under `assets/`, so the raw source and the font are not
|
||||
Only the final splash/icon PNGs live under `assets/`, so the raw source and the font are not
|
||||
packed into the export (`tools/*` is already excluded by the export preset).
|
||||
|
||||
## Composition and keying
|
||||
@@ -49,14 +50,22 @@ packed into the export (`tools/*` is already excluded by the export preset).
|
||||
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;
|
||||
5. draws the title with VT323 in amber over a blurred glow layer, plus an optional
|
||||
second line. Defaults are the one-word `MatGames` and the subtitle
|
||||
`"...because he was bored..."`; `--title`, `--subtitle` (empty to omit) and
|
||||
second line. Defaults are `Work-Death Balance` and the subtitle
|
||||
`MatGames — "...because he was bored..."`; `--title`, `--subtitle` (empty to omit) and
|
||||
`--subtitle-height` change them. A 30 px `--bottom-padding` band is left under the
|
||||
text so the shell progress bar does not cross the lettering;
|
||||
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;
|
||||
7. invokes `tools/make_favicon.py` with the already keyed original 1024×1024 mascot.
|
||||
A head-only polygon excludes the hand and bust, then draws the face inside a dark
|
||||
rounded badge with an amber outline. No new AI generation or second chroma key.
|
||||
The 512×512 RGBA master is `assets/branding/work_death_icon.png`; a 32×32 review
|
||||
preview is kept in `tools/branding/favicon_preview_32.png`. Provenance and SHA256
|
||||
are recorded under `favicon` in the same manifest.
|
||||
|
||||
```sh
|
||||
python3 tools/make_boot_splash.py tools/branding/raw/agy_generate_20261010234423_0.jpg
|
||||
python3 tools/make_boot_splash.py tools/branding/raw/agy_edit_20261011000309_0.jpg \
|
||||
--provenance tools/branding/raw/agy_generate_20261010234423_0.jpg \
|
||||
--provenance tools/branding/raw/agy_edit_20261010235510_0.jpg
|
||||
```
|
||||
|
||||
`--colors 0` keeps 32-bit RGBA if a future artwork needs smoother gradients.
|
||||
@@ -64,6 +73,8 @@ python3 tools/make_boot_splash.py tools/branding/raw/agy_generate_20261010234423
|
||||
## Godot settings
|
||||
|
||||
```ini
|
||||
config/name="Work-Death Balance"
|
||||
config/icon="res://assets/branding/work_death_icon.png"
|
||||
boot_splash/bg_color=Color(0, 0, 0, 1)
|
||||
boot_splash/image="res://assets/branding/boot_splash.png"
|
||||
boot_splash/show_image=true
|
||||
@@ -77,16 +88,26 @@ ratio; the exported shell confirms the result with the classes
|
||||
|
||||
## Verification
|
||||
|
||||
- Exported `index.png` has the same 1024x1315 dimensions as the master. It is
|
||||
re-encoded by the exporter to 32-bit RGBA (about 528 KB), so the bytes are not
|
||||
identical; composited on black the two images differ by at most 5.8/255 on
|
||||
0.11% of pixels, all with alpha below 20, i.e. invisible. The release keeps the
|
||||
171 KB master in the repository and ships a gzip sidecar.
|
||||
- Exported `index.png` has the same 1024×1315 dimensions as the master. Godot
|
||||
re-encodes palette images to RGBA, so bytes need not match the source PNG.
|
||||
- Web preset `html/export_icon=true` uses the project icon through Godot's official
|
||||
exporter. It creates `index.icon.png` (512×512) and `index.apple-touch-icon.png`
|
||||
(180×180) with the corresponding HTML links. No generated HTML patch or default
|
||||
Godot favicon remains; both files are included in the immutable release/hash check.
|
||||
Firefox's runtime favicon is a generated blob URL; decoded pixels were compared
|
||||
with the exported PNG and match exactly (zero mean/max difference).
|
||||
- The exported shell contains no "Game engine" text and the splash image has an
|
||||
empty `alt`.
|
||||
- `html/export_icon=false`, so no favicon is exported: the browser tab still shows
|
||||
a default icon. Using the mascot as favicon is a possible follow-up.
|
||||
- The legacy URL `/pub/zombie-fps/`, score API and `zombie_fps_*` localStorage keys
|
||||
intentionally remain unchanged to preserve bookmarks and browser identity.
|
||||
- Native `user://` moves with the project name. `player_profile.gd` imports the old
|
||||
sibling `Zombie Room FPS/zombie_fps_profile.cfg` only when the new profile is
|
||||
absent, never modifies the source and never replaces an existing new profile.
|
||||
Name, ID, best score and name-lock flag are retained; migration has isolated tests.
|
||||
The actual local migration was also verified byte-identical, old file unchanged.
|
||||
- On a phone in landscape the splash is scaled to fit the height, so the mascot
|
||||
appears fairly small; a landscape variant (mascot beside the title) would fill
|
||||
more of the screen if that is wanted.
|
||||
- All eleven test suites still pass; this change touches no gameplay code.
|
||||
- `test_rebalance_branding.gd` checks title, icon, export setting and exact damage
|
||||
values; `test_player_profile.gd` includes five non-destructive migration checks.
|
||||
Both suites also pass in the GDExtension-free staging project.
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# Classic HUD, automatic reload, furniture navigation, death audio
|
||||
|
||||
## Work-Death Balance damage tuning
|
||||
|
||||
- Player rifle: **17.5 damage** per body hit (previously 35), using the float
|
||||
`Player.BULLET_DAMAGE` constant. Head multipliers remain zombie ×2.5 / boss ×1.5.
|
||||
- Grenade explosion: **320 maximum damage** (previously 160), same 5 m linear
|
||||
falloff, wall occlusion, self-damage and 15 s cooldown. At 1 m it deals 256;
|
||||
at 2.5 m it deals 160; outside 5 m it deals none.
|
||||
- Alien Grunt hornet damage is **unchanged**, including its progression by rank.
|
||||
- `tools/test_rebalance_branding.gd`: 14 checks, including real rifle body/head
|
||||
hits and exact explosion/self-damage values. All previous gameplay suites pass.
|
||||
|
||||
## HUD
|
||||
|
||||
`scripts/game_hud.gd` replaces the debug-style text block with translucent black
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
not add environmental destruction (the existing zombie-entry glass shatter is unchanged).
|
||||
- **No 4-second fuse anymore**. A lost projectile is deleted after 15 seconds without
|
||||
an explosion, avoiding orphan nodes or delayed airborne blasts.
|
||||
- Blast radius **5 m**, maximum damage **160**, linear falloff; a world-mask ray prevents
|
||||
- Blast radius **5 m**, maximum damage **320**, linear falloff; a world-mask ray prevents
|
||||
damage through walls. The living thrower is still included.
|
||||
|
||||
## Original Half-Life explosion
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
# Classifica globale (punteggi) — Zombie Room FPS
|
||||
# Classifica globale (punteggi) — Work-Death Balance
|
||||
|
||||
Sistema di punteggi online: schermata iniziale con classifica e nome del giocatore,
|
||||
microservizio sul bastion, invio del punteggio alla morte.
|
||||
@@ -31,7 +31,7 @@ File coinvolti:
|
||||
| `scripts/start_screen.gd` | menu: nome, pulsante GIOCA, classifica |
|
||||
| `tools/test_scores_api.py` | 42 controlli sul servizio (funzionalità, validazione, limiti) |
|
||||
| `tools/test_leaderboard.gd` + `.sh` | 14 controlli sul client, contro un'API locale usa e getta |
|
||||
| `tools/test_player_profile.gd` | 21 controlli sul profilo (nome, id, riparazioni) |
|
||||
| `tools/test_player_profile.gd` | 26 controlli sul profilo (nome, id, riparazioni, migrazione dopo rinomina) |
|
||||
| `tools/test_start_screen.gd` | 10 controlli sulle regole del menu |
|
||||
|
||||
## 2. Contratto dell'API
|
||||
@@ -198,7 +198,7 @@ sh tools/test_leaderboard.sh # 14 controlli
|
||||
|
||||
# profilo e menu (menu: serve un display)
|
||||
$HOME/.local/opt/godot-4.7.1/Godot_v4.7.1-stable_linux.x86_64 --headless --path . \
|
||||
--script res://tools/test_player_profile.gd # 21 controlli
|
||||
--script res://tools/test_player_profile.gd # 26 controlli
|
||||
$HOME/.local/opt/godot-4.7.1/Godot_v4.7.1-stable_linux.x86_64 --path . \
|
||||
--rendering-method gl_compatibility --script res://tools/test_start_screen.gd # 10 controlli
|
||||
```
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# Web build and compressed deployment
|
||||
|
||||
## Work-Death Balance / damage tuning: 118709d117376527
|
||||
|
||||
Renames the game in menu, native window, HTML title/description and loading screen;
|
||||
MatGames remains the studio signature. New nerd-zombie dark/amber favicon and Apple
|
||||
icon, exported through `html/export_icon=true`; see `docs/BRANDING.md`.
|
||||
|
||||
- Player rifle 35 -> 17.5 damage, grenade maximum 160 -> 320; alien hornet damage,
|
||||
head multipliers, blast radius, occlusion and cooldown unchanged.
|
||||
- Native rename migration copies the old profile only if the new one is absent;
|
||||
old source remains unchanged. Actual local migration verified byte-identical.
|
||||
- Browser name/ID/best/lock fingerprint unchanged before/after the rename.
|
||||
- All 17 Godot suites + 42 API checks passed; 14 exact-damage/branding checks and
|
||||
26 profile checks repeated in GDExtension-free staging.
|
||||
- PCK 7,029,108 bytes (gzip 3,826,014); main gzip payload 13,975,158 bytes.
|
||||
- 16 release files SHA256-verified; HTTPS PCK and favicon cmp-identical to local.
|
||||
Favicon `index.icon.png` 512x512; `index.apple-touch-icon.png` 180x180.
|
||||
- Browser: loading screen and menu reviewed, title/active script correct; the
|
||||
runtime favicon's decoded pixels exactly match the exported icon (zero difference).
|
||||
- Atomic root swap, backup `/home/debian/zombie-fps-backups/index-before-work-death-118709d117376527.html`.
|
||||
- URL/API/storage keys unchanged; no DB/nginx/API change and no production test
|
||||
submissions. Previous `86c32ea9f5a4470e` still HTTP 200; older releases retained.
|
||||
|
||||
## Alien Grunt boss release: 86c32ea9f5a4470e
|
||||
|
||||
Every tenth wave is a single teleporting Alien Grunt, with progressively increasing
|
||||
|
||||
Reference in New Issue
Block a user