pixospritz-core 0.10.1 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -286
- package/dist/bundle.js +13 -3
- package/dist/bundle.js.map +1 -1
- package/dist/style.css +1 -0
- package/package.json +43 -44
- package/src/components/WebGLView.jsx +318 -0
- package/src/css/pixos.css +372 -0
- package/src/engine/actions/animate.js +41 -0
- package/src/engine/actions/changezone.js +135 -0
- package/src/engine/actions/chat.js +109 -0
- package/src/engine/actions/dialogue.js +90 -0
- package/src/engine/actions/face.js +22 -0
- package/src/engine/actions/greeting.js +28 -0
- package/src/engine/actions/interact.js +86 -0
- package/src/engine/actions/move.js +67 -0
- package/src/engine/actions/patrol.js +109 -0
- package/src/engine/actions/prompt.js +185 -0
- package/src/engine/actions/script.js +42 -0
- package/src/engine/core/audio/AudioSystem.js +543 -0
- package/src/engine/core/cutscene/PxcPlayer.js +956 -0
- package/src/engine/core/cutscene/manager.js +243 -0
- package/src/engine/core/database/index.js +75 -0
- package/src/engine/core/debug/index.js +371 -0
- package/src/engine/core/hud/index.js +765 -0
- package/src/engine/core/index.js +540 -0
- package/src/engine/core/input/gamepad/Controller.js +71 -0
- package/src/engine/core/input/gamepad/ControllerButtons.js +231 -0
- package/src/engine/core/input/gamepad/ControllerStick.js +173 -0
- package/src/engine/core/input/gamepad/index.js +592 -0
- package/src/engine/core/input/keyboard.js +196 -0
- package/src/engine/core/input/manager.js +485 -0
- package/src/engine/core/input/mouse.js +203 -0
- package/src/engine/core/input/touch.js +175 -0
- package/src/engine/core/mode/manager.js +199 -0
- package/src/engine/core/net/manager.js +535 -0
- package/src/engine/core/queue/action.js +83 -0
- package/src/engine/core/queue/event.js +82 -0
- package/src/engine/core/queue/index.js +44 -0
- package/src/engine/core/queue/loadable.js +33 -0
- package/src/engine/core/render/CameraEffects.js +494 -0
- package/src/engine/core/render/FrustumCuller.js +417 -0
- package/src/engine/core/render/LODManager.js +285 -0
- package/src/engine/core/render/ParticleManager.js +529 -0
- package/src/engine/core/render/TextureAtlas.js +465 -0
- package/src/engine/core/render/camera.js +338 -0
- package/src/engine/core/render/light.js +197 -0
- package/src/engine/core/render/manager.js +1079 -0
- package/src/engine/core/render/shaders.js +110 -0
- package/src/engine/core/render/skybox.js +342 -0
- package/src/engine/core/resource/manager.js +133 -0
- package/src/engine/core/resource/object.js +611 -0
- package/src/engine/core/resource/texture.js +103 -0
- package/src/engine/core/resource/tileset.js +177 -0
- package/src/engine/core/scene/avatar.js +215 -0
- package/src/engine/core/scene/speech.js +138 -0
- package/src/engine/core/scene/sprite.js +702 -0
- package/src/engine/core/scene/spritz.js +189 -0
- package/src/engine/core/scene/world.js +681 -0
- package/src/engine/core/scene/zone.js +1167 -0
- package/src/engine/core/store/index.js +110 -0
- package/src/engine/dynamic/animatedSprite.js +64 -0
- package/src/engine/dynamic/animatedTile.js +98 -0
- package/src/engine/dynamic/avatar.js +110 -0
- package/src/engine/dynamic/map.js +174 -0
- package/src/engine/dynamic/sprite.js +255 -0
- package/src/engine/dynamic/spritz.js +119 -0
- package/src/engine/events/EventSystem.js +609 -0
- package/src/engine/events/camera.js +142 -0
- package/src/engine/events/chat.js +75 -0
- package/src/engine/events/menu.js +186 -0
- package/src/engine/scripting/CallbackManager.js +514 -0
- package/src/engine/scripting/PixoScriptInterpreter.js +81 -0
- package/src/engine/scripting/PixoScriptLibrary.js +704 -0
- package/src/engine/shaders/effects/index.js +450 -0
- package/src/engine/shaders/fs.js +222 -0
- package/src/engine/shaders/particles/fs.js +41 -0
- package/src/engine/shaders/particles/vs.js +61 -0
- package/src/engine/shaders/picker/fs.js +34 -0
- package/src/engine/shaders/picker/init.js +62 -0
- package/src/engine/shaders/picker/vs.js +42 -0
- package/src/engine/shaders/pxsl/README.md +250 -0
- package/src/engine/shaders/pxsl/index.js +25 -0
- package/src/engine/shaders/pxsl/library.js +608 -0
- package/src/engine/shaders/pxsl/manager.js +338 -0
- package/src/engine/shaders/pxsl/specification.js +363 -0
- package/src/engine/shaders/pxsl/transpiler.js +753 -0
- package/src/engine/shaders/skybox/cosmic/fs.js +147 -0
- package/src/engine/shaders/skybox/cosmic/vs.js +23 -0
- package/src/engine/shaders/skybox/matrix/fs.js +127 -0
- package/src/engine/shaders/skybox/matrix/vs.js +23 -0
- package/src/engine/shaders/skybox/morning/fs.js +109 -0
- package/src/engine/shaders/skybox/morning/vs.js +23 -0
- package/src/engine/shaders/skybox/neon/fs.js +119 -0
- package/src/engine/shaders/skybox/neon/vs.js +23 -0
- package/src/engine/shaders/skybox/sky/fs.js +114 -0
- package/src/engine/shaders/skybox/sky/vs.js +23 -0
- package/src/engine/shaders/skybox/sunset/fs.js +101 -0
- package/src/engine/shaders/skybox/sunset/vs.js +23 -0
- package/src/engine/shaders/transition/blur/fs.js +42 -0
- package/src/engine/shaders/transition/blur/vs.js +26 -0
- package/src/engine/shaders/transition/cross/fs.js +36 -0
- package/src/engine/shaders/transition/cross/vs.js +26 -0
- package/src/engine/shaders/transition/crossBlur/fs.js +41 -0
- package/src/engine/shaders/transition/crossBlur/vs.js +25 -0
- package/src/engine/shaders/transition/dissolve/fs.js +78 -0
- package/src/engine/shaders/transition/dissolve/vs.js +24 -0
- package/src/engine/shaders/transition/fade/fs.js +31 -0
- package/src/engine/shaders/transition/fade/vs.js +27 -0
- package/src/engine/shaders/transition/iris/fs.js +52 -0
- package/src/engine/shaders/transition/iris/vs.js +24 -0
- package/src/engine/shaders/transition/pixelate/fs.js +44 -0
- package/src/engine/shaders/transition/pixelate/vs.js +24 -0
- package/src/engine/shaders/transition/slide/fs.js +53 -0
- package/src/engine/shaders/transition/slide/vs.js +24 -0
- package/src/engine/shaders/transition/swirl/fs.js +39 -0
- package/src/engine/shaders/transition/swirl/vs.js +26 -0
- package/src/engine/shaders/transition/wipe/fs.js +50 -0
- package/src/engine/shaders/transition/wipe/vs.js +24 -0
- package/src/engine/shaders/vs.js +60 -0
- package/src/engine/utils/CameraController.js +506 -0
- package/src/engine/utils/ObjHelper.js +551 -0
- package/src/engine/utils/debug-logger.js +110 -0
- package/src/engine/utils/enums.js +305 -0
- package/src/engine/utils/generator.js +156 -0
- package/src/engine/utils/index.js +21 -0
- package/src/engine/utils/loaders/ActionLoader.js +77 -0
- package/src/engine/utils/loaders/AudioLoader.js +157 -0
- package/src/engine/utils/loaders/EventLoader.js +66 -0
- package/src/engine/utils/loaders/ObjectLoader.js +67 -0
- package/src/engine/utils/loaders/SpriteLoader.js +77 -0
- package/src/engine/utils/loaders/TilesetLoader.js +103 -0
- package/src/engine/utils/loaders/index.js +21 -0
- package/src/engine/utils/math/matrix4.js +367 -0
- package/src/engine/utils/math/vector.js +458 -0
- package/src/engine/utils/obj/_old_js/index.js +46 -0
- package/src/engine/utils/obj/_old_js/layout.js +308 -0
- package/src/engine/utils/obj/_old_js/material.js +711 -0
- package/src/engine/utils/obj/_old_js/mesh.js +761 -0
- package/src/engine/utils/obj/_old_js/utils.js +647 -0
- package/src/engine/utils/obj/index.js +24 -0
- package/src/engine/utils/obj/js/index.js +277 -0
- package/src/engine/utils/obj/js/loader.js +232 -0
- package/src/engine/utils/obj/layout.js +246 -0
- package/src/engine/utils/obj/material.js +665 -0
- package/src/engine/utils/obj/mesh.js +657 -0
- package/src/engine/utils/obj/ts/index.ts +72 -0
- package/src/engine/utils/obj/ts/layout.ts +265 -0
- package/src/engine/utils/obj/ts/material.ts +760 -0
- package/src/engine/utils/obj/ts/mesh.ts +785 -0
- package/src/engine/utils/obj/ts/utils.ts +501 -0
- package/src/engine/utils/obj/utils.js +428 -0
- package/src/engine/utils/resources.js +18 -0
- package/src/index.jsx +55 -0
- package/src/spritz/player.js +18 -0
- package/src/spritz/readme.md +18 -0
- package/LICENSE +0 -437
- package/dist/bundle.js.LICENSE.txt +0 -31
package/README.md
CHANGED
|
@@ -1,302 +1,52 @@
|
|
|
1
|
-
#
|
|
1
|
+
# pixospritz-core
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The core WebGL-based game engine for PixoSpritz.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Features
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- WebGL2 rendering with shader support
|
|
8
|
+
- Sprite and tileset management
|
|
9
|
+
- Map loading and rendering
|
|
10
|
+
- Entity/Actor system
|
|
11
|
+
- Event system (keyboard, mouse, touch, gamepad)
|
|
12
|
+
- Audio engine with BPM analysis
|
|
13
|
+
- Cutscene player with DSL support
|
|
14
|
+
- HUD/UI overlay system
|
|
8
15
|
|
|
9
|
-
|
|
16
|
+
## Installation
|
|
10
17
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
- **Rendering pipeline**: WebGL with skybox shaders, tiles, sprites, models, and transitions.
|
|
14
|
-
- **Modes, maps, and zones**: Define gameplay modes, spatial layouts, and interactive elements.
|
|
15
|
-
- **Extensibility**: Supports multiplayer, editor integration, and runtime customization.
|
|
16
|
-
|
|
17
|
-
This guide uses the `example/spritz/` folder as a complete example. We'll walk through setting up, configuring, and running a spritz package, explaining how each component works.
|
|
18
|
-
|
|
19
|
-
### Prerequisites
|
|
20
|
-
|
|
21
|
-
- Node.js and npm installed.
|
|
22
|
-
- Basic knowledge of JSON, Lua scripting, and game development concepts.
|
|
23
|
-
- The Pixospritz engine codebase (assumed cloned in `/Users/kderbyma/Git/calliope-pixos`).
|
|
24
|
-
|
|
25
|
-
### Step 1: Understanding the Spritz Package Structure
|
|
26
|
-
|
|
27
|
-
A spritz package is a ZIP archive (or folder) with a specific structure. The `example/spritz/` folder is our example package. Key folders:
|
|
28
|
-
|
|
29
|
-
- `manifest.json`: Main config file defining initial zones, modes, maps, etc.
|
|
30
|
-
- `audio/`: Sound files (e.g., MP3s).
|
|
31
|
-
- `callbacks/`: Lua scripts for reusable functions (e.g., door interactions).
|
|
32
|
-
- `maps/`: Zone layouts with tiles, objects, and scripts.
|
|
33
|
-
- `models/`: 3D models (OBJ/MTL files).
|
|
34
|
-
- `modes/`: Gameplay modes with setup/teardown/update scripts.
|
|
35
|
-
- `sprites/`: Character/object definitions with animations.
|
|
36
|
-
- `textures/`: Images for sprites, tiles, etc.
|
|
37
|
-
- `tilesets/`: Tile definitions with geometry and textures.
|
|
38
|
-
- `triggers/`: Conditional scripts for events (e.g., zone entry).
|
|
39
|
-
|
|
40
|
-
The package is loaded by the engine, which parses JSON configs and executes Lua scripts.
|
|
41
|
-
|
|
42
|
-
### Step 2: Setting Up the Package
|
|
43
|
-
|
|
44
|
-
1. **Create the Folder Structure**:
|
|
45
|
-
- Copy `example/spritz/` to a new folder, e.g., `my-spritz/`.
|
|
46
|
-
- Ensure the structure matches the example.
|
|
47
|
-
|
|
48
|
-
2. **Install Dependencies**:
|
|
49
|
-
- In the root project directory (`/Users/kderbyma/Git/calliope-pixos`), run `npm install`.
|
|
50
|
-
- For the example, navigate to `example/` and run `npm install` if needed.
|
|
51
|
-
|
|
52
|
-
3. **Run the Engine**:
|
|
53
|
-
- Start the Pixospritz engine: `npm run dev` in the root.
|
|
54
|
-
- Open `http://localhost:3000` (or configured port) in a browser.
|
|
55
|
-
- Load the spritz package via the editor or directly (engine supports package loading).
|
|
56
|
-
|
|
57
|
-
The example package loads automatically in the `example/` app, demonstrating a dungeon room with explore/tactics modes.
|
|
58
|
-
|
|
59
|
-
### Step 3: Configuring the Manifest
|
|
60
|
-
|
|
61
|
-
The `manifest.json` is the entry point. It defines global settings.
|
|
62
|
-
|
|
63
|
-
Example from `example/spritz/manifest.json`:
|
|
64
|
-
|
|
65
|
-
```json
|
|
66
|
-
{
|
|
67
|
-
"initialZones": ["base"],
|
|
68
|
-
"modes": ["explore", "fight", "debug", "tactics"],
|
|
69
|
-
"maps": ["room", "dungeon-top", "dungeon-bottom"],
|
|
70
|
-
"tilesets": ["common", "sewer"],
|
|
71
|
-
"network": {
|
|
72
|
-
"enabled": true,
|
|
73
|
-
"url": "ws://localhost:8080",
|
|
74
|
-
"authority": "server"
|
|
75
|
-
},
|
|
76
|
-
"sprites": ["characters/male", "npc/air-knight"],
|
|
77
|
-
"objects": [],
|
|
78
|
-
"textures": [],
|
|
79
|
-
"fonts": [],
|
|
80
|
-
"audio": []
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
- `initialZones`: Starting zones (maps) to load.
|
|
85
|
-
- `modes`: Available gameplay modes (defined in `modes/`).
|
|
86
|
-
- `maps`: Map IDs (folders in `maps/`).
|
|
87
|
-
- `tilesets`: Tileset IDs (folders in `tilesets/`).
|
|
88
|
-
- `network`: Multiplayer settings (WebSocket URL).
|
|
89
|
-
- `sprites`: Sprite definitions (JSON files in `sprites/`).
|
|
90
|
-
- Other arrays: Lists assets (populated by engine from folders).
|
|
91
|
-
|
|
92
|
-
**How it Works**: The engine loads the manifest, initializes zones/maps, and sets up networking. Customize for your game (e.g., add new modes/maps).
|
|
93
|
-
|
|
94
|
-
**Tutorial Tip**: Change `"initialZones": ["my-zone"]` and create a new map folder. Reload the engine to test.
|
|
95
|
-
|
|
96
|
-
### Step 4: Creating Maps
|
|
97
|
-
|
|
98
|
-
Maps define spatial layouts using tilesets. Each map is a folder in `maps/` with `map.json` and `cells.json`.
|
|
99
|
-
|
|
100
|
-
Example: `example/spritz/maps/room/map.json`:
|
|
101
|
-
|
|
102
|
-
```json
|
|
103
|
-
{
|
|
104
|
-
"extends": ["dungeon-top", "dungeon-bottom"],
|
|
105
|
-
"tileset": "sewer",
|
|
106
|
-
"bounds": [0, 0, 17, 19],
|
|
107
|
-
"scripts": [
|
|
108
|
-
{
|
|
109
|
-
"id": "load-spritz",
|
|
110
|
-
"trigger": "zone/room_clear_path"
|
|
111
|
-
}
|
|
112
|
-
],
|
|
113
|
-
"selectTrigger": "tile/select_test",
|
|
114
|
-
"lights": [
|
|
115
|
-
{
|
|
116
|
-
"id": "spot-light",
|
|
117
|
-
"pos": [2, 17, 0],
|
|
118
|
-
"color": [1, 0, 0],
|
|
119
|
-
"direction": [0.4, 0.8, 1],
|
|
120
|
-
"attenuation": [0.9, 0.9, 0.9],
|
|
121
|
-
"enabled": true
|
|
122
|
-
}
|
|
123
|
-
]
|
|
124
|
-
}
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
- `extends`: Inherits from other maps.
|
|
128
|
-
- `tileset`: References a tileset.
|
|
129
|
-
- `bounds`: Map size.
|
|
130
|
-
- `scripts`: Lua triggers to run.
|
|
131
|
-
- `lights`: Lighting config (position, color, etc.).
|
|
132
|
-
|
|
133
|
-
`cells.json` defines tile placements (empty in example, uses extensions).
|
|
134
|
-
|
|
135
|
-
**How it Works**: Engine renders tiles based on tileset, applies lights, and runs scripts on load. Maps support procedural generation via Lua.
|
|
136
|
-
|
|
137
|
-
**Tutorial Tip**: Add a new tile in `cells.json` (e.g., `{"cells": [[{"tile": "FLOOR", "x": 0, "y": 0}]]}`). Reload to see changes.
|
|
138
|
-
|
|
139
|
-
### Step 5: Defining Sprites
|
|
140
|
-
|
|
141
|
-
Sprites are animated entities. Defined in JSON files in `sprites/`.
|
|
142
|
-
|
|
143
|
-
Example: `example/spritz/sprites/characters/male.json`:
|
|
144
|
-
|
|
145
|
-
```json
|
|
146
|
-
{
|
|
147
|
-
"type": "avatar",
|
|
148
|
-
"src": "character.png",
|
|
149
|
-
"portraitSrc": "hero_portrait.gif",
|
|
150
|
-
"sheetSize": [96, 384],
|
|
151
|
-
"tileSize": [24, 48],
|
|
152
|
-
"state": "intro",
|
|
153
|
-
"gender": "male",
|
|
154
|
-
"frames": {
|
|
155
|
-
"N": [[0, 192], [24, 192], ...]
|
|
156
|
-
},
|
|
157
|
-
"drawOffset": { "N": [-0.25, -0.15, -1] },
|
|
158
|
-
"hotspotOffset": [0.5, 0.5, 0],
|
|
159
|
-
"bindCamera": true,
|
|
160
|
-
"enableSpeech": true,
|
|
161
|
-
"selectTrigger": "sprite/test_select",
|
|
162
|
-
"cutouts": { "happy": "cutout_happy.png" }
|
|
163
|
-
}
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
- `type`: Entity type (avatar, npc, etc.).
|
|
167
|
-
- `src`: Texture image.
|
|
168
|
-
- `frames`: Animation frames by direction (N, E, S, W, etc.).
|
|
169
|
-
- `drawOffset`: Rendering adjustments.
|
|
170
|
-
- `bindCamera`: Follows player.
|
|
171
|
-
- `selectTrigger`: Lua script on selection.
|
|
172
|
-
|
|
173
|
-
**How it Works**: Engine loads textures, animates frames, handles interactions. Sprites can be controlled by modes or scripts.
|
|
174
|
-
|
|
175
|
-
**Tutorial Tip**: Add a new sprite (e.g., copy and modify for "female"). Update `manifest.json` sprites array.
|
|
176
|
-
|
|
177
|
-
### Step 6: Configuring Tilesets
|
|
178
|
-
|
|
179
|
-
Tilesets define tiles with textures and geometry. Folder in `tilesets/` with `tileset.json`.
|
|
180
|
-
|
|
181
|
-
Example: `example/spritz/tilesets/common/tileset.json`:
|
|
182
|
-
|
|
183
|
-
- `textures`: Maps tile names to image coords (e.g., `"FLOOR": [1, 1]`).
|
|
184
|
-
- `geometry`: 3D models for tiles (vertices, surfaces, walkable polys).
|
|
185
|
-
- `tiles`: Combines geometry/textures (e.g., `"FLOOR": ["FLAT_ALL", "FLOOR", 0]`).
|
|
186
|
-
|
|
187
|
-
**How it Works**: Engine renders tiles as 3D meshes with textures. Supports stairs, walls, etc.
|
|
188
|
-
|
|
189
|
-
**Tutorial Tip**: Add a new tile (e.g., `"MY_TILE": ["FLAT_ALL", "FLOOR", 0]`). Use in a map.
|
|
190
|
-
|
|
191
|
-
### Step 7: Defining Modes
|
|
192
|
-
|
|
193
|
-
Modes control gameplay logic. Folder in `modes/` with `mode.json` and Lua scripts.
|
|
194
|
-
|
|
195
|
-
Example: `example/spritz/modes/explore/mode.json`:
|
|
196
|
-
|
|
197
|
-
```json
|
|
198
|
-
{
|
|
199
|
-
"name": "explore",
|
|
200
|
-
"update": "update.lua",
|
|
201
|
-
"setup": "setup.lua"
|
|
202
|
-
}
|
|
18
|
+
```bash
|
|
19
|
+
npm install pixospritz-core
|
|
203
20
|
```
|
|
204
21
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
**How it Works**: Engine switches modes, calling Lua functions. Modes handle input, AI, etc.
|
|
22
|
+
## Usage
|
|
208
23
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
### Step 8: Using Triggers, Callbacks, Actions, and Events
|
|
212
|
-
|
|
213
|
-
- **Triggers**: Conditional scripts (e.g., `triggers/zone/room_load.lua` runs on zone entry).
|
|
214
|
-
- **Callbacks**: Reusable functions (e.g., `callbacks/door_opened.lua` for door logic).
|
|
215
|
-
- **Actions**: Engine-defined behaviors (move, chat, etc.).
|
|
216
|
-
- **Events**: Async logic (camera, menu, etc.).
|
|
217
|
-
|
|
218
|
-
Example Lua in `triggers/zone/room_load.lua`:
|
|
24
|
+
```javascript
|
|
25
|
+
import { RenderManager, ActionQueue, GamePad } from 'pixospritz-core';
|
|
219
26
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
27
|
+
// Initialize the engine
|
|
28
|
+
const renderer = new RenderManager(canvas, gl);
|
|
29
|
+
const gamepad = new GamePad();
|
|
30
|
+
const actions = new ActionQueue();
|
|
223
31
|
```
|
|
224
32
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
**Tutorial Tip**: Add a trigger (e.g., on sprite click). Use `pixos.log()` for debugging.
|
|
228
|
-
|
|
229
|
-
### Step 9: Scripting with Lua
|
|
230
|
-
|
|
231
|
-
Pixospritz uses Lua for logic. API includes:
|
|
232
|
-
|
|
233
|
-
- `pixos.get_world()`: Access game state.
|
|
234
|
-
- `pixos.set_mode()`: Switch modes.
|
|
235
|
-
- `pixos.create_particle()`: Effects.
|
|
236
|
-
- Full engine access (skybox, audio, etc.).
|
|
237
|
-
|
|
238
|
-
Example from `modes/explore/setup.lua`:
|
|
33
|
+
## Package Structure
|
|
239
34
|
|
|
240
|
-
```lua
|
|
241
|
-
pixos.register_mode('explore', {
|
|
242
|
-
setup = function(params)
|
|
243
|
-
pixos.log('explore: setup called')
|
|
244
|
-
-- Focus camera on avatar
|
|
245
|
-
end
|
|
246
|
-
})
|
|
247
35
|
```
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
**How it Works**: Engine loads assets on demand. Reference in JSON/Lua.
|
|
260
|
-
|
|
261
|
-
**Tutorial Tip**: Add a new texture (e.g., "my-texture.png"). Use in a sprite.
|
|
262
|
-
|
|
263
|
-
### Step 11: Running and Testing the Example
|
|
264
|
-
|
|
265
|
-
1. Start engine: `npm run dev`.
|
|
266
|
-
2. Load package in browser/editor.
|
|
267
|
-
3. Explore the room: Move avatar, trigger events.
|
|
268
|
-
4. Switch modes (e.g., tactics via trigger).
|
|
269
|
-
5. Use editor for debugging (maps, sprites).
|
|
270
|
-
|
|
271
|
-
The example demonstrates a full dungeon scene with lighting, sprites, and scripting.
|
|
272
|
-
|
|
273
|
-
### Installation
|
|
274
|
-
|
|
275
|
-
The plugin can be installed from NPM via:
|
|
276
|
-
|
|
277
|
-
npm install calliope-pixos
|
|
278
|
-
|
|
279
|
-
### Usage
|
|
280
|
-
|
|
281
|
-
Inside of your `_calliope/app/config/plugins/index.jsx` file, add the following:
|
|
282
|
-
|
|
283
|
-
```javascript
|
|
284
|
-
// Import the module at the top
|
|
285
|
-
import Pixos from "calliope-pixos";
|
|
286
|
-
// and then further down inside of the switch statement add the following
|
|
287
|
-
// ...
|
|
288
|
-
case "pixos":
|
|
289
|
-
let Plugin = Pixos['calliope-pixos'].default;
|
|
290
|
-
return <Plugin />;
|
|
291
|
-
// ...
|
|
36
|
+
src/
|
|
37
|
+
├── components/ # React components (WebGLView)
|
|
38
|
+
├── engine/
|
|
39
|
+
│ ├── actions/ # Action system (prompt, delay, move, etc.)
|
|
40
|
+
│ ├── core/ # Core systems (render, HUD, audio)
|
|
41
|
+
│ ├── dynamic/ # Dynamic assets (sprites, maps, actors)
|
|
42
|
+
│ ├── events/ # Event handlers (menu, keyboard)
|
|
43
|
+
│ ├── scripting/ # Script execution engine
|
|
44
|
+
│ ├── shaders/ # GLSL shaders
|
|
45
|
+
│ └── utils/ # Utility functions
|
|
46
|
+
└── spritz/ # Spritz player integration
|
|
292
47
|
```
|
|
293
48
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
All paths are relative to the a core package folder (see /example/spritz) from the public directory when loading asssets. Place any of your assets used such as tilesets, sprites, and fonts and place them within the package folder directories for proper fetching. Please see example for how to load and extend assets.
|
|
297
|
-
|
|
298
|
-
### LICENSE
|
|
299
|
-
|
|
300
|
-
<a rel="license" href="http://creativecommons.org/licenses/by-nc/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc/4.0/">Creative Commons Attribution-NonCommercial 4.0 International License</a>.
|
|
49
|
+
## Dependencies
|
|
301
50
|
|
|
302
|
-
|
|
51
|
+
- `pixospritz-math` - Math utilities
|
|
52
|
+
- `pixoscript` - Scripting engine
|