Skip to content

A handcrafted game engine for point-and-click adventures, puzzle games, and narrative experiments. Written from scratch in Python with PyGame, YAML, and deep modularity in mind.

License

Notifications You must be signed in to change notification settings

PtiCalin/simple-game-engine

Repository files navigation

🔧 simple-game-engine

A modular point-and-click adventure engine written in Python.

Simple Game Engine is built to support surreal, story-rich games inspired by Rusty Lake, A Little to the Left, Frog Detective, Tangle Tower, Outer Wilds and more. It focuses on smooth interactions, seamless modularity and expansive possibilities.

License: MIT CI Status: WIP Pull Requests Welcome GitHub Discussions


🌟 Key Features

  • Scene manager with interactive hotspots
  • YAML-based item, character, and puzzle logic
  • Inventory and contextual action systems
  • Persistent GameState for flags and progress
  • Modular dialogue engine with branching paths
  • Timeline system for synced events and time loops
  • Support for character traits, interaction effects, and narrative memory

🧠 Goals

  • Total creative freedom
  • Extensible for visual scripting or modding
  • Engine + toolkit for building games that are weird, personal and beautiful

🗺️ Project Roadmap

The full development roadmap lives in ROADMAP.md.


🚀 Getting Started

Clone this repo and install dependencies:

git clone https://github.com/your-username/simple-game-engine.git
cd simple-game-engine
pip install -r requirements.txt

🛠 Run the Demo

python main.py  # or your preferred dev command

⏱ Timeline Events

Scenes can schedule delayed actions:

scene:
  id: intro
  features:
    time_loop: true

events:
  - trigger: delay
    time: 30  # seconds
    action: set_flag
    flag: door_closed

🗺 World Manager

Worlds are described in YAML files that list regions and scenes. This new format includes metadata like title and start_region. Load a world with WorldManager:

world:
  id: montreal
  title: "Surreal Montreal"
  start_region: mileend
  regions:
    - id: mileend
      scenes: [ruelle_portail]
from engine.world_manager import WorldManager
wm = WorldManager("game/worlds/montreal.yaml")
print(wm.current_scene())

🎨 Asset Manager

Use AssetManager to cache images and music referenced by scenes:

from engine.asset_manager import AssetManager
assets = AssetManager()
scene = ...  # a Scene object
assets.preload_scene(scene)
background = assets.get_image(scene.background)

🤝 Contributing

We welcome bug reports, feature ideas and pull requests!

See CONTRIBUTING.md for how to get started. Join us in 💬 GitHub Discussions to share ideas.


📜 License

Distributed under the MIT License.
You are free to fork, remix, and share — just be kind.

About

A handcrafted game engine for point-and-click adventures, puzzle games, and narrative experiments. Written from scratch in Python with PyGame, YAML, and deep modularity in mind.

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published