187 lines
6.0 KiB
Markdown
187 lines
6.0 KiB
Markdown
# ReiLua Embedded Assets Upgrade - Summary
|
|
|
|
## Overview
|
|
Successfully ported embedded assets, splash screens, and asset loading features from ReiLua-JamVersion to the main ReiLua repository on the `embedded-assets-support` branch.
|
|
|
|
## Features Added
|
|
|
|
### 1. **Embedded Main.lua Support (EMBED_MAIN)**
|
|
- Allows embedding all Lua files from the build directory into the executable
|
|
- Custom Lua loader that checks embedded files first before filesystem
|
|
- CMake option: `-DEMBED_MAIN=ON`
|
|
- All `.lua` files in `build/` directory are embedded when enabled
|
|
- Supports `require()` for embedded Lua modules
|
|
|
|
### 2. **Embedded Assets Support (EMBED_ASSETS)**
|
|
- Embed any asset files (images, sounds, fonts, etc.) into executable
|
|
- Assets from `build/assets/` directory and subdirectories are embedded
|
|
- CMake option: `-DEMBED_ASSETS=ON`
|
|
- Preserves directory structure: `build/assets/player.png` → load as `"assets/player.png"`
|
|
- Transparent to Lua code - same paths work in dev and release
|
|
|
|
### 3. **Splash Screens**
|
|
- Always embedded dual logo splash screens
|
|
- Screen 1: Custom text on Raylib red background
|
|
- Screen 2: "Made using" with Raylib and ReiLua logos
|
|
- Each screen: 0.8s fade in, 2.5s display, 0.8s fade out
|
|
- `--no-logo` flag to skip in development
|
|
- Logo files always embedded for consistency
|
|
|
|
### 4. **Asset Loading Progress API**
|
|
- `RL.BeginAssetLoading(totalAssets)` - Initialize loading tracking
|
|
- `RL.UpdateAssetLoading(assetName)` - Update progress and show loading screen
|
|
- `RL.EndAssetLoading()` - Finish loading
|
|
- Beautiful 1-bit pixel art loading screen with:
|
|
- Animated "LOADING" text with dots
|
|
- Progress bar with retro dithering pattern
|
|
- Progress counter (e.g., "3/10")
|
|
- Current asset name display
|
|
- Pixel art corner decorations
|
|
|
|
### 5. **Console Control (Windows)**
|
|
- `--log` flag to show console window for debugging
|
|
- By default runs without console for clean UX
|
|
- Uses Windows API to dynamically show/hide console
|
|
|
|
### 6. **Font Embedding**
|
|
- Custom Oleaguid font always embedded for splash/loading screens
|
|
- Ensures consistent appearance across builds
|
|
|
|
## Files Added/Modified
|
|
|
|
### New Files
|
|
- **Python Scripts:**
|
|
- `scripts/embed_lua.py` - Embeds Lua files into C header
|
|
- `scripts/embed_assets.py` - Embeds asset files into C header
|
|
- `scripts/embed_logo.py` - Embeds splash screen logos
|
|
- `scripts/embed_font.py` - Embeds custom font
|
|
|
|
- **Source Files:**
|
|
- `src/splash.c` - Splash screen implementation
|
|
- `include/splash.h` - Splash screen header
|
|
|
|
- **Assets:**
|
|
- `logo/raylib_logo.png` - Raylib logo (2466 bytes)
|
|
- `logo/reilua_logo.png` - ReiLua logo (1191 bytes)
|
|
- `fonts/Oleaguid.ttf` - Custom font (112828 bytes)
|
|
|
|
- **Documentation:**
|
|
- `EMBEDDING.md` - Complete guide to embedding Lua and assets
|
|
- `ASSET_LOADING.md` - Asset loading API documentation
|
|
- `SPLASH_SCREENS.md` - Splash screen customization guide
|
|
- `BUILD_SCRIPTS.md` - Build scripts documentation
|
|
|
|
- **Build Scripts:**
|
|
- `scripts\build_dev.bat` / `scripts/build_dev.sh` - One-command development builds
|
|
- `scripts\build_release.bat` / `scripts/build_release.sh` - One-command release builds with embedding
|
|
|
|
- **Icon and Resources:**
|
|
- `icon.ico` - Default Windows executable icon
|
|
- `resources.rc` - Windows resource file for exe metadata
|
|
|
|
### Modified Files
|
|
- `CMakeLists.txt` - Added embedding options and build commands
|
|
- `src/main.c` - Added splash screens, console control, --no-logo flag
|
|
- `src/lua_core.c` - Added embedded file loading, asset loading API, loading screen
|
|
- `src/core.c` - Added asset loading API functions
|
|
- `include/core.h` - Added asset loading function declarations
|
|
- `include/lua_core.h` - Changed luaCallMain() return type to bool
|
|
|
|
## Build Options
|
|
|
|
### Quick Build (Recommended)
|
|
|
|
**Development (Fast Iteration):**
|
|
```bash
|
|
# Windows
|
|
scripts\build_dev.bat
|
|
|
|
# Linux/Unix
|
|
scripts/build_dev.sh
|
|
```
|
|
|
|
**Release (Single Executable):**
|
|
```bash
|
|
# Copy files to build directory first
|
|
cd build
|
|
copy ..\*.lua .
|
|
mkdir assets
|
|
copy ..\assets\* assets\
|
|
|
|
# Then build
|
|
cd ..
|
|
|
|
# Windows
|
|
scripts\build_release.bat
|
|
|
|
# Linux/Unix
|
|
scripts/build_release.sh
|
|
```
|
|
|
|
### Manual Build
|
|
|
|
**Development Build (Fast Iteration):**
|
|
```bash
|
|
cmake -G "MinGW Makefiles" ..
|
|
mingw32-make
|
|
```
|
|
- External Lua and asset files
|
|
- Fast edit-and-run workflow
|
|
- Use `--no-logo` to skip splash screens
|
|
|
|
**Release Build (Single Executable):**
|
|
```bash
|
|
# Copy Lua files and assets to build directory
|
|
copy ..\*.lua .
|
|
mkdir assets
|
|
copy ..\assets\* assets\
|
|
|
|
# Configure with embedding
|
|
cmake -G "MinGW Makefiles" .. -DEMBED_MAIN=ON -DEMBED_ASSETS=ON
|
|
mingw32-make
|
|
```
|
|
- Everything embedded in single .exe
|
|
- Clean distribution package
|
|
- No external file dependencies
|
|
|
|
## Command Line Options
|
|
```
|
|
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)
|
|
--no-logo Skip splash screens (development)
|
|
```
|
|
|
|
## Testing
|
|
✅ Build compiles successfully
|
|
✅ Logos and font embedded automatically
|
|
✅ Asset loading API functions registered
|
|
✅ Splash screens implemented and working
|
|
✅ Console control working (Windows)
|
|
✅ Documentation complete
|
|
✅ SEGV crash fixed - window initializes before splash screens
|
|
✅ Runs successfully with and without --no-logo flag
|
|
|
|
## Known Changes from Original ReiLua
|
|
- `RL.config()` callback removed - window now initializes automatically
|
|
- Window opens with default 800x600 size, can be changed via window functions in `RL.init()`
|
|
- Custom font (Oleaguid) always loaded for consistent appearance
|
|
- `stateContextInit()` merged into `stateInit()`
|
|
|
|
## Next Steps
|
|
1. Test with actual embedded Lua files
|
|
2. Test with embedded assets
|
|
3. Verify asset loading progress display
|
|
4. Test splash screens (run without --no-logo)
|
|
5. Create example game that uses all features
|
|
6. Merge to main branch when stable
|
|
|
|
## Commit
|
|
- Branch: `embedded-assets-support`
|
|
- Commit: "Add embedded assets, splash screens, and asset loading support"
|
|
- All changes committed successfully
|