Tourismustal: Megabauwerke + Figuren-Feinschliff
- Merge-Mechanik: 4 gleiche 1x1-Gebaeude im Quadrat verschmelzen zum 2x2-Megabauwerk. Skaleneffekt als Lernmoment: 4-fache Leistung, nur 3-fache Betriebskosten (Erklaerkarte beim ersten Mal). Level = Maximum der Teile, Abriss-Erloes auf 4-fachem Bauwert, Bahnen/Bus/Bikepark ausgenommen. Rendering zentriert und 1.75x skaliert. - Gaeste stehen nicht mehr im Wasser (dwell auf Wasser -> sofort ans Ufer). - Skifahrer schimpft "#*!", wenn ihm der Schnee unterm Ski ausgeht. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -448,15 +448,23 @@ export class IsoRenderer {
|
||||
if (!ct || ct.terrain === 'water' || !liftSkiable(s, ct.elev)) {
|
||||
g.mode = 'walk'; g.route = []; g.nextLift = null; g.longDwell = false;
|
||||
g.tx = g.x + (Math.random() - 0.5) * 2; g.ty = g.y + 1.5;
|
||||
this._say(g, '#*!', 4000); // schimpft: Schnee zu Ende, Ski getragen!
|
||||
}
|
||||
}
|
||||
if (g.mode === 'crashed') { g.moving = false; continue; } // liegt, wartet auf Bergung
|
||||
|
||||
if (g.mode === 'dwell') { // verweilen (essen, schauen)
|
||||
g.wait -= dt;
|
||||
g.moving = false;
|
||||
if (g.wait <= 0) this._nextActivity(g);
|
||||
continue;
|
||||
// Niemand steht im Wasser herum: sofort ans Ufer weitergehen
|
||||
const wt = s.map[Math.round(g.y)]?.[Math.round(g.x)];
|
||||
if (wt?.terrain === 'water') {
|
||||
const d = this._randomDestination();
|
||||
g.mode = 'walk'; g.longDwell = false; g.tx = d.c; g.ty = d.r;
|
||||
} else {
|
||||
g.wait -= dt;
|
||||
g.moving = false;
|
||||
if (g.wait <= 0) this._nextActivity(g);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (g.mode === 'ride') { // sitzt sichtbar im Sessel
|
||||
@@ -1664,17 +1672,18 @@ export class IsoRenderer {
|
||||
_drawBuilding(type, x, y, tile) {
|
||||
const ctx = this.ctx;
|
||||
const level = tile.level || 1;
|
||||
// 2×2-Gebäude: zentriert über dem Areal zeichnen (Anker = links oben)
|
||||
if ((BUILDINGS[type]?.size || 1) > 1) {
|
||||
const half = (BUILDINGS[type].size - 1) / 2;
|
||||
const ctr = this.tileToWorld(tile.c + half, tile.r + half, tile.elev);
|
||||
// 2×2-Gebäude (Bikepark oder Megabauwerk): zentriert über dem Areal
|
||||
const isBig = (BUILDINGS[type]?.size || 1) > 1 || tile.mega;
|
||||
if (isBig) {
|
||||
const ctr = this.tileToWorld(tile.c + 0.5, tile.r + 0.5, tile.elev);
|
||||
x = ctr.x; y = ctr.y;
|
||||
}
|
||||
// KI-Sprites für Gebäude (Bahnen & Rodelbahn bleiben Vektor: dynamisch)
|
||||
const spriteName = type === 'hotel' && level >= 2 ? 'hotel2' : type;
|
||||
const spriteScale = type === 'hotel'
|
||||
let spriteScale = type === 'hotel'
|
||||
? (level >= 3 ? 1.15 : 1)
|
||||
: [1, 1.15, 1.3][Math.min(2, level - 1)];
|
||||
if (tile.mega) spriteScale *= 1.75; // Megabauwerk füllt sein 2×2-Areal
|
||||
if (type !== 'lift' && type !== 'gondola' && type !== 'sled'
|
||||
&& this._sprite(spriteName, x, y, spriteScale)) {
|
||||
this._badge(x + 18, y - 34, level);
|
||||
|
||||
Reference in New Issue
Block a user