2009scape-website/site/candybox/scripts/castleEntrance.js
2020-11-29 20:55:42 -05:00

163 lines
7.9 KiB
JavaScript

var castleEntrance = {
// Variables
size : 30,
timeSpent : 0, // Time spent since the beginning of the quest
thereIsAMagicBall : false, // True if there's a magic ball right now
magicBallX : 0, // X position of the magic ball
magicBallY : 0, // Y position of the magic ball
// Functions
onload : function(){
land.addLand("Castle's entrance", this.size, 3, this.load.bind(this), this.getText.bind(this), this.move.bind(this));
},
move : function(){
// Make enemies go toward the left
for(var i = 0; i < quest.things.length; i++){
if(quest.things[i].type == "mob" && quest.things[i-1].type == "none"){
quest.things[i-1] = quest.things[i];
quest.things[i] = quest.makeNoneThing();
}
}
// We add ennemies
if(this.timeSpent < 1000){ // We must stop adding ennemies after a while, else the player could be blocked in certain conditions
if(this.timeSpent % 16 == 5){
// If there's nothing here, we add a knight
if(quest.things[29].type == "none") quest.things[29] = this.makeKnight();
}
else if(this.timeSpent % 30 == 29){
// If there's nothing here, we add a guard
if(quest.things[29].type == "none") quest.things[29] = this.makeGuard();
}
}
// We handle the magic ball if we spent at least four movements
if(this.timeSpent > 4){
// If there is already a magic ball
if(this.thereIsAMagicBall){
var index = quest.getCharacterIndex();
// If the magic ball just hit the player !
if(Math.abs(this.magicBallX - (index*3 + 1)) <= 1 && this.magicBallY == 19){
// No more magic ball
this.thereIsAMagicBall = false;
// We teleport the player
quest.things[0] = quest.things[index];
quest.things[index] = quest.makeNoneThing();
}
// Else
else{
// If the magic ball is at the right of the player or is above the steps (it mustn't be above the steps)
if(this.magicBallX > index*3 + 1 || this.magicBallX > 77){
this.magicBallX -= 1;
}
// Else, if it's at the left
else if(this.magicBallX < index*3 + 1){
this.magicBallX += 1;
}
// If the magic ball isn't already just above the lawn and we're not too far from the play horizontally
if(this.magicBallY < 19 && Math.abs(this.magicBallX - index*3) < (19 - this.magicBallY)*3){
this.magicBallY += 1;
}
}
}
// If there is not already a magic ball
else{
this.thereIsAMagicBall = true;
this.magicBallX = 83;
this.magicBallY = 1;
}
}
// We increment the time spent
this.timeSpent += 1;
},
load : function(){
// We add some guards on the lawn to slow down the player
quest.things[10] = this.makeGuard();
quest.things[12] = this.makeGuard();
quest.things[15] = this.makeGuard();
quest.things[17] = this.makeGuard();
// We reset the time spent
this.timeSpent = 0;
},
makeGuard : function(){
return land.createMob("GUA", 25, 25, "spear", "One of the castle's guards.", [drops.createDrop("candies", random.getRandomIntUpTo(40))]);
},
makeKnight : function(){
return land.createMob("KNI", 70, 70, "sharp sword", "A knight with a huge armor.", [drops.createDrop("candies", 230 + random.getRandomIntUpTo(70)), drops.createDrop("object", "plateArmour", random.oneChanceOutOf(10))]);
},
getText : function(){
var lines = [];
lines = this.text.slice(0); // It will store the lines of the castle entrance
// We add things to the lines (we use size - 1 to avoid drawing the last position, which is inside the castle)
for(var i = 0; i < this.size - 1; i++){
// If there's a thing
if(quest.things[i].type != "none"){
// Before the first step
if(i < 26){
lines[20] = lines[20].replaceAt(i*3, quest.things[i].text);
}
// On the first step
else if(i == 26){
lines[19] = lines[19].replaceAt(i*3, quest.things[i].text);
}
// On the second step
else if(i <= 28){
lines[18] = lines[18].replaceAt(i*3, quest.things[i].text);
}
}
}
// We add the magic ball
if(this.thereIsAMagicBall){
lines[this.magicBallY] = lines[this.magicBallY].replaceAt(this.magicBallX, "*");
}
// We return the lines
return lines.join("");
},
// Variables
text : [
" __\n",
" <*/\n",
" (}\n",
" |\\\n",
" ||| || || || |\n",
" |`\' `\' `\' `\'.|\n",
" : .:;\n",
" \\-..____..:/ _ _\n",
" :--------:_,\' || |\n",
" |] .:| `\' `\n",
" | ,-. .[| _\n",
" | | | .:|\'--\' _\n",
" | |_| .:| \'--\'\n",
" | \'=\' .:|\n",
" | __ .:|\n",
" |\'--\' .:| _\n",
" | .:| \'-\'\n",
" | \'-| _\n",
" ______| _ .:| _ \'--\'\n",
" ___||||||| \'-\' .:| \'-\'\n",
" ___|||||||||;._____.::-------\n",
"\' \" \'\' \" \"\' \"\' \' \" \' \"\' \'\" \' \'\" \"\' \' \'\" \" \' \' \'\" \' \' \'\" \' \'\" \'\" \'\' \' \'\" \" \' \'\" \' \' \" \'\" \" \" \' \'\" \"\' \n",
" \"\' \' \" \' \" \' \" \' \" \' \' \" \' \' \" \' \" \' \' \" \" \" \' \' \" \"\' \'\n",
" \'\" \' \" \' \" \' \" \' \" \' \" \" \' \" \' \" \' \n",
" \' \" \' \' \" \" \' \' \' \" \"\n"
]
};