| @@ -568,7 +568,8 @@ function taluthusGrabCockVore(attacker) { | |||
| function(attacker, defender) { return isNormal(attacker) && isGrappled(defender) && defender.flags.shrunk != true; }, | |||
| function(attacker, defender) { return attacker.flags.grappleType == "hands"; } | |||
| ], conditions: [ | |||
| function(attacker, defender) { return defender.prefs.prey; } | |||
| function(attacker, defender) { return defender.prefs.prey; }, | |||
| function(attacker, defender) { return defender.prefs.vore.cock; } | |||
| ], | |||
| priority: 1, | |||
| weight: function(attacker, defender) { return 1; } | |||
| @@ -1013,6 +1014,10 @@ function seliciaTailUnbirth(attacker) { | |||
| return ["Selicia grinds your face against her slit, but you stay free of her greedy confines."]; | |||
| } | |||
| }, | |||
| conditions: [ | |||
| function(attacker, defender) { return defender.prefs.prey; }, | |||
| function(attacker, defender) { return defender.prefs.vore.cock; } | |||
| ], | |||
| requirements: [ | |||
| function(attacker, defender) { return isNormal(attacker) && isGrappled(defender); }, | |||
| function(attacker, defender) { return attacker.flags.voreType == "tail"; } | |||
| @@ -1084,7 +1089,8 @@ function seliciaGrabUnbirth(attacker) { | |||
| function(attacker, defender) { return isNormal(attacker) && isGrappled(defender); }, | |||
| function(attacker, defender) { return attacker.flags.voreType == "stomach"; } | |||
| ], conditions: [ | |||
| function(attacker, defender) { return defender.prefs.prey; } | |||
| function(attacker, defender) { return defender.prefs.prey; }, | |||
| function(attacker, defender) { return defender.prefs.vore.cock; } | |||
| ], | |||
| priority: 1, | |||
| weight: function(attacker, defender) { return 2; } | |||
| @@ -1134,7 +1140,8 @@ function seliciaPinUnbirth(attacker) { | |||
| function(attacker, defender) { return isNormal(attacker) && isGrappled(defender); }, | |||
| function(attacker, defender) { return attacker.flags.voreType == "unbirth"; } | |||
| ], conditions: [ | |||
| function(attacker, defender) { return defender.prefs.prey; } | |||
| function(attacker, defender) { return defender.prefs.prey; }, | |||
| function(attacker, defender) { return defender.prefs.vore.cock; } | |||
| ], | |||
| priority: 1, | |||
| weight: function(attacker, defender) { return 1; } | |||
| @@ -183,15 +183,24 @@ | |||
| </li> | |||
| <li> | |||
| <label for="character-prefs-prey">Player can be eaten</label> | |||
| <input type="checkbox" id="character-prefs-prey" name="prefs-prey" checked=true /> | |||
| <input type="checkbox" id="character-prefs-prey" name="prefs-prey" checked="true" /> | |||
| </li> | |||
| <li> | |||
| <label for="character-prefs-vore-cock">Cock vore</label> | |||
| <input type="checkbox" id="character-prefs-vore-cock" name="prefs-vore-cock" checked="true" /> | |||
| </li> | |||
| <li> | |||
| <label for="character-prefs-vore-unbirth">Unbirth</label> | |||
| <input type="checkbox" id="character-prefs-vore-unbirth" name="prefs-vore-unbirth" checked="true" /> | |||
| </li> | |||
| <li> | |||
| <label for="character-prefs-scat">Disposal/scat</label> | |||
| <input type="checkbox" id="character-prefs-scat" name="prefs-scat"/> | |||
| <li> | |||
| </li> | |||
| <li> | |||
| <label for="character-prefs-gore">Gore</label> | |||
| <input type="checkbox" id="character-prefs-gore" name="prefs-gore"/> | |||
| </li> | |||
| <li> | |||
| <button type="button" id="start-button">Start</button> | |||
| </li> | |||
| @@ -126,7 +126,11 @@ function updateEaten() { | |||
| list.removeChild(list.firstChild); | |||
| } | |||
| struggles = filterValid(currentFoe.struggles, currentFoe, player); | |||
| if (player.health > 0) | |||
| struggles = filterValid(currentFoe.struggles, currentFoe, player); | |||
| else | |||
| struggles = [submit(currentFoe)]; | |||
| for (let i = 0; i < struggles.length; i++) { | |||
| let li = document.createElement("li"); | |||
| let button = document.createElement("button"); | |||
| @@ -147,7 +151,10 @@ function updateCombat() { | |||
| list.removeChild(list.firstChild); | |||
| } | |||
| playerAttacks = filterValid(player.attacks, player, currentFoe); | |||
| if (player.health > 0) | |||
| playerAttacks = filterValid(player.attacks, player, currentFoe); | |||
| else | |||
| playerAttacks = [pass(player)]; | |||
| if (playerAttacks.length == 0) | |||
| playerAttacks = [player.backupAttack]; | |||
| @@ -343,7 +350,11 @@ function applySettings(settings) { | |||
| if (key.match(/prefs/)) { | |||
| let tokens = key.split("-"); | |||
| let pref = player.prefs; | |||
| pref = tokens.slice(1,-1).reduce((pref, key) => pref[key], pref); | |||
| pref = tokens.slice(1,-1).reduce(function(pref, key) { | |||
| if (pref[key] == undefined) | |||
| pref[key] = {}; | |||
| return pref[key]; | |||
| }, pref); | |||
| pref[tokens.slice(-1)[0]] = settings[key]; | |||
| } | |||
| } | |||
| @@ -452,9 +463,9 @@ function attackClicked(index) { | |||
| update(["You die..."]); | |||
| respawn(respawnRoom); | |||
| } else if (player.health <= 0) { | |||
| update(["You fall to the ground..."]); | |||
| update(["You're too weak to do anything..."]); | |||
| if (player.prefs.prey) { | |||
| changeMode("eaten"); | |||
| // nada | |||
| } else { | |||
| killingBlow = attack; | |||
| update(["You die..."]); | |||