game skeleton

This commit is contained in:
2026-08-29 19:07:32 +02:00
parent a04a61ddd0
commit 0d8918e6f5
39 changed files with 2540 additions and 0 deletions
@@ -0,0 +1,29 @@
package item
import (
inkwell "git.teletypegames.org/engines/inkwell"
"realworld/internal/names"
"realworld/internal/world"
)
// blackMarketArmilla is flavour, not a quest trigger: the gap between
// legitimised technology and street reality.
func blackMarketArmilla() inkwell.Item {
return inkwell.Item{
Name: names.ItemBlackArmilla,
Description: "black-market Armilla",
OnUseSelf: inkwell.Seq(
inkwell.Say(names.Paul, "Jailbroken. Pushes ads, but it was cheap."),
world.TapeSay(names.Dex, "Two slots, and both of them lie about the temperature. Don't trade me in for it."),
),
OnUseWith: map[string]inkwell.Action{
// An AUTHORED failure. Nothing is consumed, the character reacts,
// the tape remarks. Never a generic error line.
names.ItemNoodleLetter: inkwell.Seq(
inkwell.Say(names.Paul, "A letter and a bracelet. Brilliant."),
world.TapeSay(names.Dex, "Nothing. Which is what I'd charge for it."),
),
},
}
}
+22
View File
@@ -0,0 +1,22 @@
// Package item registers the game's inventory items.
//
// Personal Tapes are inventory items and quest triggers at the same time: they
// go into slot 2 of Paul's Armilla, and loading one activates its effect.
package item
import (
inkwell "git.teletypegames.org/engines/inkwell"
"realworld/internal/world"
)
// Register adds every item to the game.
func Register(w *world.World) {
for _, i := range []inkwell.Item{
noodleLetter(),
blackMarketArmilla(),
mysteryTape(),
} {
w.G.ItemManager.Register(i)
}
}
+21
View File
@@ -0,0 +1,21 @@
package item
import (
inkwell "git.teletypegames.org/engines/inkwell"
"realworld/internal/names"
"realworld/internal/world"
)
// mysteryTape is the engine of the investigation. Password-locked; it only
// starts speaking after the club trigger (beat 6).
func mysteryTape() inkwell.Item {
return inkwell.Item{
Name: names.ItemMysteryTape,
Description: "unmarked Personal Tape",
OnUseSelf: inkwell.Seq(
inkwell.Say(names.Paul, "Password-locked. Of course."),
world.TapeSay(names.Dex, "Put it in the second slot if you care that much. I did warn you."),
),
}
}
+20
View File
@@ -0,0 +1,20 @@
package item
import (
inkwell "git.teletypegames.org/engines/inkwell"
"realworld/internal/names"
"realworld/internal/world"
)
// noodleLetter starts the story: it is what brings Paul to the city.
func noodleLetter() inkwell.Item {
return inkwell.Item{
Name: names.ItemNoodleLetter,
Description: "Noodle's letter",
OnUseSelf: inkwell.Seq(
inkwell.Say(names.Paul, "“Come out, Paul. Not a phone conversation.” That's all it says."),
world.TapeSay(names.Dex, "And now you're here. And he isn't."),
),
}
}