Merge pull request #1174 from VOREStation/aro-voretaste

Add vore taste system
This commit is contained in:
Arokha Sieyes
2017-03-13 03:57:15 -04:00
committed by GitHub
4 changed files with 80 additions and 3 deletions
+2
View File
@@ -26,6 +26,7 @@
var/absorbchance = 0 // % Chance of stomach beginning to absorb if prey struggles
var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles.
var/transferchance = 0 // % Chance of prey being
var/can_taste = 0 // If this belly prints the flavor of prey when it eats someone.
var/datum/belly/transferlocation = null // Location that the prey is released if they struggle and get dropped off.
var/tmp/digest_mode = DM_HOLD // Whether or not to digest. Default to not digest.
@@ -452,6 +453,7 @@
dupe.digest_burn = digest_burn
dupe.digest_tickrate = digest_tickrate
dupe.immutable = immutable
dupe.can_taste = can_taste
dupe.escapable = escapable
dupe.escapetime = escapetime
dupe.digestchance = digestchance
+54 -3
View File
@@ -7,10 +7,11 @@
var/weight = 137 // Weight for mobs for weightgain system
var/weight_gain = 1 // How fast you gain weight
var/weight_loss = 0.5 // How fast you lose weight
var/egg_type = "egg" // Default egg type.
var/egg_type = "egg" // Default egg type.
var/feral = 0 // How feral the mob is, if at all. Does nothing for non xenochimera at the moment.
var/reviving = 0 // Only used for creatures that have the xenochimera regen ability, so far.
var/metabolism = 0.0015
var/vore_taste = null // What the character tastes like
//
// Hook for generic creation of stuff on new creatures
@@ -18,6 +19,7 @@
/hook/living_new/proc/vore_setup(mob/living/M)
M.verbs += /mob/living/proc/insidePanel
M.verbs += /mob/living/proc/escapeOOC
M.verbs += /mob/living/proc/lick
//Tries to load prefs if a client is present otherwise gives freebie stomach
if(!M.vore_organs || !M.vore_organs.len)
@@ -38,6 +40,7 @@
B.immutable = 1
B.name = "Stomach"
B.inside_flavor = "It appears to be rather warm and wet. Makes sense, considering it's inside \the [M.name]."
B.can_taste = 1
M.vore_organs[B.name] = B
M.vore_selected = B.name
@@ -218,6 +221,7 @@
P.digestable = src.digestable
P.belly_prefs = src.vore_organs
P.vore_taste = src.vore_taste
return 1
@@ -233,6 +237,7 @@
src.digestable = P.digestable
src.vore_organs = list()
src.vore_taste = P.vore_taste
for(var/I in P.belly_prefs)
var/datum/belly/Bp = P.belly_prefs[I]
@@ -240,6 +245,38 @@
return 1
//
// Clearly super important. Obviously.
//
/mob/living/proc/lick(var/mob/living/tasted in oview(1))
set name = "Lick Someone"
set category = "IC"
set desc = "Lick someone nearby!"
if(!istype(tasted))
return
if(src.sleeping || src.resting || src.weakened || src.stat >= DEAD)
return
var/taste_message = ""
if(tasted.vore_taste && (tasted.vore_taste != ""))
taste_message += "[tasted.vore_taste]"
else
if(ishuman(tasted))
var/mob/living/carbon/human/H = tasted
taste_message += "a normal [H.custom_species ? H.custom_species : H.species.name]"
else
taste_message += "a plain old normal [tasted]"
if(ishuman(tasted))
var/mob/living/carbon/human/H = tasted
if(H.touching.reagent_list.len) //Just the first one otherwise I'll go insane.
var/datum/reagent/R = H.touching.reagent_list[1]
taste_message += " You also get the flavor of [R.taste_description] from something on them"
src.visible_message("<span class='warning'>[src] licks [tasted]!</span>","<span class='notice'>You lick [tasted]. They taste rather like [taste_message].</span>","<b>Slurp!</b>")
//
// OOC Escape code for pref-breaking or AFK preds
//
@@ -268,11 +305,12 @@
//You're in a PC!
else if(istype(src.loc,/mob/living))
var/mob/living/carbon/pred = src.loc
var/confirm = alert(src, "You're in a player-character. This is for escaping from preference-breaking and if your predator disconnects/AFKs. If you are in more than one pred, use this more than once. If your preferences were being broken, please admin-help as well.", "Confirmation", "Okay", "Cancel")
var/confirm = alert(src, "You're in a player-character. This is for escaping from preference-breaking and if your predator disconnects/AFKs. If you are in more than one pred. If your preferences were being broken, please admin-help as well.", "Confirmation", "Okay", "Cancel")
if(confirm == "Okay")
for(var/O in pred.vore_organs)
var/datum/belly/CB = pred.vore_organs[O]
CB.release_specific_contents(src)
CB.internal_contents -= src //Clean them if we can, otherwise it will get GC'd by the vore code later.
src.forceMove(get_turf(loc))
message_admins("[key_name(src)] used the OOC escape button to get out of [key_name(pred)] (PC) ([pred ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[pred.x];Y=[pred.y];Z=[pred.z]'>JMP</a>" : "null"])")
//You're in a dogborg!
@@ -353,6 +391,19 @@
belly_target.nom_mob(prey, user)
user.update_icons()
// Flavor handling
var/flavor_message = ""
if(belly_target.can_taste && prey.vore_taste && (prey.vore_taste != ""))
flavor_message += "[prey.vore_taste]."
if(ishuman(prey))
var/mob/living/carbon/human/H = prey
if(H.touching.reagent_list.len) //Just the first one otherwise I'll go insane.
var/datum/reagent/R = H.touching.reagent_list[1]
flavor_message += " You also get the flavor of [R.taste_description] from something on them"
if(flavor_message != "")
src << "<span class='notice'>[prey] tastes of [flavor_message].</span>"
// Inform Admins
if (pred == user)
msg_admin_attack("[key_name(pred)] ate [key_name(prey)]. ([pred ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[pred.x];Y=[pred.y];Z=[pred.z]'>JMP</a>" : "null"])")
+3
View File
@@ -43,6 +43,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
//Actual preferences
var/digestable = 1
var/list/belly_prefs = list()
var/vore_taste
//Mechanically required
var/path
@@ -101,6 +102,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
S["digestable"] >> digestable
S["belly_prefs"] >> belly_prefs
S["vore_taste"] >> vore_taste
if(isnull(digestable))
digestable = 1
@@ -118,5 +120,6 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
S["digestable"] << digestable
S["belly_prefs"] << belly_prefs
S["vore_taste"] << vore_taste
return 1
+21
View File
@@ -6,6 +6,7 @@
#define BELLIES_NAME_MIN 2
#define BELLIES_NAME_MAX 12
#define BELLIES_DESC_MAX 1024
#define FLAVOR_MAX 40
/mob/living/proc/insidePanel()
set name = "Vore Panel"
@@ -177,6 +178,10 @@
//Belly messages
dat += "<br><a href='?src=\ref[src];b_msgs=\ref[selected]'>Belly Messages</a>"
//Can belly taste?
dat += "<br><a href='?src=\ref[src];b_tastes=\ref[selected]'>Can Taste:</a>"
dat += " [selected.can_taste ? "Yes" : "No"]"
//Belly escapability
dat += "<br><a href='?src=\ref[src];b_escapable=\ref[selected]'>Belly Interactions ([selected.escapable ? "On" : "Off"])</a>"
if(selected.escapable)
@@ -216,6 +221,7 @@
//Under the last HR, save and stuff.
dat += "<a href='?src=\ref[src];saveprefs=1'>Save Prefs</a>"
dat += "<a href='?src=\ref[src];refresh=1'>Refresh</a>"
dat += "<a href='?src=\ref[src];setflavor=1'>Set Flavor</a>"
switch(user.digestable)
if(1)
@@ -537,6 +543,9 @@
if(href_list["b_soundtest"])
user << selected.vore_sound
if(href_list["b_tastes"])
selected.can_taste = !selected.can_taste
if(href_list["b_escapable"])
if(selected.escapable == 0) //Possibly escapable and special interactions.
selected.escapable = 1
@@ -620,6 +629,18 @@
else
user << "<span class='notice'>Virgo-specific preferences saved!</span>"
if(href_list["setflavor"])
var/new_flavor = html_encode(input(usr,"What your character tastes like (40ch limit). This text will be printed to the pred after 'X tastes of...' so just put something like 'strawberries and cream':","Character Flavor",user.vore_taste) as text|null)
if(new_flavor)
new_flavor = readd_quotes(new_flavor)
if(length(new_flavor) > FLAVOR_MAX)
alert("Entered flavor/taste text too long. [FLAVOR_MAX] character limit.","Error")
return 0
user.vore_taste = new_flavor
else //Returned null
return 0
if(href_list["toggledg"])
var/choice = alert(user, "This button is for those who don't like being digested. It can make you undigestable. Don't abuse this button by toggling it back and forth to extend a scene or whatever, or you'll make the admins cry. Digesting you is currently: [user.digestable ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion")
switch(choice)