Add freshness bar, enhance overlays and renderers

- Add enemy freshness tracking (novelty bonus for repeated deploys)
- Add freshness bar to sidepanel enemy cards with penalty indicator
- Major overhaul of renderer-overlays.js (790+ lines for UI polish)
- Enhanced combat log, shop overlays, and inventory UI
- Improved weapon/upgrade display with partial ownership colors
- Added element icons and weakness/resistance indicators to cards
- Enhanced radial menu and tooltip system
- Add "stale/%" penalty text when freshness depleted
- Update play link to ffazeshift.net in index.html
This commit is contained in:
2026-06-17 11:58:17 -04:00
parent 6a710c3f03
commit 626879ed0c
21 changed files with 1884 additions and 312 deletions
+27 -6
View File
@@ -14,7 +14,15 @@ function render() {
// Blit cached background — O(1)
ctx.drawImage(_bgCanvas, 0, 0);
drawArenaRangeLine(cx, cy); // faint dashed ring at tower range
// World layer — apply camera zoom centred on tower
const _zoom = G.camera?.zoom ?? 1.0;
ctx.save();
ctx.translate(cx, cy);
ctx.scale(_zoom, _zoom);
ctx.translate(-cx, -cy);
drawGrid(cx, cy);
drawWeaponRanges(cx, cy); // alt-hold: per-weapon range rings
drawPortals();
drawAoeZones();
drawEnemyTrails();
@@ -22,14 +30,18 @@ function render() {
drawProjectiles();
drawChainArcs();
drawBeams();
drawFog(cx, cy); // dim beyond tower range
drawTower(cx, cy);
drawShield(cx, cy);
drawParticles();
drawFloaters();
drawArenaMask(W, H, cx, cy); // solid dark outside arena circle
drawArenaRing(cx, cy); // glowing border ring
ctx.restore(); // end world layer
// Mask/ring/streak operate in screen space — drawn AFTER world transform
drawArenaMask(W, H, cx, cy, _zoom);
drawArenaRing(cx, cy, _zoom);
drawStreak(cx, cy);
// UI layer — no camera transform
clearHitRegions();
_mountDropZones.length = 0;
_bagDropZones.length = 0;
@@ -38,9 +50,18 @@ function render() {
drawBrokeWarning();
drawSidePanel();
drawInventoryOverlay();
drawShopOverlay();
drawCommandOverlay();
drawArmoryOverlay();
drawWeaponDetailOverlay();
checkSellHold();
checkPrestigeHold();
drawThreatPanel();
drawPrestigeConfirm();
if (G.gameOver) drawGameOverPanel();
drawPauseOverlay();
drawMountInteraction(cx, cy);
drawDragGhost();
drawDragGhost(); // follows cursor — screen space, no zoom
drawTooltips();
}