mirror of
https://github.com/Such-Software/wownerogue.git
synced 2026-10-17 22:31:26 +02:00
fix(sp): revert dungeon to legacy renderer + fix splash (working game restored)
The render-kit SP dungeon shipped without a player-centered camera or entity sprites, so it drew the whole level tiny in a corner with a red-dot monster. Disable it and fall back to the proven legacy renderer (original tiles, real monster, centered view) until the kit has a camera + sprites. RK.SPGame/spRenderPicker kept but dormant (one flag to re-enable). Splash legend: draw every icon (incl. the player) as a uniform grid tile — no avatar overlay — so the four rows align AND the player shows the original hero tile.
This commit is contained in:
+10
-24
@@ -288,31 +288,17 @@ var Game = {
|
||||
},
|
||||
|
||||
_drawGameScreen: function() {
|
||||
// The render-kit dungeon path (RK.SPGame) is DISABLED until it has a player-centered camera
|
||||
// + real monster/entity sprites — without those it rendered the whole level tiny in a corner
|
||||
// with a red-dot monster. Until then the single-player game uses the proven legacy renderer.
|
||||
if (window.RK && RK.SPGame && RK.SPGame.hide) RK.SPGame.hide();
|
||||
if (!this._ensureDisplay()) return;
|
||||
const gameState = GameState.getGameStateForRender();
|
||||
|
||||
// Prefer the render kit (Tiled / ASCII / Iso / 3D + unlocked packs) for the dungeon — it
|
||||
// draws its own lighting/FX and the player sprite. The legacy ROT renderer is the fallback
|
||||
// (returns here only if the kit is unavailable or a render throws), so the game never blanks.
|
||||
var rk = false;
|
||||
if (window.RK && RK.SPGame && RK.SPGame.available()) {
|
||||
RK.SPGame.show();
|
||||
rk = RK.SPGame.render(gameState, {
|
||||
cryptoType: (window.ScreenManager && ScreenManager._cryptoType) || undefined,
|
||||
playerAppearance: (window.SinglePlayerAvatar && SinglePlayerAvatar.currentAppearance)
|
||||
? SinglePlayerAvatar.currentAppearance() : null,
|
||||
isSpectating: this._isSpectating
|
||||
});
|
||||
}
|
||||
|
||||
if (!rk) {
|
||||
if (window.RK && RK.SPGame) RK.SPGame.hide();
|
||||
if (!this._ensureDisplay()) return;
|
||||
RenderEngine.drawGameScreen(gameState);
|
||||
// JUICE: keep the FX overlay aligned to the base canvas and feed it the player's
|
||||
// screen-space position so its torch lighting tracks the camera.
|
||||
if (window.FX) {
|
||||
try { this._fxSyncLighting(); } catch (e) { /* best-effort */ }
|
||||
}
|
||||
RenderEngine.drawGameScreen(gameState);
|
||||
// JUICE: keep the FX overlay aligned to the base canvas and feed it the player's screen-space
|
||||
// position so its torch lighting tracks the camera.
|
||||
if (window.FX) {
|
||||
try { this._fxSyncLighting(); } catch (e) { /* best-effort */ }
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -175,23 +175,11 @@ var ScreenManager = {
|
||||
const centerX = Math.floor(this._screenWidth / 2) - 10;
|
||||
const textX = centerX + ICON_COLS + 1; // one fixed text column for every row
|
||||
for (let item of legendItems) {
|
||||
let iconDrawn = false;
|
||||
|
||||
if (item.role === "player" && window.SinglePlayerAvatar && window.SinglePlayerAvatar.drawLegendIcon) {
|
||||
iconDrawn = window.SinglePlayerAvatar.drawLegendIcon(centerX, y, {
|
||||
fallbackTile: item.tile,
|
||||
cols: ICON_COLS
|
||||
});
|
||||
}
|
||||
|
||||
// Grid-tile icons: centre the (1-cell) glyph within the 2-cell slot so it aligns under
|
||||
// the player sprite above it.
|
||||
if (!iconDrawn) {
|
||||
const glyph = window.options?.tileMap?.hasOwnProperty(item.tile) ? item.tile : "?";
|
||||
const gx = centerX + Math.floor((ICON_COLS - (glyph.length || 1)) / 2);
|
||||
display.draw(gx, y, glyph, "transparent", "transparent");
|
||||
}
|
||||
|
||||
// Draw EVERY icon (incl. the player's original hero tile) as a grid tile — no avatar
|
||||
// overlay — so all four share a left edge + baseline and the hero is the plain tile.
|
||||
const glyph = window.options?.tileMap?.hasOwnProperty(item.tile) ? item.tile : "?";
|
||||
const gx = centerX + Math.floor((ICON_COLS - (glyph.length || 1)) / 2);
|
||||
display.draw(gx, y, glyph, "transparent", "transparent");
|
||||
this.drawText(textX, y, item.text);
|
||||
y++;
|
||||
}
|
||||
|
||||
@@ -30,8 +30,13 @@
|
||||
doc().head.appendChild(s);
|
||||
}
|
||||
|
||||
// Disabled until the single-player render-kit path (RK.SPGame) has a camera + entity sprites.
|
||||
// Keeping the module wired so re-enabling is a one-line flip.
|
||||
var ENABLED = false;
|
||||
|
||||
function build() {
|
||||
var h = host();
|
||||
if (!ENABLED) { if (h) h.classList.add('hidden'); return; }
|
||||
if (!h || !RK.RENDER_MODES || !RK.SPGame) return;
|
||||
ensureStyle();
|
||||
h.innerHTML = '';
|
||||
|
||||
Reference in New Issue
Block a user