A fully extensible WarioWare-style microgame engine built with Godot 4.
- Located in root directory (when on
claude/warioware-microgame-platform-*branch) - Runs directly in browser, no build step
- Perfect for quick prototyping and web deployment
- Located in
godot-project/directory - Cross-platform export capabilities
- Professional game engine features
- Recommended for production
- Godot 4.3+ (Download here)
- Download/clone this repository
- Open Godot Engine
- Click "Import"
- Navigate to
godot-project/project.godot - Click "Import & Edit"
- Press F5 to run the game!
godot-project/
├── project.godot # Godot project configuration
├── icon.svg # Project icon
├── scenes/
│ ├── main.tscn # Main game scene
│ └── microgames/ # Individual microgame scenes
│ ├── click_circle.tscn
│ ├── dodge_block.tscn
│ ├── mash_key.tscn
│ ├── dont_click.tscn
│ ├── drag_target.tscn
│ └── catch_falling.tscn
├── scripts/
│ ├── game_engine.gd # Main game controller
│ ├── microgame_manager.gd # Microgame registry & selection
│ ├── microgame_base.gd # Base class for all microgames
│ ├── ui_controller.gd # UI management
│ └── microgames/ # Individual microgame scripts
│ ├── click_circle.gd
│ ├── dodge_block.gd
│ ├── mash_key.gd
│ ├── dont_click.gd
│ ├── drag_target.gd
│ └── catch_falling.gd
└── assets/
└── fonts/ # Custom fonts (optional)
- Plugin Architecture - Add new microgames without modifying engine code
- 4-Tier Difficulty System - Each microgame scales across 4 difficulty levels
- Multi-Dimensional Scaling - Time limits, speeds, sizes, counts, cognitive load
- Clean Lifecycle - Proper init/cleanup prevents memory leaks
- Cross-Platform Export - Windows, Mac, Linux, Web, Mobile, Consoles
- Click the Circle - Shrinking target clicking challenge
- Dodge the Block - Avoid falling obstacles
- Mash the Key - Rapid key pressing with decay
- Don't Click - Negation challenge with moving distractors
- Drag to Target - Mouse precision and dragging
- Catch the Falling - Timing-based catching game
- Starts at Tier 1
- Increases every 5 consecutive wins OR every 10 score points
- Maximum Tier 4
- Each microgame defines custom parameters per tier
Create scripts/microgames/your_game.gd:
extends MicrogameBase
func _define_difficulty_tiers() -> void:
microgame_id = "your_game"
microgame_name = "Your Game Name"
instructions = "DO SOMETHING!"
difficulty_tiers = [
{
"tier": 1,
"time_limit": 5.0,
"parameters": { "speed": 100.0 }
},
{
"tier": 2,
"time_limit": 4.0,
"parameters": { "speed": 200.0 }
},
# Add tiers 3 and 4...
]
func _setup_game() -> void:
# Create your game elements here
pass
func _on_game_start() -> void:
# Initialize game state with current_parameters
pass
func _update_game(delta: float) -> void:
# Update game logic
# Call _win_game() or _lose_game() when appropriate
pass- In Godot, create a new scene:
Scene→New Scene - Add a
Node2Das root - Attach your script to it
- Save as
scenes/microgames/your_game.tscn
Open scripts/microgame_manager.gd and add to the microgame_scenes array:
@export var microgame_scenes: Array[String] = [
# ... existing games ...
"res://scenes/microgames/your_game.tscn",
]That's it! The engine will automatically discover and use your microgame.
- Go to
Project→Export - Click
Add...and select your target platform(s):- Windows Desktop
- macOS
- Linux/X11
- Web (HTML5)
- Android (requires Android SDK)
- iOS (requires macOS and Xcode)
- Configure export settings
- Click
Export Project
First time exporting? Godot will prompt you to download export templates. Click "Manage Export Templates" and download for your Godot version.
- Enable
Thread Supportfor better performance - Use
SharedArrayBufferfor threading (requires HTTPS or localhost) - Test in multiple browsers
Edit scripts/game_engine.gd:
const STARTING_LIVES = 3 # Starting lives
const TRANSITION_DURATION = 2.0 # Instruction display time
const WINS_PER_TIER_INCREASE = 5 # Wins needed for difficulty increase
const SCORE_MILESTONE_INTERVAL = 10 # Score milestone for difficulty increase- Edit
scenes/main.tscnin Godot's editor - Modify colors, fonts, sizes in the Inspector
- Add custom themes via
Project Settings→GUI
- Import audio files to
assets/sounds/ - Add
AudioStreamPlayernodes to scenes - Play sounds in microgame scripts:
$SoundEffect.play()
- TITLE - Main menu
- TRANSITION - Shows instruction for 2 seconds
- PLAYING - Active microgame
- GAME_OVER - Final score screen
_define_difficulty_tiers()- Define tier configurations_setup_game()- Create game elementsstart_game(tier)- Engine calls this with current tier_on_game_start()- Initialize with tier parameters_update_game(delta)- Update every frame_win_game()/_lose_game()- Signal completioncleanup()- Remove all elements
game_won- Emitted when player winsgame_lost- Emitted when player loses or time expires
- Check console for errors (Output panel in Godot)
- Verify all microgame scenes are in
scripts/microgame_manager.gd - Ensure
main.tscnis set as main scene inproject.godot
- Check that script extends
MicrogameBase - Verify
microgame_idandmicrogame_nameare set - Ensure
difficulty_tiersarray is not empty - Check scene path in MicrogameManager
- Download export templates for your Godot version
- Check export preset configuration
- Enable required permissions (especially for mobile)
Feel free to:
- Add new microgames
- Improve existing ones
- Add visual/audio polish
- Optimize performance
- Report bugs
This project is open source and available for educational and commercial use.
Built with ❤️ using Godot Engine