summaryrefslogtreecommitdiff
path: root/internal/generator/templates
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-18 23:55:44 +0300
committerPaul Buetow <paul@buetow.org>2026-04-18 23:55:44 +0300
commit4943153ae6dd38a4d26297a5be14e6c974b76207 (patch)
tree21424e8d72738de7d1cfb5c5daeb528a6cd4f8c4 /internal/generator/templates
parent65cdc570d79f1c600bd7a74d13a6227eb1aeb80d (diff)
v0.4.2: boost wild mode intensity across all 14 themes
DOS: camera FOV/Z/X lunge + per-char X jitter (corrupted RAM look) Spaceage: station scale pulse, pods fly to expanded/oscillating radius, full camera X/Y/Z/FOV chaos (was time-offset only) Matrix: camera plunges into the rain with Z/X sway + FOV warp Plasma: blobs pulse in scale + camera sucked into vortex (was no camera) Synthwave: camera warp-drive rush X/Y/Z/FOV (was tiny X drift only) Retro: main cube scale pulse, orbiters expand to larger radius, camera frenetic X/Y/Z/FOV sway Retrofuture: rings tumble in 3D (X/Y tilt), full camera spiral + FOV pulse All themes now have multi-dimensional wild effects; weakest now ≥4/5. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/generator/templates')
-rw-r--r--internal/generator/templates/themes/dos.tmpl14
-rw-r--r--internal/generator/templates/themes/matrix.tmpl12
-rw-r--r--internal/generator/templates/themes/plasma.tmpl14
-rw-r--r--internal/generator/templates/themes/retro.tmpl24
-rw-r--r--internal/generator/templates/themes/retrofuture.tmpl24
-rw-r--r--internal/generator/templates/themes/spaceage.tmpl28
-rw-r--r--internal/generator/templates/themes/synthwave.tmpl14
7 files changed, 114 insertions, 16 deletions
diff --git a/internal/generator/templates/themes/dos.tmpl b/internal/generator/templates/themes/dos.tmpl
index 2b48b73..622978c 100644
--- a/internal/generator/templates/themes/dos.tmpl
+++ b/internal/generator/templates/themes/dos.tmpl
@@ -227,8 +227,22 @@
y = ((y % 60) + 60) % 60 - 30;
for (var r = 0; r < col.chars.length; r++) {
col.chars[r].mesh.position.y = y - col.chars[r].offset;
+ // Wild: each char jitters horizontally like corrupted RAM
+ if (_wild) { col.chars[r].mesh.position.x = col.x + (Math.random() - 0.5) * 2.5; }
+ else { col.chars[r].mesh.position.x = col.x; }
}
}
+ // Wild: camera lunges forward/back and sways like a CRT meltdown
+ if (_wild) {
+ camera.position.z = 40 + Math.sin(realT * 0.41) * 14;
+ camera.position.x = Math.sin(realT * 0.37) * 8;
+ camera.fov = 60 + Math.sin(realT * 0.53) * 16;
+ camera.updateProjectionMatrix();
+ } else {
+ camera.position.z = 40;
+ camera.position.x = 0;
+ if (camera.fov !== 60) { camera.fov = 60; camera.updateProjectionMatrix(); }
+ }
renderer.render(scene, camera);
}
diff --git a/internal/generator/templates/themes/matrix.tmpl b/internal/generator/templates/themes/matrix.tmpl
index 445545f..40d74c1 100644
--- a/internal/generator/templates/themes/matrix.tmpl
+++ b/internal/generator/templates/themes/matrix.tmpl
@@ -247,6 +247,18 @@
points.geometry.attributes.position.needsUpdate = true;
points.geometry.attributes.color.needsUpdate = true;
+ // Wild: camera plunges into the rain like riding a digital waterfall
+ if (_wild) {
+ var wt = Date.now() * 0.001;
+ camera.position.z = 50 + Math.sin(wt * 0.38) * 20;
+ camera.position.x = Math.sin(wt * 0.31) * 14;
+ camera.fov = 60 + Math.sin(wt * 0.51) * 18;
+ camera.updateProjectionMatrix();
+ } else {
+ camera.position.z = 50;
+ camera.position.x = 0;
+ if (camera.fov !== 60) { camera.fov = 60; camera.updateProjectionMatrix(); }
+ }
renderer.render(scene, camera);
}
diff --git a/internal/generator/templates/themes/plasma.tmpl b/internal/generator/templates/themes/plasma.tmpl
index 4f63fad..332d07f 100644
--- a/internal/generator/templates/themes/plasma.tmpl
+++ b/internal/generator/templates/themes/plasma.tmpl
@@ -229,7 +229,21 @@
blobs.forEach(function(b) {
b.mesh.position.x = b.bx + b.ax * ampMult * Math.sin(t * b.fx + b.px);
b.mesh.position.y = b.by + b.ay * ampMult * Math.cos(t * b.fy + b.py);
+ // Blobs pulse in size when wild
+ if (_wild) { b.mesh.scale.setScalar(1 + 0.3 * Math.sin(t * b.fy * 1.3)); }
+ else { b.mesh.scale.setScalar(1); }
});
+ // Wild: camera sucked into plasma vortex
+ if (_wild) {
+ camera.position.x = Math.sin(realT * 0.32) * 14;
+ camera.position.y = Math.sin(realT * 0.24) * 10;
+ camera.position.z = 40 + Math.sin(realT * 0.19) * 14;
+ camera.fov = 60 + Math.sin(realT * 0.41) * 16;
+ camera.updateProjectionMatrix();
+ } else {
+ camera.position.set(0, 0, 40);
+ if (camera.fov !== 60) { camera.fov = 60; camera.updateProjectionMatrix(); }
+ }
renderer.render(scene, camera);
}
diff --git a/internal/generator/templates/themes/retro.tmpl b/internal/generator/templates/themes/retro.tmpl
index 6ce2e61..d6487c2 100644
--- a/internal/generator/templates/themes/retro.tmpl
+++ b/internal/generator/templates/themes/retro.tmpl
@@ -218,19 +218,33 @@
_snoTOffset += (realT - _snoLastT) * (_wild ? 8 : 0);
_snoLastT = realT;
var t = realT + _snoTOffset;
- // Main cube rotates; wild mode spins dramatically
+ // Main cube rotates; wild mode spins dramatically + pulses in scale
mainCube.rotation.y = t * 0.35;
mainCube.rotation.x = t * 0.18;
- // Orbiters revolve around the central cube and spin individually
+ if (_wild) { mainCube.scale.setScalar(1 + 0.2 * Math.sin(realT * 5.1)); }
+ else { mainCube.scale.setScalar(1); }
+ // Orbiters fly outward to larger radius in wild mode
+ var orbR = _wild ? 18 + Math.sin(realT * 0.9) * 10 : 18;
for (var i = 0; i < orbiters.length; i++) {
var o = orbiters[i];
var angle = o.baseAngle + t * 0.4;
- o.mesh.position.x = Math.cos(angle) * 18;
- o.mesh.position.z = Math.sin(angle) * 18;
- o.mesh.position.y = Math.sin(angle * 0.7) * 4;
+ o.mesh.position.x = Math.cos(angle) * orbR;
+ o.mesh.position.z = Math.sin(angle) * orbR;
+ o.mesh.position.y = Math.sin(angle * 0.7) * (_wild ? 10 : 4);
o.mesh.rotation.x = t * 0.9;
o.mesh.rotation.z = t * 0.6;
}
+ // Camera: frenetic sway in wild, static otherwise
+ if (_wild) {
+ camera.position.x = Math.sin(realT * 0.39) * 14;
+ camera.position.y = Math.sin(realT * 0.31) * 8;
+ camera.position.z = 35 + Math.sin(realT * 0.23) * 14;
+ camera.fov = 60 + Math.sin(realT * 0.48) * 16;
+ camera.updateProjectionMatrix();
+ } else {
+ camera.position.set(0, 0, 35);
+ if (camera.fov !== 60) { camera.fov = 60; camera.updateProjectionMatrix(); }
+ }
renderer.render(scene, camera);
}
diff --git a/internal/generator/templates/themes/retrofuture.tmpl b/internal/generator/templates/themes/retrofuture.tmpl
index 57415bf..f1b1fb7 100644
--- a/internal/generator/templates/themes/retrofuture.tmpl
+++ b/internal/generator/templates/themes/retrofuture.tmpl
@@ -288,9 +288,27 @@
atomic.scale.setScalar(pulse);
ringH.rotation.z = t * 0.4;
ringV.rotation.z = -t * 0.3;
- // Slow camera orbit for parallax
- camera.position.x = Math.sin(t * 0.07) * 5;
- camera.position.y = 10 + Math.sin(t * 0.05) * 2;
+ // Rings tilt chaotically in wild — full 3D tumble
+ if (_wild) {
+ ringH.rotation.x = Math.sin(realT * 2.3) * 0.8;
+ ringV.rotation.y = Math.cos(realT * 1.9) * 0.9;
+ } else {
+ ringH.rotation.x = 0;
+ ringV.rotation.y = 0;
+ }
+ // Camera: meltdown spiral in wild, slow orbit otherwise
+ if (_wild) {
+ camera.position.x = Math.sin(realT * 0.36) * 16;
+ camera.position.y = 10 + Math.sin(realT * 0.29) * 10;
+ camera.position.z = 45 + Math.sin(realT * 0.22) * 16;
+ camera.fov = 60 + Math.sin(realT * 0.47) * 18;
+ camera.updateProjectionMatrix();
+ } else {
+ camera.position.x = Math.sin(t * 0.07) * 5;
+ camera.position.y = 10 + Math.sin(t * 0.05) * 2;
+ camera.position.z = 45;
+ if (camera.fov !== 60) { camera.fov = 60; camera.updateProjectionMatrix(); }
+ }
camera.lookAt(0, -5, -10);
renderer.render(scene, camera);
}
diff --git a/internal/generator/templates/themes/spaceage.tmpl b/internal/generator/templates/themes/spaceage.tmpl
index 2776147..a71f057 100644
--- a/internal/generator/templates/themes/spaceage.tmpl
+++ b/internal/generator/templates/themes/spaceage.tmpl
@@ -255,14 +255,18 @@
// Station rotates; wild mode = warp-speed orbital mechanics
station.rotation.y = t * 0.12;
station.rotation.x = Math.sin(t * 0.07) * 0.3;
+ if (_wild) { station.scale.setScalar(1 + 0.15 * Math.sin(realT * 4.5)); }
+ else { station.scale.setScalar(1); }
- // Satellite pods orbit on a wider radius than the station ring
+ // Satellite pods orbit at expanded + oscillating radius in wild mode
+ var podR = _wild ? 24 + Math.sin(realT * 0.7) * 10 : 24;
+ var podY = _wild ? 12 : 5;
for (var i = 0; i < pods.length; i++) {
var angle = pods[i]._baseAngle + t * 0.38;
pods[i].position.set(
- Math.cos(angle) * 24,
- Math.sin(angle * 0.6) * 5,
- Math.sin(angle) * 24
+ Math.cos(angle) * podR,
+ Math.sin(angle * 0.6) * podY,
+ Math.sin(angle) * podR
);
pods[i].rotation.x = t * 0.7 + i;
pods[i].rotation.z = t * 0.5 + i;
@@ -271,9 +275,19 @@
// Planet drifts very slowly
planet.rotation.y = t * 0.04;
- // Gentle camera drift for parallax
- camera.position.x = Math.sin(t * 0.06) * 5;
- camera.position.y = 14 + Math.sin(t * 0.09) * 2;
+ // Camera: chaotic fly-by in wild, gentle drift otherwise
+ if (_wild) {
+ camera.position.x = Math.sin(realT * 0.34) * 18;
+ camera.position.y = 14 + Math.sin(realT * 0.27) * 10;
+ camera.position.z = 42 + Math.sin(realT * 0.21) * 16;
+ camera.fov = 58 + Math.sin(realT * 0.44) * 18;
+ camera.updateProjectionMatrix();
+ } else {
+ camera.position.x = Math.sin(t * 0.06) * 5;
+ camera.position.y = 14 + Math.sin(t * 0.09) * 2;
+ camera.position.z = 42;
+ if (camera.fov !== 58) { camera.fov = 58; camera.updateProjectionMatrix(); }
+ }
renderer.render(scene, camera);
}
diff --git a/internal/generator/templates/themes/synthwave.tmpl b/internal/generator/templates/themes/synthwave.tmpl
index 1cc6b46..f07103e 100644
--- a/internal/generator/templates/themes/synthwave.tmpl
+++ b/internal/generator/templates/themes/synthwave.tmpl
@@ -250,7 +250,19 @@
var pulse = _wild ? 1 + 0.12 * Math.sin(t * 8) : 1 + 0.015 * Math.sin(t * 1.5);
sun.scale.setScalar(pulse);
sunRings.forEach(function(r) { r.scale.setScalar(pulse); });
- camera.position.x = Math.sin(t * 0.08) * 4;
+ // Camera: warp-drive rush in wild, gentle sway otherwise
+ if (_wild) {
+ camera.position.x = Math.sin(realT * 0.35) * 16;
+ camera.position.y = 10 + Math.sin(realT * 0.28) * 9;
+ camera.position.z = 45 + Math.sin(realT * 0.23) * 18;
+ camera.fov = 60 + Math.sin(realT * 0.46) * 16;
+ camera.updateProjectionMatrix();
+ } else {
+ camera.position.x = Math.sin(t * 0.08) * 4;
+ camera.position.y = 10;
+ camera.position.z = 45;
+ if (camera.fov !== 60) { camera.fov = 60; camera.updateProjectionMatrix(); }
+ }
renderer.render(scene, camera);
}