diff options
Diffstat (limited to 'internal/game/cmd_score.go')
| -rw-r--r-- | internal/game/cmd_score.go | 85 |
1 files changed, 29 insertions, 56 deletions
diff --git a/internal/game/cmd_score.go b/internal/game/cmd_score.go index 31caf1e..3949486 100644 --- a/internal/game/cmd_score.go +++ b/internal/game/cmd_score.go @@ -92,43 +92,46 @@ func (g *Game) doScore(sess *net.Session) { sep() nameStr := g.colorize(sess, "player_name", p.Name) - clStr := color.Render(mode, color.Parse("FA"), fmt.Sprintf("Combat Lvl %d", p.CombatLevel())) + clStr := g.colorizeConstant(sess, "score_max_value", 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, "currency_pickup", formatInt(p.Credits)) chipsStr := g.colorize(sess, "currency_pickup", formatInt(countChips(p))) - styleStr := color.Render(mode, color.Parse("49"), fmt.Sprintf("Style: %s", p.AttackStyle)) + styleStr := color.Render(mode, g.resolveConstant(sess, "table_header_label"), 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) gap() - hpStyle := hpBarStyle(p.HP, p.MaxHP()) + hpStyle := g.hpBarStyle(sess, p.HP, p.MaxHP()) hpBarStr := ui.RenderColoredBar(p.HP, p.MaxHP(), 26, unicode, hpStyle, mode) - hpFg := hpBarFg(p.HP, p.MaxHP()) + hpFg := g.hpBarStyle(sess, p.HP, p.MaxHP()).FilledColor hpLine := fmt.Sprintf("HP [%s] %s / %s", hpBarStr, color.Render(mode, color.ColorSpec{Fg: hpFg}, fmt.Sprint(p.HP)), - color.Render(mode, color.Parse("FA"), fmt.Sprint(p.MaxHP()))) + g.colorizeConstant(sess, "score_max_value", fmt.Sprint(p.MaxHP()))) content(hpLine) batBarRaw := ui.RenderBarF(p.Battery, p.MaxBattery(), 26, unicode) - batBarStr := color.Render(mode, color.ColorSpec{Fg: 110}, batBarRaw) + batBarStr := color.Render(mode, g.resolveConstant(sess, "battery_bar"), batBarRaw) + batFg := g.resolveConstant(sess, "battery_bar").Fg batLine := fmt.Sprintf("BAT [%s] %s / %s", batBarStr, - color.Render(mode, color.ColorSpec{Fg: 110}, fmt.Sprintf("%.1f", p.Battery)), - color.Render(mode, color.Parse("FA"), fmt.Sprintf("%.0f", p.MaxBattery()))) + color.Render(mode, color.ColorSpec{Fg: batFg}, fmt.Sprintf("%.1f", p.Battery)), + g.colorizeConstant(sess, "score_max_value", fmt.Sprintf("%.0f", p.MaxBattery()))) content(batLine) - engStyle := &ui.BarStyle{FilledColor: 108, EmptyColor: 237, EmptyDim: true} + engSpec := g.resolveConstant(sess, "run_energy_bar") + engEmpty := g.resolveConstant(sess, "hp_bar_empty") + engStyle := &ui.BarStyle{FilledColor: engSpec.Fg, EmptyColor: engEmpty.Fg, EmptyDim: engEmpty.Dim} engBarStr := ui.RenderColoredBar(p.RunEnergy, p.MaxRunEnergy(), 26, unicode, engStyle, mode) engLine := fmt.Sprintf("ENG [%s] %s / %s", engBarStr, - color.Render(mode, color.ColorSpec{Fg: 108}, fmt.Sprint(p.RunEnergy)), - color.Render(mode, color.Parse("FA"), fmt.Sprint(p.MaxRunEnergy()))) + color.Render(mode, color.ColorSpec{Fg: engSpec.Fg}, fmt.Sprint(p.RunEnergy)), + g.colorizeConstant(sess, "score_max_value", fmt.Sprint(p.MaxRunEnergy()))) content(engLine) gap() @@ -155,8 +158,8 @@ 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: 110}, skillDisplay[s]), 12) + lvlColor := g.skillLevelColor(sess, level) + name := padded(color.Render(mode, g.resolveConstant(sess, "active_tech_stat"), 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) @@ -195,8 +198,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: 108}, "[ON]") - name := color.Render(mode, color.ColorSpec{Fg: 110}, def.Name) + on := color.Render(mode, g.resolveConstant(sess, "active_tech_on"), "[ON]") + name := color.Render(mode, g.resolveConstant(sess, "active_tech_stat"), def.Name) techParts = append(techParts, on+" "+name) } } @@ -205,9 +208,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: 108}, "[BUFF]"), + color.Render(mode, g.resolveConstant(sess, "active_tech_status"), "[BUFF]"), buff.BonusPercent, - color.Render(mode, color.ColorSpec{Fg: 110}, buff.Stat), + color.Render(mode, g.resolveConstant(sess, "active_tech_stat"), buff.Stat), buff.TicksLeft) content(buffLine) } @@ -252,51 +255,21 @@ func formatInt(n int) string { return strings.Join(parts, ",") } -func hpBarStyle(current, max int) *ui.BarStyle { - if max <= 0 { - max = 1 - } - pct := float64(current) / float64(max) - var fg int - switch { - case pct >= 0.7: - fg = 108 - case pct >= 0.4: - fg = 179 - default: - fg = 167 - } - return &ui.BarStyle{FilledColor: fg, EmptyColor: 237, EmptyDim: true} -} - -func hpBarFg(current, max int) int { - if max <= 0 { - max = 1 - } - pct := float64(current) / float64(max) - switch { - case pct >= 0.7: - return 108 - case pct >= 0.4: - return 179 - default: - return 167 - } -} - -func skillLevelColor(level int) int { +// skillLevelColor returns the xterm256 palette index for a skill level cell +// on the datapad score panel, sourcing it from the constant_colors section. +func (g *Game) skillLevelColor(sess *net.Session, level int) int { + spec := g.resolveConstant(sess, "skill_lvl_base") switch { case level >= 99: - return 180 + spec = g.resolveConstant(sess, "skill_lvl_max") case level >= 80: - return 179 + spec = g.resolveConstant(sess, "skill_lvl_high") case level >= 60: - return 116 + spec = g.resolveConstant(sess, "skill_lvl_mid") case level >= 40: - return 73 - default: - return 66 + spec = g.resolveConstant(sess, "skill_lvl_low") } + return spec.Fg } func xpProgressBar(xp int, width int, unicode bool) string { |
