From a6f0ad79e2e3a5b7c11eef1ffc3233f3a2766f77 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Sun, 14 Jun 2026 22:38:23 -0400 Subject: feat: fractional ticks and server game_speed implemented. potentially insanely janky. --- internal/game/action_burn.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'internal/game/action_burn.go') diff --git a/internal/game/action_burn.go b/internal/game/action_burn.go index d57307a..917a6fe 100644 --- a/internal/game/action_burn.go +++ b/internal/game/action_burn.go @@ -102,6 +102,8 @@ func (g *Game) startBurn(sess *net.Session, p *player.Player, itemID string, fro phase = 0 } + p.ActionState = &ActionState{Type: ActionBurning} + p.Action = &action.Action{ Type: "burn", TargetID: itemID, @@ -138,11 +140,13 @@ func (g *Game) startStoke(sess *net.Session, p *player.Player, itemID string) { sess.WriteLine("You begin to tend to the fire.") + p.ActionState = &ActionState{Type: ActionStoking} + p.Action = &action.Action{ Type: "stoke", TargetID: itemID, TargetName: logDef.Name, - WaitLeft: 10, + WaitLeft: g.computeTicks(10), Data: map[string]any{ "item_id": itemID, "fire_key": fireKey, @@ -155,7 +159,7 @@ func (g *Game) startStoke(sess *net.Session, p *player.Player, itemID string) { func (g *Game) advanceBurn(sess *net.Session, p *player.Player) { data := p.Action.Data itemID := data["item_id"].(string) - toolSpeed := data["tool_speed"].(int) + toolSpeed := data["tool_speed"].(float64) phase := data["phase"].(int) logDef, err := g.ItemStore.Load(itemID) @@ -178,7 +182,7 @@ func (g *Game) advanceBurn(sess *net.Session, p *player.Player) { g.broadcastDrop(p, logDef.Name) data["phase"] = 1 - p.Action.WaitLeft = toolSpeed + p.Action.WaitLeft = g.computeTicks(toolSpeed) return } @@ -192,7 +196,7 @@ func (g *Game) advanceBurn(sess *net.Session, p *player.Player) { if phase == 1 { sess.WriteLine(fmt.Sprintf("You try burning the %s on the ground...", logDef.Name)) data["phase"] = 2 - p.Action.WaitLeft = toolSpeed + p.Action.WaitLeft = g.computeTicks(toolSpeed) return } @@ -236,7 +240,7 @@ func (g *Game) advanceBurn(sess *net.Session, p *player.Player) { sess.WriteLine("You can't seem to get a fire going.") data["phase"] = 1 - p.Action.WaitLeft = toolSpeed + p.Action.WaitLeft = g.computeTicks(toolSpeed) } } @@ -244,7 +248,7 @@ func (g *Game) advanceStoke(sess *net.Session, p *player.Player) { data := p.Action.Data itemID := data["item_id"].(string) fireKey := data["fire_key"].(string) - burnTicks := data["burn_ticks"].(int) + burnTicks := data["burn_ticks"].(float64) xp := data["xp"].(int) st := g.World.GetObjStateByKey(fireKey) @@ -289,10 +293,10 @@ func (g *Game) advanceStoke(sess *net.Session, p *player.Player) { return } - p.Action.WaitLeft = 10 + p.Action.WaitLeft = g.computeTicks(10.0) } -func (g *Game) findFireTool(sess *net.Session, p *player.Player) (toolSpeed int, ok bool) { +func (g *Game) findFireTool(sess *net.Session, p *player.Player) (toolSpeed float64, ok bool) { toolSpeed = -1 var toolItemID string -- cgit v1.2.3