mirror of
https://github.com/2009scape/2009scape.github.io.git
synced 2024-11-04 10:02:36 +01:00
163 lines
7.9 KiB
JavaScript
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"
|
|
]
|
|
|
|
};
|