diff --git a/mods/drugs.js b/mods/drugs.js index 38ccb7a1..34594a83 100644 --- a/mods/drugs.js +++ b/mods/drugs.js @@ -27,8 +27,116 @@ elements.morphine = { color: "#c4dcf2", state: "solid", behavior: behaviors.POWDER, + tempHigh: 10000, + stateHigh: "n_explosion", reactions: { "head": {elem1: "n_explosion", elem2: "n_explosion", chance: 0.00008}, "body": {elem1: "n_explosion", elem2: "n_explosion", chance: 0.00008}, }, -}; \ No newline at end of file +}; + +elements.cigarette = { + category: "solids", + color: ["#754531", "#e1e1dd"], + state: "solid", + behavior: [ + "XX|CR:smoke%1 AND CR:carbon_dioxide%0.5|XX", + "CR:smoke%1 AND CR:carbon_dioxide%0.5|XX|CR:smoke%1 AND CR:carbon_dioxide%0.5", + "XX|CR:smoke%1 AND CR:carbon_dioxide%0.5|XX", + ], + tempHigh: 233, + stateHigh: ["ash", "fire"], + breakInto: ["dust", "ash", "ash", "ash", "charcoal"], +}; + +elements.cannabis = { + category: "powders", + state: "solid", + tempHigh: 100, + stateHigh: "dead_plant", + burn: 15, + burnTime: 60, + burnInto: "dead_plant", + breakInto: "dead_plant", + behavior: behaviors.POWDER, + color: ["#2C7415", "#1D5F00", "#B2DC29", "#B2DC29", "#2C7415"], + reactions: { + "head": { elem1: null, elem2: "fly" } + }, +} + +elements.cannabis_seed = { + category: "life", + state: "solid", + tempHigh: 120, + stateHigh: "dead_plant", + breakInto: "cannabis", + behavior: [ + "CR:cannabis_branch%2|CR:cannabis_branch%2|CR:cannabis_branch%2", + "XX|XX|XX", + "XX|M1|XX", + ], + color: "#57272C", +} + +elements.cannabis_branch = { + category: "life", + hidden: true, + state: "solid", + tempHigh: 120, + stateHigh: "dead_plant", + breakInto: "dead_plant", + behavior: [ + "CR:cannabis_branch%0.7|CR:cannabis_branch%3|CR:cannabis_branch%0.7", + "CR:cannabis%4|XX|CR:cannabis%4", + "CR:cannabis%4|XX|CR:cannabis%4", + ], + color: "#57272C", +} + +elements.weed = { + category: "powders", + behavior: behaviors.POWDER, + state: "solid", + tempHigh: 150, + stateHigh: "dead_plant", + breakInto: "dead_plant", + burn: 15, + burnTime: 60, + burnInto: "dead_plant", + color: ["#71B441", "#416201", "#426D06", "#91CA6F"] +} + +elements.weed_seed = { + category: "life", + state: "solid", + tempHigh: 150, + stateHigh: "dead_plant", + breakInto: "weed", + burn: 10, + burnTime: 60, + burnInto: "dead_plant", + color: "#5c4532", + behavior: [ + "CR:weed_branch%0.2|CR:weed_branch%0.2|CR:weed_branch%0.2", + "XX|XX|XX", + "XX|M1|XX", + ], +} + +elements.weed_branch = { + category: "life", + hidden: true, + state: "solid", + tempHigh: 150, + stateHigh: "dead_plant", + breakInto: "weed", + burn: 10, + burnTime: 60, + color: "#5c4532", + behavior: [ + "CR:weed_branch%0.7|CR:weed_branch%3|CR:weed_branch%0.7", + "CR:cannabis%4|XX|CR:cannabis%4", + "CR:cannabis%4|XX|CR:cannabis%4" + ], +} \ No newline at end of file diff --git a/mods/musicMod.js b/mods/musicMod.js new file mode 100644 index 00000000..eb43dba4 --- /dev/null +++ b/mods/musicMod.js @@ -0,0 +1,334 @@ += new AudioContext() + +//orbit-loona made the note block mod but then I just added more, so don’t credit me for making a note block system.audioContext + +oscillatorDefaults = { + frequency: 440, + type: "sine", + endType: "none", + length: 0.5, + volume: 1, + delay: 0, +}; + +audioObject = {}; + +function oscillator(name="test",parameterObject=oscillatorDefaults){ + var defaultKeys = Object.keys(oscillatorDefaults); //readability variable + + for(i = 0; i < defaultKeys.length; i++) { + var key = defaultKeys[i]; //the indexed keyname + if(typeof(parameterObject[key]) === "undefined") { + parameterObject[key] = oscillatorDefaults[key]; + }; + }; + + var oscillatorNodeName = `${name}Oscillator`; + var gainNodeName = `${name}Gain`; + + audioObject[oscillatorNodeName] = audioContext.createOscillator() + audioObject[gainNodeName] = audioContext.createGain() + audioObject[gainNodeName].gain.value = parameterObject.volume; + audioObject[oscillatorNodeName].type = parameterObject.type + audioObject[oscillatorNodeName].connect(audioObject[gainNodeName]) + audioObject[oscillatorNodeName].frequency.value = parameterObject.frequency + audioObject[gainNodeName].connect(audioContext.destination) + audioObject[oscillatorNodeName].start(audioContext.currentTime + parameterObject.delay) + + //stopping handler + if(parameterObject.endType === "exponential") { //starts fading immediately + audioObject[gainNodeName].gain.exponentialRampToValueAtTime( + 0.00001, audioContext.currentTime + parameterObject.length + ); + } else if(parameterObject.endType === "linear") { //starts fading immediately + audioObject[gainNodeName].gain.linearRampToValueAtTime( + 0.00001, audioContext.currentTime + parameterObject.length + ); + } else { //waits to stop + audioObject[oscillatorNodeName].stop(audioContext.currentTime + parameterObject.delay + parameterObject.length); + }; +}; + +elements.note_block_very_high = { + color: “#dc1212", + behavior: behaviors.WALL, + state: "solid", + category: “music", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 600, + type: "sine", + endType: "none", + length: 0.5, + volume: 1, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + +elements.note_block_high = { + color: "#e5359f", + behavior: behaviors.WALL, + state: "solid", + category: “music", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 500, + type: "sine", + endType: "none", + length: 0.5, + volume: 1, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + + +elements.note_block = { + color: "#ee33ee", + behavior: behaviors.WALL, + state: "solid", + category: “music", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 400, + type: "sine", + endType: "none", + length: 0.5, + volume: 1, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + + +elements.note_block_low = { + color: "#7310a7", + behavior: behaviors.WALL, + state: "solid", + category: "machines", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 300, + type: "sine", + endType: "music", + length: 0.5, + volume: 1, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + +elements.note_block_very_low = { + color: "#3310d8", + behavior: behaviors.WALL, + state: "solid", + category: "music", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 200, + type: "sine", + endType: "none", + length: 0.5, + volume: 1, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + +elements.note_block_super_low = { + color: “#12c6dc", + behavior: behaviors.WALL, + state: "solid", + category: “music", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 200, + type: "sine", + endType: "none", + length: 0.5, + volume: 1, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + +elements.note_block_test = { + color: “#ffffff", + behavior: behaviors.WALL, + state: "solid", + category: “music", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 400, + type: "square", + endType: "none", + length: 0.5, + volume: 1, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + +elements.note_block_loud = { + color: "#000000", + behavior: behaviors.WALL, + state: "solid", + category: “music", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 440, + type: "sine", + endType: "none", + length: 1, + volume: 10, + delay: 0, + debounce: 0, + debounceLength: tps, + tick: function(pixel) { + +elements.note_block_long = { + color: "#23ab0f", + behavior: behaviors.WALL, + state: "solid", + category: “music", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 400, + type: "sine", + endType: "none", + length: 2.5, + volume: 1, + delay: 0, + debounce: 0, + debounceLength: tps, + tick: function(pixel) { + +elements.note_block_beep = { + color: "#f8e258", + behavior: behaviors.WALL, + state: "solid", + category: “music", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 1000, + type: "sine", + endType: "none", + length: 0.1, + volume: 1, + delay: 0, + debounce: 0, + debounceLength: tps, + tick: function(pixel) { + +elements.note_connecter_fast = { + color: "#ac2b2b", + behavior: behaviors.WALL, + category: "music", + insulate: true, + conduct: 2, + noMix: true, +}, + +elements.note_connecter = { + color: "#c8c22d", + behavior: behaviors.WALL, + category: "music", + insulate: true, + conduct: 1, + noMix: true, +}, + +elements.note_connecter_slow = { + color: "#2d6fc8", + behavior: behaviors.WALL, + category: "music", + insulate: true, + conduct: 0.5, + noMix: true, +}, + +elements.note_connecter_very_slow = { + color: "#184584", + behavior: behaviors.WALL, + category: "music", + insulate: true, + conduct: 0.1, + noMix: true, +}, + +elements.generator= { + color: "#989888", + behavior: [ + "XX|SH|XX", + "SH|XX|SH", + "XX|SH|XX", + category: "machines", + ], + + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + +runAfterLoad(function() { + elements.note_block.movable = false; +}); + +if(runAfterAutogen) { + runAfterAutogen(function() { + elements.note_block.movable = false; + }); +}; diff --git a/mods/radioactive.js b/mods/radioactive.js new file mode 100644 index 00000000..4e7967fa --- /dev/null +++ b/mods/radioactive.js @@ -0,0 +1,111 @@ +elements.technetium = { + category: "powders", + state: "solid", + color: "#D3D3D3", + tempHigh: 2157, + stateHigh: "molten_technetium", + density: 11359, + temp: 20, + behavior: [ + "XX|CR:radiation%3 AND CR:fallout%0.2|XX", + "CR:radiation%3 AND CR:fallout%0.2|XX|CR:radiation%3 AND CR:fallout%0.2", + "M1|CR:radiation%3 AND M2 AND CR:fallout%0.2|M1", + ], + reactions: { + "water": { elem1: null, elem2: "dirty_water" }, + }, +} + +elements.molten_technetium = { + category: "states", + hidden: true, + state: "liquid", + color: ["#F2F2E5", "#E0C29F", "#D0CFC7", "#BDB7B0", "#A0958C", "#FFB300", "#F0E68C", "#BD10E0", "#FFF0F5"], + behavior: [ + "XX|CR:radiation%3 AND CR:fallout%0.2 AND CR:plasma,fire,fire,fire,fire%0.5|XX", + "M2 AND CR:radiation%3 AND CR:fallout%0.2 AND CR:plasma,fire,fire,fire,fire%0.5|XX|M2 AND CR:radiation%3 AND CR:fallout%0.2 AND CR:plasma,fire,fire,fire,fire%0.5", + "M1|M1 AND CR:radiation%3 AND CR:fallout%0.2|M1", + ], + tempLow: 2157, + stateLow: "technetium", + density: 11359, +} + +elements.francium = { + category: "powders", + state: "solid", + color: ["#DE0047", "#4169E1", "#007FFF", "#9ACD32", "#FFD700", "#C800C8"], + behavior: [ + "XX|CR:radiation%1.5|XX", + "CR:radiation%1.5|XX|CR:radiation%1.5", + "M2|M1 AND CR:radiation%1.5|M2", + ], + tempHigh: 27, + stateHigh: "molten_francium", + density: 2480, +} + +elements.molten_francium = { + category: "states", + hidden: true, + tempLow: 27, + stateLow: "francium", + density: 2480, + color: ["#C71585", "#FF00FF", "#A020F0", "#4B0082", "#EE82EE", "#FF9933", "#F97A3E", "#F05945"], + behavior: [ + "XX|CR:fire,fire,fire,fire,plasma%2 AND CR:radiation%0.6|XX", + "M2 AND CR:fire,fire,fire,fire,plasma%2 AND CR:radiation%0.6|XX|M2 AND CR:fire,fire,fire,fire,plasma%2 AND CR:radiation%0.6", + "M1|M1 AND CR:fire,fire,fire,fire,plasma%2 AND CR:radiation%0.6|M1", + ], +} + +elements.radium = { + category: "powders", + tempHigh: 700, + stateHigh: "molten_radium", + density: 5500, + state: "solid", + color: ["#F0F0F0", "#C0C0C0", "#A9A9A9", "#707070", "#303030"], + behavior: [ + "XX|CR:radiation%3|XX", + "CR:radiation%3|XX|CR:radiation%3", + "M2|M1 AND CR:radiation%3|M2", + ], +} + +elements.molten_radium = { + category: "states", + hidden: true, + tempLow: 700, + density: 5500, + stateLow: "radium", + color: ["#F0E0D6", "#D3B29E", "#B78473", "#A0534A", "#FFB300", "#F05945"], + behavior: [ + "XX|CR:fire,fire,fire,fire,plasma%1 AND CR:radiation%3|XX", + "M2 AND CR:fire,fire,fire,fire,plasma%1 AND CR:radiation%3|XX|M2 AND CR:fire,fire,fire,fire,plasma%1 AND CR:radiation%3", + "M1|M1 AND CR:fire,fire,fire,fire,plasma%1 AND CR:radiation%3|M1", + ], +} + +elements.rutherfordium = { + category: "powders", + state: "solid", + tempHigh: 2100, + stateHigh: "molten_rutherfordium", + density: 17000, + color: ["#C0C0C0", "#B3B3B3", "#A6A6A6", "#8C8C8C", "#737373"], + behavior: [ + "XX|CR:radiation%5 AND CR:fallout%0.3|XX", + "CR:radiation%5 AND CR:fallout%0.3|XX|CR:radiation%5 AND CR:fallout%0.3", + "M2|M1 AND CR:radiation%5 AND CR:fallout%0.3|M2", + ], +} + +elements.molten_rutherfordium = { + category: "states", + state: "liquid", + hidden: true, + tempLow: 2100, + stateLow: "rutherfordium", + density: 17000, +} \ No newline at end of file