From d25638d98fe63efdeab570ef77e6a6a97f2d7a60 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Mon, 22 Jun 2026 14:09:46 -0400 Subject: feat: custom map symbol improvements with 'symbol' command --- internal/game/cmd_symbol.go | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'internal/game/cmd_symbol.go') diff --git a/internal/game/cmd_symbol.go b/internal/game/cmd_symbol.go index ec8d68b..bb97010 100644 --- a/internal/game/cmd_symbol.go +++ b/internal/game/cmd_symbol.go @@ -41,20 +41,38 @@ func (g *Game) executeSymbol(sess *net.Session, args []string, rawInput string) } cleared := false - if strings.EqualFold(char, "clear") || strings.EqualFold(char, "remove") { + if strings.EqualFold(char, "reset") || strings.EqualFold(char, "remove") { delete(p.MapSymbols, p.RoomID) if err := g.AccountStore.SaveCharacter(p); err != nil { sess.WriteLine("Error saving: " + err.Error()) return } - sess.WriteLine("Custom symbol cleared for this room.") + sess.WriteLine("Custom symbol reset for this room.") cleared = true } if !cleared { r, size := utf8.DecodeRuneInString(char) if size == 0 || size != len(char) || r == utf8.RuneError { - sess.WriteLine("Usage: symbol [color...]") + // ponytail: color-only mode — args are a color spec, keep existing char + colorSpec := strings.Join(args, " ") + spec := color.Parse(colorSpec) + if spec.Empty() { + sess.WriteLine("Invalid color spec. Use a color number like 232 and/or bold/dim/underline.") + return + } + existing, ok := p.MapSymbols[p.RoomID] + if !ok { + existing = player.MapSymbolData{Char: "■"} + } + existing.Color = colorSpec + p.MapSymbols[p.RoomID] = existing + if err := g.AccountStore.SaveCharacter(p); err != nil { + sess.WriteLine("Error saving: " + err.Error()) + return + } + colored := color.Render(g.colorMode(sess), spec, existing.Char) + sess.WriteLine(fmt.Sprintf("Map symbol color set to: %s (%s)", colored, colorSpec)) return } -- cgit v1.2.3