diff options
| author | historia <[not public]> | 2026-07-05 20:06:53 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-07-05 20:07:50 -0400 |
| commit | 843fa6db681e494bf46e191655323a40577542b5 (patch) | |
| tree | cf32ec18d50434c14a1152147ff6e5e8b3576998 /internal/game | |
| parent | 7b5ed92e003d8a4bf9bdc69d43b7354eb2260dfa (diff) | |
| download | thehouseoficarus-843fa6db681e494bf46e191655323a40577542b5.tar.gz | |
feat: remove deprecated use/station interaction model
Diffstat (limited to 'internal/game')
| -rw-r--r-- | internal/game/act.go | 4 | ||||
| -rw-r--r-- | internal/game/act_state.go | 2 | ||||
| -rw-r--r-- | internal/game/act_use.go | 141 | ||||
| -rw-r--r-- | internal/game/cmd_use.go | 6 | ||||
| -rw-r--r-- | internal/game/cmd_verbs.go | 4 |
5 files changed, 3 insertions, 154 deletions
diff --git a/internal/game/act.go b/internal/game/act.go index 9e07886..f2ea121 100644 --- a/internal/game/act.go +++ b/internal/game/act.go @@ -178,8 +178,6 @@ func (g *Game) startAction(sess *net.Session, verb, target string) { } else { g.startTalk(sess, p, obj) } - case "use": - g.startUse(sess, p, obj) default: sess.WriteLine(fmt.Sprintf("You can't %s that.", verb)) } @@ -210,8 +208,6 @@ func (g *Game) AdvanceActions() { switch p.Action.Type { case "gather": g.advanceGather(sess, p) - case "use": - g.advanceUse(sess, p) case "burn": g.advanceBurn(sess, p) case "stoke": diff --git a/internal/game/act_state.go b/internal/game/act_state.go index efc5f7d..3840c63 100644 --- a/internal/game/act_state.go +++ b/internal/game/act_state.go @@ -45,8 +45,6 @@ func (g *Game) playerActionDisplay(p *player.Player) string { return "stealing from " + a.TargetName case behavior.TypeTalk: return "talking to " + a.TargetName - case behavior.TypeUse: - return "using a " + a.TargetName case behavior.TypeBurn: return "trying to start a fire" case behavior.TypeStoke: diff --git a/internal/game/act_use.go b/internal/game/act_use.go deleted file mode 100644 index dcddd52..0000000 --- a/internal/game/act_use.go +++ /dev/null @@ -1,141 +0,0 @@ -package game - -import ( - "fmt" - "math/rand" - "strings" - - "thehouseoficarus/internal/behavior" - "thehouseoficarus/internal/engine" - "thehouseoficarus/internal/net" - "thehouseoficarus/internal/object" - "thehouseoficarus/internal/player" -) - -func (g *Game) startUse(sess *net.Session, p *player.Player, obj *object.ObjectDef) { - cfg := obj.Use - if cfg == nil { - sess.WriteLine("You can't use this.") - return - } - - for itemID := range cfg.Consume { - if !p.HasItem(itemID) { - defName := itemID - if def, err := g.ItemStore.Load(itemID); err == nil { - defName = g.itemColorize(sess, def, def.Name) - } - sess.WriteLine(fmt.Sprintf("You need %s to use this.", defName)) - return - } - } - - if cfg.Success == nil && p.FirstFreeSlot() == -1 { - sess.WriteLine("Your inventory is full.") - return - } - - if cfg.BroadcastMessage != "" { - g.broadcastAction(sess, strings.ReplaceAll(cfg.BroadcastMessage, "%o", obj.Name), p.Name) - } else { - g.broadcastAction(sess, "%s uses the %s.", p.Name, obj.Name) - } - - p.Action = &behavior.Action{ - Type: "use", - TargetID: obj.ID, - TargetName: obj.Name, - WaitLeft: engine.ToTicks(1), - Data: &behavior.UseData{Cfg: cfg, Step: 0}, - } - - sess.WriteLine(fmt.Sprintf("%s", cfg.StartMessage)) -} - -func (g *Game) advanceUse(sess *net.Session, p *player.Player) { - d, ok := p.Action.Data.(*behavior.UseData) - if !ok || d == nil || d.Cfg == nil { - g.cancelAction(p) - return - } - cfg := d.Cfg - - for itemID, qty := range cfg.Consume { - if !p.HasItem(itemID) { - defName := itemID - if def, err := g.ItemStore.Load(itemID); err == nil { - defName = g.itemColorize(sess, def, def.Name) - } - sess.WriteLine(fmt.Sprintf("You've run out of %s.", defName)) - g.cancelAction(p) - return - } - if !p.RemoveItem(itemID, qty) { - sess.WriteLine(fmt.Sprintf("You need %d of %s.", qty, itemID)) - g.cancelAction(p) - return - } - } - - if cfg.Success != nil { - skillLevel := p.Level(player.SkillName(cfg.Skill)) - chance := behavior.SuccessChance(*cfg.Success, skillLevel, cfg.Level) - if rand.Float64() >= chance { - if cfg.FailMessage != "" { - sess.WriteLine(cfg.FailMessage) - } - p.Action.WaitLeft = engine.ToTicks(cfg.TicksPerCycle) - return - } - } - - freeSlot := p.FirstFreeSlot() - if freeSlot == -1 { - sess.WriteLine("Your inventory is full.") - g.cancelAction(p) - return - } - - qty := cfg.Reward.Quantity - if qty <= 0 { - qty = 1 - } - - p.SetInvSlot(freeSlot, &player.InventorySlot{ItemID: cfg.Reward.ItemID, Quantity: qty}) - if cfg.XP > 0 { - g.awardSkillXP(sess, p, player.SkillName(cfg.Skill), cfg.XP) - } - g.AccountStore.SaveCharacter(p) - - itemName := cfg.Reward.ItemID - rewardDef, _ := g.ItemStore.Load(cfg.Reward.ItemID) - if rewardDef != nil { - itemName = rewardDef.Name - } - coloredName := g.itemColorize(sess, rewardDef, itemName) - - var line string - if cfg.SuccessMessage != "" { - line = strings.ReplaceAll(cfg.SuccessMessage, "%n", coloredName) - } else { - line = fmt.Sprintf("You make a %s.", coloredName) - } - if cfg.XP > 0 && p.OptionBool("xp_drops") { - line += g.formatXpDropSingle(sess, p, player.SkillName(cfg.Skill), cfg.XP) - } - sess.WriteLine(line) - - if p.FirstFreeSlot() == -1 { - if cfg.EndMessage != "" { - sess.WriteLine(cfg.EndMessage) - } - sess.WriteLine("Your inventory is full.") - g.cancelAction(p) - return - } - if cfg.EndMessage != "" { - sess.WriteLine(cfg.EndMessage) - } - - p.Action.WaitLeft = engine.ToTicks(cfg.TicksPerCycle) -} diff --git a/internal/game/cmd_use.go b/internal/game/cmd_use.go index 8540074..22fc169 100644 --- a/internal/game/cmd_use.go +++ b/internal/game/cmd_use.go @@ -68,7 +68,7 @@ func (g *Game) doUse(sess *net.Session, input string) { return } - g.startAction(sess, "use", input) + sess.WriteLine("You can't use that.") } func (g *Game) useRoomObject(sess *net.Session, p *player.Player, input string) bool { @@ -214,7 +214,7 @@ func (g *Game) doUseItemOnTarget(sess *net.Session, p *player.Player, itemAName, objSt := &objInstances[0] def, _ := g.ObjectStore.Load(objSt.DefID) if def == nil { - g.startAction(sess, "use", itemBName) + sess.WriteLine("You can't use that.") return } @@ -305,7 +305,7 @@ func (g *Game) doUseItemOnTarget(sess *net.Session, p *player.Player, itemAName, return } - g.startAction(sess, "use", itemBName) + sess.WriteLine("You can't use that.") return } diff --git a/internal/game/cmd_verbs.go b/internal/game/cmd_verbs.go index 57db0a6..e4f1fa1 100644 --- a/internal/game/cmd_verbs.go +++ b/internal/game/cmd_verbs.go @@ -75,10 +75,6 @@ func (g *Game) executeVerbs(sess *net.Session, args []string, rawInput string) { addUnique(§ionObjs, &seen, "talk "+name) } - if bt == "use" { - addUnique(§ionObjs, &seen, "use "+name) - } - for _, ui := range def.UseInteractions { if ui.Item == "" && (ui.Condition == nil || g.checkCondition(sess, ui.Condition)) { addUnique(§ionObjs, &seen, "use "+name) |
