Upload files to "/"
This commit is contained in:
14
actions.md
Normal file
14
actions.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Game Actions
|
||||||
|
|
||||||
|
| Action | Description | Effect | Command Format |
|
||||||
|
|-------------|-------------|--------|-----------------|
|
||||||
|
| Look | Look around the current room | Descriptive text | look |
|
||||||
|
| Search | Search the current room for items | Descriptive text | search |
|
||||||
|
| Take | Pick up an item from the current room | Item is added to inventory | take {item name} |
|
||||||
|
| Use | Use an item from the inventory | Item is used | use {item name} [on {target}] |
|
||||||
|
| Drop | Drop an item from the inventory | Item is removed from inventory | drop {item name} |
|
||||||
|
| Inventory | Display the player's inventory | List inventory | inventory |
|
||||||
|
| Examine | Examine an item in the inventory | Descriptive text | examine {item name / target} |
|
||||||
|
| Move | Move to a different room | Room change | move {direction} |
|
||||||
|
| Attack | Attack an enemy | Damage dealt | attack {target} |
|
||||||
|
| Hide | Hide from an enemy | Enemy is blinded | hide {target} |
|
||||||
261
plan.md
Normal file
261
plan.md
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
# Simple Adventure Game - MVP Plan
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
A text-based adventure game built in Godot with LLM-powered command parsing and narrative generation. The game features procedural map generation, persistent state management, and stat-based action resolution.
|
||||||
|
|
||||||
|
## Core Features
|
||||||
|
|
||||||
|
- **Procedurally generated 3x3 map** with predetermined room layouts and item placements
|
||||||
|
- **Local LLM integration** for command parsing and dungeon master functionality
|
||||||
|
- **Database persistence** using Godot's resource system to prevent hallucinations
|
||||||
|
- **Player stats system** with dice-based action resolution
|
||||||
|
- **Text-based interface** with rich narrative descriptions
|
||||||
|
|
||||||
|
## Technical Architecture
|
||||||
|
|
||||||
|
### Data Models
|
||||||
|
|
||||||
|
```
|
||||||
|
GameState (Resource)
|
||||||
|
├── Player (Resource)
|
||||||
|
│ ├── stats: Dictionary (investigation, strength, dexterity, etc.)
|
||||||
|
│ ├── inventory: Array[Item]
|
||||||
|
│ ├── current_room: Vector2
|
||||||
|
│ └── health: int
|
||||||
|
├── WorldMap (Resource)
|
||||||
|
│ ├── rooms: Dictionary[Vector2, Room]
|
||||||
|
│ ├── size: Vector2 (3x3 for MVP)
|
||||||
|
│ └── seed: int
|
||||||
|
└── game_history: Array[String]
|
||||||
|
|
||||||
|
Room (Resource)
|
||||||
|
├── position: Vector2
|
||||||
|
├── description: String
|
||||||
|
├── items: Array[Item]
|
||||||
|
├── exits: Dictionary[String, Vector2]
|
||||||
|
├── visited: bool
|
||||||
|
├── room_type: String (bedroom, corridor, dungeon, etc.)
|
||||||
|
└── special_features: Array[String]
|
||||||
|
|
||||||
|
Item (Resource)
|
||||||
|
├── name: String
|
||||||
|
├── description: String
|
||||||
|
├── item_type: String (key, weapon, consumable, etc.)
|
||||||
|
├── stats_modifier: Dictionary
|
||||||
|
├── usable: bool
|
||||||
|
└── hidden: bool
|
||||||
|
```
|
||||||
|
|
||||||
|
### System Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
||||||
|
│ Text UI │◄──►│ Game Manager │◄──►│ State Manager │
|
||||||
|
│ │ │ │ │ │
|
||||||
|
│ - Input capture │ │ - Game loop │ │ - Save/Load │
|
||||||
|
│ - Text display │ │ - Turn processing│ │ - State queries │
|
||||||
|
│ - History │ │ - Event handling │ │ - Validation │
|
||||||
|
└─────────────────┘ └──────────────────┘ └─────────────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
||||||
|
│ LLM Interface │◄──►│ Command Parser │◄──►│ Action Resolver │
|
||||||
|
│ │ │ │ │ │
|
||||||
|
│ - Local LLM │ │ - Intent extract │ │ - Dice rolling │
|
||||||
|
│ - Prompt mgmt │ │ - Context build │ │ - Stat checks │
|
||||||
|
│ - Response proc │ │ - Validation │ │ - Consequences │
|
||||||
|
└─────────────────┘ └──────────────────┘ └─────────────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌─────────────────┐ ┌──────────────────┐
|
||||||
|
│ Map Generator │ │ Content Manager │
|
||||||
|
│ │ │ │
|
||||||
|
│ - Room creation │ │ - Item placement │
|
||||||
|
│ - Layout design │ │ - Description │
|
||||||
|
│ - Connections │ │ - Scenarios │
|
||||||
|
└─────────────────┘ └──────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Implementation Phases
|
||||||
|
|
||||||
|
### Phase 1: Foundation (Tasks 1-5)
|
||||||
|
**Goal**: Basic Godot project with core data structures
|
||||||
|
|
||||||
|
- Set up Godot project structure
|
||||||
|
- Create Resource classes for game objects
|
||||||
|
- Implement basic map generation
|
||||||
|
- Build save/load functionality
|
||||||
|
- Create room templates and item placement
|
||||||
|
|
||||||
|
**Deliverable**: Functional game world that can be saved and loaded
|
||||||
|
|
||||||
|
### Phase 2: Game Logic (Tasks 6-9)
|
||||||
|
**Goal**: Core gameplay mechanics and LLM integration
|
||||||
|
|
||||||
|
- Player stats and dice rolling system
|
||||||
|
- Local LLM setup (Ollama integration)
|
||||||
|
- Command parsing pipeline
|
||||||
|
- Basic game loop implementation
|
||||||
|
|
||||||
|
**Deliverable**: Working game that can process simple commands
|
||||||
|
|
||||||
|
### Phase 3: User Interface (Tasks 10-12)
|
||||||
|
**Goal**: Complete text-based interface
|
||||||
|
|
||||||
|
- Text UI for game interaction
|
||||||
|
- Room description generation
|
||||||
|
- Inventory and item management
|
||||||
|
- Command history and help system
|
||||||
|
|
||||||
|
**Deliverable**: Playable game with full text interface
|
||||||
|
|
||||||
|
### Phase 4: Content & Polish (Tasks 13-16)
|
||||||
|
**Goal**: Rich gameplay experience
|
||||||
|
|
||||||
|
- Action resolution with consequences
|
||||||
|
- Test scenarios and content
|
||||||
|
- Debugging and development tools
|
||||||
|
- LLM prompt optimization
|
||||||
|
|
||||||
|
**Deliverable**: Polished MVP ready for testing
|
||||||
|
|
||||||
|
### Phase 5: Package & Deploy (Task 17)
|
||||||
|
**Goal**: Distributable game build
|
||||||
|
|
||||||
|
- Final testing and bug fixes
|
||||||
|
- Build packaging
|
||||||
|
- Documentation and setup guides
|
||||||
|
|
||||||
|
**Deliverable**: Complete MVP build
|
||||||
|
|
||||||
|
## Technical Decisions
|
||||||
|
|
||||||
|
### Database Choice: Godot Resources
|
||||||
|
- **Pros**: Built-in serialization, no external dependencies, easy debugging
|
||||||
|
- **Cons**: Limited querying, no concurrent access
|
||||||
|
- **Rationale**: Perfect for single-player MVP, can migrate later if needed
|
||||||
|
|
||||||
|
### LLM Integration: Local First
|
||||||
|
- **MVP**: Local LLM (Ollama) for offline play and fast responses
|
||||||
|
- **Future**: Hybrid approach with cloud APIs for advanced features
|
||||||
|
- **Benefits**: Privacy, reliability, cost control
|
||||||
|
|
||||||
|
### Map Size: 3x3 Grid
|
||||||
|
- **Rationale**: Small enough for MVP testing, large enough to demonstrate systems
|
||||||
|
- **Expansion**: Easy to scale to larger maps later
|
||||||
|
- **Layout**: Predetermined room types with procedural item placement
|
||||||
|
|
||||||
|
## File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
simple-adventure/
|
||||||
|
├── plan.md # This file
|
||||||
|
├── project.godot # Godot project file
|
||||||
|
├── scenes/
|
||||||
|
│ ├── Main.tscn # Main game scene
|
||||||
|
│ ├── UI/
|
||||||
|
│ │ ├── GameUI.tscn # Text-based interface
|
||||||
|
│ │ └── DebugPanel.tscn # Development tools
|
||||||
|
│ └── rooms/
|
||||||
|
│ ├── RoomTemplate.tscn # Base room scene
|
||||||
|
│ └── room_types/ # Specific room layouts
|
||||||
|
├── scripts/
|
||||||
|
│ ├── GameManager.gd # Main game controller
|
||||||
|
│ ├── StateManager.gd # Save/load and state queries
|
||||||
|
│ ├── LLMInterface.gd # Local LLM communication
|
||||||
|
│ ├── CommandParser.gd # Command interpretation
|
||||||
|
│ ├── ActionResolver.gd # Dice rolls and consequences
|
||||||
|
│ ├── MapGenerator.gd # Procedural map creation
|
||||||
|
│ └── resources/
|
||||||
|
│ ├── GameState.gd # Game state resource
|
||||||
|
│ ├── Room.gd # Room resource
|
||||||
|
│ ├── Item.gd # Item resource
|
||||||
|
│ └── Player.gd # Player resource
|
||||||
|
├── data/
|
||||||
|
│ ├── room_templates.json # Room layout definitions
|
||||||
|
│ ├── item_database.json # Item definitions
|
||||||
|
│ └── prompts/
|
||||||
|
│ ├── system_prompt.txt # LLM system instructions
|
||||||
|
│ └── templates/ # Response templates
|
||||||
|
└── saves/ # Game save files
|
||||||
|
```
|
||||||
|
|
||||||
|
## LLM Integration Strategy
|
||||||
|
|
||||||
|
### Local LLM Setup
|
||||||
|
- **Recommended**: Ollama with Llama 3.1 or similar
|
||||||
|
- **Fallback**: Simple rule-based parser for development
|
||||||
|
- **Interface**: HTTP API calls to local server
|
||||||
|
|
||||||
|
### Prompt Engineering
|
||||||
|
- **System Prompt**: Define game rules and response format
|
||||||
|
- **Context Window**: Include current room, inventory, recent actions
|
||||||
|
- **Response Format**: Structured JSON with action type and description
|
||||||
|
- **Validation**: Check responses against game state
|
||||||
|
|
||||||
|
### Example Interaction Flow
|
||||||
|
```
|
||||||
|
1. Player Input: "Search the room for any items"
|
||||||
|
2. Context Building: Current room state + player stats + inventory
|
||||||
|
3. LLM Prompt: System prompt + context + player command
|
||||||
|
4. LLM Response: {"action": "search", "difficulty": 10, "description": "..."}
|
||||||
|
5. Dice Roll: Player investigation vs difficulty
|
||||||
|
6. Result Processing: Update game state based on success/failure
|
||||||
|
7. Response Generation: Narrative description of outcome
|
||||||
|
```
|
||||||
|
|
||||||
|
## Success Metrics
|
||||||
|
|
||||||
|
### MVP Completion Criteria
|
||||||
|
- [ ] 3x3 map generates consistently
|
||||||
|
- [ ] Player can move between rooms
|
||||||
|
- [ ] Items can be found and collected
|
||||||
|
- [ ] Basic commands work (look, search, take, use)
|
||||||
|
- [ ] Game state persists between sessions
|
||||||
|
- [ ] LLM provides coherent responses
|
||||||
|
- [ ] Dice rolling affects outcomes
|
||||||
|
|
||||||
|
### Quality Targets
|
||||||
|
- Response time < 2 seconds for most commands
|
||||||
|
- No game-breaking bugs in core functionality
|
||||||
|
- Consistent narrative voice and world logic
|
||||||
|
- Clear feedback for all player actions
|
||||||
|
|
||||||
|
## Future Enhancements (Post-MVP)
|
||||||
|
|
||||||
|
### Hybrid LLM Approach
|
||||||
|
- Cloud API for complex narrative generation
|
||||||
|
- Local LLM for fast command parsing
|
||||||
|
- Fallback systems for offline play
|
||||||
|
|
||||||
|
### Expanded Features
|
||||||
|
- Larger procedural maps
|
||||||
|
- Combat system
|
||||||
|
- Character progression
|
||||||
|
- Multiple game scenarios
|
||||||
|
- Multiplayer support
|
||||||
|
|
||||||
|
### Technical Improvements
|
||||||
|
- Database migration for complex queries
|
||||||
|
- Performance optimization
|
||||||
|
- Advanced AI prompt engineering
|
||||||
|
- Visual elements and sound
|
||||||
|
|
||||||
|
## Development Notes
|
||||||
|
|
||||||
|
### Testing Strategy
|
||||||
|
- Unit tests for core systems
|
||||||
|
- Integration tests for LLM responses
|
||||||
|
- Playtesting scenarios for game balance
|
||||||
|
- Save/load integrity testing
|
||||||
|
|
||||||
|
### Risk Mitigation
|
||||||
|
- **LLM Reliability**: Fallback to rule-based parsing
|
||||||
|
- **Performance**: Local processing with optimization
|
||||||
|
- **Complexity**: Modular design for incremental development
|
||||||
|
- **Scope Creep**: Strict MVP focus with clear future roadmap
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*This plan serves as the technical specification and roadmap for the Simple Adventure Game MVP. It will be updated as development progresses and requirements evolve.*
|
||||||
Reference in New Issue
Block a user