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
+24
View File
@@ -0,0 +1,24 @@
// Package character registers the game's characters.
//
// Tapes are characters too, not props — the wiki is explicit about it. They
// have no body in the scene, so they carry no W/H and never appear in
// Scene.Actors; their voice lives in the tape channel (see world.TapeSay).
package character
import (
inkwell "git.teletypegames.org/engines/inkwell"
"realworld/internal/world"
)
// Register adds every character to the game.
func Register(w *world.World) {
for _, c := range []inkwell.Character{
paul(),
dex(),
mysteryTape(),
supportTape(),
} {
w.G.CharacterManager.Register(c)
}
}
+17
View File
@@ -0,0 +1,17 @@
package character
import (
inkwell "git.teletypegames.org/engines/inkwell"
"realworld/internal/names"
"realworld/internal/theme"
)
// dex is the personality imprint of a dead friend, permanently in slot 1 of
// Paul's Armilla. Constant commentary, hint system, dialogue partner.
func dex() inkwell.Character {
return inkwell.Character{
Name: names.Dex,
SpeechColor: theme.Amber,
}
}
@@ -0,0 +1,20 @@
package character
import (
inkwell "git.teletypegames.org/engines/inkwell"
"realworld/internal/names"
"realworld/internal/theme"
)
// mysteryTape is the tape found in the alley — in truth Norman's Personal
// Tape, but the player only learns that in the finale.
//
// Its voice is a colder, greyer amber than Dex's. That pays off in reverse:
// it never once spoke in the same voice as the friend.
func mysteryTape() inkwell.Character {
return inkwell.Character{
Name: names.TapeMystery,
SpeechColor: theme.RGB(0xB9A98A),
}
}
+23
View File
@@ -0,0 +1,23 @@
package character
import (
inkwell "git.teletypegames.org/engines/inkwell"
"realworld/internal/names"
"realworld/internal/theme"
)
// paul is the player character: a junk dealer and street survivor, technically
// competent, living on the edge of the city.
func paul() inkwell.Character {
return inkwell.Character{
Name: names.Paul,
Speed: 96,
W: 28,
H: 68,
Start: inkwell.Point{X: 120, Y: 232},
// Bone white: the world and Paul. If something is amber, a tape said
// it — see the colour rule in README.
SpeechColor: theme.Ink,
}
}
@@ -0,0 +1,17 @@
package character
import (
inkwell "git.teletypegames.org/engines/inkwell"
"realworld/internal/names"
"realworld/internal/theme"
)
// supportTape answers everything with basic information, insufferably. Dex
// hates it. Acquired in Chinatown (beat 5) — not reachable yet.
func supportTape() inkwell.Character {
return inkwell.Character{
Name: names.TapeSupport,
SpeechColor: theme.RGB(0xE8C86A),
}
}