From 3bdadbbcbe4f7272d3e789bc33a31a49205b8de3 Mon Sep 17 00:00:00 2001
From: JustAGenericUsername
<92590792+JustAGenericUsername@users.noreply.github.com>
Date: Mon, 16 Sep 2024 21:19:45 -0400
Subject: [PATCH] yu
---
mod-list.html | 2 +-
mods/scenexe.js | 364 ++++++++++++++++++++++++++++++++++++++++--------
2 files changed, 308 insertions(+), 58 deletions(-)
diff --git a/mod-list.html b/mod-list.html
index 00566e31..82d5e926 100644
--- a/mod-list.html
+++ b/mod-list.html
@@ -375,7 +375,7 @@
| randomness_but_tick.js | Random experimental elements using the tick function feature | Alice |
| randomness_but_tool.js | Random experimental elements using the tool function feature | Alice |
| randomness.js | Random experimental elements | Alice |
-| scenexe.js | Work-in-progress mod, allows you to move through a simulated field of polygons | nousernamefound |
+| scenexe.js | Work-in-progress mod, allows you to move through and damage a simulated field of polygons | nousernamefound |
| structure_test_2.js | Another test for implementing structures into Sandboxels (requires the previous test) | Alice |
| structure_test.js | A test for implementing structures into Sandboxels | Alice |
| test.js | A test mod that adds mayo :) | R74n |
diff --git a/mods/scenexe.js b/mods/scenexe.js
index 3b1b0a28..54a2e842 100644
--- a/mods/scenexe.js
+++ b/mods/scenexe.js
@@ -1,5 +1,6 @@
polygonColors = function(sides){
let baseColors = [
+ /*
{ r: 255, g: 228, b: 107 },
{ r: 252, g: 118, b: 118 },
{ r: 118, g: 140, b: 252 },
@@ -12,18 +13,104 @@ polygonColors = function(sides){
{ r: 64, g: 54, b: 69 },
{ r: 237, g: 237, b: 255 },
{ r: 0, g: 0, b: 0 },
+ */
+ "rgb(255, 228, 107)",
+ "rgb(252, 118, 118)",
+ "rgb(118, 140, 252)",
+ "rgb(252, 166, 68)",
+ "rgb(56, 183, 100)",
+ "rgb(74, 102, 189)",
+ "rgb(93, 39, 93)",
+ "rgb(26, 28, 44)",
+ "rgb(6, 0, 17)",
+ "rgb(64, 54, 69)",
+ "rgb(237, 237, 255)",
+ "rgb(0, 0, 0)",
]
if (sides <= 14 && sides >= 3){
return baseColors[Math.round(sides)-3]
} else {
- return {r: 0, g: 0, b: 0}
+ return "rgb(0, 0, 0)"
}
}
isKeyDown = {
w: false,
a: false,
s: false,
- d: false
+ d: false,
+ i: false,
+ o: false
+}
+function HSVtoRGB(h, s, v) {
+ var r, g, b, i, f, p, q, t;
+ if (arguments.length === 1) {
+ s = h.s, v = h.v, h = h.h;
+ }
+ i = Math.floor(h * 6);
+ f = h * 6 - i;
+ p = v * (1 - s);
+ q = v * (1 - f * s);
+ t = v * (1 - (1 - f) * s);
+ switch (i % 6) {
+ case 0: r = v, g = t, b = p; break;
+ case 1: r = q, g = v, b = p; break;
+ case 2: r = p, g = v, b = t; break;
+ case 3: r = p, g = q, b = v; break;
+ case 4: r = t, g = p, b = v; break;
+ case 5: r = v, g = p, b = q; break;
+ }
+ return {
+ r: Math.round(r * 255),
+ g: Math.round(g * 255),
+ b: Math.round(b * 255)
+ };
+}
+function RGBtoHSV(r, g, b) {
+ if (arguments.length === 1) {
+ g = r.g, b = r.b, r = r.r;
+ }
+ var max = Math.max(r, g, b), min = Math.min(r, g, b),
+ d = max - min,
+ h,
+ s = (max === 0 ? 0 : d / max),
+ v = max / 255;
+
+ switch (max) {
+ case min: h = 0; break;
+ case r: h = (g - b) + d * (g < b ? 6: 0); h /= 6 * d; break;
+ case g: h = (b - r) + d * 2; h /= 6 * d; break;
+ case b: h = (r - g) + d * 4; h /= 6 * d; break;
+ }
+
+ return {
+ h: h,
+ s: s,
+ v: v
+ };
+}
+function colorToObject(color){
+ list = color.match(/\d+/g);
+ list[0] = parseInt(list[0])
+ list[1] = parseInt(list[1])
+ list[2] = parseInt(list[2])
+ return {r: list[0], g: list[1], b: list[2]}
+}
+function objectToColor(object){
+ return "rgb(" + object.r + ", " + object.g + ", " + object.b + ")"
+}
+function darkenColor(color){
+ let colorObject = colorToObject(color)
+ colorObject.r = Math.max(0, colorObject.r - 30)
+ colorObject.g = Math.max(0, colorObject.g - 30)
+ colorObject.b = Math.max(0, colorObject.b - 30)
+ return objectToColor(colorObject)
+}
+function makeVisible(color){
+ let colorObject = colorToObject(color)
+ colorObject.r = Math.max(40, colorObject.r)
+ colorObject.g = Math.max(40, colorObject.g)
+ colorObject.b = Math.max(40, colorObject.b)
+ return objectToColor(colorObject)
}
// when wasd keydown, set isKeyDown to true
document.addEventListener("keydown", (event) => {
@@ -39,6 +126,12 @@ document.addEventListener("keydown", (event) => {
if (event.key === "d") {
isKeyDown.d = true
}
+ if (event.key === "i") {
+ isKeyDown.i = true
+ }
+ if (event.key === "o") {
+ isKeyDown.o = true
+ }
})
// when wasd keyup, set isKeyDown to false
document.addEventListener("keyup", (event) => {
@@ -54,11 +147,59 @@ document.addEventListener("keyup", (event) => {
if (event.key === "d") {
isKeyDown.d = false
}
+ if (event.key === "i") {
+ isKeyDown.i = false
+ }
+ if (event.key === "o") {
+ isKeyDown.o = false
+ }
+ if (event.key === "m") {
+ if (debug){
+ debug = false
+ } else {
+ debug = true
+ }
+ }
})
orbitalSpeed = function(sides){
return 1/(1.00672*Math.pow(0.344151, sides) + 0.000002)
}
-shapeNames = ["Triangle", "Square", "Pentagon", "Hexagon", "Heptagon", "Octagon", "Nonagon", "Decagon", "Hendecagon", "Dodecagon", "Triskaidecagon", "Tetrakaidecagon", "Pentakaidecagon", "Hexakaidecagon", "Heptakaidecagon", "Octakaidecagon", "Enneakaidecagon", "Icosagon", "literally just a circle"]
+function shapeNamer(sides) {
+ const ones = ["hen", "do", "tri", "tetra", "penta", "hexa", "hepta", "octa", "ennea"];
+ const tens = ["deca", "icosa", "triaconta", "tetraconta", "pentaconta", "hexaconta", "heptaconta", "octaconta", "enneaconta"];
+ const specialCases = {
+ 4: "square",
+ 2: "line",
+ 1: "point",
+ 3: "triangle",
+ 9: "nonagon",
+ 1000: "stop",
+ 1001: "please",
+ 1002: "go touch grass",
+ 1003: "are you serious"
+ };
+ if (sides in specialCases) {
+ return specialCases[sides];
+ }
+ function rb(v) {
+ return v ? v : "";
+ }
+ const numberString = sides.toString();
+ if (sides < 10) {
+ return ones[sides - 1] + "gon";
+ } else if (sides < 100) {
+ const tensPlace = Math.floor(sides / 10);
+ const onesPlace = sides % 10;
+ return rb(ones[onesPlace - 1]) + tens[tensPlace - 1] + "gon";
+ } else if (sides < 1000) {
+ const hundredsPlace = Math.floor(sides / 100);
+ const tensPlace = Math.floor((sides % 100) / 10);
+ const onesPlace = sides % 10;
+ return ones[hundredsPlace - 1] + "hecta" + rb(tens[tensPlace - 1]) + rb(ones[onesPlace - 1]) + "gon";
+ } else {
+ return "literally just a circle";
+ }
+}
function polygonCount(random){
const thresholds = [0, 0.3, 0.68, 0.77, 0.82, 0.86, 0.88, 0.89, 0.895, 0.8975, 0.898, 0.8982, 1];
const values = [3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3];
@@ -70,12 +211,8 @@ function polygonCount(random){
}
}
polygonList = []
-zoomLevel = 1
-polygonSize = function(sides){
- return 18 * Math.pow(1.47, sides - 3)
-}
-for (var i = 0; i <= 400; i++){
- sides = polygonCount(Math.random())
+zoomLevel = 0.5
+function newPolygon(sides){
polygonList.push({
sides: sides,
radius: polygonSize(sides),
@@ -85,59 +222,143 @@ for (var i = 0; i <= 400; i++){
vy: 0,
random: Math.random(),
rotation: Math.random() * 2 * Math.PI,
- collisionMass: 3+(polygonSize(sides)**2)/6
+ collisionMass: 3+(polygonSize(sides)**2)/6,
+ maxHealth: 3+(polygonSize(sides)**2)/6,
+ health: 3+(polygonSize(sides)**2)/6,
+ type: 0,
+ bodyDamage: 3,
+ regenDelay: 20,
+ regenSpeed: 0.0007,
+ timeSinceHurt: null,
+ name: shapeNamer(sides)
})
}
-function drawPolygon(ctx, polygon){
- let x = polygon.x
- let y = polygon.y
- let sides = polygon.sides
- let radius = polygon.radius
- let rotation = polygon.rotation
- let vx = polygon.vx
- let vy = polygon.vy
- ctx.lineJoin = 'round';
- ctx.fillStyle = "rgb(" + polygonColors(sides).r + ", " + polygonColors(sides).g + ", " + polygonColors(sides).b + ")"
- ctx.strokeStyle = "rgb(" + Math.max(polygonColors(sides).r - 30, 0) + ", " + Math.max(polygonColors(sides).g - 30, 0) + ", " + Math.max(polygonColors(sides).b - 30, 0) + ")"
- ctx.lineWidth = 5*zoomLevel
- ctx.beginPath()
- ctx.moveTo(Math.sin(rotation)*radius+x, Math.cos(rotation)*radius+y)
- for (var i = 0; i <= sides+1; i++){
- ctx.lineTo(Math.sin(rotation+2*Math.PI*i/sides)*radius+x, Math.cos(rotation+2*Math.PI*i/sides)*radius+y)
- }
- ctx.fill()
- ctx.stroke()
- // debug
- /*
- // draw a line to represent angle
- ctx.beginPath()
- ctx.moveTo(x, y)
- ctx.lineTo(Math.sin(rotation)*2*radius+x, Math.cos(rotation)*2*radius+y)
- ctx.strokeStyle = "rgb(0, 0, 255)"
- ctx.stroke()
- // draw a line to represent velocity
- ctx.beginPath()
- ctx.moveTo(x, y)
- ctx.lineTo(x+20*vx, y+20*vy)
- ctx.strokeStyle = "rgb(255, 0, 0)"
- ctx.stroke()
- // draw some text to represent mass
- ctx.lineWidth = 2
- ctx.fillStyle = "rgb(255, 255, 255)"
- ctx.strokeStyle = "rgb(0, 0, 0)"
- ctx.font = `bold 30px Helvetica`
- ctx.fillText(Math.round(polygon.collisionMass), x, y)
- ctx.strokeText(Math.round(polygon.collisionMass), x, y)
- */
+polygonSize = function(sides){
+ return 18 * Math.pow(1.47, sides - 3)
}
+for (var i = 0; i <= 400; i++){
+ sides = polygonCount(Math.random())
+ newPolygon(sides)
+}
+function drawPolygon(ctx, polygon, index){
+ if (Math.abs(polygonList[index].x-camera[0]-polygon.radius collideList[poly].regenDelay){
+ collideList[poly].health += collideList[poly].regenSpeed*collideList[poly].maxHealth
+ collideList[poly].health = Math.min(collideList[poly].health, collideList[poly].maxHealth)
+ }
}
// move polygons
for (var poly = 0; poly < collideList.length; poly++){
@@ -236,6 +477,9 @@ renderPostPixel(function(ctx){
// add some velocity towards wherever its facing
polygon.vx += Math.sin(polygon.rotation)/orbitalSpeed(polygon.sides)*8
polygon.vy += Math.cos(polygon.rotation)/orbitalSpeed(polygon.sides)*8
+ if (polygon.health <= 0){
+ polygonList.splice(poly, 1)
+ }
}
camera[0] += (scenexeplayer.x - camera[0])/10
camera[1] += (scenexeplayer.y - camera[1])/10
@@ -268,4 +512,10 @@ renderPostPixel(function(ctx){
scenexeplayer.vx += 1
}
}
+ if (isKeyDown.i){
+ zoomLevel += 0.02
+ }
+ if (isKeyDown.o){
+ zoomLevel -= 0.02
+ }
})
\ No newline at end of file