290 lines
6.7 KiB
Markdown
290 lines
6.7 KiB
Markdown
# Embedding main.lua into Executable
|
|
|
|
When you're ready to ship your game, you can embed all Lua files and asset files directly into the executable.
|
|
|
|
## Development vs Release Workflow
|
|
|
|
### 🔧 Development Build (Fast Iteration)
|
|
|
|
During development, use external files for quick iteration:
|
|
|
|
**Setup:**
|
|
```
|
|
GameFolder/
|
|
├── ReiLua.exe
|
|
├── main.lua
|
|
├── player.lua
|
|
└── assets/
|
|
├── player.png
|
|
└── music.wav
|
|
```
|
|
|
|
**Build:**
|
|
```bash
|
|
cd build
|
|
cmake ..
|
|
cmake --build .
|
|
```
|
|
|
|
**Benefits:**
|
|
- ✅ Edit Lua files and re-run immediately
|
|
- ✅ Edit assets and reload
|
|
- ✅ Fast development cycle
|
|
- ✅ Debug with `--log` flag
|
|
|
|
### 📦 Release Build (Single Executable)
|
|
|
|
For distribution, embed everything into one file:
|
|
|
|
**Setup:**
|
|
```bash
|
|
cd build
|
|
|
|
# Copy Lua files to build directory
|
|
copy ..\main.lua .
|
|
copy ..\player.lua .
|
|
|
|
# Create assets folder and copy files
|
|
mkdir assets
|
|
copy ..\player.png assets\
|
|
copy ..\music.wav assets\
|
|
```
|
|
|
|
**Build:**
|
|
```bash
|
|
# Configure with embedding
|
|
cmake .. -DEMBED_MAIN=ON -DEMBED_ASSETS=ON
|
|
|
|
# Build release
|
|
cmake --build . --config Release
|
|
```
|
|
|
|
**Result:**
|
|
```
|
|
Distribution/
|
|
└── YourGame.exe (Everything embedded!)
|
|
```
|
|
|
|
**Benefits:**
|
|
- ✅ Single executable file
|
|
- ✅ No external dependencies
|
|
- ✅ Users can't modify game files
|
|
- ✅ Smaller download (no separate files)
|
|
|
|
## Quick Start
|
|
|
|
### Embedding Lua Files
|
|
|
|
1. **Copy your Lua files to the build directory**:
|
|
```bash
|
|
copy main.lua build\main.lua
|
|
copy player.lua build\player.lua
|
|
```
|
|
|
|
2. **Build with EMBED_MAIN option**:
|
|
```bash
|
|
cd build
|
|
cmake .. -DEMBED_MAIN=ON
|
|
cmake --build . --config Release
|
|
```
|
|
|
|
## Command Line Options
|
|
|
|
ReiLua supports several command-line options:
|
|
|
|
```bash
|
|
ReiLua [Options] [Directory to main.lua or main]
|
|
|
|
Options:
|
|
-h, --help Show help message
|
|
-v, --version Show ReiLua version
|
|
-i, --interpret Interpret mode [File name]
|
|
--log Show console window for logging (Windows only)
|
|
```
|
|
|
|
### Console/Logging
|
|
|
|
By default, ReiLua runs **without a console window** for a clean user experience. To enable console output for debugging:
|
|
|
|
```bash
|
|
# Run with console for debugging
|
|
ReiLua.exe --log
|
|
|
|
# You can also combine with other options
|
|
ReiLua.exe --log path/to/game
|
|
|
|
# Or with interpret mode
|
|
ReiLua.exe --log -i script.lua
|
|
```
|
|
|
|
This is useful during development to see:
|
|
- TraceLog output
|
|
- Print statements
|
|
- Lua errors
|
|
- Debug information
|
|
|
|
## Complete Release Workflow
|
|
|
|
Here's a complete step-by-step guide to prepare your game for release:
|
|
|
|
### Step 1: Organize Your Project
|
|
|
|
Ensure your project has this structure:
|
|
```
|
|
MyGame/
|
|
├── main.lua
|
|
├── player.lua
|
|
├── enemy.lua
|
|
├── player.png
|
|
├── enemy.png
|
|
├── music.wav
|
|
└── icon.ico (optional)
|
|
```
|
|
|
|
### Step 2: Customize Branding (Optional)
|
|
|
|
**Change executable icon:**
|
|
```bash
|
|
# Replace ReiLua's icon with yours
|
|
copy MyGame\icon.ico ReiLua\icon.ico
|
|
```
|
|
|
|
**Edit executable properties:**
|
|
Open `ReiLua\resources.rc` and modify:
|
|
```rc
|
|
VALUE "CompanyName", "Your Studio Name"
|
|
VALUE "FileDescription", "Your Game Description"
|
|
VALUE "ProductName", "Your Game Name"
|
|
VALUE "LegalCopyright", "Copyright (C) Your Name, 2025"
|
|
```
|
|
|
|
**Change executable name:**
|
|
Edit `ReiLua\CMakeLists.txt`:
|
|
```cmake
|
|
project( YourGameName ) # Change from "ReiLua"
|
|
```
|
|
|
|
See [CUSTOMIZATION.md](CUSTOMIZATION.md) for full details.
|
|
|
|
### Important: Asset Paths
|
|
|
|
**Keep your paths consistent!** The embedding system now preserves the `assets/` prefix, so use the same paths in both development and release:
|
|
|
|
```lua
|
|
-- ✅ Correct - works in both dev and release
|
|
playerImage = RL.LoadTexture("assets/player.png")
|
|
backgroundImg = RL.LoadTexture("assets/background.png")
|
|
musicSound = RL.LoadSound("assets/music.wav")
|
|
```
|
|
|
|
Your Lua code doesn't need to change between development and release builds!
|
|
|
|
### Step 3: Prepare Build Directory
|
|
|
|
```bash
|
|
cd ReiLua\build
|
|
|
|
# Copy all Lua files
|
|
copy ..\MyGame\*.lua .
|
|
|
|
# Create assets folder
|
|
mkdir assets
|
|
|
|
# Copy all asset files (images, sounds, etc.)
|
|
copy ..\MyGame\*.png assets\
|
|
copy ..\MyGame\*.wav assets\
|
|
copy ..\MyGame\*.ogg assets\
|
|
# Or copy entire folders
|
|
xcopy /E /I ..\MyGame\images assets\images
|
|
xcopy /E /I ..\MyGame\sounds assets\sounds
|
|
```
|
|
|
|
### Step 4: Build Release
|
|
|
|
```bash
|
|
# Configure with embedding enabled
|
|
cmake .. -DEMBED_MAIN=ON -DEMBED_ASSETS=ON
|
|
|
|
# Build in release mode
|
|
cmake --build . --config Release
|
|
```
|
|
|
|
### Step 5: Test Release Build
|
|
|
|
```bash
|
|
# Test with console to verify everything loaded
|
|
YourGameName.exe --log
|
|
|
|
# Test production mode (no console)
|
|
YourGameName.exe
|
|
```
|
|
|
|
Check console output for:
|
|
- ✅ "ReiLua x.x.x" version info
|
|
- ✅ No file loading errors
|
|
- ✅ Game runs correctly
|
|
|
|
### Step 6: Package for Distribution
|
|
|
|
```bash
|
|
# Create distribution folder
|
|
mkdir ..\Distribution
|
|
copy YourGameName.exe ..\Distribution\
|
|
|
|
# Optional: Add README, LICENSE, etc.
|
|
copy ..\README.txt ..\Distribution\
|
|
```
|
|
|
|
Your game is now ready to distribute as a single executable!
|
|
|
|
### Workflow Summary
|
|
|
|
| Stage | Build Command | Files Needed | Result |
|
|
|-------|--------------|--------------|--------|
|
|
| **Development** | `cmake .. && cmake --build .` | Lua + assets external | Fast iteration |
|
|
| **Testing** | `cmake .. -DEMBED_MAIN=ON && cmake --build .` | Lua in build/ | Test embedding |
|
|
| **Release** | `cmake .. -DEMBED_MAIN=ON -DEMBED_ASSETS=ON && cmake --build . --config Release` | Lua + assets in build/ | Single .exe |
|
|
|
|
### Troubleshooting
|
|
|
|
**Problem: "No .lua files found in build directory"**
|
|
```bash
|
|
# Solution: Copy Lua files to build directory
|
|
copy ..\*.lua .
|
|
```
|
|
|
|
**Problem: "No files found in assets folder"**
|
|
```bash
|
|
# Solution: Create assets folder and copy files
|
|
mkdir assets
|
|
copy ..\*.png assets\
|
|
```
|
|
|
|
**Problem: Game crashes on startup**
|
|
```bash
|
|
# Solution: Run with --log to see error messages
|
|
YourGameName.exe --log
|
|
```
|
|
|
|
**Problem: Assets not loading**
|
|
- Verify assets are in `build/assets/` before building
|
|
- Check asset filenames match in your Lua code
|
|
- Use `--log` to see loading errors
|
|
|
|
### Notes
|
|
|
|
- `.lua` files in the **build directory root** are embedded when using `EMBED_MAIN=ON`
|
|
- Asset files in **build/assets/** folder (and subfolders) are embedded when using `EMBED_ASSETS=ON`
|
|
- `main.lua` must exist and is always the entry point
|
|
- Asset embedding works with subdirectories: `assets/images/player.png` → Load with `LoadImage("player.png")`
|
|
- Both Lua and asset embedding can be used independently or together
|
|
- The system falls back to file system if embedded file is not found
|
|
- No code changes needed - all raylib functions work automatically with embedded assets
|
|
|
|
## Customizing Your Executable
|
|
|
|
Want to add your own icon and version info to the executable? See [CUSTOMIZATION.md](CUSTOMIZATION.md) for details on:
|
|
- Adding a custom icon
|
|
- Setting exe properties (company name, version, description)
|
|
- Renaming the executable
|