--- title: EvoGame emoji: 🎮 colorFrom: gray colorTo: green sdk: static pinned: false --- # EvoGame — project page Static site: plain HTML/CSS/JS, no build step, no framework. It shows every game we ran EvoGame on twice — the initial generation (round 0) and the same game after 30 EvoGame rounds — plus one game that visitors play in the browser. Live: https://wenyiwu0111-evogame-page.static.hf.space (a public HF static Space) ## Run it locally ```bash python -m http.server 8765 # then open http://127.0.0.1:8765 ``` The page `fetch()`es JSON, so open it over HTTP, not as a `file://` path. Video, images and the playable builds are **not in this repo** (see *Media* below). By default they stream from the published site, so a fresh clone works with no extra files. To use a local copy instead, put it (or a symlink to it) at `./media` and open the page with `?media=local`: ```bash ln -s /path/to/evogame-page-media media # then http://127.0.0.1:8765/?media=local ``` ## Layout ``` index.html the page: game screen, hero, before/after, gallery, results, citation play.html standalone Godot web player (one shared engine, one game pack per build) static/css/base.css tokens + everything shared (cards, modal, charts, wipe comparison) static/css/v1.css this design's own pieces (game screen, spotlight, pair cards) static/js/core.js data loading, video scheduling, before/after wipe, game dialog, charts static/js/v1.js this page: what goes where static/data/evo.json one row per game: round-0 and round-30 scores, chosen demo, score curve static/data/evo//.json per-requirement before/after + judge rationales + 30-round timeline static/data/play.json the playable builds (engine + per-round .pck sizes) static/data/games.json the 280 initial generations across both engines (used by v2–v4 only) _build/*.py regenerate everything from the experiment runs (see below) v2/ v3/ v4/ earlier design drafts kept for reference; the live page is v1 (root) ``` `static/js/core.js` is shared by all four designs — change it carefully. ## Media (not in this repo) Built into `/storage/admin/wenyi/evogame-page-media` on the lab machine: ``` pairs///p0.mp4, final.mp4, p0.webp, final.webp the same demo on both builds (54 MB) play/engine/godot.js, godot.wasm.gz, godot.audio*.js one shared Godot 4.6.2 web engine (9 MB gz) play////index.pck one game pack per playable build hero_evo.mp4 / .webp the moving background: 30 games in one video baseline/... clips for the v2–v4 drafts ``` Everything the live site needs is also in the Space repo, so the quickest way to get a full working copy is to clone the Space (below). ## Rebuild the data Needs the experiment runs on the lab machine, and Godot 4.6.2 with web export templates for `build_web.py`. ```bash python _build/build_pairs.py # before/after clips + evo.json + per-game detail JSON python _build/build_hero.py --evo --out hero_evo --cols 5 --rows 6 --tile 320x180 --gap 3 python _build/build_web.py --games godot_qwen/platformer-dig-descent # playable web builds python _build/build_media.py # only for the v2–v4 drafts (280 baseline games) ``` `build_pairs.py --reuse-media` rebuilds the JSON without re-encoding video. ## Deploy The live site is the HF Space `WenyiWU0111/evogame-page` (sdk: static). It holds the page **and** its media, so a clone is a complete, runnable copy: ```bash git clone https://huggingface.co/spaces/WenyiWU0111/evogame-page cd evogame-page && python -m http.server 8765 ``` Push to that repo to publish (needs write access on the Space). The Space copy differs from this repo in two small ways, both injected at deploy time: `window.EVO_MEDIA = "media"` pins the media folder, and `window.EVO_NO_SWITCH = true` hides the v1–v4 switcher. ## Notes for whoever picks this up - Scores are ×100 of the GameCraft-Bench reward, judged by Qwen3.8-27B over three passes; round 0 and round 30 use the same scorer, judge and demo scripts, so the two sides are comparable. - Six games are missing from the gallery because their round 30 had not finished scoring; rerun `build_pairs.py` to pick them up. - Authors, paper/code/dataset links and the BibTeX entry are still placeholders in `index.html`. - Videos never autoplay more than a handful at a time: cards hold a poster until they scroll into view, at most 12 clips play at once, and the hero is one pre-composited video rather than 30.