v1.2 — Rob walks: sprite-sheet ego (MRPCI v0.5 -sheet2x3 views)
rob.png → rob-sheet2x3.png: 2 walk frames x front/back/side loops (engine mirrors side for right-facing). gen_sprites.py grows a sheet() assembler with per-cel shape asserts. Golden replay still wins 60/60. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
2650c8b024
commit
0976611f36
@ -3,7 +3,7 @@
|
||||
"start_room": 0,
|
||||
"intro_text": "Victoria, BC. 1979. You are Rob Wright, twenty-five, back from Calgary with a bass guitar and no plan. Your kid brother can really drum. The basement is free after laundry hours. (Right-click cycles verbs. Or just type.)",
|
||||
"max_score": 60,
|
||||
"ego_sprite": "rob",
|
||||
"ego_sprite": "rob-sheet2x3",
|
||||
"verbs": {
|
||||
"play": "jam riff shred strum drum",
|
||||
"listen": "hear"
|
||||
|
||||
BIN
sprites/rob-sheet2x3.png
Normal file
BIN
sprites/rob-sheet2x3.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 478 B |
BIN
sprites/rob.png
BIN
sprites/rob.png
Binary file not shown.
|
Before Width: | Height: | Size: 202 B |
@ -41,40 +41,116 @@ def write_png(path, rows, legend, scale=1):
|
||||
S = {} # name -> (rows, legend)
|
||||
|
||||
# --- people -------------------------------------------------------------
|
||||
# Rob Wright — the ego. Tall, calm, bass slung low. (Feet = bottom center.)
|
||||
S["rob"] = (
|
||||
[
|
||||
"....hhhh....",
|
||||
"....hhhh....",
|
||||
"....ffff....",
|
||||
"....f2f2....",
|
||||
"....ffff....",
|
||||
".....ff.....",
|
||||
"...ssssss...",
|
||||
"..ssssssss..",
|
||||
"..s.ssss.s..",
|
||||
"..s.ssss.s..",
|
||||
"..b.ssss....",
|
||||
".bbbrssss...",
|
||||
".bb.ssss....",
|
||||
"..b.pppp....",
|
||||
"....pppp....",
|
||||
"....p..p....",
|
||||
"....p..p....",
|
||||
"....p..p....",
|
||||
"....p..p....",
|
||||
"...oo..oo...",
|
||||
],
|
||||
{
|
||||
"h": (72, 52, 36), # hair
|
||||
"f": (214, 178, 148),# face
|
||||
"2": (40, 40, 48), # eyes
|
||||
"s": (52, 56, 64), # dark shirt
|
||||
"p": (44, 48, 88), # jeans
|
||||
"o": (30, 30, 34), # boots
|
||||
"b": (150, 60, 40), # bass body
|
||||
"r": (220, 200, 160),# bass neck
|
||||
},
|
||||
# Rob Wright — the ego, as an MRPCI sprite sheet (`-sheet2x3`): 2 walk
|
||||
# frames x 3 direction loops (front, back, side; the engine mirrors side
|
||||
# for right-facing). Every cel is exactly 12x20; feet = bottom center.
|
||||
ROB_LEGEND = {
|
||||
"h": (72, 52, 36), # hair
|
||||
"f": (214, 178, 148),# face
|
||||
"2": (40, 40, 48), # eyes
|
||||
"s": (52, 56, 64), # dark shirt
|
||||
"p": (44, 48, 88), # jeans
|
||||
"o": (30, 30, 34), # boots / strap
|
||||
"b": (150, 60, 40), # bass body
|
||||
"r": (220, 200, 160),# bass neck
|
||||
}
|
||||
|
||||
ROB_FRONT0 = [
|
||||
"....hhhh....",
|
||||
"....hhhh....",
|
||||
"....ffff....",
|
||||
"....f2f2....",
|
||||
"....ffff....",
|
||||
".....ff.....",
|
||||
"...ssssss...",
|
||||
"..ssssssss..",
|
||||
"..s.ssss.s..",
|
||||
"..s.ssss.s..",
|
||||
"..b.ssss....",
|
||||
".bbbrssss...",
|
||||
".bb.ssss....",
|
||||
"..b.pppp....",
|
||||
"....pppp....",
|
||||
"....p..p....",
|
||||
"....p..p....",
|
||||
"....p..p....",
|
||||
"....p..p....",
|
||||
"...oo..oo...",
|
||||
]
|
||||
# Frame 2: the walk bob — boots swing in.
|
||||
ROB_FRONT1 = ROB_FRONT0[:19] + ["....oo.oo..."]
|
||||
|
||||
ROB_BACK0 = [
|
||||
"....hhhh....",
|
||||
"....hhhh....",
|
||||
"....hhhh....",
|
||||
"....hhhh....",
|
||||
".....ff.....",
|
||||
"...ssssss...",
|
||||
"..sossssss..",
|
||||
"..s.osss.s..",
|
||||
"..s.soss.s..",
|
||||
"....ssos....",
|
||||
"....ssso....",
|
||||
"....sssso...",
|
||||
"....ssss....",
|
||||
"....pppp....",
|
||||
"....pppp....",
|
||||
"....p..p....",
|
||||
"....p..p....",
|
||||
"....p..p....",
|
||||
"....p..p....",
|
||||
"...oo..oo...",
|
||||
]
|
||||
ROB_BACK1 = ROB_BACK0[:19] + ["....oo.oo..."]
|
||||
|
||||
# Side faces LEFT (MRPCI mirrors it for right); bass rides the front hip.
|
||||
ROB_SIDE0 = [
|
||||
"....hhhh....",
|
||||
"....hhhh....",
|
||||
"....ffff....",
|
||||
"....2fff....",
|
||||
"....ffff....",
|
||||
".....ff.....",
|
||||
"....ssss....",
|
||||
"...ssssss...",
|
||||
"...ssssss...",
|
||||
"...ssssss...",
|
||||
"..brssss....",
|
||||
".rbbssss....",
|
||||
"..b.ssss....",
|
||||
"....pppp....",
|
||||
"....pppp....",
|
||||
"....pp......",
|
||||
"....pp......",
|
||||
"....pp......",
|
||||
"....pp......",
|
||||
"...oooo.....",
|
||||
]
|
||||
ROB_SIDE1 = ROB_SIDE0[:15] + [
|
||||
"...p..p.....",
|
||||
"...p..p.....",
|
||||
"..p....p....",
|
||||
"..p....p....",
|
||||
".oo....oo...",
|
||||
]
|
||||
|
||||
|
||||
def sheet(*loops):
|
||||
"""Stack loops vertically, frames horizontally — the -sheetCxR layout."""
|
||||
rows = []
|
||||
for cels in loops:
|
||||
for cel in cels:
|
||||
assert len(cel) == len(cels[0]), "frames in a loop must share height"
|
||||
assert all(len(r) == len(cel[0]) for r in cel), "cels must be rectangular"
|
||||
for y in range(len(cels[0])):
|
||||
rows.append("".join(c[y] for c in cels))
|
||||
return rows
|
||||
|
||||
|
||||
S["rob-sheet2x3"] = (
|
||||
sheet([ROB_FRONT0, ROB_FRONT1], [ROB_BACK0, ROB_BACK1], [ROB_SIDE0, ROB_SIDE1]),
|
||||
ROB_LEGEND,
|
||||
)
|
||||
|
||||
# John Wright — behind the kit or beside it; sticks in hand.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user