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.
Files changed (157) hide show
  1. package/README.md +36 -286
  2. package/dist/bundle.js +13 -3
  3. package/dist/bundle.js.map +1 -1
  4. package/dist/style.css +1 -0
  5. package/package.json +43 -44
  6. package/src/components/WebGLView.jsx +318 -0
  7. package/src/css/pixos.css +372 -0
  8. package/src/engine/actions/animate.js +41 -0
  9. package/src/engine/actions/changezone.js +135 -0
  10. package/src/engine/actions/chat.js +109 -0
  11. package/src/engine/actions/dialogue.js +90 -0
  12. package/src/engine/actions/face.js +22 -0
  13. package/src/engine/actions/greeting.js +28 -0
  14. package/src/engine/actions/interact.js +86 -0
  15. package/src/engine/actions/move.js +67 -0
  16. package/src/engine/actions/patrol.js +109 -0
  17. package/src/engine/actions/prompt.js +185 -0
  18. package/src/engine/actions/script.js +42 -0
  19. package/src/engine/core/audio/AudioSystem.js +543 -0
  20. package/src/engine/core/cutscene/PxcPlayer.js +956 -0
  21. package/src/engine/core/cutscene/manager.js +243 -0
  22. package/src/engine/core/database/index.js +75 -0
  23. package/src/engine/core/debug/index.js +371 -0
  24. package/src/engine/core/hud/index.js +765 -0
  25. package/src/engine/core/index.js +540 -0
  26. package/src/engine/core/input/gamepad/Controller.js +71 -0
  27. package/src/engine/core/input/gamepad/ControllerButtons.js +231 -0
  28. package/src/engine/core/input/gamepad/ControllerStick.js +173 -0
  29. package/src/engine/core/input/gamepad/index.js +592 -0
  30. package/src/engine/core/input/keyboard.js +196 -0
  31. package/src/engine/core/input/manager.js +485 -0
  32. package/src/engine/core/input/mouse.js +203 -0
  33. package/src/engine/core/input/touch.js +175 -0
  34. package/src/engine/core/mode/manager.js +199 -0
  35. package/src/engine/core/net/manager.js +535 -0
  36. package/src/engine/core/queue/action.js +83 -0
  37. package/src/engine/core/queue/event.js +82 -0
  38. package/src/engine/core/queue/index.js +44 -0
  39. package/src/engine/core/queue/loadable.js +33 -0
  40. package/src/engine/core/render/CameraEffects.js +494 -0
  41. package/src/engine/core/render/FrustumCuller.js +417 -0
  42. package/src/engine/core/render/LODManager.js +285 -0
  43. package/src/engine/core/render/ParticleManager.js +529 -0
  44. package/src/engine/core/render/TextureAtlas.js +465 -0
  45. package/src/engine/core/render/camera.js +338 -0
  46. package/src/engine/core/render/light.js +197 -0
  47. package/src/engine/core/render/manager.js +1079 -0
  48. package/src/engine/core/render/shaders.js +110 -0
  49. package/src/engine/core/render/skybox.js +342 -0
  50. package/src/engine/core/resource/manager.js +133 -0
  51. package/src/engine/core/resource/object.js +611 -0
  52. package/src/engine/core/resource/texture.js +103 -0
  53. package/src/engine/core/resource/tileset.js +177 -0
  54. package/src/engine/core/scene/avatar.js +215 -0
  55. package/src/engine/core/scene/speech.js +138 -0
  56. package/src/engine/core/scene/sprite.js +702 -0
  57. package/src/engine/core/scene/spritz.js +189 -0
  58. package/src/engine/core/scene/world.js +681 -0
  59. package/src/engine/core/scene/zone.js +1167 -0
  60. package/src/engine/core/store/index.js +110 -0
  61. package/src/engine/dynamic/animatedSprite.js +64 -0
  62. package/src/engine/dynamic/animatedTile.js +98 -0
  63. package/src/engine/dynamic/avatar.js +110 -0
  64. package/src/engine/dynamic/map.js +174 -0
  65. package/src/engine/dynamic/sprite.js +255 -0
  66. package/src/engine/dynamic/spritz.js +119 -0
  67. package/src/engine/events/EventSystem.js +609 -0
  68. package/src/engine/events/camera.js +142 -0
  69. package/src/engine/events/chat.js +75 -0
  70. package/src/engine/events/menu.js +186 -0
  71. package/src/engine/scripting/CallbackManager.js +514 -0
  72. package/src/engine/scripting/PixoScriptInterpreter.js +81 -0
  73. package/src/engine/scripting/PixoScriptLibrary.js +704 -0
  74. package/src/engine/shaders/effects/index.js +450 -0
  75. package/src/engine/shaders/fs.js +222 -0
  76. package/src/engine/shaders/particles/fs.js +41 -0
  77. package/src/engine/shaders/particles/vs.js +61 -0
  78. package/src/engine/shaders/picker/fs.js +34 -0
  79. package/src/engine/shaders/picker/init.js +62 -0
  80. package/src/engine/shaders/picker/vs.js +42 -0
  81. package/src/engine/shaders/pxsl/README.md +250 -0
  82. package/src/engine/shaders/pxsl/index.js +25 -0
  83. package/src/engine/shaders/pxsl/library.js +608 -0
  84. package/src/engine/shaders/pxsl/manager.js +338 -0
  85. package/src/engine/shaders/pxsl/specification.js +363 -0
  86. package/src/engine/shaders/pxsl/transpiler.js +753 -0
  87. package/src/engine/shaders/skybox/cosmic/fs.js +147 -0
  88. package/src/engine/shaders/skybox/cosmic/vs.js +23 -0
  89. package/src/engine/shaders/skybox/matrix/fs.js +127 -0
  90. package/src/engine/shaders/skybox/matrix/vs.js +23 -0
  91. package/src/engine/shaders/skybox/morning/fs.js +109 -0
  92. package/src/engine/shaders/skybox/morning/vs.js +23 -0
  93. package/src/engine/shaders/skybox/neon/fs.js +119 -0
  94. package/src/engine/shaders/skybox/neon/vs.js +23 -0
  95. package/src/engine/shaders/skybox/sky/fs.js +114 -0
  96. package/src/engine/shaders/skybox/sky/vs.js +23 -0
  97. package/src/engine/shaders/skybox/sunset/fs.js +101 -0
  98. package/src/engine/shaders/skybox/sunset/vs.js +23 -0
  99. package/src/engine/shaders/transition/blur/fs.js +42 -0
  100. package/src/engine/shaders/transition/blur/vs.js +26 -0
  101. package/src/engine/shaders/transition/cross/fs.js +36 -0
  102. package/src/engine/shaders/transition/cross/vs.js +26 -0
  103. package/src/engine/shaders/transition/crossBlur/fs.js +41 -0
  104. package/src/engine/shaders/transition/crossBlur/vs.js +25 -0
  105. package/src/engine/shaders/transition/dissolve/fs.js +78 -0
  106. package/src/engine/shaders/transition/dissolve/vs.js +24 -0
  107. package/src/engine/shaders/transition/fade/fs.js +31 -0
  108. package/src/engine/shaders/transition/fade/vs.js +27 -0
  109. package/src/engine/shaders/transition/iris/fs.js +52 -0
  110. package/src/engine/shaders/transition/iris/vs.js +24 -0
  111. package/src/engine/shaders/transition/pixelate/fs.js +44 -0
  112. package/src/engine/shaders/transition/pixelate/vs.js +24 -0
  113. package/src/engine/shaders/transition/slide/fs.js +53 -0
  114. package/src/engine/shaders/transition/slide/vs.js +24 -0
  115. package/src/engine/shaders/transition/swirl/fs.js +39 -0
  116. package/src/engine/shaders/transition/swirl/vs.js +26 -0
  117. package/src/engine/shaders/transition/wipe/fs.js +50 -0
  118. package/src/engine/shaders/transition/wipe/vs.js +24 -0
  119. package/src/engine/shaders/vs.js +60 -0
  120. package/src/engine/utils/CameraController.js +506 -0
  121. package/src/engine/utils/ObjHelper.js +551 -0
  122. package/src/engine/utils/debug-logger.js +110 -0
  123. package/src/engine/utils/enums.js +305 -0
  124. package/src/engine/utils/generator.js +156 -0
  125. package/src/engine/utils/index.js +21 -0
  126. package/src/engine/utils/loaders/ActionLoader.js +77 -0
  127. package/src/engine/utils/loaders/AudioLoader.js +157 -0
  128. package/src/engine/utils/loaders/EventLoader.js +66 -0
  129. package/src/engine/utils/loaders/ObjectLoader.js +67 -0
  130. package/src/engine/utils/loaders/SpriteLoader.js +77 -0
  131. package/src/engine/utils/loaders/TilesetLoader.js +103 -0
  132. package/src/engine/utils/loaders/index.js +21 -0
  133. package/src/engine/utils/math/matrix4.js +367 -0
  134. package/src/engine/utils/math/vector.js +458 -0
  135. package/src/engine/utils/obj/_old_js/index.js +46 -0
  136. package/src/engine/utils/obj/_old_js/layout.js +308 -0
  137. package/src/engine/utils/obj/_old_js/material.js +711 -0
  138. package/src/engine/utils/obj/_old_js/mesh.js +761 -0
  139. package/src/engine/utils/obj/_old_js/utils.js +647 -0
  140. package/src/engine/utils/obj/index.js +24 -0
  141. package/src/engine/utils/obj/js/index.js +277 -0
  142. package/src/engine/utils/obj/js/loader.js +232 -0
  143. package/src/engine/utils/obj/layout.js +246 -0
  144. package/src/engine/utils/obj/material.js +665 -0
  145. package/src/engine/utils/obj/mesh.js +657 -0
  146. package/src/engine/utils/obj/ts/index.ts +72 -0
  147. package/src/engine/utils/obj/ts/layout.ts +265 -0
  148. package/src/engine/utils/obj/ts/material.ts +760 -0
  149. package/src/engine/utils/obj/ts/mesh.ts +785 -0
  150. package/src/engine/utils/obj/ts/utils.ts +501 -0
  151. package/src/engine/utils/obj/utils.js +428 -0
  152. package/src/engine/utils/resources.js +18 -0
  153. package/src/index.jsx +55 -0
  154. package/src/spritz/player.js +18 -0
  155. package/src/spritz/readme.md +18 -0
  156. package/LICENSE +0 -437
  157. package/dist/bundle.js.LICENSE.txt +0 -31
@@ -0,0 +1,114 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ \* */
13
+ export default function fs() {
14
+ return `
15
+ precision mediump float;
16
+
17
+ uniform samplerCube uSkybox;
18
+ uniform mat4 uViewDirectionProjectionInverse;
19
+ uniform float uTime;
20
+
21
+ varying vec4 vPosition;
22
+
23
+ // Hash function
24
+ float hash(vec2 p) {
25
+ return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
26
+ }
27
+
28
+ // Value noise
29
+ float noise(vec2 p) {
30
+ vec2 i = floor(p);
31
+ vec2 f = fract(p);
32
+ f = f * f * (3.0 - 2.0 * f);
33
+
34
+ float a = hash(i);
35
+ float b = hash(i + vec2(1.0, 0.0));
36
+ float c = hash(i + vec2(0.0, 1.0));
37
+ float d = hash(i + vec2(1.0, 1.0));
38
+
39
+ return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
40
+ }
41
+
42
+ // FBM for clouds
43
+ float fbm(vec2 p) {
44
+ float value = 0.0;
45
+ float amplitude = 0.5;
46
+ for (int i = 0; i < 5; i++) {
47
+ value += amplitude * noise(p);
48
+ amplitude *= 0.5;
49
+ p *= 2.0;
50
+ }
51
+ return value;
52
+ }
53
+
54
+ void main() {
55
+ vec4 t = uViewDirectionProjectionInverse * vPosition;
56
+ vec3 dir = normalize(t.xyz / t.w);
57
+ float time = uTime;
58
+
59
+ // Height-based gradient for daytime sky
60
+ float y = dir.y * 0.5 + 0.5;
61
+
62
+ // Sun position (high in sky)
63
+ vec3 sunDir = normalize(vec3(0.3, 0.8, 0.5));
64
+ float sunDot = dot(dir, sunDir);
65
+
66
+ // Daytime sky colors
67
+ vec3 zenithColor = vec3(0.2, 0.4, 0.85); // Deep blue at top
68
+ vec3 horizonColor = vec3(0.6, 0.75, 0.95); // Light blue at horizon
69
+ vec3 sunColor = vec3(1.0, 1.0, 0.95); // Bright white sun
70
+
71
+ // Sky gradient using realistic Rayleigh scattering approximation
72
+ vec3 color = mix(horizonColor, zenithColor, pow(y, 0.5));
73
+
74
+ // Sun atmospheric scattering
75
+ float scatter = pow(max(0.0, sunDot), 2.0);
76
+ color = mix(color, vec3(0.9, 0.95, 1.0), scatter * 0.2);
77
+
78
+ // Bright sun disc with soft edge
79
+ float sun = smoothstep(0.9995, 1.0, sunDot);
80
+ color = mix(color, sunColor, sun);
81
+
82
+ // Sun glare
83
+ float glare = pow(max(0.0, sunDot), 32.0) * 0.5;
84
+ color += sunColor * glare;
85
+
86
+ // Animated cumulus clouds
87
+ vec2 cloudUV = dir.xz / (abs(dir.y) + 0.2) + time * 0.01;
88
+
89
+ // Multiple cloud layers
90
+ float clouds1 = fbm(cloudUV * 1.5);
91
+ float clouds2 = fbm(cloudUV * 3.0 + vec2(100.0, 0.0));
92
+
93
+ // Shape clouds
94
+ clouds1 = smoothstep(0.4, 0.7, clouds1);
95
+ clouds2 = smoothstep(0.5, 0.75, clouds2) * 0.5;
96
+ float clouds = max(clouds1, clouds2);
97
+
98
+ // Cloud color with some shading
99
+ vec3 cloudLight = vec3(1.0, 1.0, 1.0);
100
+ vec3 cloudShadow = vec3(0.7, 0.75, 0.85);
101
+ vec3 cloudColor = mix(cloudShadow, cloudLight, fbm(cloudUV * 4.0));
102
+
103
+ // Apply clouds more in middle sky
104
+ float cloudMask = smoothstep(0.15, 0.5, y) * smoothstep(1.0, 0.6, y);
105
+ color = mix(color, cloudColor, clouds * cloudMask * 0.85);
106
+
107
+ // Atmospheric perspective (haze near horizon)
108
+ float haze = exp(-y * 5.0);
109
+ color = mix(color, horizonColor * 1.1, haze * 0.3);
110
+
111
+ gl_FragColor = vec4(color, 1.0);
112
+ }
113
+ `;
114
+ }
@@ -0,0 +1,23 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ \* */
13
+
14
+ export default function vs() {
15
+ return `
16
+ attribute vec4 aPosition;
17
+ varying vec4 vPosition;
18
+ void main() {
19
+ vPosition = aPosition;
20
+ gl_Position = aPosition;
21
+ }
22
+ `;
23
+ }
@@ -0,0 +1,101 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ \* */
13
+
14
+ export default function fs() {
15
+ return `
16
+ precision mediump float;
17
+
18
+ uniform samplerCube uSkybox;
19
+ uniform mat4 uViewDirectionProjectionInverse;
20
+ uniform float uTime;
21
+
22
+ varying vec4 vPosition;
23
+
24
+ // Hash function for clouds
25
+ float hash(vec2 p) {
26
+ return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
27
+ }
28
+
29
+ // Value noise for clouds
30
+ float noise(vec2 p) {
31
+ vec2 i = floor(p);
32
+ vec2 f = fract(p);
33
+ f = f * f * (3.0 - 2.0 * f);
34
+
35
+ float a = hash(i);
36
+ float b = hash(i + vec2(1.0, 0.0));
37
+ float c = hash(i + vec2(0.0, 1.0));
38
+ float d = hash(i + vec2(1.0, 1.0));
39
+
40
+ return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
41
+ }
42
+
43
+ // Fractal brownian motion for realistic clouds
44
+ float fbm(vec2 p) {
45
+ float value = 0.0;
46
+ float amplitude = 0.5;
47
+ float frequency = 1.0;
48
+ for (int i = 0; i < 4; i++) {
49
+ value += amplitude * noise(p * frequency);
50
+ amplitude *= 0.5;
51
+ frequency *= 2.0;
52
+ }
53
+ return value;
54
+ }
55
+
56
+ void main() {
57
+ vec4 t = uViewDirectionProjectionInverse * vPosition;
58
+ vec3 dir = normalize(t.xyz / t.w);
59
+
60
+ // Height-based gradient for sunset colors
61
+ float y = dir.y * 0.5 + 0.5; // Normalize to 0-1
62
+
63
+ // Sun position (just above horizon)
64
+ vec3 sunDir = normalize(vec3(0.0, 0.1, -1.0));
65
+ float sunDot = dot(dir, sunDir);
66
+
67
+ // Sunset color palette
68
+ vec3 horizonColor = vec3(1.0, 0.3, 0.1); // Orange-red at horizon
69
+ vec3 skyColor = vec3(0.2, 0.1, 0.4); // Deep purple up high
70
+ vec3 sunColor = vec3(1.0, 0.9, 0.5); // Bright yellow-white sun
71
+ vec3 glowColor = vec3(1.0, 0.5, 0.2); // Orange glow
72
+
73
+ // Base sky gradient
74
+ vec3 color = mix(horizonColor, skyColor, pow(y, 0.8));
75
+
76
+ // Sun glow (larger soft glow)
77
+ float glow = pow(max(0.0, sunDot), 4.0) * 1.5;
78
+ color = mix(color, glowColor, glow);
79
+
80
+ // Bright sun disc
81
+ float sun = pow(max(0.0, sunDot), 256.0) * 2.0;
82
+ color = mix(color, sunColor, min(1.0, sun));
83
+
84
+ // Animated clouds (move slowly)
85
+ float time = uTime * 0.02;
86
+ vec2 cloudUV = dir.xz / (dir.y + 0.5) * 2.0 + time;
87
+ float clouds = fbm(cloudUV * 3.0);
88
+ clouds = smoothstep(0.4, 0.7, clouds);
89
+
90
+ // Cloud color based on sun angle
91
+ vec3 cloudColor = mix(vec3(0.3, 0.1, 0.15), vec3(1.0, 0.6, 0.3), glow + y * 0.5);
92
+ color = mix(color, cloudColor, clouds * (1.0 - y) * 0.6);
93
+
94
+ // Add atmospheric scattering near horizon
95
+ float scatter = exp(-y * 3.0);
96
+ color = mix(color, horizonColor, scatter * 0.3);
97
+
98
+ gl_FragColor = vec4(color, 1.0);
99
+ }
100
+ `;
101
+ }
@@ -0,0 +1,23 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ \* */
13
+
14
+ export default function vs() {
15
+ return `
16
+ attribute vec4 aPosition;
17
+ varying vec4 vPosition;
18
+ void main() {
19
+ vPosition = aPosition;
20
+ gl_Position = aPosition;
21
+ }
22
+ `;
23
+ }
@@ -0,0 +1,42 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ * */
13
+
14
+ // Fragment shader for a radial blur‑mask transition. The edge is softened
15
+ // with smoothstep. uDirection > 0.5 = IN (mask shrinks), else OUT (mask grows).
16
+
17
+ export default function fs() {
18
+ return `
19
+ precision mediump float;
20
+ varying vec2 vUV;
21
+ uniform float uProgress;
22
+ uniform float uDirection;
23
+
24
+ void main() {
25
+ vec2 center = vec2(0.5, 0.5);
26
+ float dist = distance(vUV, center);
27
+
28
+ // Radius grows [0..1] for OUT, shrinks for IN
29
+ float radius = (uDirection > 0.5) ? (1.0 - uProgress) : uProgress;
30
+
31
+ // Blur width relative to screen; tweak for softer/harder edge
32
+ float feather = 0.20; // 20% of radius as feather
33
+ float edge0 = radius - feather * 0.5;
34
+ float edge1 = radius + feather * 0.5;
35
+
36
+ float mask = smoothstep(edge0, edge1, dist);
37
+
38
+ // Black overlay with soft edge
39
+ gl_FragColor = vec4(0.0, 0.0, 0.0, mask);
40
+ }
41
+ `;
42
+ }
@@ -0,0 +1,26 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ * */
13
+
14
+ // Vertex shader for cross‑wipe transition. Shares the same logic as
15
+ // other transitions: compute UVs and forward the clip‑space position.
16
+
17
+ export default function vs() {
18
+ return `
19
+ attribute vec2 aPosition;
20
+ varying vec2 vUV;
21
+ void main() {
22
+ vUV = (aPosition + 1.0) * 0.5;
23
+ gl_Position = vec4(aPosition, 0.0, 1.0);
24
+ }
25
+ `;
26
+ }
@@ -0,0 +1,36 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ * */
13
+
14
+ // Fragment shader for a horizontal cross‑wipe transition. A black
15
+ // rectangle slides across the screen. The direction uniform controls
16
+ // whether the wipe grows from the left (out) or shrinks from the right (in).
17
+
18
+ export default function fs() {
19
+ return `
20
+ precision mediump float;
21
+ varying vec2 vUV;
22
+ uniform float uProgress;
23
+ uniform float uDirection;
24
+ void main() {
25
+ float mask;
26
+ // When uDirection == 1.0 (transition in), the black area shrinks
27
+ // from right to left. Otherwise, it grows from left to right.
28
+ if (uDirection > 0.5) {
29
+ mask = step(1.0 - uProgress, vUV.x);
30
+ } else {
31
+ mask = step(vUV.x, uProgress);
32
+ }
33
+ gl_FragColor = vec4(0.0, 0.0, 0.0, mask);
34
+ }
35
+ `;
36
+ }
@@ -0,0 +1,26 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ * */
13
+
14
+ // Vertex shader for cross‑wipe transition. Shares the same logic as
15
+ // other transitions: compute UVs and forward the clip‑space position.
16
+
17
+ export default function vs() {
18
+ return `
19
+ attribute vec2 aPosition;
20
+ varying vec2 vUV;
21
+ void main() {
22
+ vUV = (aPosition + 1.0) * 0.5;
23
+ gl_Position = vec4(aPosition, 0.0, 1.0);
24
+ }
25
+ `;
26
+ }
@@ -0,0 +1,41 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ * */
13
+
14
+ // Fragment shader for a horizontal cross‑blur wipe. Progress moves the edge
15
+ // across X; we soften with smoothstep. uDirection > 0.5 = IN (wipe recedes).
16
+
17
+ export default function fs() {
18
+ return `
19
+ precision mediump float;
20
+ varying vec2 vUV;
21
+ uniform float uProgress;
22
+ uniform float uDirection;
23
+
24
+ void main() {
25
+ // Determine wipe center position depending on direction
26
+ float pos = (uDirection > 0.5) ? (1.0 - uProgress) : uProgress;
27
+
28
+ // Feather width in UV space
29
+ float feather = 0.12;
30
+
31
+ // Distance from the moving edge (vertical line at x=pos)
32
+ float d = vUV.x - pos;
33
+
34
+ // Soft mask around the edge using smoothstep
35
+ float mask = smoothstep(-feather, feather, d);
36
+
37
+ // Black overlay with soft edge
38
+ gl_FragColor = vec4(0.0, 0.0, 0.0, mask);
39
+ }
40
+ `;
41
+ }
@@ -0,0 +1,25 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ * */
13
+
14
+ // Vertex shader for full‑screen transitions (used by fade/blur/cross/crossBlur).
15
+
16
+ export default function vs() {
17
+ return `
18
+ attribute vec2 aPosition;
19
+ varying vec2 vUV;
20
+ void main() {
21
+ vUV = (aPosition + 1.0) * 0.5;
22
+ gl_Position = vec4(aPosition, 0.0, 1.0);
23
+ }
24
+ `;
25
+ }
@@ -0,0 +1,78 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ * */
13
+
14
+ // Fragment shader for dissolve/noise transition effect.
15
+ // Uses procedural noise to create a dissolving particle effect.
16
+
17
+ export default function fs() {
18
+ return `
19
+ precision mediump float;
20
+ varying vec2 vUV;
21
+ uniform float uProgress;
22
+ uniform float uDirection;
23
+ uniform float uTime;
24
+
25
+ // Simple hash function for noise
26
+ float hash(vec2 p) {
27
+ return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
28
+ }
29
+
30
+ // Value noise
31
+ float noise(vec2 p) {
32
+ vec2 i = floor(p);
33
+ vec2 f = fract(p);
34
+ f = f * f * (3.0 - 2.0 * f); // Smooth interpolation
35
+
36
+ float a = hash(i);
37
+ float b = hash(i + vec2(1.0, 0.0));
38
+ float c = hash(i + vec2(0.0, 1.0));
39
+ float d = hash(i + vec2(1.0, 1.0));
40
+
41
+ return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
42
+ }
43
+
44
+ // Fractal noise for more organic look
45
+ float fbm(vec2 p) {
46
+ float sum = 0.0;
47
+ float amp = 0.5;
48
+ float freq = 1.0;
49
+ for (int i = 0; i < 4; i++) {
50
+ sum += noise(p * freq) * amp;
51
+ amp *= 0.5;
52
+ freq *= 2.0;
53
+ }
54
+ return sum;
55
+ }
56
+
57
+ void main() {
58
+ float progress = uDirection > 0.5 ? (1.0 - uProgress) : uProgress;
59
+
60
+ // Generate noise pattern
61
+ vec2 noiseCoord = vUV * 10.0;
62
+ float n = fbm(noiseCoord);
63
+
64
+ // Add some time-based animation for sparkle effect
65
+ float sparkle = noise(vUV * 50.0 + uTime * 0.001) * 0.1;
66
+ n += sparkle;
67
+
68
+ // Threshold based on progress
69
+ float threshold = progress * 1.2; // Slightly overshoot for full coverage
70
+ float alpha = smoothstep(threshold - 0.1, threshold + 0.1, n);
71
+
72
+ // Invert for dissolve-in effect
73
+ alpha = 1.0 - alpha;
74
+
75
+ gl_FragColor = vec4(0.0, 0.0, 0.0, alpha);
76
+ }
77
+ `;
78
+ }
@@ -0,0 +1,24 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ * */
13
+
14
+ // Vertex shader for dissolve transition
15
+ export default function vs() {
16
+ return `
17
+ attribute vec2 aPosition;
18
+ varying vec2 vUV;
19
+ void main() {
20
+ vUV = (aPosition + 1.0) * 0.5;
21
+ gl_Position = vec4(aPosition, 0.0, 1.0);
22
+ }
23
+ `;
24
+ }
@@ -0,0 +1,31 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ * */
13
+
14
+ // Fragment shader for a simple fade transition. The entire screen is
15
+ // covered by a black overlay whose alpha is controlled by `uProgress`
16
+ // and `uDirection`. When `uDirection` is 0.0 (out), the alpha increases
17
+ // from 0 to 1 as progress goes from 0 to 1. When `uDirection` is 1.0 (in),
18
+ // the alpha decreases from 1 to 0.
19
+
20
+ export default function fs() {
21
+ return `
22
+ precision mediump float;
23
+ varying vec2 vUV;
24
+ uniform float uProgress;
25
+ uniform float uDirection;
26
+ void main() {
27
+ float alpha = uDirection > 0.5 ? (1.0 - uProgress) : uProgress;
28
+ gl_FragColor = vec4(0.0, 0.0, 0.0, alpha);
29
+ }
30
+ `;
31
+ }
@@ -0,0 +1,27 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ * */
13
+
14
+ // Vertex shader for full‑screen transitions. It passes the clip‑space
15
+ // position directly and computes UV coordinates from the position. This
16
+ // shader is used by all transition effects.
17
+
18
+ export default function vs() {
19
+ return `
20
+ attribute vec2 aPosition;
21
+ varying vec2 vUV;
22
+ void main() {
23
+ vUV = (aPosition + 1.0) * 0.5;
24
+ gl_Position = vec4(aPosition, 0.0, 1.0);
25
+ }
26
+ `;
27
+ }
@@ -0,0 +1,52 @@
1
+ /* *\
2
+ ** ----------------------------------------------- **
3
+ ** Calliope - Pixos Game Engine **
4
+ ** ----------------------------------------------- **
5
+ ** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
6
+ ** **
7
+ ** Any unauthorized distribution or transfer **
8
+ ** of this work is strictly prohibited. **
9
+ ** **
10
+ ** All Rights Reserved. **
11
+ ** ----------------------------------------------- **
12
+ * */
13
+
14
+ // Fragment shader for iris/circle transition effect.
15
+ // Creates a circular iris wipe effect, common in classic films and games.
16
+
17
+ export default function fs() {
18
+ return `
19
+ precision mediump float;
20
+ varying vec2 vUV;
21
+ uniform float uProgress;
22
+ uniform float uDirection;
23
+ uniform vec2 uCenter; // Center point of iris (default 0.5, 0.5)
24
+ uniform float uAspect; // Aspect ratio for circular shape
25
+
26
+ void main() {
27
+ float progress = uDirection > 0.5 ? (1.0 - uProgress) : uProgress;
28
+
29
+ // Adjust UV for aspect ratio
30
+ vec2 center = uCenter;
31
+ if (center.x == 0.0 && center.y == 0.0) {
32
+ center = vec2(0.5, 0.5);
33
+ }
34
+
35
+ vec2 uv = vUV - center;
36
+ uv.x *= max(uAspect, 1.0);
37
+
38
+ // Calculate distance from center
39
+ float dist = length(uv);
40
+
41
+ // Max radius to cover screen corners
42
+ float maxRadius = 1.5;
43
+ float radius = (1.0 - progress) * maxRadius;
44
+
45
+ // Soft edge for smoother transition
46
+ float edge = 0.02;
47
+ float alpha = 1.0 - smoothstep(radius - edge, radius + edge, dist);
48
+
49
+ gl_FragColor = vec4(0.0, 0.0, 0.0, alpha);
50
+ }
51
+ `;
52
+ }