diff --git a/.DS_Store b/.DS_Store index 70c9109..adb58e6 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/game/README.md b/game/README.md new file mode 100644 index 0000000..9408a60 --- /dev/null +++ b/game/README.md @@ -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 | \ No newline at end of file diff --git a/game/images/bg training_yard.png b/game/images/bg training_yard.png new file mode 100644 index 0000000..cc29ec8 Binary files /dev/null and b/game/images/bg training_yard.png differ diff --git a/game/images/luno amused.png b/game/images/luno amused.png new file mode 100644 index 0000000..de4918a Binary files /dev/null and b/game/images/luno amused.png differ diff --git a/game/images/luno curious.png b/game/images/luno curious.png new file mode 100644 index 0000000..2d4a41a Binary files /dev/null and b/game/images/luno curious.png differ diff --git a/game/images/luno laugh.png b/game/images/luno laugh.png new file mode 100644 index 0000000..b42b54e Binary files /dev/null and b/game/images/luno laugh.png differ diff --git a/game/images/luno linger.png b/game/images/luno linger.png new file mode 100644 index 0000000..1bfa9c7 Binary files /dev/null and b/game/images/luno linger.png differ diff --git a/game/images/luno neutral.png b/game/images/luno neutral.png new file mode 100644 index 0000000..e0da35b Binary files /dev/null and b/game/images/luno neutral.png differ diff --git a/game/images/luno sharp.png b/game/images/luno sharp.png new file mode 100644 index 0000000..47b083e Binary files /dev/null and b/game/images/luno sharp.png differ diff --git a/game/images/luno soft.png b/game/images/luno soft.png new file mode 100644 index 0000000..c78827e Binary files /dev/null and b/game/images/luno soft.png differ diff --git a/game/images/luno still.png b/game/images/luno still.png new file mode 100644 index 0000000..49a0805 Binary files /dev/null and b/game/images/luno still.png differ diff --git a/game/images/luno tilted.png b/game/images/luno tilted.png new file mode 100644 index 0000000..2d4a41a Binary files /dev/null and b/game/images/luno tilted.png differ diff --git a/game/images/sara neutral.png b/game/images/sara neutral.png new file mode 100644 index 0000000..038313e Binary files /dev/null and b/game/images/sara neutral.png differ diff --git a/game/images/sara pained.png b/game/images/sara pained.png new file mode 100644 index 0000000..1bd2c8f Binary files /dev/null and b/game/images/sara pained.png differ diff --git a/game/script.rpy b/game/script.rpy index 948c2ce..fa5bd49 100644 --- a/game/script.rpy +++ b/game/script.rpy @@ -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 \ No newline at end of file