initial meeting draft
@@ -0,0 +1,27 @@
|
||||
# VNGame — Iron Hollow PoC
|
||||
|
||||
## Run
|
||||
Open in Ren'Py launcher → Run.
|
||||
|
||||
## What to test
|
||||
1. Play straight through (no checkpoint) — see all 3 base branches.
|
||||
2. Create a checkpoint → pick "To find something worth doing" → **Rewind**.
|
||||
Watch the teal wash and Luno's linger beat afterward.
|
||||
3. Explore 3+ branches, then the 4th unlocked option appears.
|
||||
|
||||
## Missing assets (Ren'Py will warn but not crash)
|
||||
- `game/images/bg training_yard.png`
|
||||
- `game/images/sara neutral.png`, `sara pained.png`
|
||||
- `game/images/luno curious.png`, `luno amused.png`, `luno neutral.png`,
|
||||
`luno soft.png`, `luno tilted.png`, `luno still.png`, `luno laugh.png`,
|
||||
`luno sharp.png`, `luno linger.png`
|
||||
|
||||
Any placeholder PNG renamed to match works fine for testing.
|
||||
|
||||
## Internal flags
|
||||
| Variable | Meaning |
|
||||
|---|---|
|
||||
| `checkpoint_set` | Player placed a checkpoint this scene |
|
||||
| `rewind_used` | Player rewound at least once |
|
||||
| `branches_explored` | Choice screen visit count (unlocks 4th option at 3) |
|
||||
| `luno_suspicion` | 0–4 internal tracker, ready to wire into future scenes |
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
@@ -1,33 +1,228 @@
|
||||
# The script of the game goes in this file.
|
||||
# The Iron Hollow — Chapter 1 PoC
|
||||
# Scene 2: Sara Arrives
|
||||
|
||||
# Declare characters used by this game. The color argument colorizes the
|
||||
# name of the character.
|
||||
define sara = Character("Sara", color="#c8a882")
|
||||
define luno = Character("Luno", color="#82b4c8")
|
||||
define narrator = Character(None, kind=nvl)
|
||||
|
||||
define s = Character("Sara")
|
||||
|
||||
|
||||
# The game starts here.
|
||||
# ── Persistent flags ──────────────────────────────────────────────────────────
|
||||
default checkpoint_set = False
|
||||
default rewind_used = False
|
||||
default branches_explored = 0
|
||||
default luno_suspicion = 0
|
||||
|
||||
# ── Entry point ───────────────────────────────────────────────────────────────
|
||||
label start:
|
||||
scene bg training_yard
|
||||
with fade
|
||||
|
||||
# Show a background. This uses a placeholder by default, but you can
|
||||
# add a file (named either "bg room.png" or "bg room.jpg") to the
|
||||
# images directory to show it.
|
||||
"The Iron Hollow training yard sits inside a converted warehouse district. Stone walls, packed dirt, the smell of old metal and new sweat."
|
||||
"Sara takes it all in before she steps through the gate."
|
||||
|
||||
scene bg room
|
||||
show sara neutral at left
|
||||
with easeinright
|
||||
|
||||
# This shows a character sprite. A placeholder is used, but you can
|
||||
# replace it by adding a file named "eileen happy.png" to the images
|
||||
# directory.
|
||||
"Two people are already here. A boy against the far wall, watching nothing. And a girl near the gate — moving like she already belongs."
|
||||
|
||||
show eileen happy
|
||||
show luno curious at right
|
||||
with easeinright
|
||||
|
||||
# These display lines of dialogue.
|
||||
"The girl notices Sara first."
|
||||
jump luno_greeting
|
||||
|
||||
s "You've created a new Ren'Py game."
|
||||
label luno_greeting:
|
||||
luno "You're here for the recruitment?"
|
||||
sara "Yes. Where do I register?"
|
||||
luno "The man over at that table takes your name. Then we wait."
|
||||
luno "I'm Luno. Been here a few days already — helping with the wounded from last month's job. I know how things run here if you need anything."
|
||||
"She doesn't say it like an offer. She says it like she's already taking notes."
|
||||
luno "So. Money, glory, or are you just bored?"
|
||||
jump choice_screen
|
||||
|
||||
s "Once you add a story, pictures, and music, you can release it to the world!"
|
||||
label choice_screen:
|
||||
$ branches_explored += 1
|
||||
#show screen timer_bar(20)
|
||||
|
||||
# This ends the game.
|
||||
menu:
|
||||
"Why are you here?"
|
||||
"\[ Create Checkpoint \]" if not checkpoint_set:
|
||||
$ checkpoint_set = True
|
||||
hide screen timer_bar
|
||||
scene black
|
||||
with dissolve
|
||||
"A flash. Sara's hand, signing something. A contract. The ink is red."
|
||||
"It could mean anything."
|
||||
scene bg training_yard
|
||||
with dissolve
|
||||
show sara neutral at left
|
||||
show luno curious at right
|
||||
jump choice_screen
|
||||
|
||||
"For the money, like anyone.":
|
||||
hide screen timer_bar
|
||||
jump branch_money
|
||||
|
||||
"To find something worth doing.":
|
||||
hide screen timer_bar
|
||||
jump branch_purpose
|
||||
|
||||
"I'd rather not say.":
|
||||
hide screen timer_bar
|
||||
jump branch_silence
|
||||
|
||||
"[ You asked the others the same thing, didn't you. ]" if checkpoint_set and branches_explored >= 3:
|
||||
hide screen timer_bar
|
||||
jump branch_sharp
|
||||
|
||||
label branch_money:
|
||||
$ luno_suspicion += 1
|
||||
sara "Same reason as everyone else, I'd assume."
|
||||
luno "Honest. I can work with that."
|
||||
show luno amused at right
|
||||
luno "Though if money's the goal, you don't look like you need it."
|
||||
sara "Looks can be misleading."
|
||||
show luno neutral at right
|
||||
luno "Sure."
|
||||
"A pause. Just a half-beat too long."
|
||||
luno "They can be."
|
||||
"She doesn't push. But her eyes stay on Sara a moment after the conversation moves on."
|
||||
jump scene_continues
|
||||
|
||||
label branch_purpose:
|
||||
sara "I'm not looking for money exactly. More... something to point myself at."
|
||||
"A beat. Something opens in Luno's expression — not warm, but something."
|
||||
show luno curious at right
|
||||
luno "Huh. That's not what I expected."
|
||||
sara "What did you expect?"
|
||||
luno "Something about honour. Or family legacy."
|
||||
show luno tilted at right
|
||||
luno "The clothes suggest a script."
|
||||
show sara pained at left
|
||||
sara "The script didn't survive."
|
||||
"She doesn't mean to say it. Too true. Too fast. Too much."
|
||||
"She can feel it land — can feel Luno actually {i}looking{/i} at her now, not just watching."
|
||||
show luno soft at right
|
||||
luno "...Yeah. I know that feeling."
|
||||
"A real moment. Brief. Neither of them knows what to do with it."
|
||||
|
||||
if checkpoint_set:
|
||||
show screen rewind_prompt
|
||||
"The rewind option surfaces at the edge of the screen, glowing faintly."
|
||||
"Sara can step back. Give the safer answer. Luno will never know what she almost said."
|
||||
menu:
|
||||
"[ ↺ Rewind ] (14 seconds remaining)":
|
||||
hide screen rewind_prompt
|
||||
$ rewind_used = True
|
||||
$ luno_suspicion += 1
|
||||
scene black
|
||||
with dissolve
|
||||
show screen teal_wash
|
||||
"The world pulls back."
|
||||
"Colour drains to teal. Sound slows to nothing."
|
||||
hide screen teal_wash
|
||||
scene bg training_yard
|
||||
with dissolve
|
||||
show sara neutral at left
|
||||
show luno curious at right
|
||||
"Sara is standing at the choice again. Luno's question still in the air."
|
||||
jump choice_after_rewind
|
||||
"[ Continue ]":
|
||||
hide screen rewind_prompt
|
||||
|
||||
jump scene_continues
|
||||
|
||||
label choice_after_rewind:
|
||||
menu (caption="— Why are you here? —"):
|
||||
"For the money, like anyone.":
|
||||
jump branch_money_post_rewind
|
||||
"I'd rather not say.":
|
||||
jump branch_silence_post_rewind
|
||||
|
||||
label branch_money_post_rewind:
|
||||
sara "Same reason as everyone else."
|
||||
luno "Sure."
|
||||
"Unremarkable. Fine."
|
||||
"But when Sara finishes speaking, Luno's eyes linger — just a half-second longer than they should."
|
||||
show luno linger at right
|
||||
"Not suspicion. Not quite. More like the feeling of reaching for something that moved."
|
||||
show luno neutral at right
|
||||
"She shakes it off. Probably nothing."
|
||||
"Sara knows it wasn't nothing."
|
||||
$ luno_suspicion += 1
|
||||
jump scene_continues
|
||||
|
||||
label branch_silence_post_rewind:
|
||||
sara "I'd rather not say."
|
||||
luno "Fair enough."
|
||||
"But when Sara finishes speaking, Luno's eyes linger — just a half-second longer than they should."
|
||||
show luno linger at right
|
||||
"Not suspicion. Not quite. More like the feeling of reaching for something that moved."
|
||||
show luno neutral at right
|
||||
"She shakes it off. Probably nothing."
|
||||
"Sara knows it wasn't nothing."
|
||||
$ luno_suspicion += 1
|
||||
jump scene_continues
|
||||
|
||||
label branch_silence:
|
||||
sara "That's a fairly personal question for someone I've known thirty seconds."
|
||||
luno "Fair. I ask everyone. You don't have to answer."
|
||||
sara "...Then I won't."
|
||||
luno "That's an answer too."
|
||||
"She's not unfriendly. But Sara just became a question mark in Luno's mental ledger."
|
||||
$ luno_suspicion += 1
|
||||
jump scene_continues
|
||||
|
||||
label branch_sharp:
|
||||
sara "You asked him the same thing."
|
||||
"She nods toward Eron."
|
||||
sara "Before I arrived."
|
||||
"Luno goes still. Not alarmed — but recalibrating."
|
||||
show luno still at right
|
||||
luno "...You were watching from outside the gate?"
|
||||
sara "The wall has gaps."
|
||||
luno "Most people don't bother to look."
|
||||
sara "I bother."
|
||||
"A pause. Luno is weighing something."
|
||||
luno "That's either very smart or very paranoid."
|
||||
sara "Both, usually."
|
||||
"Luno laughs — a real one, short and surprised."
|
||||
show luno laugh at right
|
||||
"But her eyes are sharper now, not warmer."
|
||||
show luno sharp at right
|
||||
"This is not a win. It's a different kind of exposure."
|
||||
$ luno_suspicion += 2
|
||||
jump scene_continues
|
||||
|
||||
label scene_continues:
|
||||
"Before the silence can settle, footsteps at the gate."
|
||||
"Two more arrivals. The scene continues..."
|
||||
return
|
||||
|
||||
# ── Screens ───────────────────────────────────────────────────────────────────
|
||||
|
||||
screen timer_bar(duration):
|
||||
zorder 10
|
||||
timer duration action Hide("timer_bar")
|
||||
vbox:
|
||||
xalign 0.5
|
||||
yalign 0.02
|
||||
bar:
|
||||
value AnimatedValue(duration, duration)
|
||||
xsize 400
|
||||
ysize 14
|
||||
text "Respond within [duration]s":
|
||||
xalign 0.5
|
||||
color "#c8c8c8"
|
||||
size 18
|
||||
|
||||
screen rewind_prompt():
|
||||
zorder 10
|
||||
text "[ ↺ Rewind available ]":
|
||||
xalign 0.05
|
||||
yalign 0.95
|
||||
color "#4ab8b8"
|
||||
size 22
|
||||
|
||||
screen teal_wash():
|
||||
zorder 20
|
||||
add Solid("#1a4a4a") alpha 0.7
|
||||