Loading...
Loading...
Text adventure game engine based on *The Wonderful Adventures of Nils*. Create a Python-based interactive text game with a complete plot system, state management, save function, and achievement system. Use this skill when you need to: create text adventure games, develop interactive story systems, build game engines, implement save management, or design branching storylines.
npx skill4agent add insight68/skills goose-adventure-game# Run the game engine with Python
python3 scripts/game_engine.py
# Or use pnpm (if needed)
pnpm run gamegoose-adventure-game/
├── scripts/
│ ├── game_engine.py # Main game engine class
│ ├── game_script.json # Game script data
│ └── save_manager.py # Save manager
├── saves/ # Save directory (auto-created)
└── SKILL.md # This documentfrom scripts.game_engine import GameEngine, load_script_from_file
# Load game script
script = load_script_from_file("scripts/game_script.json")
# Create game engine
engine = GameEngine(script, save_dir="./saves")
# Render current scene
scene = engine.render_scene()
print(f"{scene['title']}\n{scene['description']}")
# Display choices
for choice in scene['choices']:
print(f"{choice['index']}: {choice['text']}")
# Player makes a choice
engine.make_choice(0) # Choose the first option
# Save game
engine.save_game("slot1")| Attribute | Type | Range | Description |
|---|---|---|---|
| int | 0-100 | Health points |
| int | 0-100 | Morality value (determines ending) |
| int | 0-100 | Size value (0=thumb-sized, 100=normal) |
| int | 0-1000 | Knowledge value |
| list | - | Inventory |
| list | - | Achievement list |
| dict | - | Event flags |
{
"id": "scene_id",
"title": "Scene Title",
"description": "Scene Description",
"choices": [
{
"text": "Option Text",
"next_scene": "Next Scene ID",
"requirements": {
"morality_min": 50,
"has_item": "key"
},
"effects": {
"moral_change": 10,
"add_item": "key",
"set_flag": {"met_npc": true}
}
}
]
}has_itemflagmorality_min/maxsize_min/maxhas_achievementadd_itemremove_itemhp_changesize_changeset_flagadd_achievementmoral_changeknowledge_gainfrom scripts.save_manager import SaveManager
manager = SaveManager(save_dir="./saves")
# Save game
manager.save_game("slot1", game_data)
# Load game
game_data = manager.load_game("slot1")
# List all saves
saves = manager.list_saves()
# Delete save
manager.delete_save("slot1")from scripts.save_manager import AutoSaveManager
auto_save = AutoSaveManager(manager, auto_save_interval=5)
# Check after each scene change
auto_save.on_scene_change("autosave", game_data)
# Force save
auto_save.force_save("quicksave", game_data)scenesgame_script.json{
"id": "my_new_scene",
"chapter": 1,
"title": "New Scene Title",
"description": "Scene description...",
"choices": [
{
"text": "Option 1",
"next_scene": "scene_a"
},
{
"text": "Option 2",
"next_scene": "scene_b",
"requirements": {"morality_min": 50},
"effects": {"moral_change": 10}
}
]
}endingsgame_script.json{
"id": "special_ending",
"title": "Special Ending",
"description": "Ending description...",
"requirements": {
"morality_min": 80,
"flag": ["special_event", true]
}
}{
"effects": {
"add_achievement": "🏆 Custom Achievement"
}
}state = engine.state
print(f"Health: {state.hp}")
print(f"Morality: {state.morality}")
print(f"Knowledge: {state.knowledge}")
print(f"Items: {state.inventory}")
print(f"Achievements: {state.achievements}")engine.state.current_scene = "target_scene_id"engine.state.morality = 80
engine.state.knowledge = 500
engine.state.inventory.append("special_item")game_script.jsongame_infoscenesendingsGameEngineGameState