v2.11.0 : bestiaire etape 4 - les monstres du bestiaire apparaissent (2 modes)
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>
This commit is contained in:
@@ -24,6 +24,7 @@ const g = require("./js/game.js");
|
||||
const p = require("./js/potions.js");
|
||||
const sc = require("./js/scrolls.js");
|
||||
const gearLib = require("./js/gear.js");
|
||||
const bestiaryLib = require("./js/bestiary.js");
|
||||
const db = require("./db.js");
|
||||
|
||||
/* ---------- Configuration par défaut (tout est réglable via l'admin) ---------- */
|
||||
@@ -45,7 +46,7 @@ const DEFAULT_CONFIG = {
|
||||
};
|
||||
|
||||
const CONFIG_BOUNDS = {
|
||||
mapW: [24, 80], mapH: [16, 60], worldDepth: [1, 5],
|
||||
mapW: [24, 80], mapH: [16, 60], worldDepth: [1, 45],
|
||||
monsterDlaMinSec: [5, 3600], monsterDlaMaxSec: [5, 7200],
|
||||
trollDlaSec: [5, 3600], pollSec: [1, 60],
|
||||
monsterTarget: [0, 120], repopSec: [10, 3600],
|
||||
@@ -158,16 +159,12 @@ function monsterDlaMs(config) {
|
||||
function spawnMonster(world, now = Date.now()) {
|
||||
const pos = randomFloor(world);
|
||||
if (!pos) return null;
|
||||
// même logique que makeMonster (pool par profondeur + gabarit d'âge),
|
||||
// mais sur les types tunés par l'admin
|
||||
// Bestiaire : on tire un monstre dont le niveau tombe dans la tranche de la
|
||||
// profondeur, avec un âge au hasard. Données de la base (tunées admin) +
|
||||
// multiplicateurs d'âge.
|
||||
const depth = world.config.worldDepth;
|
||||
const types = tunedMonsterTypes().filter(t => !t.boss);
|
||||
const pool = types.filter(t => t.level <= depth + 1 && t.level >= Math.max(1, depth - 2));
|
||||
const list = pool.length ? pool : types;
|
||||
const type = list[Math.floor(Math.random() * list.length)];
|
||||
const tplMax = Math.min(g.TEMPLATES.length - 1, depth - 1);
|
||||
const tpl = g.TEMPLATES[Math.floor(Math.random() * (tplMax + 1))];
|
||||
const m = g.applyTemplate(type, tpl, pos.x, pos.y);
|
||||
const m = g.buildBestiaryMonster(db.bestiaryAll(), db.monsterAges().map(a => a.mult), bestiaryLib.AGE_NAMES, depth, pos.x, pos.y);
|
||||
if (!m) return null;
|
||||
m.id = world.nextId++;
|
||||
m.dlaMs = Math.round(monsterDlaMs(world.config));
|
||||
m.nextDla = now + m.dlaMs;
|
||||
|
||||
Reference in New Issue
Block a user