From dd30ae2d334c3c1b2697f914ae2226c9654ff573 Mon Sep 17 00:00:00 2001
From: O-01-67 <68935009+O-01-67@users.noreply.github.com>
Date: Sun, 2 Oct 2022 15:09:48 -0400
Subject: [PATCH] Made spawning a setting, toggle in element desc
---
mods/creepers.js | 75 +++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 74 insertions(+), 1 deletion(-)
diff --git a/mods/creepers.js b/mods/creepers.js
index 2ecc0883..cdd0ecdf 100644
--- a/mods/creepers.js
+++ b/mods/creepers.js
@@ -1,5 +1,20 @@
//Prerequisite Functions and Variables
+var style = document.createElement('style'); //Initialize CSS for creeper spawning's status indicator
+style.type = 'text/css';
+style.id = 'creeperStatusStylesheet';
+//initial style conditional branch
+if(typeof(settings.creeperSpawning) === "undefined") { //undefined (falsy but it needs special handling)
+ style.innerHTML = '.creeperStatus { color: #E11; text-decoration: none; }';
+} else {
+ if(!settings.creeperSpawning) { //falsy: red
+ style.innerHTML = '.creeperStatus { color: #E11; text-decoration: none; }';
+ } else if(settings.creeperSpawning) { //truthy: green
+ style.innerHTML = '.creeperStatus { color: #1E1; text-decoration: none; }';
+ };
+};
+document.getElementsByTagName('head')[0].appendChild(style);
+
function pyth(xA,yA,xB,yB) { //Distance function, used for explosion trigger
var a = Math.abs(xB - xA);
var b = Math.abs(yB - yA);
@@ -166,8 +181,66 @@ function explodeAtPlus(x,y,radius,fire="fire",smoke="smoke",beforeFunction=null,
};
};
+if(typeof(settings.creeperSpawning) === "undefined") { //Default creeper setting
+ setSetting("creeperSpawning",false);
+};
+
+function updateCreeperPreferences() { //Creeper setting handler
+ if(settings.creeperSpawning) { //If the setting is on
+ if(typeof(randomEvents.creeper) !== "function") { //add the event if it's missing
+ randomEvents.creeper = function() {
+ // random x between 1 and width-1
+ var x = Math.floor(Math.random()*(width-1))+1;
+ // random y between 1 and height
+ var y = Math.floor(Math.random()*height-1)+1;
+ if (isEmpty(x,y)) {
+ // random element from randomEventChoices.falling_pixel
+ var element = creepers[Math.floor(Math.random()*creepers.length)];
+ // if element is an array, choose a random element from the array
+ if (Array.isArray(element)) {
+ element = element[Math.floor(Math.random()*element.length)];
+ }
+ createPixel(element,x,y);
+ };
+ };
+ };
+ } else if(!settings.creeperSpawning) { //and if it's off
+ if(randomEvents.creeper) { delete randomEvents.creeper }; //delete it if it exists.
+ };
+};
+
+function toggleCreeperSpawning() { //Creeper toggle handler
+ if(settings.creeperSpawning != true) { //If it's false
+ setSetting("creeperSpawning",true); //make it true and update the status display CSS
+ document.getElementById("creeperStatusStylesheet").innerHTML = '.creeperStatus { color: #1E1; text-decoration: underline; }'; //Displayed info doen't update until it's pulled up again, so I'm using CSS to dynamically change the color of an element, like with find.js (RIP).
+ } else { //and the inverse if it's true
+ setSetting("creeperSpawning",false);
+ document.getElementById("creeperStatusStylesheet").innerHTML = '.creeperStatus { color: #E11; text-decoration: none; }';
+ };
+};
+
enemyHumanoidArray = ["head","body"] //just in case
+creepers = ["creeper","angelic_creeper","bombing_creeper","hell_creeper"];
+
+if(settings.creeperSpawning) { //creeper spawning option
+ randomEvents.creeper = function() {
+ // random x between 1 and width-1
+ var x = Math.floor(Math.random()*(width-1))+1;
+ // random y between 1 and height
+ var y = Math.floor(Math.random()*height-1)+1;
+ if (isEmpty(x,y)) {
+ // random element from randomEventChoices.falling_pixel
+ var element = creepers[Math.floor(Math.random()*creepers.length)];
+ // if element is an array, choose a random element from the array
+ if (Array.isArray(element)) {
+ element = element[Math.floor(Math.random()*element.length)];
+ }
+ createPixel(element,x,y);
+ };
+ };
+};
+
/*Start Main Creeper
##################
######### ######
@@ -211,7 +284,7 @@ elements.creeper = {
}
},
related: ["creeper_body","creeper_head"],
- desc: 'So we back in the mine...'
+ desc: "I'd rather this be toggleable mid-game than require a reload.
If this text is green or underlined, creepers can spawn. Click here to toggle creeper spawning. If it's on, creepers (all types) can spawn through random events."
};
elements.creeper_body = {