bestiary.js regenere avec champ gender (m/f, liste curatee de ~31
feminins) + export AGE_NAMES_F. db.js : gender en colonne (BESTIARY_TXT_KEYS)
+ migration ALTER TABLE ... ADD COLUMN gender AVANT le seed, puis UPDATE
du genre des lignes existantes. game.js buildBestiaryMonster(.., ageNamesF, ..)
: nom = 'Nom [Age]' avec age accorde au genre. mp.js + makeMonster passent
AGE_NAMES_F. treasures.js : age affiche au feminin. admin : champ Genre.
Tests : format + feminin (Plante [Doyenne]).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
game.js : buildBestiaryMonster(list, ageMults, ageNames, depth, x, y)
partage - tranche de niveau autour de la profondeur (bande +-3), age au
hasard dans [minAge,maxAge], multiplicateur applique, stats tirees dans
les plages, nom = prefixe d'age + nom, emoji de famille, attMag/degMag si
magic. makeMonster bascule dessus (repli ancien systeme si BESTIARY absent).
index.html charge js/bestiary.js (solo). mp.js spawnMonster -> bestiaire
(db.bestiaryAll + db.monsterAges, tunes admin) ; worldDepth borne a 45.
Editeur de niveaux + Behemoth gardent l'ancien systeme. Tests mp.js mis a
jour (anciens tests de spawn 7-monstres remplaces par tests bestiaire).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
mp.js : deplacement libre (se deplacer n'attaque plus, on s'empile) ;
moveMonsterMP autorise l'empilement de monstres ; drop multi-tresors ;
loot de monstre empilable. mp-client.js : rendu par COINS (regroupement
par case, troll haut-gauche / monstre haut-droite / tresor bas-gauche /
lieu bas-droite, badge ×N) ; bouton d'attaque -> menu deroulant quand
plusieurs monstres atteignables (cheby<=1, meme case incluse). CSS
.mp-attack-sel. Tests mp.js mis a jour (drop empile, deplacement libre).
PvP (trolls) et solo : a faire.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- db.js : table templates + seed des 19 templates du CSV (mappes vers les
mods + nouveau champ tour), templatesAll/setTemplate/resetCategory.
- server.js : /api/reference/templates.
- mp.js : config templateChance (0-100, bornee) ; applyGearTemplates applique
jusqu'a 3 templates (6 si 2 mains), distincts, proba par emplacement,
fusionne les mods (dont tour) et compose le nom ; applique au spawnItem.
Solo vanilla.
- gear.js : GEAR_MOD_LABELS += tour (affichage 'TOUR +X mn').
- admin.html : champ Proba de template / emplacement.
- test/mp.js : test des templates (nb selon mains, distincts, proba 0).
Note : effet gameplay de tour (DLA) non cable, en attente de la regle.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
adminSetTuning ne fait plus resetCategory + reapplique tout (ce qui
ecrasait les editions sqlite-web) : mises a jour ciblees des seuls objets
fournis (valeurs absolues), sans toucher au reste. Le bouton reset passe
par patch.reset (tableau de categories). admin.html : collectTuning
renvoie les objets MODIFIES dans la session (data-init) avec leurs
valeurs completes. Tests : non-regression (edition externe preservee)
+ mise a jour du test de reset.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Le mode multi reprend exactement le panneau a onglets « Caracteristiques /
Effets » du solo : meme structure HTML, badge du nombre d'effets, et
l'onglet Effets passe par renderEffectsPanel (cartes buff/malus + total)
au lieu de la liste simplifiee. switchLeftTab generalise avec un prefixe
("" solo / "mp-" multi) ; le serveur renvoie potionEffects complets pour
alimenter le total des modificateurs. Reste seule la difference de fond
Tour (solo) vs DLA temps reel (multi).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>