Skip to content

Commit 88c68f6

Browse files
Publish the measured balance, on a build where a seed reproduces a run
Fourth 24-seed run, and the first whose numbers are worth writing down: the tiers are finally monotone. CADET 15/24 boss damage 4.7 29% untouched 52.8s PILOT 10/24 boss damage 4.9 14% untouched 47.2s ACE 5/24 boss damage 5.6 2% untouched 46.3s Against the baseline this whole series started from: 0.6 hull a boss fight and 57% of them finished without a scratch. Per boss at PILOT, which is the table that did the work -- an average over five bosses hides exactly the thing worth knowing, whether the first one anybody meets is a fight or a formality: S1 SENTINEL 2.3 hull 30s 8% untouched S2 HIVE MOTHER 7.5 hull 66s 25% S3 LANCE 2.3 hull 42s 18% S4 BULWARK 3.4 hull 42s 7% S5 WARDEN 9.7 hull 56s 7% HIVE MOTHER, the sector-2 boss, measured 1.0 hull and half its fights untouched before this series. Stopping the tuning here. The ladder is monotone and the shape is right; going further would be fitting the autopilot rather than the game, and the autopilot has perfect reaction and no pattern memory, which is not what a person has. Docs carry all of it now: the measured tables, the two economy leaks, the tier knob that paid the player back, and the determinism bug -- including that its first test passed with the bug deliberately reintroduced, because it traced only the one boss that has no walls. Screenshots regenerated. Full suite green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AKLqS4PgnCXrzKHDH8Cnzy
1 parent 4675a1e commit 88c68f6

7 files changed

Lines changed: 76 additions & 16 deletions

File tree

‎docs/img/pc-01-title.png‎

-87 Bytes
Loading

‎docs/img/pc-02-map.png‎

-772 Bytes
Loading

‎docs/img/pc-03-fight-crt.png‎

674 Bytes
Loading

‎docs/img/pc-03-fight.png‎

265 Bytes
Loading

‎docs/img/pc-04-boss.png‎

-123 Bytes
Loading

‎docs/img/pc-bosses.png‎

768 Bytes
Loading

‎pc/README.md‎

Lines changed: 76 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -229,9 +229,9 @@ boss, modules et canons muraux compris. Quatre coins cyan apparaissent autour
229229
du boss pour la signaler ; un cadre complet voudrait dire « blindé », alors la
230230
fenêtre a sa propre forme.
231231

232-
Le résultat mesuré : le combat tombe à **45 secondes**, les dégâts encaissés
233-
passent de 7,4 à 4,5 points de coque, et la tempête peut être bien plus
234-
méchante qu'elle n'aurait osé l'être sans la pause.
232+
Le résultat mesuré au moment de ce changement : le combat tombe de 60 à
233+
**45 secondes**, les dégâts encaissés de 7,4 à 4,5 points de coque, et la
234+
tempête peut être bien plus méchante qu'elle n'aurait osé l'être sans la pause.
235235

236236
### Des canons sur les murs
237237

@@ -302,12 +302,19 @@ Autre chose que la mesure a trouvée : la difficulté se réglait surtout par le
302302
d'ennemis en plus, donc 35 % de cristaux en plus, donc un meilleur vaisseau, et
303303
gagnait plus souvent que Cadet. Le curseur se battait contre lui-même.
304304

305-
Les trois niveaux se séparent maintenant sur la **cadence de tir** — qui ne
306-
rend rien au joueur — et sur la profondeur de la barre de coque, qui est
307-
volontairement large : un boss capable de prendre un tiers de la coque en une
308-
erreur a besoin d'une coque avec laquelle on peut se permettre des erreurs.
309-
Sinon « difficile » veut seulement dire « le premier coup termine la partie »,
310-
ce qui n'est pas de la difficulté, c'est de la fragilité.
305+
Resserrer l'écart n'a pas suffi, et il a fallu une deuxième mesure pour le voir :
306+
avec 0,85 d'ennemis, **Cadet mesurait plus dur que Pilote** — 12 victoires
307+
contre 13, des combats de boss plus longs (57,8 s contre 48,0) et plus de dégâts
308+
encaissés (5,4 contre 4,8), tout en tirant moins vite. Moins d'ennemis, moins de
309+
cristaux, un moins bon vaisseau, un combat plus long.
310+
311+
Les trois niveaux envoient maintenant **exactement le même nombre d'ennemis** et
312+
se séparent sur la **cadence de tir** — qui ne rend rien au joueur — et sur la
313+
profondeur de la barre de coque, qui est volontairement large : un boss capable
314+
de prendre un tiers de la coque en une erreur a besoin d'une coque avec laquelle
315+
on peut se permettre des erreurs. Sinon « difficile » veut seulement dire « le
316+
premier coup termine la partie », ce qui n'est pas de la difficulté, c'est de la
317+
fragilité.
311318

312319
## Structure
313320

@@ -378,6 +385,39 @@ exactement là où il est déjà le plus présent. Les trois régressions (un cr
378385
qui ne coupe rien, une rotation qui saute une variante, l'anti-répétition mal
379386
indexée) ont été introduites volontairement pour vérifier que le test les voit.
380387

388+
### Une graine ne reproduisait rien
389+
390+
Le pire défaut trouvé pendant cette passe ne faisait planter personne. La même
391+
graine, lancée trois fois de suite : **gagnée, perdue au secteur 4, perdue au
392+
secteur 5**.
393+
394+
Les motifs de boss et le comportement des ennemis tiraient leur hasard du
395+
`random` du module, pas du générateur de la partie. Rien ne plantait, aucun test
396+
ne tombait — le jeu n'était simplement pas reproductible. Ce qui veut dire que
397+
le banc d'équilibrage rapportait du bruit d'un lancement à l'autre comme si
398+
c'était l'effet d'un changement, et qu'une graine dans un rapport de bug ne
399+
reproduisait rien du tout.
400+
401+
Tout ce qui décide de l'issue d'un combat passe maintenant par le RNG de la
402+
partie : dérive du boss, phase des spirales, trou des murs, pluie, ordre des
403+
peignes de rayons, côté des canons muraux, décalage des modules, position et
404+
cadence des ennemis, dispersion du butin. Les particules, le shake et le champ
405+
d'étoiles restent volontairement sur le générateur global : ils ne peuvent
406+
changer aucune issue.
407+
408+
`test_determinism.py` prend l'empreinte d'une patrouille et des cinq boss, joués
409+
deux fois depuis la même graine avec la même séquence d'entrées, en **perturbant
410+
volontairement le générateur global entre les deux** pour qu'un tirage qui fuit
411+
ne puisse pas retomber juste par hasard. Sa première version passait alors que
412+
le bug était réintroduit exprès : elle ne suivait que le boss du secteur 2, et
413+
HIVE MOTHER n'a pas de murs. En suivant les cinq, le même bug fait tomber
414+
SENTINEL, BULWARK et WARDEN.
415+
416+
Son garde-fou — une graine différente doit changer l'empreinte — a lui aussi dû
417+
être assoupli. L'ouverture de LANCE ne tire qu'un seul dé, le sens de sa dérive,
418+
donc quatre graines d'affilée peuvent légitimement donner le même combat. Exiger
419+
qu'une graine précise diffère testait la graine, pas le jeu.
420+
381421
### Le pilote automatique est un instrument, et il a fallu le réparer
382422

383423
La première version était un champ de répulsion : additionner un vecteur qui
@@ -411,17 +451,37 @@ erreur à avoir quand les chiffres servent à régler la difficulté.
411451

412452
Mesures actuelles :
413453

454+
Toutes sur 24 graines, sur une version où une graine **reproduit** vraiment une
455+
partie (voir plus bas — pendant un moment ce n'était pas le cas, et les chiffres
456+
publiés mesuraient du bruit) :
457+
414458
| | |
415459
|---|---|
416-
| Taux de victoire (bot, 12 graines) | Cadet 8/12 · **Pilote 5/12** · As 2/12 |
417-
| Dégâts pris par boss | **4,5** points de coque (0,6 avant) |
418-
| Combats de boss sans une égratignure | **18 %** (57 % avant) |
419-
| Durée d'un combat de boss | **45 s** (30 s avant) |
420-
| Durée d'une partie gagnée | 12 à 16 min de combat |
421-
| Coût d'une image (p99) | **0,94 ms** sur un budget de 16,7 ms |
422-
| Pire cas mesuré | WARDEN phase 3 en coop, **102 projectiles** à l'écran |
460+
| Taux de victoire (bot) | Cadet 15/24 · **Pilote 10/24** · As 5/24 |
461+
| Dégâts pris par boss | **4,9** points de coque (0,6 avant) |
462+
| Combats de boss sans une égratignure | **14 %** (57 % avant) |
463+
| Durée d'un combat de boss | **47 s** (30 s avant) |
464+
| Durée d'une partie gagnée | 12 à 14 min de combat |
465+
| Coût d'une image (p99) | **1,11 ms** sur un budget de 16,7 ms |
466+
| Pire cas mesuré | WARDEN phase 3 en coop, **103 projectiles** à l'écran |
423467
| Construction des sons | 24 échantillons en **0,03 s** au démarrage |
424468

469+
Et boss par boss, au niveau Pilote — c'est le tableau qui a servi à régler la
470+
difficulté, parce qu'une moyenne sur cinq boss cache exactement ce qu'on veut
471+
savoir : est-ce que le *premier* boss rencontré est un combat ou une formalité ?
472+
473+
| Boss | Dégâts pris | Durée | Sans une égratignure |
474+
|---|---:|---:|---:|
475+
| S1 SENTINEL | 2,3 | 30 s | 8 % |
476+
| S2 HIVE MOTHER | 7,5 | 66 s | 25 % |
477+
| S3 LANCE | 2,3 | 42 s | 18 % |
478+
| S4 BULWARK | 3,4 | 42 s | 7 % |
479+
| S5 WARDEN | 9,7 | 56 s | 7 % |
480+
481+
HIVE MOTHER, le boss du secteur 2, mesurait **1,0 point de dégâts et la moitié
482+
de ses combats sans une égratignure** avant cette passe — de loin le plus faible
483+
des cinq, sur le boss que la plupart des gens rencontrent en deuxième.
484+
425485
## Licence
426486

427487
MIT, comme le reste du dépôt.

0 commit comments

Comments
 (0)