diff --git a/mod-list.html b/mod-list.html index 4f5b7b1d..82d5e926 100644 --- a/mod-list.html +++ b/mod-list.html @@ -375,7 +375,7 @@ randomness_but_tick.jsRandom experimental elements using the tick function featureAlice randomness_but_tool.jsRandom experimental elements using the tool function featureAlice randomness.jsRandom experimental elementsAlice -scenexe.jsWork-in-progress mod, renders and simulates a bunch of polygonsnousernamefound +scenexe.jsWork-in-progress mod, allows you to move through and damage a simulated field of polygonsnousernamefound structure_test_2.jsAnother test for implementing structures into Sandboxels (requires the previous test)Alice structure_test.jsA test for implementing structures into SandboxelsAlice test.jsA test mod that adds mayo :)R74n diff --git a/mods/aScientistsWish.js b/mods/aScientistsWish.js index 64769c97..a955006b 100644 --- a/mods/aScientistsWish.js +++ b/mods/aScientistsWish.js @@ -1,5 +1,12 @@ -//this mod is still on proggres (WIP) you can give feedback or report bug to these discord account. @salmonfishy or @carbon_monoxides6 - +//Hello, this is are a science mod, we're made several things that related to science, examples like...electron, particle accelerator, and of course, carbon monoxide! :D +//We made some things not scientific, so this mod is not too boring. ;) +//we're normal people, who is not as smart as a real scientist. so if you have suggestion, feedback, or criticism, please let us know, so we can make this mod being more accurate. >< +// discord account | +// | +// | +// v +// creator,leader,supervisor,coder,uploader = @carbon_monoxides6 +// co-creator,co-coder,assistant,debugger = @salmonfishy (has exited from this mod project) elements.carbon_monoxide = { color: "#b5b5b5", behavior: behaviors.GAS, @@ -68,39 +75,7 @@ elements.carbon_monoxide_detector = { darkText: true, hardness: 1, }; -elements.cpu = { - color: "#575757", - behavior: behaviors.SOLID, - category: "machines", - state: "solid", - insulate: true, - movable: false, - noMix: true, - density: 75, - tempHigh: 1414, - stateHigh: ["explosion","metal_scrap"], -reactions: { - "virus": { elem1 : null , elem2:"malware", chance:0.9 }, - "metal_scrap": { elem2:"computer" }, - - } -}; -elements.computer = { - color: "#2b2b2a", - behavior: behaviors.SOLID, - category: "machines", - state: "solid", - density: 8908, - insulate: true, - noMix: true, - movable: false, - tempHigh: 1414, - stateHigh: ["explosion","metal_scrap"], -reactions: { - "virus": { elem1 : null , elem2:"malware", chance:0.9 }, - "water": { elem1: null , elem2: "electric" }, - } -} + elements.electrons = { color: "#b80606", behavior: [ @@ -409,19 +384,6 @@ reactions: { } }; -elements.leather = { -behavior: behaviors.SUPPORTPOWDER, -color: ["#3f261d","#664f40",], -state: "powder", -category: "powders", -tempHigh: 200, -stateHigh: "fire", -breakInto: "dust", -burn: 20, -burntime: 200, -burnInto: "ash", -}; - elements.wrinkled_lemon = { behavior: behaviors.POWDER, color: ["#999543","#a6a03a",], @@ -530,7 +492,7 @@ tempLow: -2, stateLow: "frozen_yogurt", stateLowColor: ["#f5f3cb","#f7f5bc"], reactions: { -"bacteria": { elem1: "yogurt", }, +"cell": { elem1: "yogurt", }, } }; @@ -615,11 +577,11 @@ elements.hazmat_head = { color: ["#404040","#1a1a1a","#737373"], category: "life", hidden: true, - density: 1080, + density: 1380, state: "solid", conduct: .05, - temp: 40, - tempHigh: 3500, + temp: 39, + tempHigh: 6500, stateHigh: ["ash","iron",], tempLow: -180, stateLow: "frozen_meat", @@ -686,7 +648,10 @@ elements.hazmat_head = { "mashed_potato": { elem2:null, chance:0.2 }, "sauce": { elem2:null, chance:0.2 }, "pickle": { elem2:null, chance:0.1 }, - "light": { stain1:"#fff154" }, + "sun": { elem1:"cooked_meat" }, + "water": { elem2:"bubble", attr2:{"clone":"water"}, chance:0.001 }, + "salt_water": { elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.001 }, + "pool_water": { elem2:"bubble", attr2:{"clone":"pool_water"}, chance:0.001 }, }, properties: { dead: false @@ -729,14 +694,14 @@ elements.hazmat_head = { }; elements.hazmat_body = { - color: ["#ffdf4f","#e8c00e","#ffd412"], + color: ["#2c7328","#2db526","#ffc42e","#f5c345","#cf9502",], category: "life", hidden: true, - density: 1570, + density: 1370, state: "solid", conduct: .25, temp: 39, - tempHigh: 3500, + tempHigh: 6500, stateHigh: ["metal_scrap","ash"], tempLow: -180, stateLow: "frozen_meat", @@ -756,6 +721,7 @@ elements.hazmat_body = { "grass_seed": { elem2:null, chance:0.05 }, "gold_coin": { elem2:null, chance:0.05 }, "diamond": { elem2:null, chance:0.05 }, + "sun": { elem1:"molten_tin", }, }, properties: { dead: false, @@ -846,7 +812,6 @@ elements.hazmat_body = { }; elements.hazmat_human = { - // color: ["#404040","#1a1a1a","#737373"], color: ["#404040","#1a1a1a","#737373"], category: "life", properties: { @@ -896,7 +861,6 @@ elements.zombie_head = { "meat": { elem2:null, chance:0.1 }, "cooked_meat": { elem2:null, chance:0.1 }, "cured_meat": { elem2:null, chance:0.1 }, - "light": { stain1:"#45eb2f" }, }, properties: { dead: false @@ -953,8 +917,13 @@ elements.zombie_body = { breakInto: ["infection","rotten_meat","bone","zombie_virus",], forceSaveColor: true, reactions: { - "head": { elem2: "zombie", }, - "body": { elem2: "zombie", }, + "head": { elem2: ["rotten_meat","zombie",], chance:0.8, }, + "body": { elem2: ["rotten_meat","zombie",], chance:0.5, }, + "oxygen": { elem2:"carbon_dioxide", chance:0.5 }, + "rotten_meat": { elem2: null, chance:0.5 }, + "meat": { elem2:null, chance:0.1 }, + "cooked_meat": { elem2:null, chance:0.1 }, + "cured_meat": { elem2:null, chance:0.1 }, }, properties: { @@ -1081,8 +1050,8 @@ elements.zombie_virus = { density: 30, state: "gas", reactions: { - "head": { elem2: ["zombie","rotten_meat",], chance: 0.2, }, - "body": { elem2: ["zombie","rotten_meat",], chance: 0.2, }, + "head": { elem2: ["zombie","rotten_meat",], chance: 0.5, }, + "body": { elem2: ["zombie","rotten_meat",], chance: 0.5, }, } } @@ -1102,7 +1071,7 @@ elements.matter = { elements.particle_accelerator_left = { behavior: behaviors.SOLID, color: ["#363aa3","#858585","#d1d1d1"], - density: 2400, + density: 8200, category: "machines", state: "solid", reactions: { @@ -1112,7 +1081,7 @@ elements.particle_accelerator_left = { elements.particle_accelerator_right = { behavior: behaviors.SOLID, color: ["#363aa3","#858585","#d1d1d1"], - density: 2400, + density: 8200, category: "machines", state: "solid", reactions: { @@ -1132,8 +1101,8 @@ elements.accelerated_matter_left = { category: "energy", density: 2.20, reactions: { - "accelerated_matter_right": { elem1: ["antimatter","pop",], chance: 0.3, }, - "accelerated_matter_left": { elem1: ["antimatter","pop",], chance: 0.3, }, + "accelerated_matter_right": { elem1: ["antimatter","pop",null,], chance: 0.3, }, + "accelerated_matter_left": { elem1: ["antimatter","pop",null,], chance: 0.3, }, "antimatter": { elem1: "pop", chance: 0.01, }, } @@ -1150,8 +1119,8 @@ elements.accelerated_matter_right = { category:"energy", density: 2.20, reactions: { - "accelerated_matter_left": { elem1: ["antimatter","pop",], chance: 0.3, }, - "accelerated_matter_right": { elem1: ["antimatter","pop",], chance: 0.3, }, + "accelerated_matter_left": { elem1: ["antimatter","pop",null,], chance: 0.3, }, + "accelerated_matter_right": { elem1: ["antimatter","pop",null,], chance: 0.3, }, "antimatter": { elem1: "pop", chance: 0.01, }, } diff --git a/mods/scenexe.js b/mods/scenexe.js index 9fa9ac32..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,11 +13,191 @@ 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, + 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) => { + if (event.key === "w") { + isKeyDown.w = true; + } + if (event.key === "a") { + isKeyDown.a = true; + } + if (event.key === "s") { + isKeyDown.s = true; + } + 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) => { + if (event.key === "w") { + isKeyDown.w = false; + } + if (event.key === "a") { + isKeyDown.a = false; + } + if (event.key === "s") { + isKeyDown.s = false; + } + 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) +} +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){ @@ -30,12 +211,8 @@ function polygonCount(random){ } } polygonList = [] -zoomLevel = .2 -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), @@ -45,42 +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, + 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) + ")" +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 < polygonList.length; poly++){ - let polygon = polygonList[poly] + for (var poly = 0; poly < collideList.length; poly++){ + let polygon = collideList[poly] if (polygon.vx || polygon.vy){ polygon.x += polygon.vx polygon.y += polygon.vy polygon.vx *= 0.8 polygon.vy *= 0.8 } - polygon.rotation += 1.00672*Math.pow(0.344151, polygon.sides) + 0.000002 + } + // orbit polygons + for (var poly = 0; poly < polygonList.length; poly++){ + let polygon = polygonList[poly] + polygon.rotation += 1/orbitalSpeed(polygon.sides) // add some velocity towards wherever its facing - polygon.vx += Math.sin(polygon.rotation)*(1.00672*Math.pow(0.344151, polygon.sides) + 0.000002)*8 - polygon.vy += Math.cos(polygon.rotation)*(1.00672*Math.pow(0.344151, polygon.sides) + 0.000002)*8 + 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 + // add velocity to player depending on which keys are down + if (isKeyDown.w){ + if (isKeyDown.a + isKeyDown.d == 1){ + scenexeplayer.vy -= 1/Math.sqrt(2) + } else{ + scenexeplayer.vy -= 1 + } + } + if (isKeyDown.s){ + if (isKeyDown.a + isKeyDown.d == 1){ + scenexeplayer.vy += 1/Math.sqrt(2) + } else{ + scenexeplayer.vy += 1 + } + } + if (isKeyDown.a){ + if (isKeyDown.w + isKeyDown.s == 1){ + scenexeplayer.vx -= 1/Math.sqrt(2) + } else{ + scenexeplayer.vx -= 1 + } + } + if (isKeyDown.d){ + if (isKeyDown.w + isKeyDown.s == 1){ + scenexeplayer.vx += 1/Math.sqrt(2) + } else{ + scenexeplayer.vx += 1 + } + } + if (isKeyDown.i){ + zoomLevel += 0.02 + } + if (isKeyDown.o){ + zoomLevel -= 0.02 } }) \ No newline at end of file diff --git a/mods/wine.js b/mods/wine.js new file mode 100644 index 00000000..a75f8d0f --- /dev/null +++ b/mods/wine.js @@ -0,0 +1,8 @@ + elements.wine = { + color: "#89281D", + behavior: behaviors.LIQUID, + category: "food", + viscosity: 20000, + state: "liquid", + density: 380, +};