Skip to content

Instantly share code, notes, and snippets.

@MRandyPE
Last active August 29, 2015 14:03
Show Gist options
  • Save MRandyPE/42b76e0a4adf22c036f4 to your computer and use it in GitHub Desktop.
Save MRandyPE/42b76e0a4adf22c036f4 to your computer and use it in GitHub Desktop.
Thunderstorm mod
//Thunder Storm mod for Extended Team!
Block.defineBlock(174, "Storm Cloud", [["snow", 0]], 0, true);
Block.setColor(174, [0x545353]);
Block.defineBlock(175, "Lightning Bolt", [["ice", 0]], 0, false);
Block.setColor(175, [0xC1FFFC]);
Block.setLightLevel(175, 15);
var timeToStorm = false;
var dayTick = 14400;
var randNumTrue = Math.floor((Math.random()*100)+1);
var tryNum = 0;
var startCountdown = false;
var startClouds = false;
var cloudX = [0, 1, 2, -1, -2, 0, 1, 2, -1, -2, 0, 1, -1, -2, 0, 1, 2, -1, 3, 1, 2, 3, 0, -3, -1, -2, 0, -3, -1, -2, -1, -2, 3, -3, 3, -3, 4, -2, 4, 0, -1, 3, 2, 1, 2, -3, 1, -4, 1, -4, 0, -3, -1, -2, 0, 1, 2, -1, -2, 0, 1, 2, -1, -2, 0, 1, -1, -2, 0, 1, 2, -1, 3, 1, 2, 3, 0, -3, -1, -2, 0, -3, -1, -2, -1, -2, 0, -1, 0, -1, -2, 0, 1, 3];
var cloudY = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3];
var cloudZ = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, -1, -1, -1, -1, 2, 2, 2, 2, 2, 3, 3, 3, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, 0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, -1, -1, -2, -2, -3, -3, -4, -4, -4, -4, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, -1, -1, -1, -1, 2, 2, 2, 2, 2, 3, 3, 3, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, 0, 0, -1, -1, -2, 1, 1, 2];
var removeCloudX = [];
var removeCloudY = [];
var removeCloudZ = [];
var removeCloudRot = [];
var lightningX = [];
var lightningY = [];
var lightningZ = [];
var lightningX2 = [];
var lightningY2 = [];
var lightningZ2 = [];
var lightningX3 = [];
var lightningY3 = [];
var lightningZ3 = [];
var lightningX4 = [];
var lightningY4 = [];
var lightningZ4 = [];
var lightningX5 = [];
var lightningY5 = [];
var lightningZ5 = [];
var stormCount = false;
var stormDur = 0;
var savedStormDur = 0;
var startCloudsTime = 0;
var timeToSet = false;
var timeToRemove = false;
var setCloudNum = 0;
var removeCloudNum = 0;
var timeToLightning = false;
var lightningDelay = 0;
function newLevel(){
startCountdown = true
for(var l = 0; l < 4; l++){
print("Generating Lightning: " + (l+1) + " of 5");
generateLightning(l);
}
}
function modTick(){
if(startCountdown==true){
dayTick--;
if(dayTick%144==0){
if(tryNum==randNumTrue){
timeToStorm = true;
startCountdown = false;
}else{
tryNum++;
}
}
}
if(timeToStorm==true){
var lightningTick = Math.floor((Math.random()*100)+750);
stormDur = Math.floor((Math.random()*600)+4000);
savedStormDur = stormDur;
startCloudsTime = Math.floor((Math.random()*100)+100);
clientMessage("A storm is coming!!");
clientMessage("Gain shelter immediately!!");
startClouds = true;
timeToStorm = false;
stormCount = true;
startCountdown = false;
}
if(stormCount == true){
stormDur--;
Level.setTime(8280);
if(savedStormDur-stormDur==lightningTick){
var randL = Math.floor(Math.random()*5);
timeToLightning = true;
}
if(stormDur == 0){
timeToRemove = true;
Level.setTime(0);
startCountdown = true;
dayTick = 14400;
stormCount = false;
}
}
if(startClouds==true){
startCloudsTime--;
if(startCloudsTime==0){
setAllClouds();
timeToSet = true;
startClouds = false;
}
}
if(timeToSet==true){
setCloud1(removeCloudX[setCloudNum], removeCloudY[setCloudNum], removeCloudZ[setCloudNum], removeCloudRot[setCloudNum]);
setCloudNum++;
if(setCloudNum==removeCloudX.length){
timeToSet==false;
}
}
if(timeToRemove==true){
removeCloud1(removeCloudX[removeCloudNum], removeCloudY[removeCloudNum], removeCloudZ[removeCloudNum], removeCloudRot[removeCloudNum]);
removeCloudNum++;
if(removeCloudNum==removeCloudX.length){
timeToRemove==false;
}
}
if(timeToLightning==true){
lightningDelay++;
if(lightningDelay==1){
setLightning(randL, 175);
}else if(lightningDelay==2){
setLightning(randL, 0);
}else if(lightningDelay==3){
setLightning(randL, 175);
}else if(lightningDelay==4){
setLightning(randL, 0);
lightningTick = Math.floor((Math.random()*100)+750);
savedStormDur = stormDur;
timeToLightning = false;
}
}
}
var setCloud1 = function(x, y, z, randRot){
if(randRot == 0){
rot1 = cloudX;
rot2 = cloudZ;
}else{
rot1 = cloudZ;
rot2 = cloudX;
}
for(var c = 0; c < cloudX.length; c++){
setTile(x+rot1[c], y+cloudY[c], z+rot2[c], 174);
}
}
var removeCloud1 = function(x, y, z, randRot){
if(randRot == 0){
rot1 = cloudX;
rot2 = cloudZ;
}else{
rot1 = cloudZ;
rot2 = cloudX;
}
for(var c = 0; c < cloudX.length; c++){
setTile(x+rot1[c], y+cloudY[c], z+rot2[c], 0);
}
}
function procCmd(cmd){
var c = cmd.split(" ");
if(c[0]=="thunderstorm"){
timeToStorm = true;
}
}
var setAllClouds = function(){
print("Generating Clouds");
for(var a = 0; a < 256; a++){
for(var b = 0; b < 256; b++){
var shouldContinue = Math.floor(Math.random()*2);
var aDist = Math.floor((Math.random()*5)+3);
var bDist = Math.floor((Math.random()*5)+3);
var randCloudY = Math.floor((Math.random()*20)+107);
var addCloud = Math.floor(Math.random()*3);
var thisRandRot = Math.floor(Math.random()*2);
if((a%aDist == 0)&&(b%bDist == 0)&&(shouldContinue == 1)){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
if(addCloud == 1){
var distAddCloud = Math.floor((Math.random()*4)+4);
var randAddCloudDir = Math.floor((Math.random()*4)+1);
if(randAddCloudDir == 1){
removeCloudX.push(a+distAddCloud);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 2){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b+distAddCloud);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 3){
removeCloudX.push(a-distAddCloud);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 4){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b-distAddCloud);
removeCloudRot.push(thisRandRot);
}
}
}
}
}
}
var generateLightning = function(n){
var randXT = Math.floor(Math.random()*256);
var randYT = Math.floor((Math.random()*10)+117);
var randZT = Math.floor(Math.random()*256);
var randXB = Math.floor(Math.random()*256);
var randZB = Math.floor(Math.random()*256);
var addAnother = Math.floor((Math.random()*4)+1);
for(var y = 63; y < 127; y++){
if((getTile(randXB, y, randZB)!==0)&&(getTile(randXB, y+1, randZB)==0)){
var randYB = y+1;
}
}
var slopeX = (randYT-randYB)/(randXT-randXB);
var slopeZ = (randYT-randYB)/(randZT-randZB);
for(var i = randXB; i < randXT; i++){
for(var j = randYB; j < randYT; j++){
for(var k = randZB; k < randZT; k++){
if(((j-randYB)==slopeX(i-randXB))&&((j-randYB)==slopeZ(k-randZB))){
if(n==0){
lightningX.push[i];
lightningY.push[j];
lightningZ.push[k];
}else if(n==1){
lightningX2.push[i];
lightningY2.push[j];
lightningZ2.push[k];
}else if(n==2){
lightningX3.push[i];
lightningY3.push[j];
lightningZ3.push[k];
}else if(n==3){
lightningX4.push[i];
lightningY4.push[j];
lightningZ4.push[k];
}else if(n==4){
lightningX5.push[i];
lightningY5.push[j];
lightningZ5.push[k];
}
}
}
}
}
}
var setLightning = function(random, blockNum){
var tempArrayX, tempArrayY, tempArrayZ;
if(random==0){
tempArrayX = lightningX;
tempArrayY = lightningY;
tempArrayZ = lightningZ;
}else if(random==1){
tempArrayX = lightningX2;
tempArrayY = lightningY2;
tempArrayZ = lightningZ2;
}else if(random==2){
tempArrayX = lightningX3;
tempArrayY = lightningY3;
tempArrayZ = lightningZ3;
}else if(random==3){
tempArrayX = lightningX4;
tempArrayY = lightningY4;
tempArrayZ = lightningZ4;
}else if(random==4){
tempArrayX = lightningX5;
tempArrayY = lightningY5;
tempArrayZ = lightningZ5;
}
for(var z = 0; z < tempArrayX.length; z++){
setTile(tempArrayX[z], tempArrayY[z], tempArrayZ[z], blockNum);
}
}
//Thunder Storm mod for Extended Team!
Block.defineBlock(174, "Storm Cloud", [["snow", 0]], 0, true);
Block.setColor(174, [0x545353]);
Block.defineBlock(175, "Lightning Bolt", [["ice", 0]], 0, false);
Block.setColor(175, [0xC1FFFC]);
Block.setLightLevel(175, 15);
var timeToStorm = false;
var dayTick = 14400;
var randNumTrue = Math.floor((Math.random()*100)+1);
var tryNum = 0;
var startCountdown = false;
var startClouds = false;
var cloudX = [0, 1, 2, -1, -2, 0, 1, 2, -1, -2, 0, 1, -1, -2, 0, 1, 2, -1, 3, 1, 2, 3, 0, -3, -1, -2, 0, -3, -1, -2, -1, -2, 3, -3, 3, -3, 4, -2, 4, 0, -1, 3, 2, 1, 2, -3, 1, -4, 1, -4, 0, -3, -1, -2, 0, 1, 2, -1, -2, 0, 1, 2, -1, -2, 0, 1, -1, -2, 0, 1, 2, -1, 3, 1, 2, 3, 0, -3, -1, -2, 0, -3, -1, -2, -1, -2, 0, -1, 0, -1, -2, 0, 1, 3];
var cloudY = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3];
var cloudZ = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, -1, -1, -1, -1, 2, 2, 2, 2, 2, 3, 3, 3, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, 0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, -1, -1, -2, -2, -3, -3, -4, -4, -4, -4, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, -1, -1, -1, -1, 2, 2, 2, 2, 2, 3, 3, 3, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, 0, 0, -1, -1, -2, 1, 1, 2];
var removeCloudX = [];
var removeCloudY = [];
var removeCloudZ = [];
var removeCloudRot = [];
var lightningX = [];
var lightningY = [];
var lightningZ = [];
var lightningX2 = [];
var lightningY2 = [];
var lightningZ2 = [];
var lightningX3 = [];
var lightningY3 = [];
var lightningZ3 = [];
var lightningX4 = [];
var lightningY4 = [];
var lightningZ4 = [];
var lightningX5 = [];
var lightningY5 = [];
var lightningZ5 = [];
var stormCount = false;
var stormDur = 0;
var savedStormDur = 0;
var startCloudsTime = 0;
var timeToSet = false;
var timeToRemove = false;
var setCloudNum = 0;
var removeCloudNum = 0;
var timeToLightning = false;
var lightningDelay = 0;
function newLevel(){
startCountdown = true
for(var l = 0; l < 4; l++){
print("Generating Lightning: " + (l+1) + " of 5");
generateLightning(l);
}
}
function modTick(){
if(startCountdown==true){
dayTick--;
if(dayTick%144==0){
if(tryNum==randNumTrue){
timeToStorm = true;
startCountdown = false;
}else{
tryNum ++;
}
}
}
if(timeToStorm==true){
var lightningTick = Math.floor((Math.random()*100)+750);
stormDur = Math.floor((Math.random()*600)+4000);
savedStormDur = stormDur;
startCloudsTime = Math.floor((Math.random()*100)+100);
clientMessage("A storm is coming!!");
clientMessage("Gain shelter immediately!!");
startClouds = true;
timeToStorm = false;
stormCount = true;
startCountdown = false;
}
if(stormCount == true){
stormDur--;
Level.setTime(8280);
if(savedStormDur-stormDur==lightningTick){
var randL = Math.floor(Math.random()*5);
timeToLightning = true;
}
if(stormDur == 0){
timeToRemove = true;
Level.setTime(0);
startCountdown = true;
dayTick = 14400;
stormCount = false;
}
}
if(startClouds==true){
startCloudsTime--;
if(startCloudsTime==0){
setAllClouds();
timeToSet = true;
startClouds = false;
}
}
if(timeToSet==true){
setCloud1(removeCloudX[setCloudNum], removeCloudY[setCloudNum], removeCloudZ[setCloudNum], removeCloudRot[setCloudNum]);
setCloudNum++;
if(setCloudNum==removeCloudX.length){
timeToSet==false;
}
}
if(timeToRemove==true){
removeCloud1(removeCloudX[removeCloudNum], removeCloudY[removeCloudNum], removeCloudZ[removeCloudNum], removeCloudRot[removeCloudNum]);
removeCloudNum++;
if(removeCloudNum==removeCloudX.length){
timeToRemove==false;
}
}
if(timeToLightning==true){
lightningDelay++;
if(lightningDelay==1){
setLightning(randL, 175);
}else if(lightningDelay==2){
setLightning(randL, 0);
}else if(lightningDelay==3){
setLightning(randL, 175);
}else if(lightningDelay==4){
setLightning(randL, 0);
lightningTick = Math.floor((Math.random()*100)+750);
savedStormDur = stormDur;
timeToLightning = false;
}
}
}
var setCloud1 = function(x, y, z, randRot){
if(randRot == 0){
rot1 = cloudX;
rot2 = cloudZ;
}else{
rot1 = cloudZ;
rot2 = cloudX;
}
for(var c = 0; c < cloudX.length; c++){
setTile(x+rot1[c], y+cloudY[c], z+rot2[c], 174);
}
}
var removeCloud1 = function(x, y, z, randRot){
if(randRot == 0){
rot1 = cloudX;
rot2 = cloudZ;
}else{
rot1 = cloudZ;
rot2 = cloudX;
}
for(var c = 0; c < cloudX.length; c++){
setTile(x+rot1[c], y+cloudY[c], z+rot2[c], 0);
}
}
function procCmd(cmd){
var c = cmd.split(" ");
if(c[0]=="thunderstorm"){
timeToStorm = true;
}
}
var setAllClouds = function(){
print("Generating Clouds");
for(var a = getPlayerX()-127; a < getPlayerX()+127; a++){
for(var b = getPlayerZ()-127; b < getPlayerZ()+127; b++){
var shouldContinue = Math.floor(Math.random()*2);
var aDist = Math.floor((Math.random()*5)+3);
var bDist = Math.floor((Math.random()*5)+3);
var randCloudY = Math.floor((Math.random()*20)+107);
var addCloud = Math.floor(Math.random()*3);
var thisRandRot = Math.floor(Math.random()*2);
if((a%aDist == 0)&&(b%bDist == 0)&&(shouldContinue == 1)){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
if(addCloud == 1){
var distAddCloud = Math.floor((Math.random()*4)+4);
var randAddCloudDir = Math.floor((Math.random()*4)+1);
if(randAddCloudDir == 1){
removeCloudX.push(a+distAddCloud);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 2){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b+distAddCloud);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 3){
removeCloudX.push(a-distAddCloud);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 4){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b-distAddCloud);
removeCloudRot.push(thisRandRot);
}
}
}
}
}
}
var generateLightning = function(n){
var randXT = Math.floor(Math.random()*256);
var randYT = Math.floor((Math.random()*10)+117);
var randZT = Math.floor(Math.random()*256);
var randXB = Math.floor(Math.random()*256);
var randZB = Math.floor(Math.random()*256);
for(var y = 63; y < 127; y++){
if((getTile(randXB, y, randZB)!==0)&&(getTile(randXB, y+1, randZB)==0)){
var randYB = y+1;
}
}
var slopeX = (randYT-randYB)/(randXT-randXB);
var slopeZ = (randYT-randYB)/(randZT-randZB);
for(var i = randXB; i < randXT; i++){
for(var j = randYB; j < randYT; j++){
for(var k = randZB; k < randZT; k++){
if(((j-randYB)==slopeX(i-randXB))&&((j-randYB)==slopeZ(k-randZB))){
var addAnother = Math.floor((Math.random()*20)+1);
if(addAnother==10){
var randXBA = Math.floor(Math.random()*256);
var randZBA = Math.floor(Math.random()*256);
for(var ya = 63; ya < 127; ya++){
if((getTile(i, ya, randZBA)!==0)&&(getTile(i, ya+1, randZBA)==0)){
var randYBA = ya+1;
}
}
var slopeXA = (j-randYB)/(i-randXB);
var slopeZA = (j-randYB)/(k-randZB);
for(var ia = randXBA; ia < i; ia++){
for(var ja = randYBA; ja < j; ja++){
for(var ka = randZBA; ka < k; ka++){
if(((ja-randYBA)==slopeXA(ia-randXBA))&&((ja-randYBA)==slopeZA(ka-randZBA))){
if(n==0){
lightningX.push[i];
lightningY.push[j];
lightningZ.push[k];
}else if(n==1){
lightningX2.push[i];
lightningY2.push[j];
lightningZ2.push[k];
}else if(n==2){
lightningX3.push[i];
lightningY3.push[j];
lightningZ3.push[k];
}else if(n==3){
lightningX4.push[i];
lightningY4.push[j];
lightningZ4.push[k];
}else if(n==4){
lightningX5.push[i];
lightningY5.push[j];
lightningZ5.push[k];
}
}
}
}
}
}
if(n==0){
lightningX.push[i];
lightningY.push[j];
lightningZ.push[k];
}else if(n==1){
lightningX2.push[i];
lightningY2.push[j];
lightningZ2.push[k];
}else if(n==2){
lightningX3.push[i];
lightningY3.push[j];
lightningZ3.push[k];
}else if(n==3){
lightningX4.push[i];
lightningY4.push[j];
lightningZ4.push[k];
}else if(n==4){
lightningX5.push[i];
lightningY5.push[j];
lightningZ5.push[k];
}
}
}
}
}
}
var setLightning = function(random, blockNum){
var tempArrayX, tempArrayY, tempArrayZ;
if(random==0){
tempArrayX = lightningX;
tempArrayY = lightningY;
tempArrayZ = lightningZ;
}else if(random==1){
tempArrayX = lightningX2;
tempArrayY = lightningY2;
tempArrayZ = lightningZ2;
}else if(random==2){
tempArrayX = lightningX3;
tempArrayY = lightningY3;
tempArrayZ = lightningZ3;
}else if(random==3){
tempArrayX = lightningX4;
tempArrayY = lightningY4;
tempArrayZ = lightningZ4;
}else if(random==4){
tempArrayX = lightningX5;
tempArrayY = lightningY5;
tempArrayZ = lightningZ5;
}
for(var z = 0; z < tempArrayX.length; z++){
setTile(getPlayerX()+tempArrayX[z], tempArrayY[z], getPlayerZ()+tempArrayZ[z], blockNum);
}
}
//Thunder Storm mod for Extended Team!
Block.defineBlock(174, "Storm Cloud", [["snow", 0]], 0, true);
Block.setColor(174, [0x545353]);
Block.defineBlock(175, "Lightning Bolt", [["ice", 0]], 0, false);
Block.setColor(175, [0xC1FFFC]);
Block.setLightLevel(175, 15);
var timeToStorm = false;
var dayTick = 14400;
var randNumTrue = Math.floor((Math.random()*100)+1);
var tryNum = 0;
var startCountdown = false;
var startClouds = false;
var cloudX = [0, 1, 2, -1, -2, 0, 1, 2, -1, -2, 0, 1, -1, -2, 0, 1, 2, -1, 3, 1, 2, 3, 0, -3, -1, -2, 0, -3, -1, -2, -1, -2, 3, -3, 3, -3, 4, -2, 4, 0, -1, 3, 2, 1, 2, -3, 1, -4, 1, -4, 0, -3, -1, -2, 0, 1, 2, -1, -2, 0, 1, 2, -1, -2, 0, 1, -1, -2, 0, 1, 2, -1, 3, 1, 2, 3, 0, -3, -1, -2, 0, -3, -1, -2, -1, -2, 0, -1, 0, -1, -2, 0, 1, 3];
var cloudY = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3];
var cloudZ = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, -1, -1, -1, -1, 2, 2, 2, 2, 2, 3, 3, 3, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, 0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, -1, -1, -2, -2, -3, -3, -4, -4, -4, -4, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, -1, -1, -1, -1, 2, 2, 2, 2, 2, 3, 3, 3, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, 0, 0, -1, -1, -2, 1, 1, 2];
var removeCloudX = [];
var removeCloudY = [];
var removeCloudZ = [];
var removeCloudRot = [];
var lightningX = [];
var lightningY = [];
var lightningZ = [];
var lightningX2 = [];
var lightningY2 = [];
var lightningZ2 = [];
var lightningX3 = [];
var lightningY3 = [];
var lightningZ3 = [];
var lightningX4 = [];
var lightningY4 = [];
var lightningZ4 = [];
var lightningX5 = [];
var lightningY5 = [];
var lightningZ5 = [];
var stormCount = false;
var stormDur = 0;
var savedStormDur = 0;
var startCloudsTime = 0;
var timeToSet = false;
var timeToRemove = false;
var setCloudNum = 0;
var removeCloudNum = 0;
var timeToLightning = false;
var lightningDelay = 0;
function newLevel(){
startCountdown = true
for(var l = 0; l < 4; l++){
print("Generating Lightning: " + (l+1) + " of 5");
generateLightning(l);
}
}
function modTick(){
if(startCountdown==true){
dayTick--;
if(dayTick%144==0){
if(tryNum==randNumTrue){
timeToStorm = true;
startCountdown = false;
}else{
tryNum += 1;
}
}
}
if(timeToStorm==true){
var lightningTick = Math.floor((Math.random()*100)+750);
stormDur = Math.floor((Math.random()*600)+4000);
savedStormDur = stormDur;
startCloudsTime = Math.floor((Math.random()*100)+100);
clientMessage("A storm is coming!!");
clientMessage("Gain shelter immediately!!");
startClouds = true;
timeToStorm = false;
stormCount = true;
startCountdown = false;
}
if(stormCount == true){
stormDur--;
Level.setTime(8280);
if(savedStormDur-stormDur==lightningTick){
var randL = Math.floor(Math.random()*5);
timeToLightning = true;
}
if(stormDur == 0){
timeToRemove = true;
Level.setTime(0);
startCountdown = true;
dayTick = 14400;
stormCount = false;
}
}
if(startClouds==true){
startCloudsTime--;
if(startCloudsTime==0){
setAllClouds();
timeToSet = true;
startClouds = false;
}
}
if(timeToSet==true){
setCloud1(removeCloudX[setCloudNum], removeCloudY[setCloudNum], removeCloudZ[setCloudNum], removeCloudRot[setCloudNum], 174);
setCloudNum++;
if(setCloudNum==removeCloudX.length){
timeToSet==false;
}
}
if(timeToRemove==true){
setCloud1(removeCloudX[removeCloudNum], removeCloudY[removeCloudNum], removeCloudZ[removeCloudNum], removeCloudRot[removeCloudNum], 0);
removeCloudNum++;
if(removeCloudNum==removeCloudX.length){
timeToRemove==false;
}
}
if(timeToLightning==true){
lightningDelay++;
if(lightningDelay==1){
setLightning(randL, 175);
}else if(lightningDelay==2){
setLightning(randL, 0);
}else if(lightningDelay==3){
setLightning(randL, 175);
}else if(lightningDelay==4){
setLightning(randL, 0);
lightningTick = Math.floor((Math.random()*100)+750);
savedStormDur = stormDur;
timeToLightning = false;
}
}
}
var setCloud1 = function(x, y, z, randRot, n){
if(randRot == 0){
rot1 = cloudX;
rot2 = cloudZ;
}else{
rot1 = cloudZ;
rot2 = cloudX;
}
for(var c = 0; c < cloudX.length; c++){
setTile(x+rot1[c], y+cloudY[c], z+rot2[c], n);
}
}
function procCmd(cmd){
var c = cmd.split(" ");
if(c[0]=="thunderstorm"){
timeToStorm = true;
}
}
var setAllClouds = function(){
print("Generating Clouds");
for(var a = getPlayerX()-127; a < getPlayerX()+127; a++){
for(var b = getPlayerZ()-127; b < getPlayerZ()+127; b++){
var shouldContinue = Math.floor(Math.random()*2);
var aDist = Math.floor((Math.random()*5)+3);
var bDist = Math.floor((Math.random()*5)+3);
var randCloudY = Math.floor((Math.random()*20)+107);
var addCloud = Math.floor(Math.random()*3);
var thisRandRot = Math.floor(Math.random()*2);
if((a%aDist == 0)&&(b%bDist == 0)&&(shouldContinue == 1)){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
if(addCloud == 1){
var distAddCloud = Math.floor((Math.random()*4)+4);
var randAddCloudDir = Math.floor((Math.random()*4)+1);
if(randAddCloudDir == 1){
removeCloudX.push(a+distAddCloud);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 2){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b+distAddCloud);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 3){
removeCloudX.push(a-distAddCloud);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 4){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b-distAddCloud);
removeCloudRot.push(thisRandRot);
}
}
}
}
}
}
var generateLightning = function(n){
var tempArrayX = [];
var tempArrayY = [];
var tempArrayZ = [];
var randXT = Math.floor(Math.random()*256);
var randYT = Math.floor((Math.random()*10)+117);
var randZT = Math.floor(Math.random()*256);
var randXB = Math.floor(Math.random()*256);
var randZB = Math.floor(Math.random()*256);
for(var y = 63; y < 127; y++){
if((getTile(randXB, y, randZB)!==0)&&(getTile(randXB, y+1, randZB)==0)){
var randYB = y+1;
}
}
var slopeX = (randYT-randYB)/(randXT-randXB);
var slopeZ = (randYT-randYB)/(randZT-randZB);
for(var i = randXB; i < randXT; i++){
for(var j = randYB; j < randYT; j++){
for(var k = randZB; k < randZT; k++){
if(((j-randYB)==slopeX(i-randXB))&&((j-randYB)==slopeZ(k-randZB))){
var addAnother = Math.floor((Math.random()*20)+1);
if(addAnother==10){
var randXBA = Math.floor(Math.random()*256);
var randZBA = Math.floor(Math.random()*256);
for(var ya = 63; ya < 127; ya++){
if((getTile(i, ya, randZBA)!==0)&&(getTile(i, ya+1, randZBA)==0)){
var randYBA = ya+1;
}
}
var slopeXA = (j-randYB)/(i-randXB);
var slopeZA = (j-randYB)/(k-randZB);
for(var ia = randXBA; ia < i; ia++){
for(var ja = randYBA; ja < j; ja++){
for(var ka = randZBA; ka < k; ka++){
if(((ja-randYBA)==slopeXA(ia-randXBA))&&((ja-randYBA)==slopeZA(ka-randZBA))){
var addAnother2 = Math.floor((Math.random()*20)+1);
if(addAnother2==10){
var randXBA2 = Math.floor(Math.random()*256);
var randZBA2 = Math.floor(Math.random()*256);
for(var ya2 = 63; ya2 < 127; ya2++){
if((getTile(ia, ya2, randZBA2)!==0)&&(getTile(ia, ya2+1, randZBA2)==0)){
var randYBA2 = ya+1;
}
}
var slopeXA2 = (ja-randYB2)/(ia-randXB2);
var slopeZA2 = (ja-randYB2)/(ka-randZB2);
for(var ia2 = randXBA2; ia2 < ia; ia2++){
for(var ja2 = randYBA2; ja2 < ja; ja2++){
for(var ka2 = randZBA2; ka2 < ka; ka2++){
if(((ja2-randYBA2)==slopeXA2(ia2-randXBA2))&&((ja2-randYBA2)==slopeZA2(ka2-randZBA2))){
tempArrayX.push[ia2];
tempArrayY.push[ja2];
tempArrayZ.push[ka2];
}
}
}
}
}
tempArrayX.push[ia];
tempArrayY.push[ja];
tempArrayZ.push[ka];
}
}
}
}
}
tempArrayX.push[i];
tempArrayY.push[j];
tempArrayZ.push[k];
}
}
}
}
if(n==0){
lightningX = tempArrayX;
lightningY = tempArrayY;
lightningZ = tempArrayZ;
}else if(n==1){
lightningX2 = tempArrayX;
lightningY2 = tempArrayY;
lightningZ2 = tempArrayZ;
}else if(n==2){
lightningX3 = tempArrayX;
lightningY3 = tempArrayY;
lightningZ3 = tempArrayZ;
}else if(n==3){
lightningX4 = tempArrayX;
lightningY4 = tempArrayY;
lightningZ4 = tempArrayZ;
}else if(n==4){
lightningX5 = tempArrayX;
lightningY5 = tempArrayY;
lightningZ5 = tempArrayZ;
}
}
var setLightning = function(random, blockNum){
var tempArrayX, tempArrayY, tempArrayZ;
if(random==0){
tempArrayX = lightningX;
tempArrayY = lightningY;
tempArrayZ = lightningZ;
}else if(random==1){
tempArrayX = lightningX2;
tempArrayY = lightningY2;
tempArrayZ = lightningZ2;
}else if(random==2){
tempArrayX = lightningX3;
tempArrayY = lightningY3;
tempArrayZ = lightningZ3;
}else if(random==3){
tempArrayX = lightningX4;
tempArrayY = lightningY4;
tempArrayZ = lightningZ4;
}else if(random==4){
tempArrayX = lightningX5;
tempArrayY = lightningY5;
tempArrayZ = lightningZ5;
}
for(var z = 0; z < tempArrayX.length; z++){
setTile(getPlayerX()+tempArrayX[z], tempArrayY[z], getPlayerZ()+tempArrayZ[z], blockNum);
}
}
//Thunder Storm mod for Extended Team!
Block.defineBlock(174, "Storm Cloud", [["snow", 0]], 0, true);
Block.setColor(174, [0x545353]);
Block.defineBlock(175, "Lightning Bolt", [["ice", 0]], 0, false);
Block.setColor(175, [0xC1FFFC]);
Block.setLightLevel(175, 15);
var timeToStorm = false;
var dayTick = 14400;
var randNumTrue = Math.floor((Math.random()*100)+1);
var tryNum = 0;
var startCountdown = false;
var startClouds = false;
var cloudX = [0, 1, 2, -1, -2, 0, 1, 2, -1, -2, 0, 1, -1, -2, 0, 1, 2, -1, 3, 1, 2, 3, 0, -3, -1, -2, 0, -3, -1, -2, -1, -2, 3, -3, 3, -3, 4, -2, 4, 0, -1, 3, 2, 1, 2, -3, 1, -4, 1, -4, 0, -3, -1, -2, 0, 1, 2, -1, -2, 0, 1, 2, -1, -2, 0, 1, -1, -2, 0, 1, 2, -1, 3, 1, 2, 3, 0, -3, -1, -2, 0, -3, -1, -2, -1, -2, 0, -1, 0, -1, -2, 0, 1, 3];
var cloudY = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3];
var cloudZ = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, -1, -1, -1, -1, 2, 2, 2, 2, 2, 3, 3, 3, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, 0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, -1, -1, -2, -2, -3, -3, -4, -4, -4, -4, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, -1, -1, -1, -1, 2, 2, 2, 2, 2, 3, 3, 3, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, 0, 0, -1, -1, -2, 1, 1, 2];
var removeCloudX = [];
var removeCloudY = [];
var removeCloudZ = [];
var removeCloudRot = [];
var stormCount = false;
var stormDur = 0;
var startCloudsTime = 0;
var timeToSet = false;
var timeToRemove = false;
var setCloudNum = 0;
var removeCloudNum = 0;
function newLevel(){
startCountdown = true;
}
function modTick(){
if(startCountdown==true){
dayTick--;
if(dayTick%144==0){
if(tryNum==randNumTrue){
timeToStorm = true;
startCountdown = false;
dayTick = 14400;
}else{
tryNum += 1;
}
}
}
if(timeToStorm==true){
stormDur = Math.floor((Math.random()*600)+4000);
startCloudsTime = Math.floor((Math.random()*100)+100);
clientMessage("A storm is coming!!");
clientMessage("Gain shelter immediately!!");
startClouds = true;
timeToStorm = false;
stormCount = true;
startCountdown = false;
}
if(stormCount == true){
stormDur--;
Level.setTime(8280);
if(stormDur == 0){
timeToRemove = true;
Level.setTime(0);
startCountdown = true;
stormCount = false;
}
}
if(startClouds==true){
startCloudsTime--;
if(startCloudsTime==0){
setAllClouds();
timeToSet = true;
startClouds = false;
}
}
if(timeToSet==true){
setCloud1(removeCloudX[setCloudNum], removeCloudY[setCloudNum], removeCloudZ[setCloudNum], removeCloudRot[setCloudNum]);
setCloudNum++;
if(setCloudNum==removeCloudX.length){
timeToSet==false;
}
}
if(timeToRemove==true){
removeCloud1(removeCloudX[removeCloudNum], removeCloudY[removeCloudNum], removeCloudZ[removeCloudNum], removeCloudRot[removeCloudNum]);
removeCloudNum++;
if(removeCloudNum==removeCloudX.length){
timeToRemove==false;
}
}
}
var setCloud1 = function(x, y, z, randRot){
if(randRot == 0){
rot1 = cloudX;
rot2 = cloudZ;
}else{
rot1 = cloudZ;
rot2 = cloudX;
}
for(var c = 0; c < cloudX.length; c++){
setTile(x+rot1[c], y+cloudY[c], z+rot2[c], 174);
}
}
var removeCloud1 = function(x, y, z, randRot){
if(randRot == 0){
rot1 = cloudX;
rot2 = cloudZ;
}else{
rot1 = cloudZ;
rot2 = cloudX;
}
for(var c = 0; c < cloudX.length; c++){
setTile(x+rot1[c], y+cloudY[c], z+rot2[c], 0);
}
}
function procCmd(cmd){
var c = cmd.split(" ");
if(c[0]=="thunderstorm"){
timeToStorm = true;
}
}
var setAllClouds = function(x, z){
print("Generating Clouds");
for(var a = 0; a < 256; a++){
for(var b = 0; b < 256; b++){
var shouldContinue = Math.floor(Math.random()*2);
var aDist = Math.floor((Math.random()*5)+3);
var bDist = Math.floor((Math.random()*5)+3);
var randCloudY = Math.floor((Math.random()*20)+107);
var addCloud = Math.floor(Math.random()*3);
var thisRandRot = Math.floor(Math.random()*2);
if((a%aDist == 0)&&(b%bDist == 0)&&(shouldContinue == 1)){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
if(addCloud == 1){
var distAddCloud = Math.floor((Math.random()*4)+4);
var randAddCloudDir = Math.floor((Math.random()*4)+1);
if(randAddCloudDir == 1){
removeCloudX.push(a+distAddCloud);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 2){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b+distAddCloud);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 3){
removeCloudX.push(a-distAddCloud);
removeCloudY.push(randCloudY);
removeCloudZ.push(b);
removeCloudRot.push(thisRandRot);
}else if(randAddCloudDir == 4){
removeCloudX.push(a);
removeCloudY.push(randCloudY);
removeCloudZ.push(b-distAddCloud);
removeCloudRot.push(thisRandRot);
}
}
}
}
}
}
@MRandyPE
Copy link
Author

Here is the thunderstorm mod!
Details:
BETA version is experimental...
I haven't checked it out fully to see if it works.
If you find any errors, please report them!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment