# Export Configuration Guide

## Overview

Code of Conquest targets multiple platforms:
- Desktop: Windows, macOS, Linux
- Mobile: Android, iOS
- Web: HTML5/WebAssembly

Each platform requires specific configuration in Godot's export system.

## Prerequisites

### 1. Install Export Templates

In Godot Editor:
1. Editor → Manage Export Templates
2. Click "Download and Install"
3. Wait for templates to download (~300-500 MB)

Alternatively, download manually from [Godot downloads](https://godotengine.org/download).

### 2. Platform-Specific Requirements

#### Windows
- **Template**: Included by default
- **Optional**: Custom icon (.ico file)
- **Optional**: Code signing certificate for production

#### macOS
- **Template**: Included by default
- **Requirements** (for distribution):
  - macOS machine for final build
  - Apple Developer account ($99/year)
  - Code signing certificate
  - Notarization for Gatekeeper

#### Linux
- **Template**: Included by default
- **Note**: Export on Linux for best results
- **Distribution**: AppImage, Flatpak, or raw binary

#### Android
- **Android SDK**: API level 33+ (Android 13)
  - Download via Android Studio or command-line tools
  - Set path in Godot: Editor → Editor Settings → Export → Android → SDK Path

- **Java JDK**: Version 17 or later

- **Keystore for Signing**:
  ```bash
  keytool -genkey -v -keystore code_of_conquest.keystore \
    -alias coc_key -keyalg RSA -keysize 2048 -validity 10000
  ```

- **Package Name**: `com.codeofconquest.game`

#### iOS
- **Requirements**:
  - macOS with Xcode installed
  - Apple Developer account ($99/year)
  - Provisioning profile
  - Code signing certificate

- **Bundle ID**: `com.codeofconquest.game`

- **Export Process**:
  1. Export Xcode project from Godot
  2. Open in Xcode
  3. Configure signing
  4. Build for device or App Store

#### Web (HTML5)
- **Template**: Included by default
- **Server Requirements**:
  - HTTPS (for SharedArrayBuffer support)
  - CORS headers for cross-origin resources
  - Proper MIME types for .wasm files

- **PWA Configuration** (optional):
  - Manifest file for installability
  - Service worker for offline support
  - Icons in multiple sizes

## Configuration Steps

### Step 1: Open Export Window

In Godot:
1. Project → Export
2. Click "Add..." to add a new preset

### Step 2: Configure Each Platform

#### Windows Export

1. Add → Windows Desktop
2. Configure:
   - **Executable Name**: `CodeOfConquest.exe`
   - **Export Path**: `builds/windows/CodeOfConquest.exe`
   - **Icon**: `assets/ui/icon.ico` (optional)
   - **Embed PCK**: `true` (for single-file distribution)

3. Features:
   - 64-bit: Recommended for modern systems
   - 32-bit: Optional for older systems

#### Linux Export

1. Add → Linux/X11
2. Configure:
   - **Executable Name**: `CodeOfConquest.x86_64`
   - **Export Path**: `builds/linux/CodeOfConquest.x86_64`
   - **Embed PCK**: `true`

3. After export, set executable permissions:
   ```bash
   chmod +x CodeOfConquest.x86_64
   ```

#### macOS Export

1. Add → macOS
2. Configure:
   - **App Name**: `Code of Conquest`
   - **Bundle ID**: `com.codeofconquest.game`
   - **Export Path**: `builds/macos/CodeOfConquest.dmg`
   - **Icon**: `assets/ui/icon.icns` (optional)

3. For distribution:
   - Set code signing identity
   - Enable hardened runtime
   - Enable notarization

#### Android Export

1. Add → Android
2. Configure:
   - **Package Name**: `com.codeofconquest.game`
   - **Version Code**: `1` (increment for each release)
   - **Version Name**: `0.1.0`
   - **Min SDK**: `21` (Android 5.0)
   - **Target SDK**: `33` (Android 13)

3. Keystore:
   - **Debug Keystore**: Auto-generated (for testing)
   - **Release Keystore**: Path to your `.keystore` file
   - **Release User**: Keystore alias (e.g., `coc_key`)
   - **Release Password**: Your keystore password

4. Permissions (add in export preset):
   - `INTERNET` - Required for API calls
   - `ACCESS_NETWORK_STATE` - Check connectivity

5. Screen Orientation:
   - Landscape or Portrait (choose based on game design)

6. Graphics:
   - Renderer: GL Compatibility (best mobile support)

7. Export:
   - **APK**: For direct installation/testing
   - **AAB** (Android App Bundle): For Google Play Store

#### iOS Export

1. Add → iOS
2. Configure:
   - **Bundle ID**: `com.codeofconquest.game`
   - **Version**: `0.1.0`
   - **Icon**: Multiple sizes required (see Xcode)
   - **Orientation**: Landscape or Portrait

3. Provisioning:
   - **Team ID**: From Apple Developer account
   - **Provisioning Profile**: Development or Distribution

4. Export:
   - Export as Xcode project
   - Open in Xcode for final build

5. Capabilities (configure in Xcode):
   - Network requests
   - Push notifications (if needed later)

#### Web Export

1. Add → HTML5
2. Configure:
   - **Export Path**: `builds/web/index.html`
   - **Export Type**: Regular or PWA
   - **Head Include**: Custom HTML header (optional)

3. Features:
   - **Thread Support**: Enable for better performance (requires COOP/COEP headers)
   - **SharedArrayBuffer**: Requires HTTPS + specific headers

4. Server Configuration:
   - Must serve with proper MIME types:
     - `.wasm`: `application/wasm`
     - `.pck`: `application/octet-stream`

5. CORS Headers (for threaded builds):
   ```
   Cross-Origin-Opener-Policy: same-origin
   Cross-Origin-Embedder-Policy: require-corp
   ```

6. PWA Manifest (optional):
   ```json
   {
     "name": "Code of Conquest",
     "short_name": "CoC",
     "start_url": ".",
     "display": "standalone",
     "background_color": "#1a1a2e",
     "theme_color": "#d4af37",
     "icons": [...]
   }
   ```

## Testing Exports

### Desktop Testing

1. Export to local directory
2. Run executable directly
3. Test with backend running on localhost
4. Verify:
   - Window sizing and fullscreen
   - Keyboard/mouse input
   - API connectivity
   - Save/load functionality

### Mobile Testing

#### Android
1. Enable USB debugging on device
2. Connect via USB
3. Use `adb install` to install APK:
   ```bash
   adb install builds/android/CodeOfConquest.apk
   ```
4. Or export to device directly from Godot (Debug → Deploy)

5. Verify:
   - Touch input responsiveness
   - Screen orientation
   - Battery usage
   - Network connectivity
   - Permissions granted

#### iOS
1. Configure development provisioning
2. Export Xcode project
3. Open in Xcode
4. Build to connected device
5. Verify same as Android

### Web Testing

1. Export to directory
2. Serve locally:
   ```bash
   python3 -m http.server 8000
   ```
3. Open `http://localhost:8000` in browser
4. Verify:
   - Loading performance
   - Browser compatibility (Chrome, Firefox, Safari)
   - WebGL rendering
   - Network requests
   - Mobile browser (responsive)

## Distribution

### Desktop

**Windows**:
- Distribute .exe directly
- Or create installer (e.g., Inno Setup, NSIS)
- Upload to Steam, itch.io, etc.

**macOS**:
- Create .dmg for distribution
- Notarize for Gatekeeper
- Upload to Mac App Store or direct download

**Linux**:
- Raw binary
- AppImage (self-contained)
- Flatpak (Flathub distribution)
- Snap package

### Mobile

**Android**:
- Google Play Store (requires AAB)
- Amazon Appstore
- F-Droid (open source)
- Direct APK download (sideloading)

**iOS**:
- App Store (requires App Store Connect)
- TestFlight (beta testing)
- Enterprise distribution (if applicable)

### Web

**Hosting Options**:
- Static hosting: Netlify, Vercel, GitHub Pages
- CDN: Cloudflare, AWS S3 + CloudFront
- Game platforms: itch.io (supports HTML5)

**Deployment**:
1. Export web build
2. Upload all files (index.html, .wasm, .pck, etc.)
3. Configure COOP/COEP headers if using threads
4. Test on production URL

## Performance Optimization

### General
- Use compressed textures (ETC2 for mobile, S3TC for desktop)
- Minimize draw calls
- Use LOD (Level of Detail) for 3D
- Profile with Godot profiler

### Mobile Specific
- Reduce resolution for lower-end devices
- Limit particle effects
- Use simpler shaders
- Test on low-end devices
- Monitor battery usage

### Web Specific
- Optimize asset sizes (compress images, audio)
- Use progressive loading for large assets
- Minimize WASM binary size
- Cache assets with service worker

## Platform-Specific Considerations

### Windows
- Antivirus may flag unsigned executables
- Consider code signing for production
- Test on Windows 10 and 11

### macOS
- Gatekeeper will block unsigned apps
- Notarization required for distribution
- Test on both Intel and Apple Silicon (M1/M2)

### Linux
- Provide both 32-bit and 64-bit builds
- Test on multiple distros (Ubuntu, Fedora, Arch)
- Include library dependencies or use static linking

### Android
- Target latest API level for Play Store
- Test on multiple screen sizes and densities
- Handle back button properly
- Support safe areas (notches, rounded corners)

### iOS
- Follow Apple Human Interface Guidelines
- Support safe areas
- Handle app lifecycle (background/foreground)
- Test on multiple devices (iPhone, iPad)

### Web
- Fallback for browsers without WebGL
- Loading screen for asset downloads
- Handle browser resize events
- Support both desktop and mobile browsers

## Troubleshooting

### "Missing export template"
→ Download templates via Editor → Manage Export Templates

### "Android SDK not found"
→ Set SDK path in Editor Settings → Export → Android

### "Code signing failed" (macOS/iOS)
→ Verify certificate and provisioning profile

### "Web build won't load"
→ Check browser console, verify MIME types, check CORS

### "App crashes on mobile"
→ Check device logs (adb logcat for Android, Xcode console for iOS)

## Resources

- [Godot Export Documentation](https://docs.godotengine.org/en/stable/tutorials/export/)
- [Android Publishing Guide](https://developer.android.com/studio/publish)
- [iOS App Distribution](https://developer.apple.com/documentation/xcode/distributing-your-app-for-beta-testing-and-releases)
- [PWA Documentation](https://web.dev/progressive-web-apps/)

## Automation (Future)

Consider automating builds with CI/CD:
- GitHub Actions
- GitLab CI
- Jenkins

Example workflow:
1. Commit to `main` branch
2. Trigger automated export for all platforms
3. Run automated tests
4. Upload builds to distribution channels
5. Tag release with version number
