| @@ -568,7 +568,8 @@ function taluthusGrabCockVore(attacker) { | |||||
| function(attacker, defender) { return isNormal(attacker) && isGrappled(defender) && defender.flags.shrunk != true; }, | function(attacker, defender) { return isNormal(attacker) && isGrappled(defender) && defender.flags.shrunk != true; }, | ||||
| function(attacker, defender) { return attacker.flags.grappleType == "hands"; } | function(attacker, defender) { return attacker.flags.grappleType == "hands"; } | ||||
| ], conditions: [ | ], 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, | priority: 1, | ||||
| weight: function(attacker, defender) { return 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."]; | 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: [ | requirements: [ | ||||
| function(attacker, defender) { return isNormal(attacker) && isGrappled(defender); }, | function(attacker, defender) { return isNormal(attacker) && isGrappled(defender); }, | ||||
| function(attacker, defender) { return attacker.flags.voreType == "tail"; } | 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 isNormal(attacker) && isGrappled(defender); }, | ||||
| function(attacker, defender) { return attacker.flags.voreType == "stomach"; } | function(attacker, defender) { return attacker.flags.voreType == "stomach"; } | ||||
| ], conditions: [ | ], 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, | priority: 1, | ||||
| weight: function(attacker, defender) { return 2; } | 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 isNormal(attacker) && isGrappled(defender); }, | ||||
| function(attacker, defender) { return attacker.flags.voreType == "unbirth"; } | function(attacker, defender) { return attacker.flags.voreType == "unbirth"; } | ||||
| ], conditions: [ | ], 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, | priority: 1, | ||||
| weight: function(attacker, defender) { return 1; } | weight: function(attacker, defender) { return 1; } | ||||
| @@ -183,15 +183,24 @@ | |||||
| </li> | </li> | ||||
| <li> | <li> | ||||
| <label for="character-prefs-prey">Player can be eaten</label> | <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> | <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> | <li> | ||||
| <label for="character-prefs-scat">Disposal/scat</label> | <label for="character-prefs-scat">Disposal/scat</label> | ||||
| <input type="checkbox" id="character-prefs-scat" name="prefs-scat"/> | <input type="checkbox" id="character-prefs-scat" name="prefs-scat"/> | ||||
| <li> | |||||
| </li> | |||||
| <li> | <li> | ||||
| <label for="character-prefs-gore">Gore</label> | <label for="character-prefs-gore">Gore</label> | ||||
| <input type="checkbox" id="character-prefs-gore" name="prefs-gore"/> | <input type="checkbox" id="character-prefs-gore" name="prefs-gore"/> | ||||
| </li> | |||||
| <li> | <li> | ||||
| <button type="button" id="start-button">Start</button> | <button type="button" id="start-button">Start</button> | ||||
| </li> | </li> | ||||
| @@ -126,7 +126,11 @@ function updateEaten() { | |||||
| list.removeChild(list.firstChild); | 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++) { | for (let i = 0; i < struggles.length; i++) { | ||||
| let li = document.createElement("li"); | let li = document.createElement("li"); | ||||
| let button = document.createElement("button"); | let button = document.createElement("button"); | ||||
| @@ -147,7 +151,10 @@ function updateCombat() { | |||||
| list.removeChild(list.firstChild); | 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) | if (playerAttacks.length == 0) | ||||
| playerAttacks = [player.backupAttack]; | playerAttacks = [player.backupAttack]; | ||||
| @@ -343,7 +350,11 @@ function applySettings(settings) { | |||||
| if (key.match(/prefs/)) { | if (key.match(/prefs/)) { | ||||
| let tokens = key.split("-"); | let tokens = key.split("-"); | ||||
| let pref = player.prefs; | 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]; | pref[tokens.slice(-1)[0]] = settings[key]; | ||||
| } | } | ||||
| } | } | ||||
| @@ -452,9 +463,9 @@ function attackClicked(index) { | |||||
| update(["You die..."]); | update(["You die..."]); | ||||
| respawn(respawnRoom); | respawn(respawnRoom); | ||||
| } else if (player.health <= 0) { | } else if (player.health <= 0) { | ||||
| update(["You fall to the ground..."]); | |||||
| update(["You're too weak to do anything..."]); | |||||
| if (player.prefs.prey) { | if (player.prefs.prey) { | ||||
| changeMode("eaten"); | |||||
| // nada | |||||
| } else { | } else { | ||||
| killingBlow = attack; | killingBlow = attack; | ||||
| update(["You die..."]); | update(["You die..."]); | ||||