Major new features: - Menu bar with File/Debug/Config/About menus - Title screen with game startup image from STUP section - Config menu with 2x/4x graphics scaling (SDL_RenderSetLogicalSize) - Controls window showing keyboard and Xbox controller mappings - Save/Load game functionality with JSON serialization Debug tools: - Map Viewer (F4) shows full world grid with zone types - Script Editor (F3) for browsing IACT action scripts - Asset Viewer (F2) for tile and character browsing World generation: - X-tra Large world size with 15x15 grid support - Dynamic grid sizing in MapGenerator and WorldGenerator - Scaled puzzle counts for larger worlds Technical improvements: - Graphics scaling using SDL_RenderSetLogicalSize for proper content scaling - Dynamic grid size support throughout codebase - Updated README with comprehensive documentation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Yoda Stories NG
A modern reimplementation of Star Wars: Yoda Stories (1997) built with C# and SDL2.
About
Yoda Stories NG is a fan-made recreation of the classic LucasArts desktop adventure game. It parses the original game data files and reimplements the game engine from scratch.
Key Features
- Complete data file parsing - Reads original
.dtagame assets - Procedural world generation - Each playthrough generates a unique 10x10 or 15x15 world map
- 15 mission cycle - Full mission progression with item chains and NPC puzzles
- Combat system - Melee and ranged weapons with NPC AI
- Save/Load system - JSON-based save files with full game state
- Widescreen UI - Modern layout with sidebar HUD
- Xbox controller support - Full gamepad controls
- Configurable graphics - 2x and 4x scaling options
- Automated Mission Bot - AI-powered gameplay with A* pathfinding
Screenshots
Gameplay
World Map Viewer
Script Editor
Asset Viewer
Requirements
- .NET 8.0 SDK
- Original Yoda Stories game files (
yodesk.dta) - Windows, Linux, or macOS
Building
# Clone the repository
git clone https://github.com/yourusername/YodaStoriesNG.git
cd YodaStoriesNG
# Build the project
dotnet build src/YodaStoriesNG.Engine
# Run (make sure yodesk.dta is in the data folder)
dotnet run --project src/YodaStoriesNG.Engine
Controls
Keyboard
| Key | Action |
|---|---|
| WASD / Arrow Keys | Move |
| Shift + Direction | Pull blocks |
| Space | Action / Talk / Attack |
| 1-8 | Select inventory slot |
| Tab | Toggle weapon |
| O | Show mission objective |
| X | Travel (X-Wing) |
| R | Restart game |
| M | Toggle sound mute |
| Escape | Quit |
Debug Controls
| Key | Action |
|---|---|
| F1 | Toggle Debug Overlay |
| F2 | Toggle Map Viewer |
| F3 | Toggle Script Editor |
| F4 | Toggle Asset Viewer |
| B | Toggle Mission Bot |
| I | Inspect (console dump) |
| N/P | Next/Previous zone |
| F | Find zone with content |
Xbox Controller
| Button | Action |
|---|---|
| Left Stick / D-Pad | Move |
| A | Action / Talk / Attack |
| B | Cancel / Dismiss dialogue |
| X | Travel (X-Wing) |
| Y | Show mission objective |
| LB / RB | Toggle weapon |
| Start | Restart game |
| Back | Quit |
Menu System
File Menu
- New Game: Small/Medium/Large/X-tra Large - Start new game with different world sizes
- Save Game - Save current progress
- Load Game - Load saved game
- Exit - Quit the game
Debug Menu
- Asset Viewer (F2) - Browse game tiles and characters
- Script Editor (F3) - View and analyze IACT action scripts
- Map Viewer (F4) - See the full world map with zone types
- Enable/Disable Bot - Toggle automated gameplay
Config Menu
- Graphics: 2x/4x Scale - Change window size and rendering scale
- Keyboard Controls - View keyboard control mappings
- Controller Controls - View Xbox controller mappings
- Select Data File - Choose which .dta file to load
World Generation
The game generates procedural worlds using the original algorithm:
| Size | Grid | Puzzles | Description |
|---|---|---|---|
| Small | 10x10 | 4-8 | Quick adventure |
| Medium | 10x10 | 6-12 | Standard game |
| Large | 10x10 | 8-16 | Extended quest |
| X-tra Large | 15x15 | 12-24 | Epic journey |
Each world includes:
- Spaceport - Landing zone with X-Wing
- Puzzle zones - Contain items and NPCs for trading
- Blockades - Require specific items to pass
- Travel zones - Vehicle connections to islands
- Islands - Remote areas with special puzzles
- The Force - Guaranteed weapon at distance 2 from start
Debug Tools
Map Viewer (F2/F4)
Shows the complete world grid with color-coded zones:
- Player position highlighted with pulsing border
- Zone types: Puzzle, Spaceport, Blockade, Travel, Island
- Mission progress and current objective
Script Editor (F3)
Browse and analyze zone action scripts:
- View IACT conditions and instructions
- Click on referenced positions to highlight in-game
- Teleport to zones for testing
Asset Viewer
Browse the complete tile atlas:
- All 2000+ game tiles
- Character frames and animations
- Filter by tile type
Console Inspector (I)
Dumps detailed game state to console:
- Current zone objects and NPCs
- Tile data at player position
- Full IACT script dump
- Inventory and weapon status
Save System
Games are saved to %APPDATA%/YodaStoriesNG/saves/ in JSON format.
Save files include:
- Player position, health, inventory
- World map and zone connections
- Mission progress and puzzle state
- All game variables and flags
Mission Bot
The automated Mission Bot (press B) plays the game automatically:
- A pathfinding* for optimal movement
- Auto-combat with melee and ranged weapons
- Item collection from crates and NPCs
- Puzzle solving through item trading
- Zone exploration to find objectives
The bot displays its current task in the HUD when active.
Project Structure
YodaStoriesNG/
├── src/
│ └── YodaStoriesNG.Engine/
│ ├── Audio/ # Sound playback
│ ├── Bot/ # Automated mission bot
│ │ ├── MissionBot.cs
│ │ ├── BotActions.cs
│ │ ├── MissionSolver.cs
│ │ └── Pathfinder.cs
│ ├── Data/ # Game data structures
│ ├── Debug/ # Debug tools
│ ├── Game/ # Core game logic
│ │ ├── GameEngine.cs
│ │ ├── GameState.cs
│ │ ├── WorldGenerator.cs
│ │ ├── MapGenerator.cs
│ │ ├── ActionExecutor.cs
│ │ ├── SaveGameManager.cs
│ │ └── NPC.cs
│ ├── Parsing/ # DTA file parser
│ ├── Rendering/ # SDL2 renderer
│ │ ├── GameRenderer.cs
│ │ ├── TileRenderer.cs
│ │ └── BitmapFont.cs
│ └── UI/ # UI components
│ ├── MenuBar.cs
│ ├── TitleScreen.cs
│ ├── ControlsWindow.cs
│ ├── DebugMapWindow.cs
│ ├── ScriptEditorWindow.cs
│ └── AssetViewerWindow.cs
└── README.md
Technical Details
Data Format
The game parses the proprietary .dta format:
| Section | Description |
|---|---|
| TILE | 32x32 pixel tiles with palette indices |
| ZONE | Map data with 3 tile layers (18x18 or 9x9) |
| CHAR | Character definitions and walk frames |
| PUZ2 | Puzzle definitions for quest chains |
| IACT | Action scripts (conditions + instructions) |
| IZAX | Zone auxiliary data (NPC spawns with items) |
| STUP | Title screen image (288x288) |
Action Scripts (IACT)
Zone behavior is driven by IACT scripts:
Conditions:
ZoneEnter- Triggered on zone entryHasItem- Check if player has an itemNpcIs- Check NPC at positionTileAtIs- Check tile at layer/positionCounter- Check game counters
Instructions:
PlaceTile- Set tile at layer/positionAddItem- Give item to playerRemoveItem- Take item from playerSpeakNpc- Display dialogueChangeZone- Zone transition
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
Legal
This is a fan project and is not affiliated with or endorsed by LucasArts, Disney, or any related entities. Star Wars and Yoda Stories are trademarks of Lucasfilm Ltd.
You must own a legal copy of Star Wars: Yoda Stories to use this software.
Acknowledgments
- WebFun.io - Yoda Stories file format documentation and reference implementation
- The SDL2 team for the cross-platform multimedia library
- LucasArts for creating the original game
May the Force be with you!




