# 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)!
