Devenue inutile depuis que le jeu spawne sur le nouveau bestiaire. Retire
la carte HTML tune-monsters + son rendu dans renderTuning + les handlers
save/reset + MONSTER_LABELS (orphelin). Le backend (table monsters,
MONSTER_TYPES/BOSS pour l'editeur de niveaux + boss) reste intact.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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>
treasures.js : section 'Bestiaire' (fetch /api/reference/bestiary,
BESTIARY_DB), monsterCard (blason image lazy + plages de stats + fourchette
d'ages via BESTIARY_AGE_NAMES + drapeaux/capacites), groupee par famille,
+ lien de nav. CSS .tz-blason. Reste : integration spawn (en attente du
choix profondeur->niveaux de Perco).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bestiaire fourni (945 entrees monstre x age) parse et replie selon le
modele demande par Perco : 1 ligne par monstre (js/bestiary.js, 150
monstres, stats de base = age le plus jeune en min/max + famille +
capacites + drapeaux vol/distance/magie/voit-cache + vitesse + nb attaques
+ blason) + table d'ages (8 multiplicateurs derives des donnees). db.js :
tables bestiary + monster_ages, seed, bestiaryAll/monsterAges,
setBestiary/setMonsterAge, resetCategory. server.js : /api/reference/
bestiary + /ages. Non destructif (le jeu tourne encore sur l'ancien
systeme). Etapes suivantes : encyclopedie, editeur admin, integration spawn.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Regle Perco : toute modif touche les 2 modes. game.js : TILE 24->48 ;
render() par coins (troll/monstre/tresor/lieu = portes+sortie) ; tryMove
ne fait plus attaquer ; adjacentMonster -> meme case (cheby 0) ;
sameCellMonsters + bouton attaque -> deroulant toujours affiche ;
dropBagItem/loot empilables ; moveMonster autorise l'empilement ;
demo=combat sur la case du troll. mp-client.js : deroulant toujours
affiche (>=1). Camera keepInView (game.js, partagee) appelee dans les 2
rendus ; #panel-center overflow auto + max-height.
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>
treasures.js : charge /api/reference/templates (TEMPLATES_DB) ; section
'Templates de drop' (templateCard reutilise GEAR_MOD_LABELS) ; menu .tz-nav
collant avec ancres vers chaque section (ids tz-sec-*) ; bouton flottant
#tz-top (remonter), visible apres 400px de scroll. window.scrollTo au lieu
du scrollTop d'element (la fenetre scrolle, .screen n'a pas d'overflow).
CSS : .tz-nav sticky, .tz-top, scroll-margin-top sur .tz-section.
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>
index.html reference css/js en ?v=__V__ ; handleStatic remplace __V__ par
APP_VERSION dans les reponses .html. Chaque deploiement change le jeton ->
le navigateur recharge le nouveau code sans vider le cache (cause du
'toujours pas' : ancien treasures.js en cache qui lisait le statique sans
les bonus magiques edites en base).
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>
- /api/reference/(gear|monsters|potions|scrolls) generalise ; treasures.js
lit aussi les plages de puissance potions/parchemins (powerLabel garde les
libelles speciaux -, X (fixe), set discret).
- Cache-Control: no-cache sur html/js/css (revalidation systematique) pour que
les MAJ et editions BDD soient prises sans vider le cache ; medias en cache 1j.
- POTION_POWER_DEFAULTS.pufPuff 0-2 -> 1-3 (incoherent avec le rollPower solo
corrige en 2.5.1) + migration db.init() des bases existantes (UPDATE cible).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Nouvel endpoint GET /api/reference/gear (db.gearAll()). treasures.js
recupere les equipements de la base de reference a chaque ouverture
(GEAR_DB) avec repli sur gear.js statique si injoignable (file://).
Les editions admin/sqlite-web sont desormais refletees sur le listing.
Intro de la section mise a jour (bonus phys + mag d'equipement).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PufPuff passe de potRand(0,2) a potRand(1,3) : le niveau 0 affichait
des formules absurdes (ATT -0 D3, VUE -(0+1), PV -2D3 si 0>=2). Biskot
(effet fixe, plage --) n'affiche plus de niveau du tout au lieu de
niv. 0. Table treasures.js pufPuff 0 a 2 -> 1 a 3.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Regle (demande Perco) : on lance les des puis on ajoute TOUJOURS les
deux bonus (physique = equipement, magique = potions/parchemins +
equipement magique), comme l'esquive le faisait deja. effTroll :
colonnes phys/mag rendues PURES (potion = magique, comptee une seule
fois) -> xxxFlat = phys + mag = total ajoute au jet. resolveAttack
additionne les deux (pickFlat supprime) ; opts.magic ne sert plus qu'a
choisir l'armure reductrice. Affichage : +total (phy +X . mag +Y)
coherent (fini le faux double comptage). Armure presentee comme
l'attaque : une seule ligne via fmtArmorLine au lieu de phy./mag.
separees. Tests smoke mis a jour vers le nouveau modele.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fmtStatLine affichait a la fois le +X agrege ET (phy +X . mag +X) quand
les deux saveurs etaient egales -> illusion d'un triple comptage. On
n'affiche plus le detail phys/mag QUE lorsqu'ils different reellement,
sinon un seul +X. degBonus reporte des deux cotes. Le combat etait deja
juste (pickFlat choisit une seule saveur).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Les regles #stats (flex label/valeur, .stat-val monospace aligne a
droite, .stat-hint) ne ciblaient que le solo -> etendues a #mp-stats.
Suppression du reliquat CSS #mp-effects .eq-line/.fx-empty qui
desalignait le message vide. Les deux fiches sont desormais identiques.
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>
Sur la fiche du troll du monde partagé, la décomposition phys/mag des
caracs (att/esq/deg/reg) disparaissait dès que les deux saveurs étaient
égales (ex. bonus de potion appliqué aux deux). Affichage désormais
systématique dès qu'un bonus existe. Panneaux latéraux 230 -> 270 px.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ATT/ESQ/DEG/REG d'équipement alimentent attFlat/esqFlat/degFlat/regFlat
dans effTroll (Gourdin = DEG +5 sur le jet, pas +5D3).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- js/scrolls.js : les 7 parchemins standards de Mountypedia (X 1-5),
effets via le système d'effets magiques, un seul jet de D3 par parchemin
- Effets de zone (rayon 3 cases) : Rune Explosive (dégâts aux monstres),
Yeu'Ki'Pic (VUE des monstres réduite, statut à durée)
- TOUR ±X*30 min converti en ±X PA par tour (PA min. 1)
- Drops : coffres (12 %), butin de monstres (25 %), pinceau éditeur,
validation serveur du kind « scroll »
- js/treasures.js : page encyclopédie des 25 potions et 7 parchemins
(niveau X, durée, formules), boutons accueil + en jeu
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Seules les notations « X D3 » de Mountypedia sont des jets de dés ;
« DEG +X » / « REG +X » sont des bonus fixes ajoutés au résultat
- Concerne Bonne Bouffe, Fertilité, Corruption, DjhinTonik,
Rhume/Grippe/Pneumonie, Biskot, KouleMann, Glacier
- Régénération bornée à 0 sous malus + affichage du signe corrigé
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Sang de Toh Réroh et PufPuff passent de D6 à D3 (conformes à Mountypedia)
- Un seul jet de XD3 par potion : le même total s'applique à ATT et ESQ
(Corruption, Rhume/Grippe/Pneumonie, PufPuff, Sang de Toh Réroh, Zet Crakdedand)
- Panneau des effets : suppression des mentions « (jet) » et « (jets inclus) »
- APP_VERSION réalignée sur le README (1.5.1)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Les 10 fiches compétences/sortilèges (coût en PA, type, jet de
résistance, effet de zone, limite par DLA, formules de jets, lore),
accessibles depuis l'accueil et en jeu. En partie, encart « Mes infos »
par talent de la race jouée : maîtrise actuelle et plafond, taux de
réussite sur les jets effectués, dernière utilisation et jets calculés
du troll. tryTalent compte désormais essais/réussites/dernier usage.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bloc détaillé à droite du journal pour chaque action : jets d'Attaque/
Esquive avec dés, coup critique, Seuil de Résistance et jet de
Résistance des sortilèges, progression de Maîtrise, dégâts, mise à
mort, butin et total de PX — y compris pour les attaques des monstres.
Ajout des coups critiques (dégâts ×2 si attaque ≥ 2 × esquive), du
butin de monstres (40 % : potion ou Mountyzédons) et du mode
?demo=combat pour les captures.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Table officielle : N-ième achat = N × base, caractéristique favorite à
12 PI, REG à 30 (Darkling 22), PV par tranche de 10 à 16 (Durakuir 12),
et armure naturelle en D3 achetable à 30 PI pour toutes les races
(réduction de dégâts jetée en D3 en plus de l'équipement).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Portes 🚪 (max 10/niveau) téléportant vers un autre niveau publié avec
troll conservé (PV, PI, équipement) ; clé d'auteur renvoyée au POST et
stockée en localStorage, PUT /api/levels/<id> protégé par X-Level-Secret,
section « Mes niveaux publiés » dans l'éditeur, objectifs de victoire
affinés (sortie > nettoyage, portes = continuation).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Éditeur visuel (terrain, monstres avec gabarits, objets, départ, sortie),
test en un clic, publication via une API node sans dépendance (server.js,
validation serveur, stockage JSON sur volume), écran « Niveaux de la
communauté » et liens partageables ?level=<id>. Le conteneur passe de
nginx à node:22-alpine.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>