73 lines
No EOL
13 KiB
HTML
73 lines
No EOL
13 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Pulsing Reaction Nebula — exploration</title>
|
|
<style>
|
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
body { background: #0a0a0f; color: #3a3a4a; font-family: ui-monospace, monospace; overflow: hidden; }
|
|
#grid { padding: 20px; font-size: 12px; line-height: 1.4; white-space: pre; }
|
|
.c { display: inline-block; transition: all 0.3s; }
|
|
.c.active { color: #fde68a; text-shadow: 0 0 6px rgba(253,230,138,0.5); }
|
|
.c.strong { color: #34d399; text-shadow: 0 0 10px rgba(52,211,153,0.6); font-weight: bold; }
|
|
.c.dead { color: #1a1a2a; }
|
|
#info { position: fixed; bottom: 10px; left: 20px; color: #3a3a4a; font-size: 11px; }
|
|
#controls { position: fixed; top: 10px; right: 20px; color: #666; font-size: 11px; }
|
|
#controls span { cursor: pointer; margin-left: 12px; color: #fde68a; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="grid"></div>
|
|
<div id="info">neurameba · physarum exploration</div>
|
|
<div id="controls"><span id="play-btn">play</span><span id="reset-btn">reset</span></div>
|
|
<script>
|
|
const text = "# Support motd\n\n## Sponsor\n\nmotd has no ads, no data sales, no venture funding. Servers cost money. Sponsorship keeps them running.\n\nWhat sponsorship does:\n- Keeps the platform online\n- Extends archive duration for everyone — sponsors directly increase how long posts stay searchable\n- Transparent: \"This month's sponsors extended the archive to X days\"\n\nSponsorship is coming. Payment method TBD. When it's ready, it'll be announced here and via @motd.\n\n## Contribute\n\nYou don't need permission to build on motd. The API is open.\n\n**Build a plugin.** Write a bot, a bridge, a custom client, a feed filter — whatever you want. See `/read plugins` for examples and the API reference.\n\n**Report bugs.** Post with the [bugs] tag. Include what you did, what happened, what you expected.\n\n**Suggest features.** Post with the [ideas] tag. Keep it concrete.\n\n**Improve the docs.** If something is unclear or missing, say so. Post with [docs] or [ideas] tag.\n\n## Contact\n\n**On motd:** post with an @motd mention. We're here.\n\n**Email:** hello@motd.social\n\nNo Discord. No Slack. No external community platform. motd IS the community.\n";
|
|
const passes = [{"t":0,"r":31,"c":28,"a":"hold","s":0.2971349468163326,"ps":9,"e":101.02707957453066,"pr":1.1},{"t":0,"r":24,"c":0,"a":"died","s":0,"ps":8,"e":100,"pr":1},{"t":0,"r":21,"c":18,"a":"extend","s":0.3043852317215119,"ps":9,"e":70.75955729764046,"pr":1.1},{"t":0,"r":18,"c":0,"a":"died","s":0,"ps":8,"e":100,"pr":1},{"t":0,"r":23,"c":49,"a":"hold","s":0.26748034412552396,"ps":9,"e":100.7898427530042,"pr":1.1},{"t":1,"r":31,"c":28,"a":"extend","s":0.3488560083582193,"ps":9,"e":71.72754934897749,"pr":1.1},{"t":1,"r":21,"c":18,"a":"hold","s":0.2841874915413952,"ps":9,"e":71.68305722997162,"pr":1.1},{"t":1,"r":23,"c":49,"a":"hold","s":0.26700668478185724,"ps":9,"e":101.57589623125905,"pr":1.1},{"t":2,"r":31,"c":28,"a":"hold","s":0.3488560083582193,"ps":8,"e":73.31839741584325,"pr":1.05},{"t":2,"r":21,"c":18,"a":"hold","s":0.2841874915413952,"ps":8,"e":72.75655716230278,"pr":1.05},{"t":2,"r":23,"c":49,"a":"retracted","s":0.2624249067640113,"ps":8,"e":102.47529548537115,"pr":1.05},{"t":2,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":5,"e":23.32923954832186,"pr":1.2000000000000002},{"t":2,"r":31,"c":27,"a":"hold","s":0.31625334143122574,"ps":5,"e":32.52040502386873,"pr":1.2000000000000002},{"t":3,"r":31,"c":28,"a":"hold","s":0.2971349468163326,"ps":8,"e":74.49547699037392,"pr":1.05},{"t":3,"r":21,"c":18,"a":"retracted","s":0.3043852317215119,"ps":8,"e":73.99163901607488,"pr":1.05},{"t":3,"r":31,"c":29,"a":"extend","s":0.381752035728739,"ps":5,"e":17.94327908390624,"pr":1.2000000000000002},{"t":3,"r":31,"c":27,"a":"extend","s":0.4374016451313349,"ps":5,"e":24.688732729443586,"pr":1.2000000000000002},{"t":3,"r":31,"c":30,"a":"hold","s":0.3305758326336014,"ps":5,"e":11.89285218177818,"pr":1.3000000000000003},{"t":4,"r":31,"c":28,"a":"retracted","s":0.2971349468163326,"ps":7,"e":75.82255656490457,"pr":1},{"t":4,"r":31,"c":29,"a":"hold","s":0.381752035728739,"ps":4,"e":20.397295369736153,"pr":1.1500000000000001},{"t":4,"r":31,"c":27,"a":"extend","s":0.4374016451313349,"ps":4,"e":19.311562123345983,"pr":1.1500000000000001},{"t":4,"r":31,"c":30,"a":"hold","s":0.270900830431489,"ps":5,"e":13.310058825230092,"pr":1.3000000000000003},{"t":5,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":16.194081502443918,"pr":1.1500000000000001},{"t":5,"r":31,"c":27,"a":"hold","s":0.31625334143122574,"ps":4,"e":21.24158885479579,"pr":1.1500000000000001},{"t":5,"r":31,"c":30,"a":"retracted","s":0.270900830431489,"ps":4,"e":14.877265468682005,"pr":1.2500000000000002},{"t":6,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":13.251831795339355,"pr":1.1},{"t":6,"r":31,"c":27,"a":"hold","s":0.31625334143122574,"ps":4,"e":23.171615586245597,"pr":1.1},{"t":6,"r":31,"c":28,"a":"hold","s":0.3451862405683835,"ps":5,"e":8.951810568451604,"pr":1.2500000000000002},{"t":7,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":11.19225700036616,"pr":1.05},{"t":7,"r":31,"c":27,"a":"retracted","s":0.31625334143122574,"ps":4,"e":25.101642317695404,"pr":1.05},{"t":7,"r":31,"c":28,"a":"hold","s":0.35997733327419107,"ps":5,"e":11.081629234645133,"pr":1.2500000000000002},{"t":8,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":9.750554643884925,"pr":1},{"t":8,"r":31,"c":28,"a":"retracted","s":0.35997733327419107,"ps":4,"e":13.361447900838662,"pr":1.2000000000000002},{"t":9,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":8.74136299434806,"pr":0.95},{"t":9,"r":31,"c":30,"a":"hold","s":0.20022530660775759,"ps":5,"e":5.0306115859556,"pr":1.1},{"t":10,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":8.034928839672254,"pr":0.8999999999999999},{"t":10,"r":31,"c":30,"a":"hold","s":0.20816138554384975,"ps":5,"e":5.945902670306398,"pr":1.1},{"t":10,"r":31,"c":28,"a":"extend","s":0.32164038373539267,"ps":5,"e":3.898595047222617,"pr":1.05},{"t":12,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":7.194272195608046,"pr":0.7999999999999998},{"t":14,"r":31,"c":27,"a":"extend","s":0.33794743288846824,"ps":4,"e":3.3394643015331393,"pr":1.05},{"t":16,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":6.580508779776766,"pr":0.5999999999999996},{"t":17,"r":31,"c":26,"a":"extend","s":0.4151502443109939,"ps":6,"e":3.1954659937452354,"pr":1.2000000000000002},{"t":19,"r":31,"c":28,"a":"extend","s":0.32164038373539267,"ps":4,"e":4.582148051029242,"pr":0.6999999999999997},{"t":19,"r":31,"c":27,"a":"extend","s":0.3375592324826782,"ps":4,"e":4.638640607705877,"pr":0.7999999999999998},{"t":19,"r":31,"c":30,"a":"extend","s":0.2583481141678016,"ps":4,"e":3.317343823568509,"pr":0.6999999999999996},{"t":21,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":6.419175672173585,"pr":0.34999999999999964},{"t":21,"r":31,"c":27,"a":"extend","s":0.3375592324826782,"ps":4,"e":4.772497791010976,"pr":0.6999999999999997},{"t":24,"r":31,"c":26,"a":"retracted","s":0.272564723438436,"ps":4,"e":9.13026629655313,"pr":1},{"t":25,"r":31,"c":24,"a":"hold","s":0.3901825285033317,"ps":4,"e":7.878955362476921,"pr":1},{"t":25,"r":31,"c":22,"a":"hold","s":0.16355742765826442,"ps":5,"e":3.9899920026613014,"pr":1.3500000000000003},{"t":26,"r":31,"c":24,"a":"hold","s":0.3901825285033317,"ps":4,"e":10.400415590503574,"pr":0.95},{"t":28,"r":31,"c":28,"a":"hold","s":0.26190200323055013,"ps":5,"e":5.6814999664673245,"pr":0.4},{"t":30,"r":31,"c":30,"a":"hold","s":0.29089460269611794,"ps":5,"e":4.315068855069699,"pr":0.4},{"t":32,"r":31,"c":25,"a":"hold","s":0.24882653554348555,"ps":5,"e":3.353478923507158,"pr":1.1500000000000001},{"t":33,"r":31,"c":23,"a":"extend","s":0.48641934911328827,"ps":4,"e":7.634460169651595,"pr":0.7499999999999998},{"t":33,"r":31,"c":22,"a":"extend","s":0.363640084166235,"ps":5,"e":4.715737505147292,"pr":1.0499999999999998},{"t":34,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":6.386898270987606,"pr":0.3},{"t":35,"r":31,"c":21,"a":"extend","s":0.34066454887474745,"ps":4,"e":3.6502045966166508,"pr":1.15},{"t":35,"r":31,"c":28,"a":"hold","s":0.2019916587309494,"ps":5,"e":3.603175385985141,"pr":0.4},{"t":36,"r":31,"c":22,"a":"extend","s":0.2946658783146865,"ps":4,"e":4.2856838298002975,"pr":1.0499999999999998},{"t":37,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":6.38669079549541,"pr":0.3},{"t":38,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":6.386658300475399,"pr":0.3},{"t":38,"r":31,"c":30,"a":"extend","s":0.29089460269611794,"ps":4,"e":4.185849556485429,"pr":0.3},{"t":38,"r":31,"c":20,"a":"extend","s":0.2745893140612405,"ps":4,"e":2.808718798619373,"pr":1.2},{"t":40,"r":31,"c":25,"a":"extend","s":0.24882653554348555,"ps":4,"e":3.3617817661323524,"pr":0.8499999999999999},{"t":40,"r":31,"c":27,"a":"extend","s":0.46663921578301437,"ps":5,"e":4.173784570300195,"pr":0.55},{"t":41,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":6.386608485609722,"pr":0.3},{"t":42,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":6.386600683555418,"pr":0.3},{"t":42,"r":31,"c":24,"a":"extend","s":0.3065974717095844,"ps":4,"e":4.335152595253415,"pr":0.5499999999999996},{"t":42,"r":31,"c":22,"a":"hold","s":0.26517961364020526,"ps":4,"e":6.769526289341918,"pr":0.7499999999999996},{"t":42,"r":31,"c":20,"a":"hold","s":0.25612188522365764,"ps":4,"e":5.998502722231235,"pr":1.0499999999999998},{"t":42,"r":31,"c":32,"a":"hold","s":0.2964580758066105,"ps":4,"e":4.450596909580376,"pr":0.4},{"t":42,"r":31,"c":26,"a":"hold","s":0.2511183619389743,"ps":5,"e":3.451016384481087,"pr":0.6},{"t":42,"r":31,"c":18,"a":"hold","s":0.21052945247835375,"ps":5,"e":2.15306552301166,"pr":1.35},{"t":43,"r":31,"c":24,"a":"hold","s":0.3065974717095844,"ps":4,"e":6.18793236893009,"pr":0.4999999999999996},{"t":43,"r":31,"c":22,"a":"retracted","s":0.26517961364020526,"ps":4,"e":8.29096319846356,"pr":0.6999999999999995},{"t":43,"r":31,"c":28,"a":"retracted","s":0.2019916587309494,"ps":4,"e":6.64948909404139,"pr":0.4},{"t":44,"r":31,"c":23,"a":"extend","s":0.48641934911328827,"ps":4,"e":7.678930782836237,"pr":0.3},{"t":44,"r":31,"c":30,"a":"retracted","s":0.29089460269611794,"ps":4,"e":9.264948270046522,"pr":0.3},{"t":44,"r":31,"c":19,"a":"hold","s":0.29614540161046465,"ps":4,"e":6.904686667210669,"pr":1.0999999999999999},{"t":44,"r":31,"c":26,"a":"retracted","s":0.3132762933226105,"ps":4,"e":7.113437077642854,"pr":0.5499999999999999},{"t":47,"r":31,"c":31,"a":"retracted","s":0.3767311379612315,"ps":4,"e":12.384534992143202,"pr":0.3},{"t":47,"r":31,"c":26,"a":"hold","s":0.244975974170175,"ps":4,"e":4.86309740209772,"pr":0.4000000000000001},{"t":47,"r":31,"c":24,"a":"hold","s":0.273971822139094,"ps":5,"e":4.732940985890577,"pr":0.4},{"t":49,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":6.386583978005056,"pr":0.3},{"t":49,"r":31,"c":22,"a":"hold","s":0.3244200752326009,"ps":5,"e":5.136623086544158,"pr":0.4},{"t":50,"r":31,"c":22,"a":"hold","s":0.3148308452380819,"ps":4,"e":7.0552698484488126,"pr":0.35000000000000003},{"t":51,"r":31,"c":23,"a":"extend","s":0.48641934911328827,"ps":4,"e":7.679753972766941,"pr":0.3},{"t":52,"r":31,"c":24,"a":"hold","s":0.22635021100848113,"ps":5,"e":6.194203397634968,"pr":0.4},{"t":55,"r":31,"c":29,"a":"extend","s":0.41713834707653796,"ps":4,"e":6.386582655146483,"pr":0.3}];
|
|
const lines = text.split('\n');
|
|
const gridEl = document.getElementById('grid');
|
|
const charEls = [];
|
|
for (let r = 0; r < lines.length; r++) {
|
|
const row = [];
|
|
for (let c = 0; c < lines[r].length; c++) {
|
|
const s = document.createElement('span');
|
|
s.className = 'c';
|
|
s.textContent = lines[r][c];
|
|
row.push(s);
|
|
gridEl.appendChild(s);
|
|
}
|
|
charEls.push(row);
|
|
gridEl.appendChild(document.createTextNode('\n'));
|
|
}
|
|
let tick = -1, playing = false, iv;
|
|
function apply(t) {
|
|
for (const r of charEls) for (const e of r) e.className = 'c';
|
|
const active = new Map();
|
|
for (const p of passes) {
|
|
if (p.t > t) break;
|
|
const k = p.r+','+p.c;
|
|
if (p.a === 'died' || p.a === 'retracted') active.set(k, 'dead');
|
|
else if (p.ps > 16) active.set(k, 'strong');
|
|
else active.set(k, 'active');
|
|
}
|
|
for (const [k, cls] of active) {
|
|
const [r, c] = k.split(',').map(Number);
|
|
if (charEls[r]?.[c]) charEls[r][c].className = 'c ' + cls;
|
|
}
|
|
document.getElementById('info').textContent = 'tick ' + t + ' · ' + [...active.values()].filter(v=>v!=='dead').length + ' alive';
|
|
}
|
|
function play() {
|
|
if (playing) return;
|
|
playing = true;
|
|
document.getElementById('play-btn').textContent = 'pause';
|
|
const max = passes.length > 0 ? passes[passes.length-1].t : 0;
|
|
iv = setInterval(() => { tick++; if (tick > max) { pause(); return; } apply(tick); }, 900);
|
|
}
|
|
function pause() { playing = false; clearInterval(iv); document.getElementById('play-btn').textContent = 'play'; }
|
|
function reset() { pause(); tick = -1; for (const r of charEls) for (const e of r) e.className = 'c'; document.getElementById('info').textContent = 'neurameba'; }
|
|
document.getElementById('play-btn').addEventListener('click', () => playing ? pause() : play());
|
|
document.getElementById('reset-btn').addEventListener('click', reset);
|
|
setTimeout(play, 1000);
|
|
</script>
|
|
</body>
|
|
</html> |