sandboxels/mods/fission_physics.js

87 lines
2.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// === Basic Fission Mod ===
// --- Fissionable Uranium-235 ---
elements.uranium235 = {
color: "#6faa3d", // Classic green uranium
behavior: behaviors.SOLID,
category: "Energy",
state: "solid",
density: 19050,
conduct: 0.05,
reactions: {
"neutron": {
chance: 1,
func: function(pixel, otherPixel) {
// Remove incoming neutron
deletePixel(otherPixel.x, otherPixel.y);
// Simulate heat
pixel.temp += 200 + Math.random() * 100;
// Optional: transform uranium
changePixel(pixel, "lead");
// Emit 23 new neutrons
let count = Math.floor(Math.random() * 2) + 2;
for (let i = 0; i < count; i++) {
let dx = Math.floor(Math.random() * 3) - 1;
let dy = Math.floor(Math.random() * 3) - 1;
let x = pixel.x + dx;
let y = pixel.y + dy;
if (!isEmpty(x, y)) continue;
createPixel("neutron", x, y);
}
}
}
}
};
// --- Add to existing neutron, don't replace it ---
if (elements.neutron) {
// Extend tick behavior
let oldTick = elements.neutron.tick;
elements.neutron.tick = function(pixel) {
// Preserve old tick behavior
if (oldTick) oldTick(pixel);
// Lifespan decay (500 ticks)
if (!pixel._ticks) pixel._ticks = 0;
pixel._ticks++;
if (pixel._ticks > 500) {
deletePixel(pixel.x, pixel.y);
}
};
// Let neutron pass slower through water
elements.neutron.customTick = function(pixel) {
let dirs = [[0,1],[0,-1],[1,0],[-1,0]];
for (let dir of dirs) {
let x = pixel.x + dir[0];
let y = pixel.y + dir[1];
let other = pixelMap[x]?.[y];
if (other && other.element === "water" && Math.random() < 0.2) {
return; // Skip tick 20% of the time near water
}
}
};
}
// --- Boron absorbs neutrons ---
elements.boron = {
color: "#dcdcdc", // Light gray boron
behavior: behaviors.SOLID,
category: "Solids",
state: "solid",
density: 2460,
reactions: {
"neutron": {
chance: 1,
func: function(pixel, otherPixel) {
deletePixel(otherPixel.x, otherPixel.y);
pixel.temp += 5;
}
}
}
};