AeThex-Engine-Core/docs/EXPORTING_GAMES.md

896 lines
17 KiB
Markdown

# Exporting Games with AeThex
This guide covers exporting your AeThex game to all supported platforms: Windows, Linux, macOS, Web (HTML5), and Android.
---
## Overview
AeThex supports exporting to:
- **Desktop:** Windows, Linux, macOS
- **Web:** HTML5 (WebAssembly + WebGL)
- **Mobile:** Android (iOS planned)
Each platform has specific requirements and optimization considerations.
---
## Before Exporting
### 1. Test Your Game
Always test thoroughly before exporting:
```bash
# Run in editor
aethex --editor --path ./my-project
# Test in release mode
aethex --path ./my-project
```
### 2. Configure Project Settings
**Project → Project Settings → Application:**
```
Name: Your Game Name
Description: Game description
Icon: res://icon.png
Version: 1.0.0
```
**Display Settings:**
```
Window Width: 1920
Window Height: 1080
Fullscreen: false
Resizable: true
```
### 3. Export Templates
Download export templates for your target platform:
```bash
# Via Studio IDE: Editor → Export Templates → Download
# Or manually:
wget https://aethex.io/downloads/export-templates-[version].zip
unzip export-templates-[version].zip -d ~/.local/share/aethex/templates/
```
---
## Windows Export
### Requirements
- **Build Machine:** Windows, Linux, or macOS
- **Target:** Windows 7+ (64-bit)
- **Export Template:** Windows Desktop template
### Export Steps
**1. Add Export Preset:**
```
Project → Export
Click "Add..." → Windows Desktop
```
**2. Configure Options:**
```
Export Path: builds/windows/YourGame.exe
Architecture: x86_64
Runnable: ✓ (for executable)
Embed PCK: ✓ (single file)
Code Signing:
- Identity: (optional) Your signing certificate
- Password: Your certificate password
```
**3. Export:**
```
Click "Export PCK/ZIP" for package only
Click "Export Project" for executable
```
### Windows-Specific Options
**Application:**
```
Company Name: Your Company
Product Name: Your Game
File Version: 1.0.0.0
Product Version: 1.0.0.0
File Description: Your game description
Copyright: © 2024 Your Company
Trademarks: Your trademarks
```
**Executable:**
```
Console Wrapper: ✗ (disable for release)
Icon: res://icon.ico (Windows icon format)
```
**Code Signing:**
```gdscript
# Sign your executable (optional but recommended)
signtool sign /f certificate.pfx /p password YourGame.exe
```
### Windows Distribution
**Standalone:**
- Single `.exe` file
- Portable, no installation required
- Share via download link or USB
**Installer (Optional):**
```bash
# Use NSIS, Inno Setup, or WiX
# Example with NSIS:
makensis installer.nsi
```
**Steam:**
```bash
# Use Steamworks SDK
# Follow Steam's integration guide
# Configure depot builds
```
---
## Linux Export
### Requirements
- **Target:** Ubuntu 20.04+, most modern distros
- **Architecture:** x86_64, ARM64
- **Export Template:** Linux/X11 template
### Export Steps
**1. Add Export Preset:**
```
Project → Export
Click "Add..." → Linux/X11
```
**2. Configure Options:**
```
Export Path: builds/linux/YourGame.x86_64
Architecture: x86_64 (or arm64)
Runnable: ✓
Embed PCK: ✓
```
**3. Export:**
```
Click "Export Project"
```
### Linux-Specific Options
**Binary:**
```
Strip Debug Symbols: ✓ (reduces size)
Make Executable: ✓
```
**Dependencies:**
```bash
# Your game requires these libraries on user's system:
# - libGL.so.1
# - libX11.so.6
# - libXcursor.so.1
# - libXrandr.so.2
# - libXi.so.6
# Most modern distros include these
```
### Linux Distribution
**AppImage (Recommended):**
```bash
# Create portable AppImage
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
chmod +x appimagetool-x86_64.AppImage
# Structure:
# YourGame.AppDir/
# ├── AppRun (symlink to your binary)
# ├── YourGame.x86_64
# ├── YourGame.desktop
# └── icon.png
./appimagetool-x86_64.AppImage YourGame.AppDir
```
**Flatpak:**
```bash
# Create Flatpak manifest
# Follow Flathub guidelines
flatpak-builder build-dir com.yourcompany.yourgame.yml
```
**Snap:**
```bash
# Create snapcraft.yaml
snapcraft
```
**.tar.gz Archive:**
```bash
# Simple distribution
tar -czf YourGame-linux.tar.gz YourGame.x86_64
```
---
## macOS Export
### Requirements
- **Build Machine:** macOS (for signing/notarization)
- **Target:** macOS 10.13+
- **Export Template:** macOS template
- **Apple Developer Account:** For signing (required for distribution)
### Export Steps
**1. Add Export Preset:**
```
Project → Export
Click "Add..." → macOS
```
**2. Configure Options:**
```
Export Path: builds/macos/YourGame.zip
Architecture: universal (Intel + Apple Silicon)
or separate: x86_64, arm64
```
**3. Code Signing:**
```
Codesign:
Identity: "Developer ID Application: Your Name (TEAM_ID)"
Certificate Path: /path/to/certificate.p12
Certificate Password: your_password
Entitlements: res://entitlements.plist (optional)
```
**4. Export:**
```
Click "Export Project"
```
### macOS-Specific Options
**Application Bundle:**
```
Bundle ID: com.yourcompany.yourgame
Display Name: Your Game
Version: 1.0.0
Copyright: © 2024 Your Company
Icon: res://icon.icns (macOS icon format)
```
**Hardened Runtime:**
```
Enable Hardened Runtime: ✓
Disable Library Validation: ✗
Allow JIT Code: ✗ (unless needed)
Allow Unsigned Executable Memory: ✗
Allow DYLD Environment Variables: ✗
Disable Executable Memory Protection: ✗
```
### Notarization (Required for macOS 10.15+)
```bash
# Sign the app
codesign --deep --force --verify --verbose \
--sign "Developer ID Application: Your Name (TEAM_ID)" \
--options runtime \
YourGame.app
# Create ZIP for notarization
ditto -c -k --keepParent YourGame.app YourGame.zip
# Submit for notarization
xcrun notarytool submit YourGame.zip \
--apple-id your@email.com \
--team-id TEAM_ID \
--password app-specific-password \
--wait
# Staple notarization ticket
xcrun stapler staple YourGame.app
# Verify
spctl -a -vv YourGame.app
```
### macOS Distribution
**Direct Download:**
- Distribute `.dmg` or `.zip`
- Users drag to Applications folder
**Mac App Store:**
- Use App Store Connect
- Follow Apple's submission guidelines
- Use "Mac App Store" export preset
**Create DMG:**
```bash
# Create disk image
hdiutil create -volname "Your Game" -srcfolder YourGame.app -ov -format UDZO YourGame.dmg
```
---
## Web (HTML5) Export
### Requirements
- **Target:** Modern browsers (Chrome, Firefox, Safari, Edge)
- **Export Template:** Web template
- **Web Server:** For hosting
### Export Steps
**1. Add Export Preset:**
```
Project → Export
Click "Add..." → Web (HTML5)
```
**2. Configure Options:**
```
Export Path: builds/web/index.html
Head Include: res://web/head.html (custom HTML)
```
**3. Export:**
```
Click "Export Project"
```
### Web-Specific Options
**Performance:**
```
WebGL Version: 2.0 (WebGL 2)
Enable Run: ✓ (for testing)
Full Window Size: ✓
Memory Settings:
Initial Memory: 33554432 (32MB)
Max Memory: 2147483648 (2GB)
Stack Size: 5242880 (5MB)
```
**Progressive Web App:**
```
PWA: ✓
Icon 144x144: res://icons/icon-144.png
Icon 180x180: res://icons/icon-180.png
Icon 512x512: res://icons/icon-512.png
Background Color: #000000
Orientation: landscape
```
**Compression:**
```
Export Type: Regular
Gzip Compression: ✓
```
### Testing Locally
```bash
# Serve with Python
cd builds/web
python3 -m http.server 8000
# Or with Node
npx http-server builds/web -p 8000
```
Open `http://localhost:8000`
### Web Deployment
**Static Hosting (Recommended):**
```bash
# Netlify
netlify deploy --dir=builds/web --prod
# Vercel
vercel --prod builds/web
# GitHub Pages
git subtree push --prefix builds/web origin gh-pages
# Firebase Hosting
firebase deploy --only hosting
```
**itch.io:**
```
1. Zip the web folder
2. Upload to itch.io
3. Set "This file will be played in the browser"
```
**Your Own Server:**
```nginx
# Nginx configuration
server {
listen 80;
server_name yourgame.com;
root /var/www/yourgame;
location / {
try_files $uri $uri/ /index.html;
}
# Enable CORS if needed
location ~* \.(wasm|pck)$ {
add_header Access-Control-Allow-Origin *;
}
# Gzip compression
gzip on;
gzip_types application/wasm application/octet-stream;
}
```
### Web Best Practices
**Loading Screen:**
```html
<!-- builds/web/index.html -->
<style>
.loading {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-family: sans-serif;
}
</style>
<div class="loading">Loading Your Game...</div>
```
**Optimize Size:**
```gdscript
# Disable unused features in export preset
# Compress textures
# Use streaming for audio
# Lazy load assets
```
---
## Android Export
### Requirements
- **Android SDK:** Android 6.0+ (API 23+)
- **Android NDK:** r23b+
- **JDK:** OpenJDK 11+
- **Export Template:** Android template
- **Keystore:** For signing (release builds)
### Setup Android Development
**1. Install Android SDK:**
```bash
# Download Android Studio or command-line tools
# Set ANDROID_HOME environment variable
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
```
**2. Install Required Components:**
```bash
sdkmanager "platform-tools" "platforms;android-33" "build-tools;33.0.0" "ndk;23.2.8568313"
```
**3. Configure AeThex:**
```
Editor → Editor Settings → Export → Android:
Android SDK Path: /path/to/Android/Sdk
Debug Keystore: ~/.android/debug.keystore
```
### Export Steps
**1. Add Export Preset:**
```
Project → Export
Click "Add..." → Android
```
**2. Configure Options:**
```
Export Path: builds/android/YourGame.apk (or .aab)
Package:
Unique Name: com.yourcompany.yourgame
Name: Your Game
Signed: ✓ (for release)
Version:
Code: 1 (increment for each release)
Name: 1.0.0
```
**3. Code Signing:**
```
Keystore:
Debug: ~/.android/debug.keystore
Release: /path/to/release.keystore
User: your_key_alias
Password: your_keystore_password
```
**4. Export:**
```
Click "Export Project"
```
### Android-Specific Options
**Graphics:**
```
OpenGL ES: 3.0
ASTC Compression: ✓ (for textures)
```
**Permissions:**
```
Internet: ✓ (for cloud features)
Access Network State: ✓
Access WiFi State: ✓
Vibrate: ✓ (optional)
```
**Screen:**
```
Orientation: landscape (or portrait)
Support Small Screen: ✗
Support Normal Screen: ✓
Support Large Screen: ✓
Support XLarge Screen: ✓
```
**Architecture:**
```
Export ABIs:
✓ armeabi-v7a (32-bit ARM)
✓ arm64-v8a (64-bit ARM) - Required by Play Store
✗ x86 (optional for emulators)
✗ x86_64 (optional for emulators)
```
### Creating Debug Build
```bash
# Export unsigned debug APK
# Install via ADB
adb install builds/android/YourGame-debug.apk
# Run and view logs
adb logcat | grep YourGame
```
### Creating Release Build
**1. Create Release Keystore:**
```bash
keytool -genkey -v -keystore release.keystore -alias my_game_key \
-keyalg RSA -keysize 2048 -validity 10000
# Keep this keystore safe! You need it for all future updates
```
**2. Export Release Build:**
```
Select "Android" preset
Enable "Signed"
Provide keystore details
Click "Export Project"
```
**3. Generate AAB (for Play Store):**
```
Export Path: builds/android/YourGame.aab
Export Type: AAB (Android App Bundle)
```
### Testing on Device
```bash
# Enable USB debugging on Android device
# Connect via USB
# List devices
adb devices
# Install
adb install YourGame.apk
# Uninstall
adb uninstall com.yourcompany.yourgame
# View logs
adb logcat -c # Clear logs
adb logcat | grep YourGame
```
### Android Distribution
**Google Play Store:**
```
1. Create Play Console account
2. Create app listing
3. Upload AAB (not APK)
4. Configure store presence
5. Set pricing
6. Submit for review
```
**Other Stores:**
- Amazon Appstore (APK)
- Samsung Galaxy Store (APK)
- itch.io (APK)
- Direct download (APK)
### Android Optimization
**Reduce APK Size:**
```
# In export preset:
- Enable compression
- Disable unused ABIs
- Compress textures (ASTC)
- Remove unused resources
- Use ProGuard/R8
```
**Performance:**
```gdscript
# Target 60 FPS on mid-range devices
# Test on:
# - Low-end device (2GB RAM)
# - Mid-range device (4GB RAM)
# - High-end device (8GB+ RAM)
# Android-specific optimizations:
func _ready():
if OS.get_name() == "Android":
# Reduce particle count
# Lower shadow quality
# Disable post-processing effects
pass
```
---
## Multi-Platform Tips
### Asset Optimization
**Textures:**
```
Desktop: PNG, JPEG, or uncompressed
Web: Compress, reduce resolution
Mobile: ASTC compression, aggressive optimization
```
**Audio:**
```
Music: OGG Vorbis, 128kbps
SFX: OGG Vorbis, 64kbps
Mobile: Lower bitrates
```
**3D Models:**
```
Desktop: Full detail
Web: Reduce poly count 30%
Mobile: Reduce poly count 50%
```
### Platform Detection
```gdscript
extends Node
func _ready():
match OS.get_name():
"Windows":
setup_windows()
"Linux", "FreeBSD", "NetBSD", "OpenBSD", "BSD":
setup_linux()
"macOS":
setup_macos()
"Web":
setup_web()
"Android":
setup_android()
"iOS":
setup_ios()
func setup_windows():
# Windows-specific setup
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_ENABLED)
func setup_mobile():
# Touch controls, battery optimization
if OS.get_name() in ["Android", "iOS"]:
# Mobile optimizations
pass
```
### Feature Flags
```gdscript
const FEATURES = {
"cloud_saves": true,
"multiplayer": true,
"analytics": true,
"haptics": OS.get_name() in ["Android", "iOS"],
"keyboard": OS.get_name() not in ["Android", "iOS", "Web"],
}
func _ready():
if FEATURES.cloud_saves:
await AeThexCloud.connect_to_cloud()
```
---
## Troubleshooting
### Common Issues
**Export template missing:**
```
Solution: Download export templates from
Editor → Export Templates → Download
```
**Code signing failed (macOS):**
```bash
# Verify certificate
security find-identity -v -p codesigning
# Check entitlements
codesign -d --entitlements :- YourGame.app
```
**Web build doesn't load:**
```
Check console for errors
Must be served from HTTP server (not file://)
Check SharedArrayBuffer requirements
Enable CORS headers if needed
```
**Android build fails:**
```bash
# Check SDK paths
echo $ANDROID_HOME
# Update build tools
sdkmanager --update
# Clean build
./gradlew clean
```
### Performance Testing
```gdscript
# Add FPS counter
func _process(delta):
if OS.is_debug_build():
$FPSLabel.text = "FPS: " + str(Engine.get_frames_per_second())
```
### Build Size Optimization
```
1. Disable unused modules in export preset
2. Compress textures appropriately
3. Use streaming for large assets
4. Remove debug symbols (release mode)
5. Use platform-specific compression
```
---
## Best Practices
### Before Every Release
✓ Test on all target platforms
✓ Profile performance
✓ Check memory usage
✓ Test on low-end hardware
✓ Verify all assets load correctly
✓ Test input methods (keyboard, gamepad, touch)
✓ Check for crash logs
### Versioning
```
Use semantic versioning: MAJOR.MINOR.PATCH
Example: 1.2.3
MAJOR: Breaking changes
MINOR: New features (backward compatible)
PATCH: Bug fixes
Android version code: Increment for each release
```
### Continuous Integration
```yaml
# GitHub Actions example
name: Export Game
on: [push]
jobs:
export:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Export for Windows
run: |
# Export commands here
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: game-builds
path: builds/
```
---
## Platform Comparison
| Feature | Windows | Linux | macOS | Web | Android |
|---------|---------|-------|-------|-----|---------|
| **Ease of Export** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| **Distribution** | Easy | Easy | Medium | Easiest | Medium |
| **Performance** | Excellent | Excellent | Excellent | Good | Good |
| **File Size** | Medium | Medium | Large | Large | Medium |
| **Monetization** | Direct | Direct | App Store | Ads/IAP | Play Store |
| **Updates** | Manual | Manual | Manual | Instant | Store |
---
## Next Steps
- **Test Your Exports:** Always test on real hardware
- **Get Feedback:** Share with beta testers
- **Optimize:** Profile and improve performance
- **Distribute:** Choose your distribution method
- **Monitor:** Use AeThexAnalytics to track usage
For platform-specific questions, see:
- [API Reference](API_REFERENCE.md) - Cloud features
- [GAME_DEVELOPMENT.md](GAME_DEVELOPMENT.md) - Core engine features
- [ARCHITECTURE_OVERVIEW.md](ARCHITECTURE_OVERVIEW.md) - Technical details
Happy shipping! 🚀