diff options
| author | Indrajith K L | 2025-11-05 01:50:32 +0530 |
|---|---|---|
| committer | Indrajith K L | 2025-11-05 01:50:32 +0530 |
| commit | 10c22d35678f96e722f25a12badca98febb2921e (patch) | |
| tree | fe71581d11747f32ceebb31839034d61e7a55614 /template/README.md | |
| parent | 2d565e5bcb0e2eab93d9d1bab520bbbaf7457a07 (diff) | |
| download | reilua-enhanced-10c22d35678f96e722f25a12badca98febb2921e.tar.gz reilua-enhanced-10c22d35678f96e722f25a12badca98febb2921e.tar.bz2 reilua-enhanced-10c22d35678f96e722f25a12badca98febb2921e.zip | |
Adds Game Jam Ready Templates & ReiLua API Updates
(Most of the code is Copilot Generated LOL)
Diffstat (limited to 'template/README.md')
| -rw-r--r-- | template/README.md | 321 |
1 files changed, 321 insertions, 0 deletions
diff --git a/template/README.md b/template/README.md new file mode 100644 index 0000000..e46a3cf --- /dev/null +++ b/template/README.md @@ -0,0 +1,321 @@ +# ReiLua-Enhanced Game Template + +A complete game template for rapid development with ReiLua-Enhanced. + +## 📁 Structure + +``` +template/ +├── main.lua # Entry point +├── lib/ # Core libraries +│ ├── classic.lua # OOP class system +│ ├── gamestate.lua # State management +│ └── animation.lua # Sprite animation system +├── states/ # Game states +│ ├── menu.lua # Menu screen +│ └── game.lua # Main gameplay +└── assets/ # Game assets (images, sounds, etc.) +``` + +## 🚀 Quick Start + +### Development + +1. **Copy template to your game folder:** + ```bash + xcopy /E /I template MyGame + cd MyGame + ``` + +2. **Run your game:** + ```bash + path\to\ReiLua.exe --log --no-logo + ``` + +3. **Start coding!** + - Edit `states/menu.lua` for your menu + - Edit `states/game.lua` for gameplay + - Add assets to `assets/` folder + +### Release Build + +1. **Copy files to build directory:** + ```bash + cd ReiLua-Enhanced\build + xcopy /E /I ..\MyGame\*.lua . + xcopy /E /I ..\MyGame\lib lib + xcopy /E /I ..\MyGame\states states + mkdir assets + xcopy /E /I ..\MyGame\assets assets + ``` + +2. **Build release:** + ```bash + cd .. + scripts\build_release.bat + ``` + +3. **Your game is ready!** + - `build/ReiLua.exe` (or your custom name) + - Everything embedded in one executable + +## 📚 Libraries Included + +### Classic (OOP) +Object-oriented class system by rxi. + +```lua +local Object = require("lib.classic") +local Player = Object:extend() + +function Player:new(x, y) + self.x = x + self.y = y +end + +function Player:update(dt) + -- Update logic +end + +local player = Player(100, 100) +``` + +### GameState +State management system inspired by hump.gamestate. + +```lua +local GameState = require("lib.gamestate") +local menu = require("states.menu") + +-- Register callbacks +GameState.registerEvents() + +-- Switch state +GameState.switch(menu) + +-- Push state (with return) +GameState.push(pauseMenu) +GameState.pop() -- Returns to previous state +``` + +**State Callbacks:** +- `state:enter(previous, ...)` - Entering state +- `state:leave()` - Leaving state +- `state:resume(previous, ...)` - Returning via pop() +- `state:update(dt)` - Frame update +- `state:draw()` - Rendering +- `state:event(event)` - Input events + +### Animation +Sprite sheet animation system. + +```lua +local Animation = require("lib.animation") + +-- Load texture +local playerTexture = RL.LoadTexture("assets/player.png") + +-- Create animation (32x32 frame size) +local anim = Animation.new(playerTexture, 32, 32, { + idle = {frames = {1, 2, 3, 4}, fps = 8, loop = true}, + walk = {frames = {5, 6, 7, 8, 9, 10}, fps = 12, loop = true}, + jump = {frames = {11, 12, 13}, fps = 10, loop = false} +}) + +-- Play animation +anim:play("idle") + +-- In update loop +anim:update(dt) + +-- In draw loop +anim:draw(x, y) + +-- Or simple draw (no rotation/scale) +anim:drawSimple(x, y) + +-- Advanced features +anim:setFlip(true, false) -- Flip horizontally +anim:setScale(2, 2) -- Scale 2x +anim:setTint(RL.RED) -- Color tint +anim:pause() -- Pause animation +anim:resume() -- Resume +anim:stop() -- Stop and reset +``` + +## 🎮 Example States + +### Menu State (states/menu.lua) +- Keyboard navigation (Up/Down) +- Start game / Options / Exit +- Clean UI rendering + +### Game State (states/game.lua) +- Player movement (WASD/Arrows) +- Pause menu (ESC/P) +- Animation integration example +- Basic game loop + +## 🎨 Adding Assets + +### Sprite Sheets +Place sprite sheets in `assets/` folder: + +``` +assets/ +├── player.png # Player sprite sheet (grid-based) +├── enemy.png # Enemy sprites +├── explosion.png # Explosion animation +└── background.png # Background image +``` + +**Sprite Sheet Format:** +- Grid-based (equal-sized frames) +- Frames read left-to-right, top-to-bottom +- Example: 32x32 frames in 256x256 texture = 8x8 grid (64 frames) + +### Sounds & Music +```lua +-- In state:enter() +self.music = RL.LoadMusicStream("assets/music.ogg") +self.jumpSound = RL.LoadSound("assets/jump.wav") + +-- In state:update() +RL.UpdateMusicStream(self.music) + +-- Play sound +RL.PlaySound(self.jumpSound) +``` + +## 🔧 Configuration + +### Window Settings (main.lua) +```lua +local GAME_TITLE = "My Awesome Game" +local WINDOW_WIDTH = 1280 +local WINDOW_HEIGHT = 720 +local TARGET_FPS = 60 +local START_FULLSCREEN = false -- Start in fullscreen? +``` + +For complete window configuration (fullscreen, resizable, etc.), see [WINDOW_CONFIG.md](WINDOW_CONFIG.md). + +### Exit Key Behavior +By default, the template disables ESC as an exit key so you can use it for pause menus: +```lua +RL.SetExitKey(0) -- 0 = No exit key +``` + +To change this behavior, see [COMMON_ISSUES.md](COMMON_ISSUES.md#esc-key-closes-the-game). + +### Global Hotkeys +- **F1 / F11** - Toggle fullscreen +- **ESC** - Pause game (in game state) + +## 📖 State Management Patterns + +### Simple State Switch +```lua +-- From menu to game +GameState.switch(gameState) +``` + +### State Stack (Pause Menu) +```lua +-- Push pause menu (game continues in background) +GameState.push(pauseMenu) + +-- Return to game +GameState.pop() +``` + +### Passing Data Between States +```lua +-- Pass score to game over screen +GameState.switch(gameOverState, score, highScore) + +-- In game over state: +function gameOverState:enter(previous, score, highScore) + self.score = score + self.highScore = highScore +end +``` + +## 🎯 Best Practices + +### Performance +- Load assets in `state:enter()`, not `update()` +- Unload assets in `state:leave()` +- Use object pooling for bullets/particles +- Profile with `--log` flag + +### Organization +- One file per state +- Keep states small and focused +- Use OOP for game entities (Player, Enemy, etc.) +- Separate rendering from logic + +### Asset Loading +```lua +function state:enter() + -- Show loading if needed + local assets = {"player.png", "enemy.png", "music.ogg"} + RL.BeginAssetLoading(#assets) + + for _, asset in ipairs(assets) do + RL.UpdateAssetLoading(asset) + -- Load asset... + end + + RL.EndAssetLoading() +end +``` + +## 🐛 Debugging + +### Development Mode +```bash +ReiLua.exe --log --no-logo +``` +- Shows console output +- Skips splash screens +- Fast iteration + +### Common Issues + +**Animation not showing:** +- Check texture loaded: `if not texture then print("Failed!") end` +- Verify frame size matches sprite sheet +- Check animation is playing: `anim:play("idle")` + +**State not switching:** +- Verify `GameState.registerEvents()` called in `RL.init()` +- Check state has required functions (`:update()`, `:draw()`) +- Use `print()` in `:enter()` to verify state switch + +**Assets not loading:** +- Use relative paths: `"assets/player.png"` not `"C:/..."` +- Check file exists with `RL.FileExists()` +- View console with `--log` flag + +## 📦 Building for Release + +See main ReiLua-Enhanced documentation: +- [EMBEDDING.md](../docs/EMBEDDING.md) - Embedding guide +- [BUILD_SCRIPTS.md](../docs/BUILD_SCRIPTS.md) - Build automation +- [CUSTOMIZATION.md](../docs/CUSTOMIZATION.md) - Branding/icons + +## 📄 License + +- **classic.lua** - MIT License (rxi) +- **gamestate.lua** - Inspired by hump (MIT) +- **animation.lua** - MIT License +- **Template** - Free to use for any project + +## 🎮 Ready to Make Games! + +This template gives you everything needed to start building games immediately. Focus on gameplay, not boilerplate! + +For more examples and documentation, see the main ReiLua-Enhanced repository. + +Happy game jamming! 🚀 |
