# Migrating from Godot to AeThex Complete guide for porting existing Godot projects to AeThex Engine. --- ## Overview AeThex is built on Godot 4.3-stable, so **most Godot projects work with zero changes**. This guide covers: - Compatibility guarantees - AeThex-specific features - Breaking changes (if any) - Migration steps - Optimization tips --- ## Compatibility ### ✅ Fully Compatible (No Changes Needed) **Scene System:** - `.tscn` files work identically - Scene inheritance works - Resources (.tres) work - Shaders (.gdshader) work **Scripting:** - GDScript syntax unchanged - C# works (if mono module built) - GDExtension works - Signal system identical **Assets:** - Images (.png, .jpg, .svg) - 3D models (.gltf, .glb, .obj, .fbx) - Audio (.wav, .ogg, .mp3) - Fonts (.ttf, .otf) **Core Features:** - Rendering (2D/3D) - Physics (2D/3D) - Audio system - Input handling - Animation system - UI system ### ⚠️ Minor Differences **Binary Name:** - Godot: `godot` or `godot.exe` - AeThex: `aethex` or `aethex.exe` - **Impact:** Update launch scripts if any **Project Settings:** - Project file: `project.godot` (unchanged) - Config section: `[application]` (unchanged) - **Impact:** None, uses same format **Export Templates:** - Must use AeThex export templates - Available in Editor → Export → Manage Templates - **Impact:** Re-export for production ### ❌ Not Supported (Yet) **Platform-Specific:** - Console exports (PS5, Xbox, Switch) - *Coming in AeThex 2.0* - Native iOS export - *Use web export for now* --- ## What's Different in AeThex? ### 1. Built-in Cloud Services **New Global Singletons:** ```gdscript # Godot: Must integrate third-party services # AeThex: Built-in! AeThexCloud.connect_to_cloud() AeThexAuth.login_email("user@example.com", "pass") AeThexSaves.save_game("slot1", save_data) AeThexMultiplayer.create_room("room-123") AeThexAnalytics.track_event("level_complete", {}) AeThexAI.ask_assistant("How do I add jumping?") ``` **Impact:** Optional feature, only use if needed. ### 2. Studio IDE Integration **Live Reload:** ```gdscript # Automatically reloads when files change in Studio IDE # No need to manually refresh ``` **Remote Debugging:** ```gdscript # Connect Studio IDE to running game AeThexStudio.connect_debugger() ``` **Impact:** Optional, works with standard Godot workflow too. ### 3. Enhanced Multiplayer **Simplified API:** ```gdscript # Godot: Complex setup with MultiplayerPeer, etc. var peer = ENetMultiplayerPeer.new() peer.create_server(7000) multiplayer.multiplayer_peer = peer # AeThex: One line! AeThexMultiplayer.create_room("my-room") ``` **Impact:** Use if you want easy multiplayer. Godot's multiplayer still works. ### 4. AI Assistant **Code Generation:** ```gdscript # Ask AI for help directly in code var code = await AeThexAI.generate_code("Create a jump function for player") print(code) ``` **Impact:** Completely optional feature. --- ## Migration Steps ### Option 1: Quick Test (5 minutes) Test if your Godot project works in AeThex without changes. ```bash # 1. Download AeThex wget https://aethex.io/download/aethex-linux.tar.gz tar -xzf aethex-linux.tar.gz # 2. Open your Godot project ./aethex --editor --path /path/to/your/godot/project # 3. Hit Play (F5) # If it works, you're done! 🎉 ``` **What to check:** - ✅ Scene loads correctly - ✅ Scripts run without errors - ✅ Physics/collisions work - ✅ UI displays correctly - ✅ Audio plays **Common issues:** - Missing export templates → Download from Editor → Manage Templates - Custom GDExtension → Rebuild for AeThex (API compatible) - Platform-specific code → May need adjustments ### Option 2: Full Migration (30 minutes) Properly migrate and add AeThex features. #### Step 1: Backup Your Project ```bash # Create a copy cp -r my-godot-project my-aethex-project cd my-aethex-project ``` #### Step 2: Open in AeThex ```bash aethex --editor --path . ``` #### Step 3: Update Project Settings **Optional: Add AeThex branding** Editor → Project Settings → Application: - Change icon to your AeThex-branded icon - Update splash screen - Update app name #### Step 4: Test All Features Create a test checklist: ``` [ ] Main menu loads [ ] Gameplay works [ ] Save/load works [ ] Settings apply [ ] All levels playable [ ] Audio works [ ] Inputs respond [ ] Export works ``` #### Step 5: Add Cloud Features (Optional) **Authentication:** ```gdscript # In main menu extends Control func _ready(): if not AeThexAuth.is_logged_in(): show_login_dialog() func show_login_dialog(): $LoginDialog.show() func _on_login_pressed(): var email = $EmailField.text var password = $PasswordField.text var result = await AeThexAuth.login_email(email, password) if result.success: get_tree().change_scene_to_file("res://main_game.tscn") ``` **Cloud Saves:** ```gdscript # Replace local save/load with cloud # OLD (Godot): func save_game(): var save_file = FileAccess.open("user://save.dat", FileAccess.WRITE) save_file.store_var(save_data) save_file.close() # NEW (AeThex): func save_game(): await AeThexSaves.save_game("save_slot_1", save_data) # Data automatically syncs to cloud! ``` **Multiplayer:** ```gdscript # OLD (Godot): Complex setup var peer = ENetMultiplayerPeer.new() peer.create_server(7000, 4) multiplayer.multiplayer_peer = peer # NEW (AeThex): Simple AeThexMultiplayer.create_room("my-game-room") ``` #### Step 6: Test Cloud Features **Test cloud saves:** 1. Save game 2. Close game 3. Open on different device 4. Load game 5. Verify data synced **Test multiplayer:** 1. Run game twice 2. Create room in first instance 3. Join room in second instance 4. Verify players see each other #### Step 7: Export **Generate export templates:** ```bash # In editor Editor → Manage Export Templates → Download and Install ``` **Export platforms:** - Windows (x86_64) - Linux (x86_64) - macOS (universal) - Web (HTML5) - Android (APK/AAB) --- ## API Mapping ### Multiplayer Comparison **Godot Built-in:** ```gdscript # Server setup var peer = ENetMultiplayerPeer.new() peer.create_server(7000, 4) multiplayer.multiplayer_peer = peer # Client connect var peer = ENetMultiplayerPeer.new() peer.create_client("192.168.1.100", 7000) multiplayer.multiplayer_peer = peer # RPC @rpc("any_peer", "reliable") func take_damage(amount: int): health -= amount # Call RPC rpc("take_damage", 10) ``` **AeThex Cloud:** ```gdscript # Create room (auto server/client) AeThexMultiplayer.create_room("room-123") # Join room AeThexMultiplayer.join_room("room-123") # RPC (same API) @rpc("any_peer", "reliable") func take_damage(amount: int): health -= amount # Call RPC (same) rpc("take_damage", 10) # OR use AeThex helper AeThexMultiplayer.call_rpc("take_damage", [10]) ``` **Benefits of AeThex:** - No port forwarding needed - No NAT traversal issues - Room codes for easy joining - Works across internet automatically ### Save System Comparison **Godot Built-in:** ```gdscript func save_game(): var save_file = FileAccess.open("user://save.dat", FileAccess.WRITE) var save_data = { "health": player.health, "position": player.position, "inventory": player.inventory } save_file.store_var(save_data) save_file.close() func load_game(): if not FileAccess.file_exists("user://save.dat"): return var save_file = FileAccess.open("user://save.dat", FileAccess.READ) var save_data = save_file.get_var() save_file.close() player.health = save_data.health player.position = save_data.position player.inventory = save_data.inventory ``` **AeThex Cloud:** ```gdscript func save_game(): var save_data = { "health": player.health, "position": player.position, "inventory": player.inventory } await AeThexSaves.save_game("slot1", save_data) # Automatically compressed, checksummed, uploaded! func load_game(): var save_data = await AeThexSaves.load_game("slot1") if save_data: player.health = save_data.health player.position = save_data.position player.inventory = save_data.inventory ``` **Benefits of AeThex:** - Cross-device sync - Cloud backup - Version history - Conflict resolution - Automatic compression --- ## Breaking Changes ### Changes from Godot 4.3 **None!** AeThex maintains full Godot 4.3 compatibility. ### Future Breaking Changes (AeThex 2.0) Planned for 6+ months from now: - May deprecate some Godot built-in networking in favor of AeThex Cloud - Will provide migration tools - Will maintain backwards compatibility mode **Migration path will be provided before any breaking changes.** --- ## Performance Considerations ### AeThex Overhead **Engine size:** - Godot 4.3: ~40MB - AeThex: ~45MB (+5MB for cloud modules) **Memory overhead:** - +10-20MB for cloud SDK - +5MB for AI module - Only when features are used **Runtime performance:** - Zero overhead if cloud features not used - <1ms per frame for cloud sync - Async operations don't block game thread ### Optimization Tips **1. Lazy Load Cloud Features** ```gdscript # Don't connect immediately func _ready(): pass # Cloud not connected yet # Connect when needed func on_login_button_pressed(): await AeThexCloud.connect_to_cloud() # Now can use cloud features ``` **2. Batch Analytics Events** ```gdscript # Bad: Send every frame func _process(delta): AeThexAnalytics.track_event("player_moved", {}) # Good: Batch every 10 seconds var analytics_buffer = [] func _process(delta): analytics_buffer.append("player_moved") func _on_analytics_timer_timeout(): # Every 10 seconds if analytics_buffer.size() > 0: AeThexAnalytics.track_event("player_actions", { "count": analytics_buffer.size() }) analytics_buffer.clear() ``` **3. Use Auto-Sync for Saves** ```gdscript # Let AeThex handle save timing func _ready(): AeThexSaves.enable_auto_sync(true) # Saves sync in background at optimal times ``` --- ## Common Migration Issues ### Issue 1: Export Templates Not Found **Error:** "No export templates found" **Solution:** ```bash # In editor Editor → Manage Export Templates → Download and Install # OR manually mkdir -p ~/.local/share/aethex/export_templates/4.3.stable cp -r aethex_templates/* ~/.local/share/aethex/export_templates/4.3.stable/ ``` ### Issue 2: GDExtension Doesn't Load **Error:** "GDExtension failed to load" **Cause:** GDExtension compiled for Godot, not AeThex **Solution:** Rebuild GDExtension: ```bash # In your GDExtension project scons platform=linux custom_api_file=/path/to/aethex/extension_api.json # Copy to your AeThex project cp bin/libmyextension.so /path/to/project/addons/myextension/ ``` ### Issue 3: Multiplayer Not Connecting **Error:** "Failed to create room" **Causes:** - Not connected to internet - Firewall blocking - Cloud service down **Solution:** ```gdscript # Check connection first func start_multiplayer(): if not AeThexCloud.is_connected(): var result = await AeThexCloud.connect_to_cloud() if not result.success: show_error("Cannot connect to cloud services") return # Now try multiplayer if not AeThexMultiplayer.create_room("my-room"): show_error("Failed to create room") ``` ### Issue 4: Cloud Saves Not Working **Error:** "Save failed: Not authenticated" **Cause:** User not logged in **Solution:** ```gdscript # Require login or use guest mode func _ready(): if not AeThexAuth.is_logged_in(): # Option 1: Login as guest (anonymous) await AeThexAuth.login_as_guest() # Option 2: Show login screen # show_login_screen() # Now saves will work func save_game(): await AeThexSaves.save_game("slot1", data) ``` ### Issue 5: Android Export Fails **Error:** "Failed to export for Android" **Cause:** Missing Android SDK or keystore **Solution:** ```bash # 1. Install Android SDK # Editor → Editor Settings → Export → Android → Android SDK Path # 2. Create debug keystore keytool -genkey -v -keystore debug.keystore -alias androiddebugkey \ -keyalg RSA -keysize 2048 -validity 10000 -storepass android # 3. Configure in export preset # Project → Export → Android → Keystore ``` --- ## Feature Parity Checklist Use this to verify your migrated project: ### Core Features ``` [ ] Scenes load correctly [ ] Scripts execute without errors [ ] Physics works (collisions, rigidbodies) [ ] Input responds (keyboard, mouse, gamepad) [ ] Audio plays (music, sound effects) [ ] UI displays correctly (buttons, labels) [ ] Animations play [ ] Shaders render correctly [ ] Particles work [ ] Save/load works ``` ### AeThex Features (if using) ``` [ ] Can connect to cloud [ ] Authentication works [ ] Cloud saves sync [ ] Multiplayer connects [ ] Analytics tracks events [ ] AI assistant responds [ ] Studio IDE connects ``` ### Export Targets ``` [ ] Windows build works [ ] Linux build works [ ] macOS build works [ ] Web export works [ ] Android APK installs ``` --- ## Best Practices ### 1. Gradual Migration Don't convert everything at once: **Phase 1: Test compatibility** - Open project in AeThex - Run all scenes - Test all gameplay - Verify exports work **Phase 2: Add authentication (optional)** - Implement login screen - Use guest mode for testing - Add account management **Phase 3: Convert saves (optional)** - Migrate local saves to cloud - Add auto-sync - Test cross-device sync **Phase 4: Add multiplayer (optional)** - Replace custom networking with AeThex - Test room creation/joining - Verify state sync ### 2. Fallback to Local Always support offline mode: ```gdscript func save_game(): # Try cloud first if AeThexCloud.is_connected(): var result = await AeThexSaves.save_game("slot1", data) if result.success: return # Fallback to local save_local(data) func save_local(data): var file = FileAccess.open("user://save.dat", FileAccess.WRITE) file.store_var(data) file.close() ``` ### 3. Graceful Degradation Handle cloud service failures: ```gdscript func _ready(): # Try to connect var result = await AeThexCloud.connect_to_cloud() if result.success: # Cloud features available $MultiplayerButton.disabled = false $CloudSaveIndicator.show() else: # Offline mode $MultiplayerButton.disabled = true $CloudSaveIndicator.hide() show_notification("Playing in offline mode") ``` ### 4. Version Control Keep Godot project for reference: ```bash # Branch strategy git checkout -b aethex-migration # Make changes in this branch # Keep main branch as Godot version ``` --- ## Case Studies ### Case Study 1: "Platformer Game" **Original:** Godot 4.2 project, single-player, local saves **Migration time:** 10 minutes **Changes:** - None required for basic functionality - Added cloud saves (5 min) - Added leaderboard (5 min) **Result:** Works perfectly, no issues ### Case Study 2: "Multiplayer Shooter" **Original:** Godot 4.3, custom ENet networking, 500+ lines of networking code **Migration time:** 2 hours **Changes:** - Replaced ENet with AeThexMultiplayer - Removed 500 lines of networking code - Added matchmaking UI - Tested multiplayer thoroughly **Result:** Simpler codebase, easier to maintain, works across internet without port forwarding ### Case Study 3: "RPG with Custom GDExtension" **Original:** Godot 4.3, custom C++ extension for save encryption **Migration time:** 1 hour **Changes:** - Rebuilt GDExtension for AeThex - Replaced custom encryption with AeThex cloud saves (has built-in encryption) - Removed 200+ lines of C++ code **Result:** Less code, more secure, cross-device sync --- ## FAQ ### Q: Will my Godot 3.x project work? **A:** No direct compatibility. Godot 4.x made breaking changes from 3.x. Follow the official Godot 3→4 migration guide first, then migrate to AeThex. ### Q: Can I use Godot plugins/addons? **A:** Yes! Most Godot 4.x plugins work in AeThex without changes. ### Q: Will AeThex stay compatible with Godot? **A:** Yes, we track Godot stable releases and maintain compatibility. Major changes will be communicated in advance. ### Q: Can I export to the same platforms as Godot? **A:** Yes for: Windows, Linux, macOS, Web, Android. No (yet) for: iOS native, consoles. ### Q: Do I have to use cloud features? **A:** No! They're completely optional. AeThex works as a standard Godot engine if you don't use cloud features. ### Q: What happens if AeThex cloud services go down? **A:** Implement fallbacks (see Best Practices). Your game should work offline with local saves/single-player. ### Q: Can I self-host the cloud services? **A:** Yes! The cloud services are open-source. See [Self-Hosting Guide](SELF_HOSTING.md) *(coming soon)*. ### Q: Does AeThex collect any data? **A:** Only if you use analytics features. See [Privacy Policy](https://aethex.io/privacy). --- ## Getting Help **Documentation:** - [API Reference](API_REFERENCE.md) - Complete API docs - [Tutorials](tutorials/README.md) - Step-by-step guides - [Architecture Overview](ARCHITECTURE_OVERVIEW.md) - System design **Community:** - [Discord](https://discord.gg/aethex) - Real-time chat - [Forum](https://forum.aethex.io) - Discussions - [GitHub Issues](https://github.com/aethex/engine/issues) - Bug reports **Support:** - [Email Support](mailto:support@aethex.io) - Response within 24h - [Pro Support](https://aethex.io/pro) - Priority support for paying customers --- ## Next Steps 1. **Try it:** Open your Godot project in AeThex and hit Play 2. **Test:** Verify all features work 3. **Enhance:** Add cloud features gradually 4. **Deploy:** Export and ship! Ready to start? Head to [Getting Started](GETTING_STARTED.md)!