var hell = {
// Variables
size : 45,
lavaLakeStep : 0,
buffers : [[], [], [], [], [], [], []], // The three things buffers
bufferPosition : 1, // On which buffer is the character (at first in the middle buffer)
timeSpent : 0, // Increase each cycle
addRockStep : 0,
monstersGap : 7, // Gap between the devil and appearing monsters
step : 0,
// Functions
onload : function(){
land.addLand("Hell", this.size, 6, this.load.bind(this), this.getText.bind(this), this.move.bind(this));
},
move : function(){
// We increase the lava lake step
this.lavaLakeStep += 1;
if(this.lavaLakeStep == 12){
this.lavaLakeStep = 0;
}
// We make things move
for(var i = 0; i < 7; i++){
if(i != this.bufferPosition){
if(this.buffers[i][0].type == "mob") this.buffers[i][0] = quest.makeNoneThing();
for(var j = 1; j < this.size - 1; j++){
if(this.buffers[i][j].type == "mob" && this.buffers[i][j-1].type == "none" && this.buffers[i][j].text != " * " && this.buffers[i][j].text != "|-|"){
this.buffers[i][j-1] = this.buffers[i][j];
this.buffers[i][j] = quest.makeNoneThing();
}
}
// Clone
for(var j = this.size-2; j >= 0; j--){
if(this.buffers[i][j].text == "\\o/" && this.buffers[i][j].type == "ally" && this.buffers[i][j+1].type == "none" && this.buffers[i][j].text != " * " && this.buffers[i][j].text != "|-|"){
this.buffers[i][j+1] = this.buffers[i][j];
this.buffers[i][j] = quest.makeNoneThing();
}
}
}
else{
if(quest.things[0].type == "mob") quest.things[0] = quest.makeNoneThing();
for(var j = 1; j < this.size - 1; j++){
if(quest.things[j].type == "mob" && quest.things[j-1].type == "none" && quest.things[j].text != " * " && quest.things[j].text != "|-|"){
quest.things[j-1] = quest.things[j];
quest.things[j] = quest.makeNoneThing();
}
}
}
}
// We check the steps
switch(this.step){
case 0: this.checkStep1(); break;
case 1: this.checkStep2(); break;
case 2: this.checkStep3(); break;
case 3: this.checkStep4(); break;
}
// We add ennemies in the middle buffers
for(var i = 2; i < 5; i++){
if(i != this.bufferPosition && this.buffers[i][this.size-this.monstersGap].type == "none"){
this.buffers[i][this.size-this.monstersGap] = this.makeMiddleCreature();
}
else if(i == this.bufferPosition && quest.things[this.size-this.monstersGap].type == "none"){
quest.things[this.size-this.monstersGap] = this.makeMiddleCreature();
}
}
// Idem in the side buffers
for(var i = 0; i < 2; i++){
if(i != this.bufferPosition && this.buffers[i][this.size-this.monstersGap].type == "none"){
this.buffers[i][this.size-this.monstersGap] = this.makeSideCreature();
}
else if(i == this.bufferPosition && quest.things[this.size-this.monstersGap].type == "none"){
quest.things[this.size-this.monstersGap] = this.makeSideCreature();
}
}
for(var i = 5; i < 7; i++){
if(i != this.bufferPosition && this.buffers[i][this.size-this.monstersGap].type == "none"){
this.buffers[i][this.size-this.monstersGap] = this.makeSideCreature();
}
else if(i == this.bufferPosition && quest.things[this.size-this.monstersGap].type == "none"){
quest.things[this.size-this.monstersGap] = this.makeSideCreature();
}
}
// We increase the time spent
this.timeSpent += 1;
},
load : function(){
// We set the first buffer position
this.bufferPosition = 3;
// We fill buffers
for(var i = 0; i < 7; i++){
if(i != this.bufferPosition){
this.buffers[i] = quest.fillWithNoneThings();
}
}
// We add the devil
quest.things[this.size - 1] = this.makeDevil();
// We add first doors
quest.things[this.size - 4] = this.makeDoor();
for(var i = 0; i < 7; i++){
if(i != 3) this.buffers[i][this.size - 4] = this.makeDoor();
}
// We add second doors
quest.things[this.size - 6] = this.makeSpikyDoor();
for(var i = 0; i < 7; i++){
if(i != 3 && i != 5) this.buffers[i][this.size - 6] = this.makeSpikyDoor();
}
this.buffers[5][this.size - 6] = this.makeDoor();
// We add teleporting gates
quest.things[this.size - 3] = this.makeTeleportingGate();
quest.things[this.size - 5] = this.makeTeleportingGate();
for(var i = 0; i < 7; i++){
if(i != 3){
this.buffers[i][this.size - 3] = this.makeTeleportingGate();
this.buffers[i][this.size - 5] = this.makeTeleportingGate();
}
}
// We set the steps
this.addRockStep = 0;
this.step = 0;
// We set the time spent
this.timeSpent = 0;
},
teleportCharacter : function(gatesIndex){
var index = quest.getCharacterIndex();
quest.things[0] = quest.things[index];
quest.things[index] = quest.makeNoneThing();
quest.things[gatesIndex] = quest.makeNoneThing();
for(var i = 0; i < 7; i++){
if(i != this.bufferPosition){
this.buffers[i][gatesIndex] = quest.makeNoneThing();
}
}
},
checkStep1 : function(){
var index = quest.getCharacterIndex();
if(index >= this.size - 7) this.step = 1;
},
checkStep2 : function(){
for(var i = 0; i < 7; i++){
if((i != this.bufferPosition && this.buffers[i][this.size-5].text != " * ") || (i == this.bufferPosition && quest.things[this.size-5].text != " * ")){
this.teleportCharacter(this.size-5);
this.step = 2;
break;
}
}
},
checkStep3 : function(){
var index = quest.getCharacterIndex();
if(index >= this.size - 5) this.step = 3;
},
checkStep4 : function(){
for(var i = 0; i < 7; i++){
if((i != this.bufferPosition && this.buffers[i][this.size-3].text != " * ") || (i == this.bufferPosition && quest.things[this.size-3].text != " * ")){
this.teleportCharacter(this.size-3);
this.step = 4;
this.timeSpent = 0;
break;
}
}
},
goDown : function(){
var pos = this.bufferPosition;
// If we're questing the hell
if(quest.weAreQuestingRightNow && land.getLandIndexFromName("Hell") == quest.currentLandIndex){
// If we're not already at the buffer 2
if(this.bufferPosition != 6){
// If we were able to swap, change the buffer position
if(this.swapBufferAndQuestThings(pos, pos + 1)){
this.bufferPosition += 1;
this.checkDevil();
quest.updateOnPage();
}
}
}
},
goUp : function(){
var pos = this.bufferPosition;
// If we're questing the hell
if(quest.weAreQuestingRightNow && land.getLandIndexFromName("Hell") == quest.currentLandIndex){
// If we're not already at the buffer 0
if(this.bufferPosition != 0){
// If we were able to swap, change the buffer position
if(this.swapBufferAndQuestThings(pos, pos - 1)){
this.bufferPosition -= 1;
this.checkDevil();
quest.updateOnPage();
}
}
}
},
swapBufferAndQuestThings : function(now, after){
var index = quest.getCharacterIndex();
var character = quest.things[index];
// If we will be able to move on the "after" buffer, we swap (if we have some hp, too)
if(this.buffers[after][index].type == "none" && character.hp > 0){
// We save the quest things in the old buffer
this.buffers[now] = quest.things.slice(0);
// We delete the character from the old buffer
this.buffers[now][index] = quest.makeNoneThing();
// We put the new buffer into the quest things
quest.things = this.buffers[after].slice(0);
// We add the character
quest.things[index] = character;
// We return true
return true;
}
// Else we return false
return false;
},
checkDevil : function(){
// If the devil isn't on the line of the character
if(quest.things[this.size-1].text != "DEV"){
// We move it
for(var i = 0; i < 7; i++){
if(i != this.bufferPosition && this.buffers[i][this.size-1].text == "DEV"){
quest.things[this.size-1] = this.buffers[i][this.size-1];
this.buffers[i][this.size-1] = quest.makeNoneThing();
break;
}
}
}
},
makeDevil : function(){
return land.createMob("DEV", 250, 250, "religion", "It's the devil itself !", [drops.createDrop("candies", 100000)]);
},
makeTeleportingGate : function(){
return land.createMob(" * ", 120, 120, "none", "A teleporting gate, made by the devil itself.", []);
},
makeMiddleCreature : function(){
switch(this.step){
case 0:
if(random.oneChanceOutOf(3)){
return this.makeDemon();
}
break;
case 2:
if(random.oneChanceOutOf(4)){
return this.makeBanshee();
}
break;
case 3:
if(random.oneChanceOutOf(3)){
return castleKeep.makeFireball();
}
break;
case 4:
if(this.timeSpent < 50 && this.timeSpent % 2 == 0){
return castleStairs.makeGhost();
}
else if(this.timeSpent < 70){
// nothing
}
else if(this.timeSpent < 90){
if(random.oneChanceOutOf(5)){
return castleKeep.makeFireball();
}
}
else if(this.timeSpent < 110){
if(random.oneChanceOutOf(4)){
return castleKeep.makeFireball();
}
}
else if(this.timeSpent < 130){
if(random.oneChanceOutOf(3)){
return castleKeep.makeFireball();
}
}
else if(this.timeSpent < 170){
if(random.oneChanceOutOf(2)){
return castleKeep.makeFireball();
}
}
else{
return castleKeep.makeFireball();
}
break;
}
return quest.makeNoneThing();
},
makeSideCreature : function(){
switch(this.step){
case 0:
return this.makeMiddleCreature();
break;
case 2:
if(random.oneChanceOutOf(5)){
return castleStairs.makeGhost();
}
break;
case 3:
if(random.oneChanceOutOf(4)){} // nothing
else{
return castleStairs.makeGhost();
}
break;
case 4:
return this.makeMiddleCreature();
break;
}
return quest.makeNoneThing();
},
makeDemon : function(){
return land.createMob("DEM", 90, 90, "demon claws", "A demon.", []);
},
makeBanshee : function(){
return land.createMob("BSH", 160, 160, "?", "A banshee, omen of death.", []);
},
makeDoor : function(){
return land.createMob("|-|", 300, 300, "none", "A strong door. Hard to break.", []);
},
makeSpikyDoor : function(){
return land.createMob("|-|", 300, 300, "spikes", "A strong door. Hard to break. There are spikes on it, it hurts !", []);
},
getText : function(){
// Create the text var
var text = "";
// Add the i & k instructions
text += "Press i to go up and k to go down. (if it doesn't work, click on the page to gain focus)";
text += "\n";
// Open the span
text += "";
text += "\n";
// We add buffers
for(var i = 0; i < 7; i++){
if(i != this.bufferPosition){
for(var j = 0; j < this.size; j++){
if(this.buffers[i][j].type != "none"){
text += this.buffers[i][j].text;
}
else text += " ";
}
}
else{
for(var j = 0; j < this.size; j++){
if(quest.things[j].type != "none"){
text += quest.things[j].text;
}
else text += " ";
}
}
text += "\n";
}
// We make the lava lake
for(var i = 0; i < Math.floor(this.size/2); i++){
switch(this.lavaLakeStep){
case 0: case 1: text += "_.-'-."; break;
case 2: case 3: text += "._.-'-"; break;
case 4: case 5: text += "-._.-'"; break;
case 6: case 7: text += "'-._.-"; break;
case 8: case 9: text += "-'-._."; break;
case 10: case 11: text += ".-'-._"; break;
}
}
// Close the span
text += ""
return text;
}
};