Reviewed-on: #1
3D Flight Simulator (Retro 80s Style)
A browser-based 3D flight simulator with retro 80s aesthetic, procedural landscape generation, and persistent world saving.
🎮 Project Overview
This project recreates the feel of late-80s flight simulators in a web browser using JavaScript and Three.js. The intent is to make it look like something you'd find on a PC or Amiga of the time - low-resolution, polygonal, low frame-rate with a retro aesthetic.
Key Features
- Retro 80s Aesthetic: Low-resolution, polygonal graphics with 80s color palettes
- Procedural Landscape: Realistic villages, forests, bodies of water generated procedurally
- Persistent World: Once generated, landscapes remain consistent across sessions
- Multiple Screens: Loading, intro, play, and pause screens
- Flight Controls: Cockpit HUD with dials and metrics
- Save/Load System: Save game progress including procedural landscapes
- FPS Cap: Configurable frame rate cap (20, 30, 50, 60 FPS) for authentic retro feel
- Retro Audio: Synthesized music similar to Soundblaster MIDI
🚀 Getting Started
Prerequisites
- Node.js (v16 or higher)
- npm or yarn
- Modern web browser (Chrome, Firefox, Edge)
Installation
-
Clone the repository:
git clone https://gitea@repos.retroweb.dev:ai-zone/wings88.git cd wings88 -
Install dependencies:
npm install -
Start the development server:
npm run dev -
Open your browser to
http://localhost:3000
Building for Production
npm run build
This will create optimized production files in the dist/ directory.
📂 Project Structure
/a0/usr/projects/3d_flyer/
├── .a0proj/ # Project configuration
├── src/ # Source code
│ ├── assets/ # Static assets
│ │ ├── images/ # Image files
│ │ ├── sounds/ # Audio files
│ │ └── models/ # 3D models
│ ├── js/ # JavaScript code
│ │ ├── screens/ # Screen components
│ │ ├── core/ # Core game logic
│ │ └── utils/ # Utility functions
│ ├── css/ # CSS styles
│ └── index.html # Main HTML file
├── public/ # Public assets
├── docs/ # Documentation
├── tests/ # Test files
├── .gitignore # Git ignore rules
├── package.json # Project configuration
├── README.md # This file
├── LICENSE # License information
└── CONTRIBUTING.md # Contribution guidelines
🛠️ Development
Available Scripts
npm run dev- Start development server with hot reloadnpm run build- Create production buildnpm run test- Run testsnpm run lint- Run linter
Branching Strategy
main- Production-ready codedev- Development branch for new features- Feature branches - Named after the feature being developed
Commit Messages
Follow conventional commits format:
feat:for new featuresfix:for bug fixesdocs:for documentation changesstyle:for code style changesrefactor:for code refactoringtest:for test-related changes
🎨 Design Guidelines
Color Palette
Inspired by 80s gaming (Amiga 500, 386 DOS):
- Use limited color palettes (16-32 colors)
- Prefer vibrant, distinctive colors
- Avoid anti-aliasing for pixelated look
Sound Design
- Synthesized music similar to Soundblaster MIDI
- Retro sound effects
- Procedural audio generation for dynamic environments
Performance Targets
- Default FPS cap: 20 FPS (configurable)
- Low memory footprint
- Fast load times
📜 License
This project is licensed under the MIT License - see the LICENSE file for details.
🤝 Contributing
Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
📞 Contact
For questions or support, please open an issue in the repository.