aboutsummaryrefslogtreecommitdiff
path: root/internal/game
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-07-05 20:06:53 -0400
committerhistoria <[not public]>2026-07-05 20:07:50 -0400
commit843fa6db681e494bf46e191655323a40577542b5 (patch)
treecf32ec18d50434c14a1152147ff6e5e8b3576998 /internal/game
parent7b5ed92e003d8a4bf9bdc69d43b7354eb2260dfa (diff)
downloadthehouseoficarus-843fa6db681e494bf46e191655323a40577542b5.tar.gz
feat: remove deprecated use/station interaction model
Diffstat (limited to 'internal/game')
-rw-r--r--internal/game/act.go4
-rw-r--r--internal/game/act_state.go2
-rw-r--r--internal/game/act_use.go141
-rw-r--r--internal/game/cmd_use.go6
-rw-r--r--internal/game/cmd_verbs.go4
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(&sectionObjs, &seen, "talk "+name)
}
- if bt == "use" {
- addUnique(&sectionObjs, &seen, "use "+name)
- }
-
for _, ui := range def.UseInteractions {
if ui.Item == "" && (ui.Condition == nil || g.checkCondition(sess, ui.Condition)) {
addUnique(&sectionObjs, &seen, "use "+name)