diff options
| -rw-r--r-- | data/help/symbol.yaml | 6 | ||||
| -rw-r--r-- | internal/game/cmd_symbol.go | 24 |
2 files changed, 25 insertions, 5 deletions
diff --git a/data/help/symbol.yaml b/data/help/symbol.yaml index 56c91d1..c3ec893 100644 --- a/data/help/symbol.yaml +++ b/data/help/symbol.yaml @@ -4,14 +4,16 @@ description: | Set a custom map symbol for the current room. Usage: symbol <char> [color...] - symbol clear + symbol <color> [...] + symbol reset symbol Examples: symbol M Set current room symbol to M symbol M 232 Set symbol to M with foreground color 232 symbol M 232 bold Set symbol to M with color 232 and bold - symbol clear Remove custom symbol for current room + symbol 233 Set current room's symbol color to 233 + symbol reset Remove custom symbol for current room symbol Show current room's custom symbol The default map symbol for all rooms is ■. You can override 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 <single character> [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 } |
