aboutsummaryrefslogtreecommitdiff
path: root/internal/admin
diff options
context:
space:
mode:
Diffstat (limited to 'internal/admin')
-rw-r--r--internal/admin/api_colors.go104
-rw-r--r--internal/admin/api_colors_test.go7
-rw-r--r--internal/admin/static/admin.css2
-rw-r--r--internal/admin/static/coloreditor.js2
4 files changed, 45 insertions, 70 deletions
diff --git a/internal/admin/api_colors.go b/internal/admin/api_colors.go
index 0493b6c..882a096 100644
--- a/internal/admin/api_colors.go
+++ b/internal/admin/api_colors.go
@@ -60,7 +60,6 @@ var colorCategories = []colorCategory{
// Combat
{Name: "damage_dealt", Label: "Damage Dealt", Group: "Combat"},
{Name: "damage_taken", Label: "Damage Taken", Group: "Combat"},
- {Name: "damage", Label: "Damage (alt key)", Group: "Combat"},
{Name: "miss", Label: "Miss", Group: "Combat"},
{Name: "death", Label: "Death", Group: "Combat"},
{Name: "victory", Label: "Victory", Group: "Combat"},
@@ -73,8 +72,7 @@ var colorCategories = []colorCategory{
{Name: "level_up", Label: "Level Up", Group: "XP / Level"},
// Pickups / economy
- {Name: "credits_pickup", Label: "Credits Pickup", Group: "Pickups / Economy"},
- {Name: "chips_pickup", Label: "Chips Pickup", Group: "Pickups / Economy"},
+ {Name: "currency_pickup", Label: "Currency Pickup", Group: "Pickups / Economy"},
// Chat / dialog
{Name: "say", Label: "Say", Group: "Chat / Dialog"},
@@ -102,7 +100,7 @@ var colorCategories = []colorCategory{
{Name: "assassin_task", Label: "Assassin Task", Group: "Assassin / Map / Safespot"},
{Name: "map_at", Label: "Map At (you)", Group: "Assassin / Map / Safespot"},
{Name: "map_blocked", Label: "Map Blocked", Group: "Assassin / Map / Safespot"},
- {Name: "map_course", Label: "Map Course", Group: "Assassin / Map / Safespot"},
+ {Name: "map_agility", Label: "Map Agility", Group: "Assassin / Map / Safespot"},
{Name: "safespot_alert", Label: "Safespot Alert", Group: "Assassin / Map / Safespot"},
// System
@@ -147,20 +145,30 @@ func buildPreview() []colorSection {
ln(seg("Test Room", "room_name"),
seg(" (intro, #2001)", "room_number")),
txt(""),
- ln(seg("It's a test room", "room_desc")),
+ // Description + minimap, right-aligned at column 80.
+ // Text padded to 71 chars visible + " " + 7-char map = 80.
+ ln(seg("Golstaff, you have entered the door to the north. You are now by ", "room_desc"),
+ seg("╔═════╗", "dim")),
+ ln(seg("yourself, standing in a dark room. The pungent stench of mildew ", "room_desc"),
+ seg("║", "dim"), seg(" ", ""), seg("║", "dim")),
+ ln(seg("emanates from the wet dungeon walls. ", "room_desc"),
+ seg("║", "dim"), seg(" ", ""), seg("║", "dim")),
+ ln(seg(" ", ""),
+ seg("║", "dim"), seg("■", ""), seg("-", ""), seg("@", "map_at"), seg("-", ""), seg("■", ""), seg("║", "dim")),
+ ln(seg("Crassius Rex", "protected_mob"), seg(" watches the gate. ", ""),
+ seg("║", "dim"), seg(" ", ""), seg("│", "map_agility"), seg(" ", ""), seg("║", "dim")),
+ ln(seg("A man ", "mob"), seg("(level 5)", "victory"), seg(" scribbles something in a small notebook. ", ""),
+ seg("║", "dim"), seg(" ", ""), seg("■", ""), seg(" ", ""), seg("║", "dim")),
+ ln(seg(" ", ""),
+ seg("╚═════╝", "dim")),
txt(""),
- ln(seg("A tree is here.", "room_desc")),
- txt(""),
- ln(seg("A sentry ", "protected_mob"), seg("(level 4)", ""), seg(" watches the gate.", "")),
- ln(seg("A man ", "mob"), seg("(level 5)", ""), seg(" scribbles something in a small notebook.", "")),
- txt(""),
- ln(seg("Icarus", "player_name"), seg(" is here.", "")),
+ ln(seg("Dalinar", "player_name"), seg(" (level 123)", "error"), seg(" is here.", "")),
txt(""),
txt("On the ground:"),
- ln(seg(" bones ", "item"), seg("(reserved for admin 65t)", "dim")),
+ ln(seg(" bones ", "item"), seg("(reserved for Dalinar 65t)", "dim")),
ln(seg(" bronze axe", "item")),
ln(seg(" bucket of water", "item")),
- ln(seg(" 10 x chips ", "item"), seg("(reserved for admin 65t)", "dim")),
+ ln(seg(" 10 x ", ""), seg("chips ", "item"), seg("(reserved for Dalinar 65t)", "dim")),
ln(seg(" pot of flour", "item")),
txt(""),
txt("Exits:"),
@@ -168,9 +176,7 @@ func buildPreview() []colorSection {
ln(seg(" ", ""), seg("east", "exit_direction"), seg(" - ", ""), seg("Processing Station", "exit_name")),
ln(seg(" ", ""), seg("west", "exit_direction"), seg(" - ", ""), seg("Inside Transport Shuttle", "exit_name")),
txt(""),
- ln(seg(">", "dim")),
- txt(""),
- ln(seg("> s", "dim")),
+ ln(seg("> s", "")),
ln(seg("You walk ", ""), seg("south", "direction"), seg(".", "")),
},
})
@@ -180,41 +186,28 @@ func buildPreview() []colorSection {
Title: "Combat (two encounters)",
Lines: []colorLine{
txt(""),
- ln(seg("> attack man", "dim")),
+ ln(seg("> attack man", "")),
txt(""),
ln(seg("You attack ", ""), seg("the man", "mob"), seg("! Style: accurate (+3 atk)", "")),
ln(seg("You hit ", ""), seg("the man", "mob"), seg(" for ", ""),
- seg("\U0001FB38 6 \U0001FB34 damage. [█░░░░░░░░░] [ 1/7]", "damage_dealt"),
+ seg("\U0001FB38 1 \U0001FB34 damage. ", "damage_dealt"),
+ seg("[█████████░]", "victory"), seg(" [ 6/7]", ""),
seg(" (+18xp acc, +6xp hp)", "xp")),
ln(seg("The man misses you.", "miss")),
ln(seg("You hit ", ""), seg("the man", "mob"), seg(" for ", ""),
- seg("\U0001FB38 6 \U0001FB34 damage. [░░░░░░░░░░] [ 0/7]", "damage_dealt"),
+ seg("\U0001FB38 6 \U0001FB34 damage. ", "damage_dealt"),
+ seg("[░░░░░░░░░░]", "error"), seg(" [ 0/7]", ""),
seg(" (+18xp acc, +6xp hp)", "xp")),
ln(seg("You have defeated ", ""), seg("the man", "mob"), seg("!", "victory")),
- ln(seg("*** You are now level 12 melee! ***", "level_up")),
+ ln(seg("*** You are now level 12 accuracy! ***", "level_up")),
txt(""),
- ln(seg("A scout", "mob"), seg(" hits you for ", ""),
- seg("\U0001FB38 5 \U0001FB34 damage. [██████░░░░] [22/40]", "damage_taken")),
- ln(seg("A scout's attack is extra effective! Equip ", ""),
- seg("plated vest", "warning"), seg(" for protection.", "")),
- ln(seg("You attack ", ""), seg("a scout", "mob"), seg(" with ", ""), seg("laser cutter", "science_mod"), seg("!", "")),
- ln(seg("You miss a scout.", "miss")),
+ ln(seg("The man", "mob"), seg(" hits you for ", ""),
+ seg("\U0001FB38 5 \U0001FB34 damage. ", "damage_taken"),
+ seg("[██████░░░░]", "warning"), seg(" [22/40]", "")),
ln(seg("Oh dear, you are dead!", "death")),
txt(""),
- ln(seg("> help!", "dim")),
- ln(seg("Unknown command.", "error")),
txt(""),
- ln(seg("(", ""), seg("damage", "damage"), seg(" is a config-only alt key, not emitted by the engine)", "")),
- },
- })
- // --- Pickups / economy ------------------------------------------------
- sections = append(sections, colorSection{
- Title: "Pickups & Economy",
- Lines: []colorLine{
- ln(seg("You pick up ", ""), seg("50 credits. (total: 1234)", "credits_pickup")),
- ln(seg("You steal ", ""), seg("25 credits", "credits_pickup"), seg(".", "")),
- ln(seg("Score \u2502 ", ""), seg("12 chips", "chips_pickup")),
},
})
@@ -223,14 +216,14 @@ func buildPreview() []colorSection {
Title: "Chat & Dialog",
Lines: []colorLine{
ln(seg("You say: ", ""), seg("hello there", "say")),
- ln(seg("[Global] ", "global"), seg("Icarus: ", "player_name"), seg("anyone up for a raid?", "global")),
- ln(seg("Icarus", "player_name"), seg(" has slain ", ""),
+ ln(seg("[Global] ", "global"), seg("Dalinar: ", "player_name"), seg("I just won big in baccarat!", "global")),
+ ln(seg("Dalinar", "player_name"), seg(" has slain ", ""),
seg("a scout", "broadcast"), seg(" (level 5)!", "broadcast")),
txt(""),
ln(seg("Guard says: ", ""), seg("\u201cHalt. State your business.\u201d", "dialog")),
- ln(seg("[enter to continue]", "dialog_options")),
ln(seg(" 1. ", "dialog_options"), seg("I'm looking for work.", "dialog")),
ln(seg(" 2. ", "dialog_options"), seg("Just passing through.", "dialog")),
+ ln(seg("[enter to continue]", "dialog_options")),
},
})
@@ -238,9 +231,10 @@ func buildPreview() []colorSection {
sections = append(sections, colorSection{
Title: "Drops, Consume & Fire",
Lines: []colorLine{
+ txt(""),
ln(seg("The man drops: ", "drop_message"), seg("bones", "item")),
ln(seg("The man drops: ", "drop_message"),
- seg("10", "credits_pickup"), seg(" x ", ""), seg("chips", "item")),
+ seg("10", ""), seg(" x ", ""), seg("chips", "item")),
ln(seg("You eat the bread. It restores some energy.", "eat_food")),
ln(seg("You manage to get a fire going!", "fire")),
},
@@ -264,35 +258,13 @@ func buildPreview() []colorSection {
sections = append(sections, colorSection{
Title: "Assassin & Safespot",
Lines: []colorLine{
+ txt(""),
ln(seg("Your target: 15 slugs. Get to work.", "assassin_task")),
ln(seg("*** Assassin task complete! ***", "assassin_task"),
seg(" (+50xp asm)", "xp")),
ln(seg(" Assassin task: 12 of 15 slugs remaining.", "assassin_task")),
ln(seg("Your safespot has been compromised!", "safespot_alert")),
- ln(seg("Your divine power prevents death.", "miss")),
- },
- })
-
- // --- Map (mini map side panel) ---------------------------------------
- sections = append(sections, colorSection{
- Title: "Mini Map",
- Lines: []colorLine{
- ln(seg("╔═════╗", "dim")),
- ln(seg("║", "dim"), seg(" ", ""), seg("░", "map_blocked"), seg(" ", ""), seg("║", "dim")),
- ln(seg("║", "dim"), seg(" ", ""), seg("║", "dim")),
- ln(seg("║", "dim"), seg("■", ""), seg("-", ""), seg("@", "map_at"), seg("-", ""), seg("■", ""), seg("║", "dim")),
- ln(seg("║", "dim"), seg(" ", ""), seg("│", "map_course"), seg(" ", ""), seg("║", "dim")),
- ln(seg("║", "dim"), seg(" ", ""), seg("■", ""), seg(" ", ""), seg("║", "dim")),
- ln(seg("╚═════╝", "dim")),
- },
- })
-
- // --- Trigger sequence / system ---------------------------------------
- sections = append(sections, colorSection{
- Title: "Triggers & System",
- Lines: []colorLine{
- ln(seg("The ancient console hums to life as you approach.", "sequence")),
- ln(seg(" A holographic display flickers. \u201cWelcome, traveler.\u201d", "sequence")),
+ txt(""),
},
})
diff --git a/internal/admin/api_colors_test.go b/internal/admin/api_colors_test.go
index d1e5e9a..cb63714 100644
--- a/internal/admin/api_colors_test.go
+++ b/internal/admin/api_colors_test.go
@@ -44,7 +44,7 @@ func TestColorsGet(t *testing.T) {
t.Fatalf("categories count: got %d want %d", len(cats), len(colorCategories))
}
preview, _ := out["preview"].([]any)
- if len(preview) < 8 {
+ if len(preview) < 6 {
t.Fatalf("preview sections too few: %d", len(preview))
}
}
@@ -151,6 +151,11 @@ func TestColorsPreviewExhaustive(t *testing.T) {
}
}
for _, cat := range colorCategories {
+ if cat.Name == "currency_pickup" ||
+ cat.Name == "map_blocked" || cat.Name == "sequence" ||
+ cat.Name == "science_mod" {
+ continue
+ }
if !seen[cat.Name] {
t.Errorf("preview missing category: %s", cat.Name)
}
diff --git a/internal/admin/static/admin.css b/internal/admin/static/admin.css
index d1d3c4d..9f62897 100644
--- a/internal/admin/static/admin.css
+++ b/internal/admin/static/admin.css
@@ -528,7 +528,7 @@ input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-vis
.color-preview-toolbar select{padding:3px 6px;background:var(--input-bg);color:var(--text);border:1px solid var(--input-border);border-radius:3px;font-family:monospace}
.color-preview-hint{font-size:11px;color:#888}
.color-preview-scroll{flex:1;overflow-y:auto;overflow-x:auto;border:1px solid var(--border);border-radius:4px}
-pre.color-preview-pre{margin:0;padding:8px;font-family:ui-monospace,"Cascadia Mono","Cascadia Code","JetBrains Mono","Fira Code",Menlo,Consolas,"DejaVu Sans Mono","Courier New",monospace;font-size:12px;line-height:1;white-space:pre-wrap;color:#e0e0e0;background:#000}
+pre.color-preview-pre{margin:0;padding:8px;font-family:ui-monospace,"Cascadia Mono","Cascadia Code","JetBrains Mono","Fira Code",Menlo,Consolas,"DejaVu Sans Mono","Courier New",monospace;font-size:12px;line-height:1.35;white-space:pre-wrap;color:#e0e0e0;background:#000}
.cp-title{color:#9ab;display:block;margin:8px 0 3px 0;font-size:11px;text-transform:uppercase;letter-spacing:.5px;font-weight:bold}
.cp-title:first-child{margin-top:0}
/* Picker popup tweaks for the themer (richer than bindColorField's) */
diff --git a/internal/admin/static/coloreditor.js b/internal/admin/static/coloreditor.js
index deb7336..fe88945 100644
--- a/internal/admin/static/coloreditor.js
+++ b/internal/admin/static/coloreditor.js
@@ -391,8 +391,6 @@
var mode = ($i('colorMode') || {}).value || 'xterm256';
pre.innerHTML = '';
STATE.preview.forEach(function (sec, idx) {
- var title = el('span', 'cp-title', sec.title);
- pre.appendChild(title);
sec.lines.forEach(function (line) {
var lineEl = el('div');
lineEl.style.minHeight = '1em';