package config import ( "os" "gopkg.in/yaml.v3" ) type Config struct { Game GameConfig `yaml:"game"` Colors ColorsConfig `yaml:"colors"` Telnet TelnetConfig `yaml:"telnet"` TelnetTLS TelnetTLSConfig `yaml:"telnet_tls"` HTTP HTTPConfig `yaml:"http"` HTTPS HTTPSConfig `yaml:"https"` } type ColorsConfig map[string]string func DefaultColors() ColorsConfig { return ColorsConfig{ "room_name": "81 bold", "room_number": "240", "room_desc": "252", "direction": "75", "exit_direction": "75", "exit_name": "114", "mob_name": "203", "friendly_npc": "120", "hostile_npc": "203", "damage": "196", "enemy_hp": "167", "character_hp": "84", "xp": "222", "level_up": "226 bold", "item": "223", "player_name": "189", "death": "196 bold", "victory": "83", "miss": "243", "error": "209", "say": "230", "dialog": "117", "broadcast": "215", "fire": "208", "eat_food": "156", "drop_message": "186", "credits_pickup": "220", "visual_tick": "33 dim", "visual_first_tick": "196 bold", "battery": "45", "tech_depleted": "196", } } type GameConfig struct { TickLength int `yaml:"tick_length"` } type TelnetConfig struct { Enabled bool `yaml:"enabled"` Port int `yaml:"port"` } type TelnetTLSConfig struct { Enabled bool `yaml:"enabled"` Port int `yaml:"port"` CertFile string `yaml:"cert_file"` KeyFile string `yaml:"key_file"` } type HTTPConfig struct { Enabled bool `yaml:"enabled"` Port int `yaml:"port"` } type HTTPSConfig struct { Enabled bool `yaml:"enabled"` Port int `yaml:"port"` CertFile string `yaml:"cert_file"` KeyFile string `yaml:"key_file"` } func Default() *Config { return &Config{ Game: GameConfig{ TickLength: 600, }, Colors: DefaultColors(), Telnet: TelnetConfig{ Enabled: true, Port: 4000, }, TelnetTLS: TelnetTLSConfig{ Enabled: false, Port: 4001, }, HTTP: HTTPConfig{ Enabled: false, Port: 8080, }, HTTPS: HTTPSConfig{ Enabled: false, Port: 8443, }, } } func Load(path string) (*Config, error) { data, err := os.ReadFile(path) if err != nil { return nil, err } cfg := Default() if err := yaml.Unmarshal(data, cfg); err != nil { return nil, err } return cfg, nil } func SaveDefault(path string) error { cfg := Default() data, err := yaml.Marshal(cfg) if err != nil { return err } return os.WriteFile(path, data, 0644) }