Files
monkeygg2.github.io/games/planet-life/jerkBattle.js
T
2023-08-25 13:31:04 +05:30

459 lines
14 KiB
JavaScript

var jerkRefreshCost = 0;
var jerkActions = 3;
var left_over_cards = 0;
var refresh_pile = false;
var muffins = 0;
var muffinMultiplier = 1;
var ringMultiplier = 1;
var strengthMultiplier = 1;
var allJerks = [];
var extraActions = 0;
var bossBattle = "";
var derekArray = allDereks;
var curDerekShip;
function drawJerksFromPile(amount) {
playSound(soundEffect.jerkSquad);
var j = state.jerkPile;
//check if there will be enough available cards in the jerk pile
var enough_cards = false;
if (availableJerksInPile(j) >= amount) {
console.log("enough jerks in pile");
enough_cards = true;
}
if (!enough_cards) {
//TODO: Se om det her kan være rigtigt
console.log("not enough cards");
var new_amount = availableJerksInPile(j);
left_over_cards = amount - new_amount;
amount = new_amount;
}
var i = 0;
while (i < amount) {
var magicNumber = Math.floor(Math.random() * state.jerkPile.length);
if (!j[magicNumber].loaded && !j[magicNumber].exhausted && !j[magicNumber].removed) {
console.log(j[magicNumber].navn);
j[magicNumber].loaded = true;
i++;
} else {
magicNumber = Math.floor(Math.random() * state.jerkPile.length);
}
}
updateState("jerkPile", j);
//TODO: if not enough cards, do a reload scene and keep track of left_over_cards to do another drawJerksFromPile()
//Is this done?
if (!enough_cards) {
refresh_pile = true;
}
}
function goRefreshJerks() {
playSound(soundEffect.heal);
// updateState('bCoco', state.bCoco - jerkRefreshCost);
refresh_pile = false;
var j = state.jerkPile;
var amount_loaded = 0;
for (var i = 0; i < j.length; i++) {
if (!j[i].exhausted && !j[i].removed) {
console.log("IT'S loaded");
j[i].loaded = true;
amount_loaded++;
}
}
console.log("amount loaded: " + amount_loaded);
for (var i = 0; i < j.length; i++) {
j[i].exhausted = false;
}
updateState('jerkPile', j);
var left_to_load = state.bJerksPerTurn - amount_loaded;
console.log("left to load: " + left_to_load);
drawJerksFromPile(left_to_load);
goChooseJerk();
}
function beatenJerksInPile(pile) {
var available_cards = 0;
for (var i = 0; i < pile.length; i++) {
if (pile[i].exhausted && !pile[i].removed) {
available_cards++;
}
}
return available_cards;
}
function availableJerksInPile(pile) {
var available_cards = 0;
for (var i = 0; i < pile.length; i++) {
if (!pile[i].loaded && !pile[i].exhausted && !pile[i].removed) {
available_cards++;
}
}
return available_cards;
}
function loadedJerks(pile) {
var loaded_jerks = 0;
for (var i = 0; i < pile.length; i++) {
if (pile[i].loaded) {
loaded_jerks++;
}
}
return loaded_jerks;
}
function unloadAllJerks() {
var j = state.jerkPile;
for (var i = 0; i < j.length; i++) {
if (j[i].loaded) {
j[i].loaded = false;
//If you want jerks not to exhaust after having been loaded, disable this
j[i].exhausted = true;
}
}
updateState('jerkPile', j);
}
//Use this to set a jerks removed, exhausted and loaded
function manipulateJerk(array,loaded,exhausted,removed) {
var j = state.jerkPile;
for (var a = 0; a < array.length; a++) {
for (var i = 0; i < j.length; i++) {
if (array[a] == j[i].ID) {
if (loaded) {
if (j[i].loaded) {
j[i].loaded = false;
} else {
j[i].loaded = true;
}
}
if (exhausted) {
if (j[i].exhausted) {
j[i].exhausted = false;
} else {
j[i].exhausted = true;
}
}
if (removed) {
if (j[i].removed) {
j[i].removed = false;
} else {
j[i].removed = true;
}
}
}
}
}
updateState('jerkPile', j);
}
function goChooseJerk() {
var beatupText = "";
if (calculateDefeatedJerks() > 0) {
beatupText = "<span style='color:#bf0000'>" + calculateDefeatedJerks() + " jerk(s) are totally beat up.</span></br>";
}
var availableText = "";
if (availableJerksInPile(state.jerkPile) > 0) {
availableText = "<span style='color:#0a8f00'>There are " + availableJerksInPile(state.jerkPile) + " healthy jerk(s) in your pile.</span></br>";
}
var onStage = "<span style='color:#16fa05'>" + loadedJerks(state.jerkPile) + " jerk(s) step up to fight!</span></br>";
changeScene(
"<span style='color:#" + derekArray[curDerekIndex].clr + "'>" + derekArray[curDerekIndex].navn + "</span> is pumped. He has <span style='color:#ff0000'>" + curDerekulianHealth + "/" + derekulianHealth + " health.</span><br/>He is super hungry and intends to eat <span style='color:#00fff7'>" + curDerekHunger + " stardust</span> from your core <span style='color:#00fff7'>(" + state.bCoreStardust + "/" + state.bCoreCapacity + " stardust in core)</span></br>You have baked <span style='color:#fca903'>" + muffins + " muffins.</span></br>" + availableText + onStage + beatupText + "Which jerk do you want to pit against him?<br/>You have <span style='color:#ffea00'>" + jerkActions + " jerk actions</span> left",
derekArray[curDerekIndex].image,
"goChooseJerk"
);
createGoButton("End round",derekArray[curDerekIndex].image,goDerekEat);
createGoButton("Run away","jerkSquad",goRunAwaySure);
var j = state.jerkPile;
for (var i = 0; i < j.length; i++) {
if (j[i].loaded) {
createTextButton(
j[i].navn + " <span style='color:#ffd500'>(" + j[i].actionCost + ")</span>",
j[i].image,
describeJerk(j[i].attack,j[i].parameter),
attackDerek,
j[i].navn + j[i].ID + "but",
j[i].buttonDescription,
j[i].ID
);
if (j[i].actionCost > jerkActions) {
document.getElementById(j[i].navn + j[i].ID + "but").disabled = true;
}
}
}
if (loadedJerks(state.jerkPile) == 0) {
changeScene("You have no jerks left!","doorOfRegret");
createGoButton("Yikes!","bullFart",goDerekEat);
}
if (refresh_pile) {
jerkRefreshCost = Math.floor(state.bCoco * 0.20);
changeScene(
"Your whole jerk pile has been beaten up!</br>But <span style='color:#16fa05'>these jerks never give up!</span> In a flash they are ready to fight for you again!",
"jerkSquad"
);
createGoButton("Go go jerks!","jerkSquad",goRefreshJerks);
}
}
function goDerekEat() {
// playSound(soundEffect.thirsty);
if (muffins > 0) {
if (muffins >= curDerekHunger) {
//Eats all the muffins, and not appetite for stardust
changeScene(
"<span style='color:#" + derekArray[curDerekIndex].clr + "'>" + derekArray[curDerekIndex].navn + "</span> frothingly eats <span style='color:#fca903'>" + muffins + " muffins.</span> He is super full so he leaves your stardust alone.. for now",
"muffin"
);
} else {
//Eats all the muffins but has a remaining appetite for stardust
var leftover_hunger = curDerekHunger - muffins;
changeScene(
"<span style='color:#" + derekArray[curDerekIndex].clr + "'>" + derekArray[curDerekIndex].navn + "</span> frothingly eats <span style='color:#fca903'>" + muffins + " muffins.</span> But he is still super hungry, so he also eats <span style='color:#ff0000'>" + leftover_hunger + " stardust</span>",
"muffin"
);
updateState('bCoreStardust', state.bCoreStardust - leftover_hunger);
}
} else {
//Eats the stardust
//"<span style='color:#" + allDereks[curDerekIndex].clr + "'>" + allDereks[curDerekIndex].navn + "</span> frothingly eats <span style='color:#ff0000>" + curDerekHunger + " stardust</span>"
changeScene(
"<span style='color:#" + derekArray[curDerekIndex].clr + "'>" + derekArray[curDerekIndex].navn + "</span> frothingly eats <span style='color:#ff0000'>" + curDerekHunger + " stardust</span>",
"stardust"
);
updateState('bCoreStardust', state.bCoreStardust - curDerekHunger);
}
createGoButton("OK!","talk",loadBurgulonDungeonLevel);
if (state.bCoreStardust <= 0) {
//Derek wins
playMusic();
drainCore();
var j = state.jerkPile;
for (var i = 0; i < j.length; i++) {
j[i].loaded = false;
j[i].exhausted = false;
}
updateState('jerkPile', j);
if (bossBattle == "bent") {
goBentWins();
} else if (bossBattle == "slopnax") {
goSlopnaxWins();
} else if (bossBattle == "mayonada") {
goMayonadaWins();
} else if (bossBattle == "derek") {
goDerekWins();
} else if (bossBattle == "jack") {
if (state.bDerekProgress == 2) {
goJackExplodes();
} else {
goJackWins();
}
} else {
changeScene(
"<span style='color:#" + derekArray[curDerekIndex].clr + "'>" + derekArray[curDerekIndex].navn + "</span> sucks the remaining stardust out of your core. He returns to his home planet Derekulus X, victorious!",
"blackHole"
);
createGoButton("Bummer","bullFart",goNewGalaxy);
}
}
}
function loadBurgulonDungeonLevel() {
console.log("loadBurgulonDungeonLevel");
//curBurgulonLevel++;
muffins = 0;
curDerekBaseHunger += derekulianHealth / 40;
calculateDerekHunger();
//curDerekHunger += Math.floor(curDerekHunger * 0.2);
jerkActions = state.bJerkActions + extraActions;
unloadAllJerks();
drawJerksFromPile(state.bJerksPerTurn);
goChooseJerk();
}
function calculateDerekHunger() {
curDerekHunger = Math.floor(Math.random() * curDerekBaseHunger) + Math.floor(curDerekBaseHunger / 10);
}
//Do this before entering the dungeon
function startDungeon() {
console.log("startDungeon");
//curBurgulonLevel = 0;
var j = state.jerkPile;
for (var i = 0; i < j.length; i++) {
// if (!j[i].removed) {
// j[i].loaded = false;
// j[i].exhausted = false;
// }
j[i].loaded = false;
j[i].exhausted = false;
}
updateState('jerkPile', j);
jerkActions = state.bJerkActions;
muffinMultiplier = 1;
ringMultiplier = 1;
strengthMultiplier = 1;
muffins = 0;
extraActions = 0;
drawJerksFromPile(state.bJerksPerTurn);
goChooseJerk();
}
function goDerekDead() {
// if (bossBattle == "") {
// changeScene(derekArray[curDerekIndex].navn + " has been defeated! Your jerks swarm over to loot all his precious space rings","thirsty");
// createGoButton("Go get 'em!","spaceRing",goLootRings);
// } else if (bossBattle == "bent") {
// goDefeatBent();
// } else if (bossBattle == "slopnax") {
// goDefeatSlopnax();
// } else if (bossBattle == "mayonada") {
// goDefeatMayonada();
// } else if (bossBattle == "derek") {
// goDefeatOgDerek();
// }
changeScene(
derekArray[curDerekIndex].navn + " has been defeated! Your jerks swarm over to loot all his precious space rings",
"jerkSquadCelebrating"
);
createGoButton("Go get 'em!","spaceRing",goLootRings);
}
function goLootRings() {
var lootedRings = Math.round(derekulianHealth * ringMultiplier);
updateState('bSpaceRings', state.bSpaceRings + lootedRings);
changeScene(
"You collect <span style='color:#ffd500'>" + lootedRings + " space rings</span> from the defeated enemy",
"spaceRing"
);
if (state.bDoubleRings) {
createGoButton("Check socks","bullSocks",goCheckSocks,lootedRings);
}
createGoButton("Oh yeah!","talk",goLootRes,lootedRings);
}
function goCheckSocks(lootedRings) {
var sockRings = 5 + Math.ceil(Math.random() * lootedRings);
updateState('bSpaceRings', state.bSpaceRings + sockRings);
changeScene(
"You shake the stinking socks, and <span style='color:#ffc800'>" + sockRings + " space rings</span> fall out of the socks",
"bullSocks"
);
setTimeout(function(){
changeScene(
"You shake the stinking socks, and <span style='color:#ffc800'>" + sockRings + " space rings</span> fall out of the socks",
"spaceRing"
);
createGoButton("Score!","spaceRing",goLootRes,lootedRings);
},1000);
}
function goLootRes(rings) {
var resTypes = [
"Wood",
"Gold",
"Coco",
"Stardust"
];
var resImages = [
"wood",
"gold",
"coco",
"stardust"
];
var resAmounts = [
30,
10,
30,
3
];
var chosenRes = Math.floor(Math.random() * 4);
var amount = resAmounts[chosenRes] * rings;
if (chosenRes == 0) {
updateState('bWood', state.bWood + amount);
} else if (chosenRes == 1) {
updateState('bGold', state.bGold + amount);
} else if (chosenRes == 2) {
updateState('bCoco', state.bCoco + amount);
} else if (chosenRes == 3) {
updateState('bStardust', state.bStardust + amount);
}
changeScene(
"You also find " + amount + " " + resTypes[chosenRes] + " in his wallet",
resImages[chosenRes]
);
createGoButton("Sweet",resImages[chosenRes],goLootLollies,rings);
}
function goLootLollies(rings) {
playMusic();
var lolliAmount = Math.round(rings/15);
updateState('bLollipops', state.bLollipops + lolliAmount);
changeScene(
"Look! Your jerks give you <span style='color:#ff0000'>" + lolliAmount + " lollipops</span>, for being so nice to them.</br>Do they really like getting beaten up like this all the time?",
"Lollipop"
);
if (bossBattle == "" || bossBattle == 1 || bossBattle == 2 || bossBattle == 3 || bossBattle == 0) {
// if (state.bDoubleRings) {
// createGoButton("Check socks","bullSocks",goCheckSocks,rings);
// }
createGoButton("Alright!","talk",finishDerek);
//createGoButton("Oh yeah!","talk",goLootRes,lootedRings);
} else if (bossBattle == "bent") {
createGoButton("Alright!","talk",goDefeatBent);
//goDefeatBent();
} else if (bossBattle == "slopnax") {
createGoButton("Alright!","talk",goDefeatSlopnax);
//goDefeatSlopnax();
} else if (bossBattle == "mayonada") {
createGoButton("Alright!","talk",goDefeatMayonada);
//goDefeatMayonada();
} else if (bossBattle == "derek") {
createGoButton("Alright!","talk",goDefeatOgDerek);
//goDefeatOgDerek();
} else if (bossBattle == "randomDerek") {
if (derekulianHealth == 1000000 && !state.bMillionDerekCubeFound) {
createGoButton("Alright!","talk",goFindMillionDerekCube);
} else {
createGoButton("Alright!","talk",goDerekSummoningDevice);
}
} else if (bossBattle == "jack") {
createGoButton("Alright!!","talk",goDefeatJack);
}
//createGoButton("Alright!","talk",finishDerek);
}
function calculateDefeatedJerks() {
//return (state.jerkPile.length - availableJerksInPile(state.jerkPile)) - ;
var beaten = 0;
var j = state.jerkPile;
for (var i = 0; i < j.length; i++) {
if (!j[i].removed && !j[i].loaded && j[i].exhausted) {
beaten++;
}
}
return beaten;
}
function goRunAwaySure() {
changeScene(
"Are you sure you want to run away from this epic battle?",
"burgulon"
);
createGoButton("No","no",goChooseJerk);
createGoButton("Yes","yes",goRunAway);
}
function goRunAway() {
playMusic();
changeScene(
"You take all your jerks and get out of there!</br>Better not risk losing more stardust",
"jerkSquad"
);
createGoButton("Phew","talk",goNewGalaxy);
}