Kaynağa Gözat

Added Geta fight (no way to win). Fixed pick() not summing properly

tags/v0.2.8
Fen Dweller 7 yıl önce
ebeveyn
işleme
013b24951f
4 değiştirilmiş dosya ile 145 ekleme ve 21 silme
  1. +22
    -18
      combat.js
  2. +113
    -2
      customs.js
  3. +2
    -1
      feast.js
  4. +8
    -0
      vore.js

+ 22
- 18
combat.js Dosyayı Görüntüle

@@ -7,11 +7,15 @@ function attack(attacker, defender, baseDamage) {
} }


function isNormal(entity) { function isNormal(entity) {
return entity.grappled != true;
return entity.flags.grappled != true && entity.flags.shrunk != true;
}

function isNormalSize(entity) {
return entity.flags.shrunk != true;
} }


function isGrappled(entity) { function isGrappled(entity) {
return entity.grappled == true;
return entity.flags.grappled == true;
} }


function doComp(attackStat, defendStat) { function doComp(attackStat, defendStat) {
@@ -70,7 +74,7 @@ function grapple(attacker) {
attack: function(defender) { attack: function(defender) {
let success = statHealthCheck(attacker, defender, "str"); let success = statHealthCheck(attacker, defender, "str");
if (success) { if (success) {
defender.grappled = true;
defender.flags.grappled = true;
return "You charge at " + defender.description("the") + ", tackling them and knocking them to the ground."; return "You charge at " + defender.description("the") + ", tackling them and knocking them to the ground.";
} else { } else {
return "You charge at " + defender.description("the") + ", but they dodge out of the way!"; return "You charge at " + defender.description("the") + ", but they dodge out of the way!";
@@ -79,7 +83,7 @@ function grapple(attacker) {
attackPlayer: function(defender) { attackPlayer: function(defender) {
let success = Math.random() < 0.5; let success = Math.random() < 0.5;
if (success) { if (success) {
defender.grappled = true;
defender.flags.grappled = true;
return attacker.description("The") + " lunges at you, pinning you to the floor!"; return attacker.description("The") + " lunges at you, pinning you to the floor!";
} else { } else {
return attacker.description("The") + " tries to tackle you, but you deftly avoid them."; return attacker.description("The") + " tries to tackle you, but you deftly avoid them.";
@@ -101,7 +105,7 @@ function grappleDevour(attacker) {
let success = statHealthCheck(attacker, defender, "str"); let success = statHealthCheck(attacker, defender, "str");
if (success) { if (success) {
attacker.stomach.feed(defender); attacker.stomach.feed(defender);
defender.grappled = false;
defender.flags.grappled = false;
changeMode("explore"); changeMode("explore");
return "You open your jaws wide, stuffing " + defender.description("the") + "'s head into your gullet and greedily wolfing them down. Delicious."; return "You open your jaws wide, stuffing " + defender.description("the") + "'s head into your gullet and greedily wolfing them down. Delicious.";
} else { } else {
@@ -111,7 +115,7 @@ function grappleDevour(attacker) {
attackPlayer: function(defender) { attackPlayer: function(defender) {
let success = statHealthCheck(attacker, defender, "str"); let success = statHealthCheck(attacker, defender, "str");
if(success) { if(success) {
defender.grappled = false;
defender.flags.grappled = false;
changeMode("eaten"); changeMode("eaten");
return attacker.description("The") + " forces your head into their sloppy jaws, devouring you despite your frantic struggles. Glp."; return attacker.description("The") + " forces your head into their sloppy jaws, devouring you despite your frantic struggles. Glp.";
} else { } else {
@@ -134,7 +138,7 @@ function grappleAnalVore(attacker) {
let success = statHealthCheck(attacker, defender, "str"); let success = statHealthCheck(attacker, defender, "str");
if (success) { if (success) {
attacker.butt.feed(defender); attacker.butt.feed(defender);
defender.grappled = false;
defender.flags.grappled = false;
changeMode("explore"); changeMode("explore");
return "You shove " + defender.description("the") + " between your cheeks. Their head slips into your ass with a wet <i>shlk</i>, and the rest of their body follows suit. You moan and gasp, working them deeper and deeper..."; return "You shove " + defender.description("the") + " between your cheeks. Their head slips into your ass with a wet <i>shlk</i>, and the rest of their body follows suit. You moan and gasp, working them deeper and deeper...";
} else { } else {
@@ -154,7 +158,7 @@ function grappleRelease(attacker) {
name: "Release", name: "Release",
desc: "Release your opponent", desc: "Release your opponent",
attack: function(defender) { attack: function(defender) {
defender.grappled = false;
defender.flags.grappled = false;
return "You throw " + defender.description("the") + " back, dealing " + attack(attacker, defender, attacker.str*1.5) + " damage"; return "You throw " + defender.description("the") + " back, dealing " + attack(attacker, defender, attacker.str*1.5) + " damage";
}, requirements: [ }, requirements: [
function(attacker, defender) { return isNormal(attacker) && isGrappled(defender); } function(attacker, defender) { return isNormal(attacker) && isGrappled(defender); }
@@ -170,7 +174,7 @@ function grappledStruggle(attacker) {
attack: function(defender) { attack: function(defender) {
let success = statHealthCheck(attacker, defender, "str"); let success = statHealthCheck(attacker, defender, "str");
if (success) { if (success) {
attacker.grappled = false;
attacker.flags.grappled = false;
return "You struggle and shove " + defender.description("the") + " off of you."; return "You struggle and shove " + defender.description("the") + " off of you.";
} else { } else {
return "You struggle, but to no avail."; return "You struggle, but to no avail.";
@@ -179,14 +183,14 @@ function grappledStruggle(attacker) {
attackPlayer: function(defender) { attackPlayer: function(defender) {
let success = statHealthCheck(attacker, defender, "str"); let success = statHealthCheck(attacker, defender, "str");
if (success) { if (success) {
attacker.grappled = false;
attacker.flags.grappled = false;
return "Your prey shoves you back, breaking your grapple!"; return "Your prey shoves you back, breaking your grapple!";
} else { } else {
return "Your prey squirms, but remains pinned."; return "Your prey squirms, but remains pinned.";
} }
}, },
requirements: [ requirements: [
function(attacker, defender) { return isGrappled(attacker) && isNormal(defender); }
function(attacker, defender) { return isGrappled(attacker) && isNormalSize(attacker) && isNormal(defender); }
], ],
priority: 1, priority: 1,
}; };
@@ -199,8 +203,8 @@ function grappledReverse(attacker) {
attack: function(defender) { attack: function(defender) {
let success = statHealthCheck(attacker, defender, "str"); let success = statHealthCheck(attacker, defender, "str");
if (success) { if (success) {
attacker.grappled = false;
defender.grappled = true;
attacker.flags.grappled = false;
defender.flags.grappled = true;
return "You surprise " + defender.description("the") + " with a burst of strength, flipping them over and pinning them."; return "You surprise " + defender.description("the") + " with a burst of strength, flipping them over and pinning them.";
} else { } else {
return "You try to throw your opponent off of you, but fail."; return "You try to throw your opponent off of you, but fail.";
@@ -209,15 +213,15 @@ function grappledReverse(attacker) {
attackPlayer: function(defender) { attackPlayer: function(defender) {
let success = statHealthCheck(attacker, defender, "str"); let success = statHealthCheck(attacker, defender, "str");
if (success) { if (success) {
attacker.grappled = false;
defender.grappled = true;
attacker.flags.grappled = false;
defender.flags.grappled = true;
return "Your prey suddenly grabs hold and flips you over, pinning you!"; return "Your prey suddenly grabs hold and flips you over, pinning you!";
} else { } else {
return "Your prey tries to grab at you, but you keep them under control."; return "Your prey tries to grab at you, but you keep them under control.";
} }
}, },
requirements: [ requirements: [
function(attacker, defender) { return isGrappled(attacker) && isNormal(defender); }
function(attacker, defender) { return isGrappled(attacker) && isNormalSize(attacker) && isNormal(defender); }
], ],
priority: 1, priority: 1,
}; };
@@ -230,7 +234,7 @@ function flee(attacker) {
attack: function(defender) { attack: function(defender) {
let success = statCheck(attacker, defender, "dex"); let success = statCheck(attacker, defender, "dex");
if (success) { if (success) {
attacker.grappled = false;
attacker.flags.grappled = false;
changeMode("explore"); changeMode("explore");
return "You successfully run away."; return "You successfully run away.";
} else { } else {
@@ -283,7 +287,7 @@ function leer(attacker) {
return attacker.description("The") + " leers at you."; return attacker.description("The") + " leers at you.";
}, },
requirements: [ requirements: [
function(attacker, defender) { return attacker.leering != true && attacker.grappled != true; }
function(attacker, defender) { return attacker.leering != true && attacker.flags.grappled != true; }
], ],
priority: 1, priority: 1,
}; };


+ 113
- 2
customs.js Dosyayı Görüntüle

@@ -4,8 +4,119 @@ function Geta() {
Creature.call(this, "Geta", 5, 15, 10); Creature.call(this, "Geta", 5, 15, 10);


this.hasName = true; this.hasName = true;
this.description = function() { return "Geta" };

this.description = function() { return "Geta"; };

this.attacks.push(new punchAttack(this));
this.attacks.push(new getaShrink(this));
this.attacks.push(new getaGrab(this));
this.attacks.push(new getaTease(this));
this.attacks.push(new getaSuckle(this));
this.attacks.push(new getaSalivaSwallow(this));
this.attacks.push(new getaSwallow(this));

this.backupAttack = new pass(this);

this.digests = [];

this.digests.push(new digestPlayerStomach(this,50));
this.struggles = [];

this.struggles.push(new rub(this));
}

function getaShrink(attacker) {
return {
attackPlayer: function(defender) {
let success = true;

if (success) {
defender.flags.shrunk = true;
return attacker.description() + " pulls a strange device from his pocket and points it at you. A blinding flash envelops your vision...and as your sight returns, you find yourself shrunken down to no more than two inches tall.";
}
},
requirements: [
function(attacker, defender) {
return isNormal(attacker) && isNormal(defender);
}
],
priority: 2
};
}

function getaGrab(attacker) {
return {
attackPlayer: function(defender) {
defender.flags.grappled = true;
return attacker.description() + " leans down and snatches you up, stuffing you into his maw.";
},
requirements: [
function(attacker, defender) {
return isNormal(attacker) && defender.flags.shrunk == true && defender.flags.grappled != true;
}
],
priority: 2
};
}

function getaTease(attacker) {
return {
attackPlayer: function(defender) {
defender.stamina = Math.max(defender.stamina - 25, 0);
return attacker.description() + " grinds you against the roof of his maw with his tongue.";
},
requirements: [
function(attacker, defender) {
return isNormal(attacker) && defender.flags.shrunk == true && defender.flags.grappled == true && defender.stamina > 0;
}
],
priority: 1
};
}

function getaSuckle(attacker) {
return {
attackPlayer: function(defender) {
defender.stamina = Math.max(defender.stamina - 45, 0);
return attacker.description() + " shuts his jaws and suckles on you.";
},
requirements: [
function(attacker, defender) {
return isNormal(attacker) && defender.flags.shrunk == true && defender.flags.grappled == true && defender.stamina > 0;
}
],
priority: 1
};
}

function getaSalivaSwallow(attacker) {
return {
attackPlayer: function(defender) {
defender.stamina = Math.max(defender.stamina - 15, 0);
return attacker.description() + " swallows, draining the drool from his jaws - leaving you on the precipice of his gullet.";
},
requirements: [
function(attacker, defender) {
return isNormal(attacker) && defender.flags.shrunk == true && defender.flags.grappled == true && defender.stamina > 0;
}
],
priority: 1
};
}

function getaSwallow(attacker) {
return {
attackPlayer: function(defender) {
changeMode("eaten");
return attacker.description() + " shuts his jaws and swallows, dragging you down into his tight throat and dumping you into a caustic stomach.";
},
requirements: [
function(attacker, defender) {
return isNormal(attacker) && defender.flags.shrunk == true && defender.flags.grappled == true && defender.stamina <= 0;
}
],
priority: 2
};
} }


function GetaObj() { function GetaObj() {


+ 2
- 1
feast.js Dosyayı Görüntüle

@@ -42,7 +42,7 @@ function pick(list, attacker, defender) {
if (list.length == 0) if (list.length == 0)
return null; return null;
else { else {
let sum = list.reduce((sum, choice) => choice.weight == undefined ? 1 : choice.weight(attacker, defender) + sum, 0);
let sum = list.reduce((sum, choice) => choice.weight == undefined ? sum + 1 : sum + choice.weight(attacker, defender) + sum, 0);


let target = Math.random() * sum; let target = Math.random() * sum;


@@ -364,6 +364,7 @@ function changeMode(newMode) {


function respawn(respawnRoom) { function respawn(respawnRoom) {
moveTo(respawnRoom,"You drift through space and time..."); moveTo(respawnRoom,"You drift through space and time...");
player.clear();
player.stomach.contents = []; player.stomach.contents = [];
player.butt.contents = []; player.butt.contents = [];
advanceTime(86400/2); advanceTime(86400/2);


+ 8
- 0
vore.js Dosyayı Görüntüle

@@ -31,6 +31,12 @@ function Creature(name = "Creature", str=10, dex=10, con=10) {
this.restoreStamina = function(time) { this.restoreStamina = function(time) {
this.stamina = Math.min(this.maxStamina, this.stamina + this.maxStamina * time * this.staminaRate); this.stamina = Math.min(this.maxStamina, this.stamina + this.maxStamina * time * this.staminaRate);
}; };

this.flags = {};

this.clear = function() {
this.flags = {};
};
} }


function Player(name = "Player") { function Player(name = "Player") {
@@ -127,6 +133,8 @@ function Fen() {
this.build = "loomy"; this.build = "loomy";
this.species = "crux"; this.species = "crux";


this.description = function(prefix) { return "Fen"; };

this.attacks = []; this.attacks = [];


this.attacks.push(new devourPlayer(this)); this.attacks.push(new devourPlayer(this));


Yükleniyor…
İptal
Kaydet