AeThex-Engine-Core/docs/MIGRATION_FROM_GODOT.md

18 KiB

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:

# 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:

# Automatically reloads when files change in Studio IDE
# No need to manually refresh

Remote Debugging:

# Connect Studio IDE to running game
AeThexStudio.connect_debugger()

Impact: Optional, works with standard Godot workflow too.

3. Enhanced Multiplayer

Simplified API:

# 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:

# 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.

# 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

# Create a copy
cp -r my-godot-project my-aethex-project
cd my-aethex-project

Step 2: Open in AeThex

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:

# 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:

# 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:

# 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:

# 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:

# 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:

# 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:

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:

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

# 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

# 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

# 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:

# 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:

# 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:

# 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:

# 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:

# 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:

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:

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:

# 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 (coming soon).

Q: Does AeThex collect any data?

A: Only if you use analytics features. See Privacy Policy.


Getting Help

Documentation:

Community:

Support:


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!