Merge branch 'R74nCom:main' into main
This commit is contained in:
commit
93b77c5d2a
|
|
@ -249,6 +249,7 @@
|
|||
<!----><tr><td class="modCat" colspan="3">Weapons</td></tr><!---->
|
||||
<tr><td>aircrafts.js</td><td>Adds aircraft and aircraft part pixels</td><td>Jayd</td></tr>
|
||||
<tr><td>c_fighter_jet.js</td><td>Adds a controllable fighter jet, wasd to move, q+wasd to shoot, gvbn for missiles.</td><td>Jayd</td></tr>
|
||||
<tr><td>guided_rocket.js</td><td>Adds a homing misile.</td><td>voidapex11</td></tr>
|
||||
<tr><td>icb.js</td><td>Adds various levels of nested cluster bombs</td><td>Alice</td></tr>
|
||||
<tr><td>life_eater.js</td><td>Adds Warhammer 40,000’s Life-Eater Virus and Virus Bombs</td><td>Alice</td></tr>
|
||||
<tr><td>liquid_void.js</td><td>Adds a liquid variant of Void</td><td>Alice</td></tr>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,62 @@
|
|||
// made by dogo8me2 lololol
|
||||
let channelVar = "0";
|
||||
|
||||
// RF Transmitter Element
|
||||
elements.rf_transmitter = {
|
||||
color: "#142c47",
|
||||
category: "Machines",
|
||||
behavior: behaviors.WALL,
|
||||
tempHigh: 250,
|
||||
stateHigh: "dirt",
|
||||
hoverStat: function(pixel) {
|
||||
return pixel.channel || "unset";
|
||||
},
|
||||
onSelect: function() {
|
||||
let ans1 = prompt("Set the transmitter channel (numbers only):", channelVar || 0);
|
||||
channelVar = ans1;
|
||||
},
|
||||
tick: function(pixel) {
|
||||
if (!pixel.channel) {
|
||||
pixel.channel = channelVar;
|
||||
}
|
||||
for (let i in currentPixels) {
|
||||
let otherPixel = currentPixels[i];
|
||||
if (otherPixel.element == "rf_receiver" && otherPixel.channel == pixel.channel) {
|
||||
for (let j = 0; j < adjacentCoords.length; j++) {
|
||||
let coord = adjacentCoords[j];
|
||||
let x = otherPixel.x + coord[0];
|
||||
let y = otherPixel.y + coord[1];
|
||||
if (!isEmpty(x, y, true)) {
|
||||
let neighborPixel = pixelMap[x][y];
|
||||
if (elements[neighborPixel.element].conduct) {
|
||||
neighborPixel.charge = pixel.charge;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
doDefaults(pixel);
|
||||
},
|
||||
conduct: 1
|
||||
};
|
||||
|
||||
// RF Receiver Element
|
||||
elements.rf_receiver = {
|
||||
color: "#142c47",
|
||||
category: "Machines",
|
||||
behaviors: behaviors.WALL,
|
||||
tempHigh: 250,
|
||||
stateHigh: "dirt",
|
||||
hoverStat: function(pixel) {
|
||||
return pixel.channel || "unset";
|
||||
},
|
||||
onSelect: function() {
|
||||
let ans1 = prompt("Set the receiver channel (numbers only):", channelVar || 0);
|
||||
channelVar = ans1;
|
||||
},
|
||||
tick: function(pixel) {
|
||||
if (!pixel.channel) {
|
||||
pixel.channel = channelVar;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
elements.hornet = {
|
||||
tempHigh: 200,
|
||||
stateHigh: "dead_bug",
|
||||
color: "#ede48e",
|
||||
behavior: behaviors.FLY,
|
||||
category: "life",
|
||||
state: "solid",
|
||||
behaviorOn: [
|
||||
"XX|CR:flash|XX",
|
||||
"CR:flash|CH:ash|CR:flash",
|
||||
"XX|CR:flash|XX",
|
||||
],
|
||||
reactions: {
|
||||
"head": { elem2: null, },
|
||||
"body": { elem2: null, },
|
||||
"fly": { elem2: null, },
|
||||
"spider": { elem1: null, }
|
||||
}
|
||||
}
|
||||
|
||||
elements.lice = {
|
||||
tempHigh: 212,
|
||||
stateHigh: "dead_bug",
|
||||
color: "#7a7852",
|
||||
behavior: behaviors.LIQUID,
|
||||
category: "life",
|
||||
state: "solid",
|
||||
behaviorOn: [
|
||||
"XX|CR:flash|XX",
|
||||
"CR:flash|CH:ash|CR:flash",
|
||||
"XX|CR:flash|XX",
|
||||
],
|
||||
reactions: {
|
||||
"head": { elem2: null, },
|
||||
"body": { elem2: null, }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
// A mod that adds dried versions of some foods. (by pilot_773)
|
||||
|
||||
elements.dried_tomato = {
|
||||
color: elements.sauce.color,
|
||||
category: "food",
|
||||
behavior: behaviors.STURDYPOWDER
|
||||
};
|
||||
|
||||
elements.dried_lettuce = {
|
||||
color: elements.herb.color,
|
||||
category: "food",
|
||||
behavior: behaviors.STURDYPOWDER
|
||||
};
|
||||
|
||||
elements.raisin = {
|
||||
color: elements.fireball.color,
|
||||
category: "food",
|
||||
behavior: behaviors.STURDYPOWDER
|
||||
};
|
||||
|
||||
elements.dry = {
|
||||
color: elements.earthquake.color,
|
||||
category: "tools",
|
||||
tool: function(pixel) {
|
||||
if (pixel.element == "tomato") {
|
||||
pixel.element = "dried_tomato"
|
||||
}
|
||||
if (pixel.element == "lettuce") {
|
||||
pixel.element = "dried_lettuce"
|
||||
}
|
||||
if (pixel.element == "grape") {
|
||||
pixel.element = "raisin"
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
elements.dried_tomato.reactions.water = { "elem1":"tomato", "elem2":null }
|
||||
elements.dried_lettuce.reactions.water = { "elem1":"lettuce", "elem2":null }
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
elements.r74n = {
|
||||
color: "#00ffff",
|
||||
behavior: behaviors.POWDER,
|
||||
category: "r74n",
|
||||
state: "powder",
|
||||
density: 740,
|
||||
};
|
||||
elements.r74n_water = {
|
||||
hidden:false,
|
||||
color: "#009999",
|
||||
behavior: behaviors.LIQUID,
|
||||
category: "r74n",
|
||||
viscosity: 74,
|
||||
state: "liquid",
|
||||
density: 74,
|
||||
};
|
||||
|
||||
elements.ice.category = "ices"
|
||||
|
||||
elements.frosted_ice = {
|
||||
color: "#c3e2f0",
|
||||
behavior: behaviors.WALL,
|
||||
tempHigh: 5,
|
||||
stateHigh: "water",
|
||||
tempLow: -9,
|
||||
stateLow: "frosted_ice",
|
||||
category: "ices",
|
||||
state: "solid",
|
||||
density: 1027,
|
||||
};
|
||||
elements.packed_ice = {
|
||||
color: "#d6ebf5",
|
||||
behavior: behaviors.WALL,
|
||||
tempHigh: 5,
|
||||
stateHigh: "packed_water",
|
||||
tempLow: -26,
|
||||
stateLow: "packed_ice",
|
||||
category: "ices",
|
||||
state: "solid",
|
||||
density: 1257,
|
||||
};
|
||||
elements.compressed_ice = {
|
||||
color: "#80bbfa",
|
||||
behavior: behaviors.WALL,
|
||||
tempHigh: 5,
|
||||
stateHigh: "compressed_water",
|
||||
tempLow: -79,
|
||||
stateLow: "compressed_ice",
|
||||
category: "ices",
|
||||
state: "solid",
|
||||
density: 2007,
|
||||
};
|
||||
elements.blue_ice = {
|
||||
color: "#3f96f1",
|
||||
behavior: behaviors.WALL,
|
||||
tempHigh: 5,
|
||||
stateHigh: "blue_water",
|
||||
tempLow: -26,
|
||||
stateLow: "blue_ice",
|
||||
category: "ices",
|
||||
state: "solid",
|
||||
density: 2657,
|
||||
};
|
||||
elements.trench_ice = {
|
||||
color: "#0070e4",
|
||||
behavior: behaviors.WALL,
|
||||
tempHigh: 5,
|
||||
stateHigh: "trench_water",
|
||||
tempLow: -26,
|
||||
stateLow: "trench_ice",
|
||||
category: "ices",
|
||||
state: "solid",
|
||||
density: 3017,
|
||||
};
|
||||
elements.packed_water = {
|
||||
color: "#d6ebf5",
|
||||
behavior: behaviors.LIQUID,
|
||||
tempHigh: 100,
|
||||
stateHigh: "steam",
|
||||
tempLow: 0,
|
||||
stateLow: "packed_ice",
|
||||
category: "ices",
|
||||
state: "solid",
|
||||
density: 1337,
|
||||
};
|
||||
elements.compressed_water = {
|
||||
color: "#80bbfa",
|
||||
behavior: behaviors.LIQUID,
|
||||
tempHigh: 100,
|
||||
stateHigh: "steam",
|
||||
tempLow: 0,
|
||||
stateLow: "compressed_ice",
|
||||
category: "ices",
|
||||
state: "liquid",
|
||||
density: 2087,
|
||||
};
|
||||
elements.blue_water = {
|
||||
color: "#01336f",
|
||||
behavior: behaviors.LIQUID,
|
||||
tempHigh: 100,
|
||||
stateHigh: "steam",
|
||||
tempLow: 0,
|
||||
stateLow: "blue_ice",
|
||||
category: "ices",
|
||||
state: "liquid",
|
||||
density: 2737,
|
||||
};
|
||||
elements.trench_water = {
|
||||
color: "#00254d",
|
||||
behavior: behaviors.WALL,
|
||||
tempHigh: 5,
|
||||
stateHigh: "steam",
|
||||
tempLow: 0,
|
||||
stateLow: "trench_ice",
|
||||
category: "ices",
|
||||
state: "liquid",
|
||||
density: 3097,
|
||||
}
|
||||
//If you spot any bugs, let me know! - Fivey1777
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
// from code_libary.js
|
||||
function pyth(xA, yA, xB, yB) {
|
||||
var a = Math.abs(xB - xA);
|
||||
var b = Math.abs(yB - yA);
|
||||
var c = Math.sqrt(a ** 2 + b ** 2);
|
||||
return c;
|
||||
};
|
||||
tgt = ""
|
||||
|
||||
elements.guided_misile = {
|
||||
color: "#323333",
|
||||
category: "weapons",
|
||||
behavior: [
|
||||
"EX:10|EX:10|EX:10",
|
||||
"EX:10| XX |EX:10",
|
||||
"EX:10|EX:10|EX:10",
|
||||
],
|
||||
onSelect: function () {
|
||||
var answer1 = prompt("Please input the target element.", (tgt || undefined));
|
||||
if (!answer1) { return }
|
||||
tgt = answer1;
|
||||
},
|
||||
tick: (pixel) => {
|
||||
let targets = [];
|
||||
|
||||
// find all posible targets
|
||||
for (var x = 1; x < width; x++) {
|
||||
for (var y = 1; y < height; y++) {
|
||||
if (!isEmpty(x, y)) {
|
||||
if (pixelMap[x][y]["element"] === tgt) {
|
||||
pxl = pixelMap[x][y];
|
||||
targets.push(
|
||||
[pxl.x, pxl.y,
|
||||
// calculate distance from target to current pixel
|
||||
pyth(pixel.x, pixel.y, pxl.x, pxl.y)
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (targets == []) {
|
||||
return
|
||||
}
|
||||
|
||||
// sort the targets by distance from self
|
||||
targets.sort((a, b) => a[2] - b[2]);
|
||||
|
||||
try {
|
||||
// get the closest target
|
||||
current_best = targets[0];
|
||||
|
||||
target = [current_best[0], current_best[1]];
|
||||
} catch {
|
||||
// no pixels of target found
|
||||
return
|
||||
}
|
||||
|
||||
if (pixel.x != target[0] || pixel.y != target[1]) {
|
||||
let { x, y } = pixel;
|
||||
const empty = checkForEmptyPixels(x, y);
|
||||
const [tX, tY] = target;
|
||||
|
||||
// Separate moves into non-diagonal and diagonal categories
|
||||
const nonDiagonal = [];
|
||||
const diagonal = [];
|
||||
|
||||
for (const [dx, dy] of empty) {
|
||||
if ((dx === 0) || (dy === 0)) {
|
||||
nonDiagonal.push([dx, dy]); // Horizontal or vertical moves
|
||||
} else {
|
||||
diagonal.push([dx, dy]); // Diagonal moves
|
||||
}
|
||||
}
|
||||
|
||||
let prioritizedMoves = []
|
||||
|
||||
// chose whether to move diagonaly
|
||||
if (Math.abs(Math.abs(x - tX) - Math.abs(y - tY)) > 1) {
|
||||
prioritizedMoves = [...nonDiagonal];
|
||||
} else {
|
||||
prioritizedMoves = [...diagonal];
|
||||
}
|
||||
|
||||
let bestVal = pyth(tX, tY, x, y)
|
||||
Math.sqrt(Math.pow(tX - x, 2) + Math.pow(tY - y, 2));
|
||||
let best = null;
|
||||
|
||||
for (const [dx, dy] of prioritizedMoves) {
|
||||
const x_ = x + dx;
|
||||
const y_ = y + dy;
|
||||
const c = Math.sqrt(Math.pow(tX - x_, 2) + Math.pow(tY - y_, 2));
|
||||
if (c < bestVal) {
|
||||
bestVal = c;
|
||||
best = [dx, dy];
|
||||
}
|
||||
}
|
||||
|
||||
if (best) {
|
||||
if (!tryMove(pixel, x + best[0] * 2, y + best[1] * 2, undefined, true)) {
|
||||
tryMove(pixel, x + best[0], y + best[1], undefined, true)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
function drawHexagon(ctx, color, x, y, scale=1, opacity=1) {
|
||||
const size = (pixelSize * scale) * 0.63;
|
||||
const height = Math.sqrt(3) * size; // Height of the hexagon
|
||||
|
||||
if (color) { ctx.fillStyle = color; }
|
||||
if (ctx.globalAlpha !== opacity) { ctx.globalAlpha = opacity; }
|
||||
|
||||
// Convert canvas coordinates
|
||||
const centerX = canvasCoord(x);
|
||||
const centerY = canvasCoord(y);
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(centerX + size, centerY);
|
||||
ctx.lineTo(centerX + size / 2, centerY + height / 2);
|
||||
ctx.lineTo(centerX - size / 2, centerY + height / 2);
|
||||
ctx.lineTo(centerX - size, centerY);
|
||||
ctx.lineTo(centerX - size / 2, centerY - height / 2);
|
||||
ctx.lineTo(centerX + size / 2, centerY - height / 2);
|
||||
ctx.closePath();
|
||||
|
||||
ctx.fill();
|
||||
}
|
||||
|
||||
// Hexagon view
|
||||
viewInfo[8] = {
|
||||
name: "",
|
||||
effects: true,
|
||||
colorEffects: true,
|
||||
pixel: function(pixel, ctx) {
|
||||
var a = (settings.textures !== 0) ? pixel.alpha : undefined;
|
||||
const offsetY = ((pixel.x % 2) * 0.5); // Offset for staggered rows
|
||||
|
||||
if (((elements[pixel.element].isGas && elements[pixel.element].glow !== false) || elements[pixel.element].glow || pixel.glow) && pixel.glow !== false) {
|
||||
drawPlus(ctx, pixel.color, pixel.x, pixel.y + offsetY, undefined, a);
|
||||
} else {
|
||||
drawHexagon(ctx, pixel.color, pixel.x, pixel.y + offsetY, undefined, a);
|
||||
}
|
||||
|
||||
if (pixel.charge && view !== 2) { // Yellow glow on charge
|
||||
if (!elements[pixel.element].colorOn) {
|
||||
drawHexagon(ctx, "rgba(255,255,0,0.5)", pixel.x, pixel.y + offsetY);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
Loading…
Reference in New Issue