From 9292634f2f8d71a53879ff07e1330c671b207d51 Mon Sep 17 00:00:00 2001
From: historia <[not public]>
Date: Mon, 6 Jul 2026 23:05:04 -0400
Subject: feat: split the concept of hidden and impassable exits. add
player_flag for discovered hidden exits.
---
internal/admin/static/map.js | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
(limited to 'internal/admin/static/map.js')
diff --git a/internal/admin/static/map.js b/internal/admin/static/map.js
index 0dab98c..8080451 100644
--- a/internal/admin/static/map.js
+++ b/internal/admin/static/map.js
@@ -253,10 +253,12 @@ function renderMap(data) {
if (!fr || !tr) return;
var x1 = fr.x * CELL + CELL/2, y1 = fr.y * CELL + CELL/2;
var x2 = tr.x * CELL + CELL/2, y2 = tr.y * CELL + CELL/2;
+ if (l.always_blocked) {
+ g += '';
+ return;
+ }
if (l.hidden) {
- // Hidden course-link exit: distinct color (map_course, ~#1B6FC0) and
- // tighter dashed arrow style.
- g += '';
+ g += '';
return;
}
var c = blendColors(fr.color, tr.color).replace('#','');
@@ -1232,15 +1234,18 @@ function renderExitsSection(r) {
var setFlags = (typeof exit === 'object' && exit.set_flags) ? exit.set_flags : null;
var setPlayerFlags = (typeof exit === 'object' && exit.set_player_flags) ? exit.set_player_flags : null;
var hidden = (typeof exit === 'object' && exit.hidden) ? exit.hidden : false;
- var isConditional = !!(cond || bmsg || setFlags || setPlayerFlags || hidden);
+ var alwaysBlocked = (typeof exit === 'object' && exit.always_blocked) ? exit.always_blocked : false;
+ var isConditional = !!(cond || bmsg || setFlags || setPlayerFlags || hidden || alwaysBlocked);
var isBidi = mapData && mapData.links && mapData.links.some(function(l) {
return l.bidirectional && ((l.from === r.id && l.to === target) || (l.from === target && l.to === r.id));
});
h += '
';
h += '' + d + '';
h += '# ' + target + '';
+ if (alwaysBlocked) h += 'Impassable';
if (bmsg) h += 'Blocked: ' + esc(bmsg) + '';
if (cond) h += 'Conditional';
+ if (hidden) h += 'Hidden';
h += '';
if (isBidi) h += '';
h += '';
@@ -1271,6 +1276,7 @@ function editExitCondition(dir) {
var setFlags = exit.set_flags || null;
var setPlayerFlags = exit.set_player_flags || null;
var hidden = exit.hidden || false;
+ var alwaysBlocked = exit.always_blocked || false;
var flagsStr = '';
if (setFlags) flagsStr = Object.keys(setFlags).map(function(k) { return k + '=' + setFlags[k]; }).join(', ');
@@ -1290,6 +1296,7 @@ function editExitCondition(dir) {
h += '';
h += '';
h += '';
+ h += '';
h += '
';
h += '';
@@ -1429,6 +1436,8 @@ function saveExitCondition() {
exit.blocked_message = (bmsg && bmsg.value) ? bmsg.value : '';
var hiddenEl = document.getElementById('exitHidden');
exit.hidden = hiddenEl ? hiddenEl.checked : false;
+ var alwaysBlockedEl = document.getElementById('exitAlwaysBlocked');
+ exit.always_blocked = alwaysBlockedEl ? alwaysBlockedEl.checked : false;
var flagsStr = document.getElementById('exitFlags');
var pflagsStr = document.getElementById('exitPFlags');
exit.set_flags = parseFlagInput(flagsStr ? flagsStr.value : '');
@@ -1475,6 +1484,10 @@ function clearExitCondition() {
if (ef) ef.value = '';
var pf = document.getElementById('exitPFlags');
if (pf) pf.value = '';
+ var hx = document.getElementById('exitHidden');
+ if (hx) hx.checked = false;
+ var ab = document.getElementById('exitAlwaysBlocked');
+ if (ab) ab.checked = false;
}
function parseFlagInput(val) {
--
cgit v1.2.3