mirror of
https://github.com/2009scape/2009scape.github.io.git
synced 2024-11-04 10:02:36 +01:00
494 lines
20 KiB
JavaScript
494 lines
20 KiB
JavaScript
var potions = {
|
|
|
|
// Variables
|
|
list : {},
|
|
|
|
// Functions
|
|
getCountdown : function(){
|
|
if(objects.list.magicianHat.have) return 12;
|
|
return 20;
|
|
},
|
|
|
|
onload : function(){
|
|
this.addPotion("health", "Health potion", "#ff0000", "potions.heal(50);", "Use this minor health potion during combats to regain some of your health points !", "potion");
|
|
this.addPotion("escape", "Escape potion", "#51c90f", "potions.escape();", "The escape potion allow escaping from a quest while avoiding any time penalty. It makes you flee really really fast !", "potion");
|
|
this.addPotion("berserk", "Berserk potion", "#000000", "potions.berserk();", "The berserk potions transforms you into a.. BERSERKEEEER !", "potion");
|
|
this.addPotion("fireScroll", "Fire scroll", "#dc3e00", "potions.fireScroll();", "This powerful fire scroll will burn your enemy if you use it during a fight.", "scroll");
|
|
this.addPotion("acidRainScroll", "Acid rain scroll", "#68980b", "potions.acidRainScroll();", "This acid rain scroll will instantly damage everyone in the whole land (including yourself).", "scroll");
|
|
this.addPotion("teleportScroll", "Teleport scroll", "#7ca0b5", "potions.teleportScroll();", "This teleport scroll will make you go back to the beginning of a quest. Useful to rest a little bit !", "scroll");
|
|
this.addPotion("earthquakeScroll", "Earthquake scroll", "#470b0b", "potions.earthquakeScroll();", "This earthquake scroll will inflict a lot of damage to everyone in the whole land.", "scroll");
|
|
this.addPotion("impInvocationScroll", "Imp invocation scroll", "#ff6600", "potions.impInvocationScroll();", "This imp invocation scroll will, if there's enough place, invoke in front of you an imp which will fight for you.", "scroll");
|
|
this.addPotion("majorHealth", "Major health potion", "#ff0000", "potions.heal(100);", "This major health potion is twice more efficient than the minor one.", "potion");
|
|
this.addPotion("invulnerability", "Invulnerability potion", "#ef893b", "potions.invulnerability();", "This invulnerability potion will make you invincible for some time, but it fills your stomach : you won't be able to drink another potion for a long time after using it.", "potion");
|
|
this.addPotion("turtle", "Turtle potion", "#008a13", "potions.turtle();", "When you drink a turtle potion, you become a turtle. Drawback : you walk slower. Benefit : you're way more resistant to your ennemies' attacks.", "potion");
|
|
this.addPotion("jelly", "Jelly", "#9500b5", "potions.jelly();", "This skillfully prepared jelly explodes on contact of anything trying to go through it, dealing high damage. Using it will place it behind you.", "special");
|
|
this.addPotion("seed", "Seed", "#3dab3a", "potions.seed();", "This seed is able to make grow a candy tree. The candy tree is made of candies, and it takes a lot of time to cut it down. Using the seed will grow a tree in front of you, if there's enough place.", "special");
|
|
this.addPotion("cloning", "Cloning potion", "#6d6d6d", "potions.cloning();", "This cloning potion will, well... clone you. Your clone will have the same health points as you when you drank the potion, but he won't have your armor nor your sword. He will fight using a \"cloned sword\", which deals a correct amount of damage. The clone will be placed in front of you, if there's enough place.", "potion");
|
|
this.addPotion("superman", "Superman potion", "#ddef17", "potions.superman();", "This superman potion will give you a cape and make you look like superman for the rest of the quest !", "potion");
|
|
this.addPotion("gmooh", "G.M.O.O.H. potion", "#ff00c0", "potions.gmooh();", "This \"Get Me Out Of Here\" potion will teleport you somewhere else. The destination isn't predictable at all.", "potion");
|
|
},
|
|
|
|
updateOnPage : function(){
|
|
htmlInteraction.setInnerHtml("quest_potions", this.getText());
|
|
if(quest.weAreQuestingRightNow) this.updateCountdownOnPage();
|
|
},
|
|
|
|
updateCountdownOnPage : function(){
|
|
htmlInteraction.setInnerHtml("quest_potions_countdowns", this.getCountdownText());
|
|
},
|
|
|
|
getCountdownText : function(){
|
|
var text = "";
|
|
|
|
// Potions
|
|
if(quest.berserk) text += "Berserk mode : " + quest.berserkCountdown + "\n";
|
|
if(quest.turtle) text += "You're a turtle : " + quest.turtleCountdown + "\n";
|
|
if(quest.invulnerability) text += "Invincible : " + quest.invulnerabilityCountdown + "\n";
|
|
if(this.list.health.shown || this.list.escape.shown || this.list.berserk.shown || this.list.majorHealth.shown || this.list.invulnerability.shown || this.list.turtle.shown || this.list.cloning.shown || this.list.superman.shown || this.list.gmooh.shown) text += "Potion countdown : " + quest.potionUseCountdown + "\n";
|
|
|
|
// Scrolls
|
|
if(this.list.fireScroll.shown || this.acidRainScroll.shown || this.teleportScroll.shown || this.earthquakeScroll.shown || this.impInvocationScroll.shown) text += "Scroll countdown : " + quest.scrollUseCountdown;
|
|
|
|
return text;
|
|
},
|
|
|
|
getText : function(){
|
|
var text = "";
|
|
|
|
// Special stuff
|
|
text += this.getPotionButtonText(this.list.seed);
|
|
text += this.getPotionButtonText(this.list.jelly);
|
|
|
|
text += "\n";
|
|
|
|
// Potions
|
|
text += this.getPotionButtonText(this.list.health);
|
|
text += this.getPotionButtonText(this.list.escape);
|
|
text += this.getPotionButtonText(this.list.berserk);
|
|
|
|
text += "\n";
|
|
|
|
// Potions bis !
|
|
text += this.getPotionButtonText(this.list.majorHealth);
|
|
text += this.getPotionButtonText(this.list.turtle);
|
|
text += this.getPotionButtonText(this.list.invulnerability);
|
|
text += this.getPotionButtonText(this.list.superman);
|
|
text += this.getPotionButtonText(this.list.cloning);
|
|
text += this.getPotionButtonText(this.list.gmooh);
|
|
|
|
text += "\n";
|
|
|
|
// Scrolls
|
|
text += this.getPotionButtonText(this.list.fireScroll);
|
|
text += this.getPotionButtonText(this.list.acidRainScroll);
|
|
text += this.getPotionButtonText(this.list.teleportScroll);
|
|
text += this.getPotionButtonText(this.list.impInvocationScroll);
|
|
text += this.getPotionButtonText(this.list.earthquakeScroll);
|
|
|
|
return text;
|
|
},
|
|
|
|
getPotions : function(potion, nbr){
|
|
this.setPotionShown(potion, true);
|
|
potion.nbrOwned += nbr;
|
|
this.updateOnPage();
|
|
},
|
|
|
|
setPotionShown : function(potion, value){
|
|
potion.shown = value;
|
|
},
|
|
|
|
setPotionNbrOwned : function(potion, value){
|
|
potion.nbrOwned = value;
|
|
},
|
|
|
|
buyPotion : function(potion, price){
|
|
this.getPotions(potion, 1);
|
|
candies.setNbrOwned(candies.nbrOwned - price);
|
|
shop.setMerchantSpeech(potion.merchantSpeech);
|
|
},
|
|
|
|
buyScroll : function(price){
|
|
var maxPower = 2;
|
|
|
|
if(objects.list.magicianHat.have) maxPower = 4;
|
|
|
|
switch(random.getRandomIntUpTo(maxPower)){
|
|
case 0:
|
|
this.buyPotion(this.list.fireScroll, price);
|
|
break;
|
|
case 1:
|
|
this.buyPotion(this.list.acidRainScroll, price);
|
|
break;
|
|
case 2:
|
|
this.buyPotion(this.list.teleportScroll, price);
|
|
break;
|
|
case 3:
|
|
this.buyPotion(this.list.impInvocationScroll, price);
|
|
break;
|
|
case 4:
|
|
this.buyPotion(this.list.earthquakeScroll, price);
|
|
break;
|
|
}
|
|
},
|
|
|
|
getPotionButtonText : function(potion){
|
|
if(potion.shown){
|
|
var disabled = "";
|
|
var tooltip = "";
|
|
|
|
if(quest.weAreQuestingRightNow == false || potion.nbrOwned <= 0 || ((potion.type == "potion" && quest.potionUseCountdown > 0) || (potion.type == "scroll" && quest.scrollUseCountdown > 0))) disabled = "disabled=disabled";
|
|
if(quest.weAreQuestingRightNow == false) tooltip = "<span>" + potion.merchantSpeech + "</span>";
|
|
|
|
return "<button class=\"tooltip\" style=\"border: 2px solid " + potion.buttonColor + "; padding: 2px 5px;\" " + disabled + " onclick=\"" + potion.action + "\">" + potion.buttonText + " (" + potion.nbrOwned + ")" + tooltip + "</button>\n";
|
|
}
|
|
return "";
|
|
},
|
|
|
|
addPotion : function(name, buttonText, buttonColor, action, merchantSpeech, type){
|
|
this.list[name] = {buttonText:buttonText, buttonColor:buttonColor, action:action, shown:false, nbrOwned:0, merchantSpeech:merchantSpeech, type:type};
|
|
},
|
|
|
|
makeJelly : function(){
|
|
return land.createTrap("JEL", 1, 1, "powerful explosion", "A jelly !! Go away !", []);
|
|
},
|
|
|
|
makeClone : function(hp, max_hp){
|
|
return land.createAlly("\\o/", max_hp, hp, "cloned sword", "A clone of you.", []);
|
|
},
|
|
|
|
makeCandyTree : function(){
|
|
var hp = 0;
|
|
|
|
// One chance out of 100 to spawn the Yggdrasil \o/
|
|
if(random.oneChanceOutOf(100)){
|
|
return land.createTrap("/Y\\", 10000, 10000, "none", "Yggdrasill is its name, a tall tree, showered with shining loam.", [drops.createDrop("candies", 10000)]);
|
|
}
|
|
else{
|
|
hp = 500 + 100 * random.getRandomIntUpTo(4); // 500 / 600 / 700 / 800 / 900
|
|
return land.createTrap("\\|/", hp, hp, "none", "A candy tree. I hope you're carrying a good axe.", []);
|
|
}
|
|
},
|
|
|
|
heal : function(howMuch){
|
|
// We get the character index
|
|
var id = quest.getCharacterIndex();
|
|
|
|
if(quest.things[id].hp > 0 && ((howMuch == 50 && this.list.health.nbrOwned > 0) || (howMuch == 100 && this.list.majorHealth.nbrOwned > 0))){
|
|
// We decrement nbrOwned
|
|
if(howMuch == 50)
|
|
this.list.health.nbrOwned -= 1;
|
|
else if(howMuch == 100)
|
|
this.list.majorHealth.nbrOwned -= 1;
|
|
|
|
// We increment hp
|
|
quest.things[id].hp += howMuch;
|
|
|
|
// We set hp = max_hp if hp > max_hp
|
|
if(quest.things[id].hp > quest.things[id].max_hp){
|
|
quest.things[id].hp = quest.things[id].max_hp;
|
|
}
|
|
|
|
// We set the countdown
|
|
quest.potionUseCountdown += this.getCountdown();
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
escape : function(){
|
|
if(this.list.escape.nbrOwned > 0){
|
|
// We decrement nbrOwned
|
|
this.list.escape.nbrOwned -= 1;
|
|
|
|
// We tell the quest that we escape
|
|
quest.escaping = true;
|
|
|
|
// We delete all tired time
|
|
quest.setTiredTime(0);
|
|
quest.setTiredFound(0);
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
berserk : function(){
|
|
if(this.list.berserk.nbrOwned > 0){
|
|
// We decrement nbrOwned
|
|
this.list.berserk.nbrOwned -= 1;
|
|
|
|
// We set the countdown
|
|
quest.potionUseCountdown += this.getCountdown();
|
|
|
|
// We tell the quest that we are now in berserk mode
|
|
quest.beginBerserk();
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
fireScroll : function(){
|
|
if(this.list.fireScroll.nbrOwned > 0){
|
|
// We decrement nbrOwned
|
|
this.list.fireScroll.nbrOwned -= 1;
|
|
|
|
// We set the countdown
|
|
quest.scrollUseCountdown += this.getCountdown();
|
|
|
|
// We burn the enemy !
|
|
var index = quest.getCharacterIndex();
|
|
index += 1; // We set the index to look just in front of the player
|
|
if(quest.things[index].type == "mob"){ // If it's a mob
|
|
quest.things[index].hp -= 25 + random.getRandomIntUpTo(10);
|
|
if(quest.things[index].hp < 0) quest.things[index] = quest.makeNoneThing();
|
|
}
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
acidRainScroll : function(){
|
|
if(yourself.end == false && this.list.acidRainScroll.nbrOwned > 0){
|
|
// We decrement nbrOwned
|
|
this.list.acidRainScroll.nbrOwned -= 1;
|
|
|
|
// We set the countdown
|
|
quest.scrollUseCountdown += this.getCountdown();
|
|
|
|
// We burn everyone
|
|
for(var i = 0; i < quest.things.length; i++){
|
|
if(quest.things[i].type == "mob" || quest.things[i].type == "character"){
|
|
quest.things[i].hp -= 6;
|
|
if(quest.things[i].type == "character" && quest.things[i].hp <= 0) quest.things[i].hp = 1;
|
|
if(quest.things[i].hp < 0) quest.things[i] = quest.makeNoneThing();
|
|
}
|
|
}
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
teleportScroll : function(){
|
|
// If we're not already at index 0
|
|
if(quest.things[0].type != "character" && this.list.teleportScroll.nbrOwned > 0){
|
|
// We decrement nbrOwned
|
|
this.list.teleportScroll.nbrOwned -= 1;
|
|
|
|
// We set the countdown
|
|
quest.scrollUseCountdown += this.getCountdown();
|
|
|
|
// We teleport !
|
|
var index = quest.getCharacterIndex();
|
|
quest.things[0] = quest.things[index];
|
|
quest.things[index] = quest.makeNoneThing();
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
earthquakeScroll : function(){
|
|
if(yourself.end == false && this.list.earthquakeScroll.nbrOwned > 0){
|
|
// We decrement nbrOwned
|
|
this.list.earthquakeScroll.nbrOwned -= 1;
|
|
|
|
// We set the countdown
|
|
quest.scrollUseCountdown += this.getCountdown();
|
|
|
|
// We hit everyone
|
|
for(var i = 0; i < quest.things.length; i++){
|
|
if(quest.things[i].type == "mob" || quest.things[i].type == "character"){
|
|
quest.things[i].hp -= 12;
|
|
if(quest.things[i].type == "character" && quest.things[i].hp <= 0) quest.things[i].hp = 1;
|
|
if(quest.things[i].hp < 0) quest.things[i] = quest.makeNoneThing();
|
|
}
|
|
}
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
impInvocationScroll : function(){
|
|
var index = quest.getCharacterIndex();
|
|
|
|
// If the character isn't at the end of the land and there's nothing in front of him
|
|
if(index < quest.things.length-1 && quest.things[index+1].type == "none" && this.list.impInvocationScroll.nbrOwned > 0){
|
|
// We decrement nbrOwned
|
|
this.list.impInvocationScroll.nbrOwned -= 1;
|
|
|
|
// We set the countdown
|
|
quest.scrollUseCountdown += this.getCountdown();
|
|
|
|
// We invoke an int
|
|
quest.things[index+1] = quest.makeImp();
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
invulnerability : function(){
|
|
if(this.list.invulnerability.nbrOwned > 0){
|
|
// We decrement nbrOwned
|
|
this.list.invulnerability.nbrOwned -= 1;
|
|
|
|
// We set the countdown (40 ! because this potion is too awesome)
|
|
quest.potionUseCountdown += 40;
|
|
|
|
// We tell the quest that we are now in berserk mode
|
|
quest.beginInvulnerability();
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
turtle : function(){
|
|
if(this.list.turtle.nbrOwned > 0){
|
|
// We decrement nbrOwned
|
|
this.list.turtle.nbrOwned -= 1;
|
|
|
|
// We set the countdown
|
|
quest.potionUseCountdown += this.getCountdown();
|
|
|
|
// We tell the quest that we are now in berserk mode
|
|
quest.beginTurtle();
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
jelly : function(){
|
|
// We get the character index
|
|
var index = quest.getCharacterIndex();
|
|
|
|
// If the character isn't at the beginning of the land and there's nothing behind the character
|
|
if(index != 0 && quest.things[index - 1].type == "none" && this.list.jelly.nbrOwned > 0){
|
|
// We decrement nbrOwned
|
|
this.list.jelly.nbrOwned -= 1;
|
|
|
|
// We place a jelly
|
|
quest.things[index-1] = this.makeJelly();
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
seed : function(){
|
|
// We get the character index
|
|
var index = quest.getCharacterIndex();
|
|
|
|
// If the character isn't at the end of the land and there's nothing in front of the character
|
|
if(index < quest.things.length-1 && quest.things[index + 1].type == "none"){
|
|
// We decrement nbrOwned
|
|
this.list.seed.nbrOwned -= 1;
|
|
|
|
// We place a candy tree
|
|
quest.things[index+1] = this.makeCandyTree();
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
cloning : function(){
|
|
// We get the character index
|
|
var index = quest.getCharacterIndex();
|
|
|
|
// If the character isn't at the beginning of the land and there's nothing in front of the character
|
|
if(index != 0 && index < quest.things.length-1 && quest.things[index + 1].type == "none" && this.list.cloning.nbrOwned > 0){
|
|
// We decrement nbrOwned
|
|
this.list.cloning.nbrOwned -= 1;
|
|
|
|
// We set the countdown
|
|
quest.potionUseCountdown += 100;
|
|
|
|
// We place a clone
|
|
quest.things[index+1] = this.makeClone(quest.things[index].hp, quest.things[index].max_hp);
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
superman : function(){
|
|
if(this.list.superman.nbrOwned > 0){
|
|
// We get the character's index
|
|
var index = quest.getCharacterIndex();
|
|
|
|
// We decrement nbrOwned
|
|
this.list.superman.nbrOwned -= 1;
|
|
|
|
// We set the countdown
|
|
quest.potionUseCountdown += this.getCountdown();
|
|
|
|
// We change the character text
|
|
quest.things[index].text = "(o-";
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
gmooh : function(){
|
|
if(this.list.gmooh.nbrOwned > 0){
|
|
// We tell the quest that we're using a gmooh potion, then when quest.move will be executed, our gmoohEffect() function will be called
|
|
quest.gmooh = true;
|
|
|
|
// We delete all tired time
|
|
quest.setTiredTime(0);
|
|
quest.setTiredFound(0);
|
|
|
|
// We update the quest and the potions on page
|
|
quest.updateOnPage();
|
|
this.updateOnPage();
|
|
}
|
|
},
|
|
|
|
// When this function is called, quest.stop() was done just before, so we can launch a new quest if we want ;)
|
|
gmoohEffect : function(){
|
|
// We decrement nbrOwned
|
|
this.list.gmooh.nbrOwned -= 1;
|
|
|
|
quest.setTiredTime(0);
|
|
|
|
switch(random.getRandomIntUpTo(3)){
|
|
case 0:
|
|
quest.begin(false, land.getLandIndexFromName("The peaceful forest"));
|
|
break;
|
|
case 1:
|
|
quest.begin(false, land.getLandIndexFromName("cowLevel"));
|
|
break;
|
|
case 2:
|
|
quest.begin(false, land.getLandIndexFromName("sea"));
|
|
break;
|
|
case 3:
|
|
quest.begin(false, land.getLandIndexFromName("desert"));
|
|
break;
|
|
}
|
|
}
|
|
|
|
};
|