Video summary

렌파이 강좌 - "모바일 완성 까지" 1강: 대사/이미지/조건 처리

Main summary

Key takeaways

Technology

Summary of the “RennPy/렌파이 강좌” Lesson 1 (Dialogue / Images / Condition Handling)

1) Setup & Project Preparation (Lampy / Lampy-like editor)

  • Download and install Ren’Py from lampy.org (latest version mentioned: 6.99.10).
  • Unzip the downloaded project/template files.
  • Run the .app / Windows executable depending on OS.
  • In Preferences → Environment settings:
    • Set UI/language to Korean.
    • Create 3 folders and set an execution path for the project.
    • For the script editor, set it to the system editor.
    • Optionally install an external editor (Sumt / thumbnail text) to improve autocomplete.
  • Launch the Ren’Py launcher and confirm the screen matches expectations.
  • Example project: “Gilla Guide The Question” Run it to see dialogue, images, and choice-based endings in action.

2) Ren’Py Project Structure (where to edit what)

Inside the created game folder:

  • images/: stores image assets (e.g., character sprites, backgrounds).
  • Scripts (.rpy): core story/dialogue scripting.
  • options screen / other config: general option settings (resolution, fonts, etc.).
  • BAK files: temporary; can be deleted.
  • RPYC: compiled versions; not needed for beginners.

Key idea:

  • Story/dialogue/control logic belongs in .rpy files.
  • Background/UI behavior comes from script commands plus image assets.

3) Writing Dialogue: Labels, Names, Narration

  • The story entry point is a label, e.g. label Start:
  • Comments are not game logic; comment text is ignored by the engine.
  • Dialogue structure:
    • With a name: Name "Dialogue" outputs character dialogue with that name.
    • Without a name: lines can function as narration/monologue.
  • return ends a segment/story branch (framed as ending that flow in the lesson).

4) Displaying Character Images

  • Conceptually similar to defining named images mapped to files, e.g.:
    • image <name> = "<file>.png" (image name → file inside images/)
  • Use:
    • show <image_name> to display the declared image.
  • The lesson highlights that character name + dialogue often needs repetition, motivating “shortcut” approaches (aliases/variables).

5) Defining Characters (avoid repeating name mappings)

  • Use define to create character aliases, e.g.:
    • define CHm = Character "Myth"
  • Then use the alias in dialogue statements to avoid retyping full names each time.
  • The lesson also suggests that English variable-like identifiers can be more convenient than Korean identifiers.

6) Backgrounds

Background handling is similar to character images:

  • Declare a background image and show it using an image reference (conceptually like show School).

Important behavior:

  • When the background changes, previously shown character sprites are cleared/hidden—so characters often need to be shown again after switching backgrounds.

7) Choices / Menus (branching)

  • Use a menu construct for player choice:
    • Options appear as numbered selectable items.
    • Selecting an option runs the corresponding branch’s lines, then continues with that branch’s flow.
  • The lesson demonstrates multi-ending behavior:
    • Choosing option 1 vs option 2 leads to different dialogue and outcomes.

8) Multiple Characters on One Screen + Positioning

  • You can declare multiple character sprites and display them simultaneously.
  • Positioning:
    • Use keywords like left / center / right (and transforms/at-style positioning).
    • You can also specify custom positions beyond predefined ones.
  • Without positioning, characters can overlap; positioning prevents that.

9) Facial Expressions via Image Tags

  • Facial expressions are handled using tags appended to image variants, such as:
    • neutral, angry, smile, excited, etc.
  • The concept:
    • Define one image group/base, then select an expression variant via tags.
  • This can avoid creating entirely separate full assets per expression (depending on how the files are organized).

10) Hiding Characters (and transitions/effects)

  • Use hide to remove a character sprite.
  • Hiding a character “group” can hide all expression variants.
  • Use with to apply transitions when showing/hiding.
    • Example transition mentioned: dissolve (fade/opacity change).
  • show transitions can also be applied similarly.

Pause behavior

  • Mentions a concept like pause affecting input timing:
    • e.g., when clicking advances dialogue or how the click is consumed.

11) Audio: BGM vs Sound Effects

  • Background music (loops as BGM):
    • Use a play music <file>-type command.
  • Sound effects (one-shot):
    • Use play sound <file> for effects that play once.
  • Audio files are referenced from the project using example filenames (e.g., BGM.mp3, sfx.mp3).

12) Background Change + Dissolve Combo

  • Demonstrates combining background and character changes using transitions (e.g., dissolve).
  • Reinforces the rule: after changing the background, you often need to re-show characters because sprites from the old stage disappear.

13) Labels and jump (branch control)

  • Use labels as named story markers.
  • jump <label> transfers execution to another label, skipping intermediate script sections.
  • Shows how jump works with choice branches to implement multi-ending flows.

14) Conditional Logic with Variables and if

  • Use variables (e.g., affection/favorability counters) to drive branching.
  • Typical conditional form:
    • if <variable> > 0:
  • A practical bug explanation is included:
    • If scripts run “simultaneously” or in an unexpected order, you may get an error because a referenced variable doesn’t exist yet in that execution timeline.
    • Fix: group commands using an init / initializer so the engine processes them in a safe order and the variable is defined before use.
  • The lesson ties together:
    • menu/choices, jump, if, and variables to create multi-endings.

Main speaker / source

  • Jaemin (solo developer; instructor presenting the Ren’Py tutorial).

Original video