P4 hazards: food spoilage with rot speed setting, smoking rack and salt, food poisoning, harsher blizzards, hard winters with lake ice, lightning on trees, snow on roofs (protocol 11)
This commit is contained in:
@@ -18,7 +18,17 @@ const RECIPES := {
|
||||
{"inputs": {"iron_ore": 1, "charcoal": 1}, "output": "iron_bar", "seconds": 30.0},
|
||||
{"inputs": {"iron_nugget": 3, "charcoal": 1}, "output": "iron_bar", "seconds": 30.0},
|
||||
],
|
||||
# P4: smoked food keeps for days (raw rots in two).
|
||||
"smoking_rack": [
|
||||
{"inputs": {"raw_meat": 2, "wood": 1}, "output": "smoked_meat", "count": 2, "seconds": 60.0},
|
||||
{"inputs": {"perch": 2, "wood": 1}, "output": "smoked_fish", "count": 2, "seconds": 60.0},
|
||||
{"inputs": {"trout": 1, "wood": 1}, "output": "smoked_fish", "count": 2, "seconds": 60.0},
|
||||
],
|
||||
}
|
||||
## What the prompt says it makes, and what it needs when idle.
|
||||
const MAKES := {"charcoal_kiln": "charcoal", "smelter": "an iron bar", "smoking_rack": "smoked food"}
|
||||
const NEEDS := {"charcoal_kiln": "put in wood", "smelter": "put in iron ore (or 3 nuggets) and charcoal",
|
||||
"smoking_rack": "put in raw meat or fish, and wood for the fire"}
|
||||
|
||||
var inventory := Inventory.new(SLOTS)
|
||||
var progress := 0.0 ## seconds into the current batch
|
||||
@@ -49,7 +59,9 @@ func _build() -> void:
|
||||
m.emission = Color(1.0, 0.45, 0.12)
|
||||
m.emission_energy_multiplier = 3.0
|
||||
_glow.material_override = m
|
||||
_glow.position = Vector3(0, 0.3 if item_id == "smelter" else 0.25, 0.58 if item_id == "smelter" else 0.72)
|
||||
_glow.position = {"smelter": Vector3(0, 0.3, 0.58), "smoking_rack": Vector3(0, 0.12, 0.0)}.get(item_id, Vector3(0, 0.25, 0.72))
|
||||
if item_id == "smoking_rack":
|
||||
_glow.rotation.x = -PI * 0.5 # (embers on the ground under the rack)
|
||||
_glow.visible = false
|
||||
add_child(_glow)
|
||||
|
||||
@@ -82,7 +94,7 @@ func step(secs: float) -> void:
|
||||
progress -= float(r.seconds)
|
||||
for id in r.inputs:
|
||||
inventory.remove(id, int(r.inputs[id]))
|
||||
inventory.add(r.output, 1)
|
||||
inventory.add(r.output, int(r.get("count", 1)))
|
||||
r = current()
|
||||
if r.is_empty():
|
||||
progress = 0.0
|
||||
@@ -107,10 +119,9 @@ func dismantle_block_reason() -> String:
|
||||
|
||||
func interact_prompt(_player: Node) -> String:
|
||||
var r := current()
|
||||
var what := "charcoal" if item_id == "charcoal_kiln" else "an iron bar"
|
||||
var what: String = MAKES.get(item_id, "something")
|
||||
if r.is_empty():
|
||||
var needs := "put in wood" if item_id == "charcoal_kiln" else "put in iron ore (or 3 nuggets) and charcoal"
|
||||
return "%s (idle: %s) [E] Open" % [display_name(), needs]
|
||||
return "%s (idle: %s) [E] Open" % [display_name(), NEEDS.get(item_id, "put something in")]
|
||||
if WorldNet.is_client():
|
||||
return "%s (making %s) [E] Open" % [display_name(), what]
|
||||
return "%s (making %s, %d s) [E] Open" % [display_name(), what, ceili(float(r.seconds) - progress)]
|
||||
|
||||
Reference in New Issue
Block a user