aboutsummaryrefslogtreecommitdiff
path: root/internal/game
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-07-14 16:35:28 -0400
committerhistoria <[not public]>2026-07-14 16:35:28 -0400
commite679811057bedda7864b61a325a11e472e0034ad (patch)
tree5a9a580f808a13e2e6aad24635ab5c567fec13f2 /internal/game
parent351f1d78e2d94da4445c015d863dbaa34bc58619 (diff)
downloadthehouseoficarus-e679811057bedda7864b61a325a11e472e0034ad.tar.gz
feat: new default color scheme
Diffstat (limited to 'internal/game')
-rw-r--r--internal/game/cmd_aps.go8
-rw-r--r--internal/game/cmd_color.go8
-rw-r--r--internal/game/cmd_mods.go8
-rw-r--r--internal/game/cmd_option.go16
-rw-r--r--internal/game/cmd_score.go46
-rw-r--r--internal/game/cmd_skills.go12
-rw-r--r--internal/game/cmd_tech.go8
-rw-r--r--internal/game/look_target.go2
-rw-r--r--internal/game/render_color.go10
-rw-r--r--internal/game/render_combat.go12
-rw-r--r--internal/game/render_map.go8
-rw-r--r--internal/game/sys_labor.go2
12 files changed, 70 insertions, 70 deletions
diff --git a/internal/game/cmd_aps.go b/internal/game/cmd_aps.go
index 839455e..727bf8b 100644
--- a/internal/game/cmd_aps.go
+++ b/internal/game/cmd_aps.go
@@ -129,11 +129,11 @@ func displayApsNodes(g *Game, sess *net.Session, p *player.Player, known []int)
for i, info := range infos {
distStr := strconv.Itoa(info.Distance)
if info.Distance == 0 {
- distStr = color.Render(mode, color.Parse("52"), "here")
+ distStr = color.Render(mode, color.Parse("6C"), "here")
}
rows[i] = []string{
color.Render(mode, color.Parse("F5"), fmt.Sprintf("#%d", info.ID)),
- color.Render(mode, color.Parse("4B"), info.Name),
+ color.Render(mode, color.Parse("49"), info.Name),
distStr,
}
}
@@ -142,8 +142,8 @@ func displayApsNodes(g *Game, sess *net.Session, p *player.Player, known []int)
Title: "APS Datapad",
Columns: []string{
color.Render(mode, color.Parse("F5"), "Room"),
- color.Render(mode, color.Parse("4B"), "Name"),
- color.Render(mode, color.Parse("E6"), "Distance"),
+ color.Render(mode, color.Parse("49"), "Name"),
+ color.Render(mode, color.Parse("FA"), "Distance"),
},
Rows: rows,
}
diff --git a/internal/game/cmd_color.go b/internal/game/cmd_color.go
index d48e314..95ccbc4 100644
--- a/internal/game/cmd_color.go
+++ b/internal/game/cmd_color.go
@@ -176,9 +176,9 @@ func showColorTable(g *Game, sess *net.Session) {
mode := g.colorMode(sess)
table := &ui.Table{
Columns: []string{
- color.Render(mode, color.Parse("4B"), "Target"),
+ color.Render(mode, color.Parse("49"), "Target"),
"Color",
- color.Render(mode, color.Parse("F3"), "Source"),
+ color.Render(mode, color.Parse("F5"), "Source"),
},
}
for _, cat := range colorCategoryOrder {
@@ -192,9 +192,9 @@ func showColorTable(g *Game, sess *net.Session) {
}
}
table.Rows = append(table.Rows, []string{
- color.Render(mode, color.Parse("4B"), cat),
+ color.Render(mode, color.Parse("49"), cat),
coloredVal,
- color.Render(mode, color.Parse("F3"), source),
+ color.Render(mode, color.Parse("F5"), source),
})
}
for _, line := range table.Render(p.OptionBool("unicode"), p.OptionInt("wrap_width")) {
diff --git a/internal/game/cmd_mods.go b/internal/game/cmd_mods.go
index 9468e89..26b0e95 100644
--- a/internal/game/cmd_mods.go
+++ b/internal/game/cmd_mods.go
@@ -55,9 +55,9 @@ func (g *Game) doMods(sess *net.Session, showAll bool) {
t := &ui.Table{
Title: cat.Name,
Columns: []string{
- color.Render(mode, color.Parse("4B"), "Module"),
+ color.Render(mode, color.Parse("49"), "Module"),
color.Render(mode, color.Parse("F5"), "Level"),
- color.Render(mode, color.Parse("DE"), "Cost"),
+ color.Render(mode, color.Parse("B3"), "Cost"),
color.Render(mode, color.Parse("B3"), "XP"),
},
}
@@ -77,9 +77,9 @@ func (g *Game) doMods(sess *net.Session, showAll bool) {
})
} else if unlocked {
t.Rows = append(t.Rows, []string{
- color.Render(mode, color.Parse("4B"), m.Name),
+ color.Render(mode, color.Parse("49"), m.Name),
color.Render(mode, color.Parse("F5"), levelStr),
- color.Render(mode, color.Parse("DE"), costStr),
+ color.Render(mode, color.Parse("B3"), costStr),
color.Render(mode, color.Parse("B3"), xpStr),
})
} else {
diff --git a/internal/game/cmd_option.go b/internal/game/cmd_option.go
index f404c2e..2d6f3f0 100644
--- a/internal/game/cmd_option.go
+++ b/internal/game/cmd_option.go
@@ -18,10 +18,10 @@ func (g *Game) doOption(sess *net.Session, input string) {
if input == "" {
table := &ui.Table{
Columns: []string{
- color.Render(mode, color.Parse("4B"), "Option"),
- color.Render(mode, color.Parse("E6"), "Value"),
- color.Render(mode, color.Parse("F3"), "Valid"),
- color.Render(mode, color.Parse("FC"), "Description"),
+ color.Render(mode, color.Parse("49"), "Option"),
+ color.Render(mode, color.Parse("FA"), "Value"),
+ color.Render(mode, color.Parse("F5"), "Valid"),
+ color.Render(mode, color.Parse("FF"), "Description"),
},
}
for _, def := range player.OptionDefs {
@@ -29,10 +29,10 @@ func (g *Game) doOption(sess *net.Session, input string) {
val = truncateForTable(val, p.OptionBool("unicode"))
valid := formatValidValues(&def)
table.Rows = append(table.Rows, []string{
- color.Render(mode, color.Parse("4B"), def.Name),
- color.Render(mode, color.Parse("E6"), val),
- color.Render(mode, color.Parse("F3"), valid),
- color.Render(mode, color.Parse("FC"), def.Description),
+ color.Render(mode, color.Parse("49"), def.Name),
+ color.Render(mode, color.Parse("FA"), val),
+ color.Render(mode, color.Parse("F5"), valid),
+ color.Render(mode, color.Parse("FF"), def.Description),
})
}
for _, line := range table.Render(p.OptionBool("unicode"), p.OptionInt("wrap_width")) {
diff --git a/internal/game/cmd_score.go b/internal/game/cmd_score.go
index 59cedb1..488979c 100644
--- a/internal/game/cmd_score.go
+++ b/internal/game/cmd_score.go
@@ -92,14 +92,14 @@ func (g *Game) doScore(sess *net.Session) {
sep()
nameStr := g.colorize(sess, "player_name", p.Name)
- clStr := color.Render(mode, color.Parse("E6"), fmt.Sprintf("Combat Lvl %d", p.CombatLevel()))
+ clStr := color.Render(mode, color.Parse("FA"), fmt.Sprintf("Combat Lvl %d", p.CombatLevel()))
roomStr := g.colorize(sess, "room_number", fmt.Sprintf("Room #%d", p.RoomID))
row1 := padded(nameStr, 20) + padded(clStr, 24) + roomStr
content(row1)
creditsStr := g.colorize(sess, "credits_pickup", formatInt(p.Credits))
chipsStr := g.colorize(sess, "chips_pickup", formatInt(countChips(p)))
- styleStr := color.Render(mode, color.Parse("4B"), fmt.Sprintf("Style: %s", p.AttackStyle))
+ styleStr := color.Render(mode, color.Parse("49"), fmt.Sprintf("Style: %s", p.AttackStyle))
invStr := fmt.Sprintf("Inv: %d/28", 28-p.FreeSlots())
row2 := padded("Credits: "+creditsStr, 19) + padded("Chips: "+chipsStr, 16) + padded(styleStr, 22) + invStr
content(row2)
@@ -112,15 +112,15 @@ func (g *Game) doScore(sess *net.Session) {
hpLine := fmt.Sprintf("HP [%s] %s / %s",
hpBarStr,
color.Render(mode, color.ColorSpec{Fg: hpFg}, fmt.Sprint(p.HP)),
- color.Render(mode, color.Parse("E6"), fmt.Sprint(p.MaxHP())))
+ color.Render(mode, color.Parse("FA"), fmt.Sprint(p.MaxHP())))
content(hpLine)
batBarRaw := ui.RenderBarF(p.Battery, p.MaxBattery(), 26, unicode)
- batBarStr := color.Render(mode, color.ColorSpec{Fg: 45}, batBarRaw)
+ batBarStr := color.Render(mode, color.ColorSpec{Fg: 110}, batBarRaw)
batLine := fmt.Sprintf("BAT [%s] %s / %s",
batBarStr,
- color.Render(mode, color.ColorSpec{Fg: 45}, fmt.Sprintf("%.1f", p.Battery)),
- color.Render(mode, color.Parse("E6"), fmt.Sprintf("%.0f", p.MaxBattery())))
+ color.Render(mode, color.ColorSpec{Fg: 110}, fmt.Sprintf("%.1f", p.Battery)),
+ color.Render(mode, color.Parse("FA"), fmt.Sprintf("%.0f", p.MaxBattery())))
content(batLine)
gap()
@@ -148,7 +148,7 @@ func (g *Game) doScore(sess *net.Session) {
buildSkillCell := func(s player.SkillName) string {
level := p.Level(s)
lvlColor := skillLevelColor(level)
- name := padded(color.Render(mode, color.ColorSpec{Fg: 75}, skillDisplay[s]), 12)
+ name := padded(color.Render(mode, color.ColorSpec{Fg: 110}, skillDisplay[s]), 12)
lvl := color.Render(mode, color.ColorSpec{Fg: lvlColor}, fmt.Sprintf("%2d", level))
xpBar := xpProgressBar(p.Skills[s], 12, unicode)
return fmt.Sprintf("%s %s [%s]", name, lvl, xpBar)
@@ -187,8 +187,8 @@ func (g *Game) doScore(sess *net.Session) {
for _, id := range p.ActiveTechList() {
def := GetTechDef(id)
if def != nil {
- on := color.Render(mode, color.ColorSpec{Fg: 82}, "[ON]")
- name := color.Render(mode, color.ColorSpec{Fg: 75}, def.Name)
+ on := color.Render(mode, color.ColorSpec{Fg: 108}, "[ON]")
+ name := color.Render(mode, color.ColorSpec{Fg: 110}, def.Name)
techParts = append(techParts, on+" "+name)
}
}
@@ -197,9 +197,9 @@ func (g *Game) doScore(sess *net.Session) {
if len(p.ActiveBuffs) > 0 {
for _, buff := range p.ActiveBuffs {
buffLine := fmt.Sprintf("%s +%d%% %s (%d ticks remaining)",
- color.Render(mode, color.ColorSpec{Fg: 82}, "[BUFF]"),
+ color.Render(mode, color.ColorSpec{Fg: 108}, "[BUFF]"),
buff.BonusPercent,
- color.Render(mode, color.ColorSpec{Fg: 75}, buff.Stat),
+ color.Render(mode, color.ColorSpec{Fg: 110}, buff.Stat),
buff.TicksLeft)
content(buffLine)
}
@@ -252,13 +252,13 @@ func hpBarStyle(current, max int) *ui.BarStyle {
var fg int
switch {
case pct >= 0.7:
- fg = 84
+ fg = 108
case pct >= 0.4:
- fg = 208
+ fg = 179
default:
- fg = 196
+ fg = 167
}
- return &ui.BarStyle{FilledColor: fg, EmptyColor: 238, EmptyDim: true}
+ return &ui.BarStyle{FilledColor: fg, EmptyColor: 237, EmptyDim: true}
}
func hpBarFg(current, max int) int {
@@ -268,26 +268,26 @@ func hpBarFg(current, max int) int {
pct := float64(current) / float64(max)
switch {
case pct >= 0.7:
- return 84
+ return 108
case pct >= 0.4:
- return 208
+ return 179
default:
- return 196
+ return 167
}
}
func skillLevelColor(level int) int {
switch {
case level >= 99:
- return 196
+ return 180
case level >= 80:
- return 214
+ return 179
case level >= 60:
- return 208
+ return 116
case level >= 40:
- return 220
+ return 73
default:
- return 40
+ return 66
}
}
diff --git a/internal/game/cmd_skills.go b/internal/game/cmd_skills.go
index 4aacd31..2eeb149 100644
--- a/internal/game/cmd_skills.go
+++ b/internal/game/cmd_skills.go
@@ -17,10 +17,10 @@ func (g *Game) doSkills(sess *net.Session) {
p := sess.Player
mode := g.colorMode(sess)
t := &ui.Table{Title: "Skills", Columns: []string{
- color.Render(mode, color.Parse("4B"), "Skill"),
+ color.Render(mode, color.Parse("49"), "Skill"),
color.Render(mode, color.Parse("F5"), "Abbr"),
- color.Render(mode, color.Parse("E6"), "Level"),
- color.Render(mode, color.Parse("DE"), "XP"),
+ color.Render(mode, color.Parse("FA"), "Level"),
+ color.Render(mode, color.Parse("B3"), "XP"),
color.Render(mode, color.Parse("B3"), "XP to Next"),
}}
for _, s := range player.AllSkills {
@@ -28,10 +28,10 @@ func (g *Game) doSkills(sess *net.Session) {
xp := p.Skills[s]
next := player.XPForNextLevel(xp)
t.Rows = append(t.Rows, []string{
- color.Render(mode, color.Parse("4B"), string(s)),
+ color.Render(mode, color.Parse("49"), string(s)),
color.Render(mode, color.Parse("F5"), player.SkillAbbr[s]),
- color.Render(mode, color.Parse("E6"), strconv.Itoa(level)),
- color.Render(mode, color.Parse("DE"), strconv.Itoa(xp)),
+ color.Render(mode, color.Parse("FA"), strconv.Itoa(level)),
+ color.Render(mode, color.Parse("B3"), strconv.Itoa(xp)),
color.Render(mode, color.Parse("B3"), strconv.Itoa(next)),
})
}
diff --git a/internal/game/cmd_tech.go b/internal/game/cmd_tech.go
index cb0465f..4ca1382 100644
--- a/internal/game/cmd_tech.go
+++ b/internal/game/cmd_tech.go
@@ -118,7 +118,7 @@ func (g *Game) doTechList(sess *net.Session) {
"",
fmt.Sprintf("Battery: %s/%s",
g.colorize(sess, "battery", fmt.Sprintf("%.1f", p.Battery)),
- color.Render(mode, color.Parse("E6"), fmt.Sprintf("%.0f", p.MaxBattery())),
+ color.Render(mode, color.Parse("FA"), fmt.Sprintf("%.0f", p.MaxBattery())),
),
)
@@ -129,13 +129,13 @@ func (g *Game) doTechList(sess *net.Session) {
nameStr := tech.Name
if tech.Level <= techLevel {
if p.HasActiveTech(tech.ID) {
- status = color.Render(mode, color.Parse("52"), "ON")
+ status = color.Render(mode, color.Parse("6C"), "ON")
} else {
status = color.Render(mode, color.Parse("F0"), "off")
}
- nameStr = color.Render(mode, color.Parse("4B"), tech.Name)
+ nameStr = color.Render(mode, color.Parse("49"), tech.Name)
} else {
- status = color.Render(mode, color.Parse("A0"), "locked")
+ status = color.Render(mode, color.Parse("A7"), "locked")
nameStr = color.Render(mode, color.Parse("F0"), tech.Name)
}
diff --git a/internal/game/look_target.go b/internal/game/look_target.go
index 3f7141e..bb9b5da 100644
--- a/internal/game/look_target.go
+++ b/internal/game/look_target.go
@@ -64,7 +64,7 @@ func (g *Game) doLookTarget(sess *net.Session, input string) {
}
var levelStr string
if best.Protected {
- levelStr = color.Render(g.colorMode(sess), color.Parse("DF"), "(protected)")
+ levelStr = color.Render(g.colorMode(sess), color.Parse("FA"), "(protected)")
} else {
mobLevel := mobCombatLevel(best)
levelStr = g.levelColorize(sess, p.CombatLevel(), mobLevel, fmt.Sprintf("(level %d)", mobLevel))
diff --git a/internal/game/render_color.go b/internal/game/render_color.go
index 0e31538..3464f26 100644
--- a/internal/game/render_color.go
+++ b/internal/game/render_color.go
@@ -46,15 +46,15 @@ func levelColorSpec(myLevel, theirLevel int) color.ColorSpec {
diff := theirLevel - myLevel
switch {
case diff == 0:
- return color.Parse("E7")
+ return color.Parse("FA")
case diff > 0 && diff < 5:
- return color.Parse("D0")
+ return color.Parse("B3")
case diff >= 5:
- return color.Parse("C4")
+ return color.Parse("A7")
case diff < 0 && diff > -5:
- return color.Parse("BE")
+ return color.Parse("6E")
default:
- return color.Parse("22")
+ return color.Parse("41")
}
}
diff --git a/internal/game/render_combat.go b/internal/game/render_combat.go
index 7285ce7..c3c594c 100644
--- a/internal/game/render_combat.go
+++ b/internal/game/render_combat.go
@@ -6,8 +6,8 @@ import (
)
// renderBar is the shared bar renderer for both HP bars and task-progress bars.
-// lowColor is the color used when the value falls below 40% (160 red for HP,
-// 39 cyan for progress).
+// lowColor is the color used when the value falls below 40% (167 dusty red for
+// HP, 67 steel blue for progress) -- both palette colors.
func (g *Game) renderBar(sess *net.Session, current, max, lowColor int) string {
if max <= 0 {
max = 1
@@ -23,19 +23,19 @@ func (g *Game) renderBar(sess *net.Session, current, max, lowColor int) string {
var fgColor int
switch {
case pct >= 70:
- fgColor = 82
+ fgColor = 108
case pct >= 40:
- fgColor = 220
+ fgColor = 179
default:
fgColor = lowColor
}
unicode := sess.Player != nil && sess.Player.OptionBool("unicode")
- style := &ui.BarStyle{FilledColor: fgColor, EmptyColor: 238, EmptyDim: true}
+ style := &ui.BarStyle{FilledColor: fgColor, EmptyColor: 237, EmptyDim: true}
bar := ui.RenderColoredBar(current, max, 10, unicode, style, g.colorMode(sess))
return "[" + bar + "]"
}
func (g *Game) hpBar(sess *net.Session, current, max int) string {
- return g.renderBar(sess, current, max, 160)
+ return g.renderBar(sess, current, max, 167)
}
diff --git a/internal/game/render_map.go b/internal/game/render_map.go
index 3f9c4da..a28538b 100644
--- a/internal/game/render_map.go
+++ b/internal/game/render_map.go
@@ -427,28 +427,28 @@ func resolveMapAt(g *Game, sess *net.Session) color.ColorSpec {
if sess != nil {
return g.resolveColor(sess, "map_at")
}
- return color.Parse("0F")
+ return color.Parse("B4 bold")
}
func resolveDim(g *Game, sess *net.Session) color.ColorSpec {
if sess != nil {
return g.resolveColor(sess, "dim")
}
- return color.Parse("F3 dim")
+ return color.Parse("F5 dim")
}
func resolveMapBlocked(g *Game, sess *net.Session) color.ColorSpec {
if sess != nil {
return g.resolveColor(sess, "map_blocked")
}
- return color.Parse("C4")
+ return color.Parse("A7")
}
func resolveMapCourse(g *Game, sess *net.Session) color.ColorSpec {
if sess != nil {
return g.resolveColor(sess, "map_course")
}
- return color.Parse("1B")
+ return color.Parse("43")
}
// mapRenderCtx bundles the per-render state shared by node and connector drawing
diff --git a/internal/game/sys_labor.go b/internal/game/sys_labor.go
index 43f7bb2..6004b75 100644
--- a/internal/game/sys_labor.go
+++ b/internal/game/sys_labor.go
@@ -22,7 +22,7 @@ func taskWorkVerb(mob *world.MobInstance) string {
// inverse of hpBar. It is used for task worksites whose internal HP drains to 0
// to complete the work (progress = MaxHP - HP).
func (g *Game) progressBar(sess *net.Session, progress, max int) string {
- return g.renderBar(sess, progress, max, 39)
+ return g.renderBar(sess, progress, max, 67)
}
// writeTaskProgress prints the per-tick progress line for a task worksite,