Added a remains option to digesty vore

This commit is contained in:
Heroman3003
2019-04-01 12:28:02 +10:00
parent 82c152c1ea
commit c1d356fe8b
13 changed files with 227 additions and 12 deletions
+1 -1
View File
@@ -38,7 +38,7 @@
//Actual full digest modes
var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL)
//Digest mode addon flags
var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING)
var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS)
//Transformation modes
var/tmp/static/list/transform_modes = list(DM_TRANSFORM_MALE,DM_TRANSFORM_FEMALE,DM_TRANSFORM_KEEP_GENDER,DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR,DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR_EGG,DM_TRANSFORM_REPLICA,DM_TRANSFORM_REPLICA_EGG,DM_TRANSFORM_KEEP_GENDER_EGG,DM_TRANSFORM_MALE_EGG,DM_TRANSFORM_FEMALE_EGG, DM_EGG)
//Item related modes
@@ -138,6 +138,8 @@
to_chat(M,"<span class='notice'>" + digest_alert_prey + "</span>")
play_sound = pick(death_sounds)
if((mode_flags & DM_FLAG_LEAVEREMAINS) && M.digest_leave_remains)
handle_remains_leaving(M)
digestion_death(M)
owner.update_icons()
if(compensation > 0)
@@ -60,6 +60,8 @@
return FALSE //Sorta important to not digest your own beacons.
/obj/item/organ/internal/brain/slime/digest_act(var/atom/movable/item_storage = null)
return FALSE //so prometheans can be recovered
/obj/item/weapon/digestion_remains/digest_act(var/atom/movable/item_storage = null)
return FALSE //Don't digest stuff we intentionally made
/////////////
// Some special treatment
@@ -0,0 +1,156 @@
/obj/belly/proc/handle_remains_leaving(var/mob/living/M)
if(istype(M,/mob/living/carbon/human)) //Are we even humanoid?
var/mob/living/carbon/human/H = M
if((H.species.name in remainless_species) || H.isSynthetic()) //Don't leave anything if there is nothing to leave
return
else
var/bones_amount = rand(2,3) //some random variety in amount of bones left
if(prob(20)) //ribcage surviving whole is some luck
new /obj/item/weapon/digestion_remains/ribcage(src)
bones_amount--
while(bones_amount) //throw in the rest
new /obj/item/weapon/digestion_remains(src)
bones_amount--
var/skull_amount = 1
switch(H.species.name) //oh boy here we go, finding us a right skull
if(SPECIES_HUMAN)
new /obj/item/weapon/digestion_remains/skull(src)
skull_amount--
if(SPECIES_TAJ)
new /obj/item/weapon/digestion_remains/skull/tajaran(src)
skull_amount--
if(SPECIES_UNATHI)
new /obj/item/weapon/digestion_remains/skull/unathi(src)
skull_amount--
if(SPECIES_SKRELL)
new /obj/item/weapon/digestion_remains/skull/skrell(src)
skull_amount--
if(SPECIES_VASILISSAN)
new /obj/item/weapon/digestion_remains/skull/vasilissan(src)
skull_amount--
if(SPECIES_AKULA)
new /obj/item/weapon/digestion_remains/skull/akula(src)
skull_amount--
if(SPECIES_RAPALA)
new /obj/item/weapon/digestion_remains/skull/rapala(src)
skull_amount--
if(SPECIES_VULPKANIN)
new /obj/item/weapon/digestion_remains/skull/vulpkanin(src)
skull_amount--
if(SPECIES_SERGAL)
new /obj/item/weapon/digestion_remains/skull/sergal(src)
skull_amount--
if(SPECIES_ZORREN_FLAT || SPECIES_ZORREN_HIGH)
new /obj/item/weapon/digestion_remains/skull/zorren(src)
skull_amount--
if(SPECIES_NEVREAN)
new /obj/item/weapon/digestion_remains/skull/nevrean(src)
skull_amount--
if(SPECIES_TESHARI)
new /obj/item/weapon/digestion_remains/skull/teshari(src)
skull_amount--
if(SPECIES_VOX)
new /obj/item/weapon/digestion_remains/skull/vox(src)
skull_amount--
if(SPECIES_XENOHYBRID)
new /obj/item/weapon/digestion_remains/skull/xenohybrid(src)
skull_amount--
if(skull_amount && H.species.selects_bodytype) //We still haven't found correct skull...
if(H.species.base_species == SPECIES_HUMAN)
new /obj/item/weapon/digestion_remains/skull/unknown(src)
else
new /obj/item/weapon/digestion_remains/skull/unknown/anthro(src)
else if(skull_amount) //Something entirely different...
new /obj/item/weapon/digestion_remains/skull/unknown(src)
else
return
/obj/item/weapon/digestion_remains
name = "bone"
desc = "A bleached bone. It's very non-descript and its hard to tell what species or part of the body it came from."
icon = 'icons/obj/bones_vr.dmi'
icon_state = "generic"
force = 0
throwforce = 0
item_state = "bone"
w_class = ITEMSIZE_SMALL
/obj/item/weapon/digestion_remains/attack_self(mob/user)
if(user.a_intent == I_HURT)
to_chat(user,"<span class='warning'>As you squeeze the [name], it crumbles into dust and falls apart into nothing!</span>")
qdel(src)
/obj/item/weapon/digestion_remains/ribcage
name = "ribcage"
desc = "A bleached ribcage. It's very white and definitely has seen better times. Hard to tell what it belonged to."
icon_state = "ribcage"
/obj/item/weapon/digestion_remains/skull
name = "skull"
desc = "A bleached skull. It looks very weakened. Seems like it belonged to a human."
icon_state = "skull"
/obj/item/weapon/digestion_remains/skull/tajaran
desc = "A bleached skull. It looks very weakened. Seems like it belonged to a tajara."
icon_state = "skull_taj"
/obj/item/weapon/digestion_remains/skull/unathi
desc = "A bleached skull. It looks very weakened. Seems like it belonged to an unathi."
icon_state = "skull_unathi"
/obj/item/weapon/digestion_remains/skull/skrell
desc = "A bleached skull. It looks very weakened. Seems like it belonged to a skrell."
icon_state = "skull"
/obj/item/weapon/digestion_remains/skull/vasilissan
desc = "A bleached skull. It looks very weakened. Seems like it belonged to a vasilissan."
icon_state = "skull"
/obj/item/weapon/digestion_remains/skull/akula
desc = "A bleached skull. It looks very weakened. Seems like it belonged to an akula."
icon_state = "skull_unathi"
/obj/item/weapon/digestion_remains/skull/rapala
desc = "A bleached skull. It looks very weakened. Seems like it belonged to a rapala."
icon_state = "skull"
/obj/item/weapon/digestion_remains/skull/vulpkanin
desc = "A bleached skull. It looks very weakened. Seems like it belonged to a vulpkanin."
icon_state = "skull_taj"
/obj/item/weapon/digestion_remains/skull/sergal
desc = "A bleached skull. It looks very weakened. Seems like it belonged to a sergal."
icon_state = "skull_taj"
/obj/item/weapon/digestion_remains/skull/zorren
desc = "A bleached skull. It looks very weakened. Seems like it belonged to a zorren."
icon_state = "skull_taj"
/obj/item/weapon/digestion_remains/skull/nevrean
desc = "A bleached skull. It looks very weakened. Seems like it belonged to a nevrean."
icon_state = "skull_taj"
/obj/item/weapon/digestion_remains/skull/teshari
desc = "A bleached skull. It looks very weakened. Seems like it belonged to a teshari."
icon_state = "skull_taj"
/obj/item/weapon/digestion_remains/skull/vox
desc = "A bleached skull. It looks very weakened. Seems like it belonged to a vox."
icon_state = "skull_taj"
/obj/item/weapon/digestion_remains/skull/unknown
desc = "A bleached skull. It looks very weakened. You can't quite tell what species it belonged to."
icon_state = "skull"
/obj/item/weapon/digestion_remains/skull/unknown/anthro
icon_state = "skull_taj"
/obj/item/weapon/digestion_remains/skull/xenohybrid
desc = "A bleached skull. It looks very weakened. Seems like it belonged to something with prolonged head."
icon_state = "skull_xenohybrid"
+4
View File
@@ -1,6 +1,7 @@
///////////////////// Mob Living /////////////////////
/mob/living
var/digestable = 1 // Can the mob be digested inside a belly?
var/digest_leave_remains = 0 // Will this mob leave bones/skull/etc after the melty demise?
var/allowmobvore = 1 // Will simplemobs attempt to eat the mob?
var/showvoreprefs = 1 // Determines if the mechanical vore preferences button will be displayed on the mob or not.
var/obj/belly/vore_selected // Default to no vore capability.
@@ -195,6 +196,7 @@
var/datum/vore_preferences/P = client.prefs_vr
P.digestable = src.digestable
P.digest_leave_remains = src.digest_leave_remains
P.allowmobvore = src.allowmobvore
P.vore_taste = src.vore_taste
P.can_be_drop_prey = src.can_be_drop_prey
@@ -220,6 +222,7 @@
var/datum/vore_preferences/P = client.prefs_vr
digestable = P.digestable
digest_leave_remains = P.digest_leave_remains
allowmobvore = P.allowmobvore
vore_taste = P.vore_taste
can_be_drop_prey = P.can_be_drop_prey
@@ -664,6 +667,7 @@
CRASH("display_voreprefs() was called without an associated user.")
var/dispvoreprefs = "<b>[src]'s vore preferences</b><br><br><br>"
dispvoreprefs += "<b>Digestable:</b> [digestable ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Leaves Remains:</b> [digest_leave_remains ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Mob Vore:</b> [allowmobvore ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Drop-nom prey:</b> [can_be_drop_prey ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Drop-nom pred:</b> [can_be_drop_pred ? "Enabled" : "Disabled"]<br>"
+9 -4
View File
@@ -42,6 +42,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
/datum/vore_preferences
//Actual preferences
var/digestable = TRUE
var/digest_leave_remains = FALSE
var/allowmobvore = TRUE
var/list/belly_prefs = list()
var/vore_taste = "nothing in particular"
@@ -92,9 +93,9 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
return 0 //Need to know what character to load!
slot = client.prefs.default_slot
load_path(client_ckey,slot)
if(!path) return 0 //Path couldn't be set?
if(!fexists(path)) //Never saved before
save_vore() //Make the file first
@@ -108,6 +109,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
json_from_file = patch_version(json_from_file,version)
digestable = json_from_file["digestable"]
digest_leave_remains = json_from_file["digest_leave_remains"]
allowmobvore = json_from_file["allowmobvore"]
vore_taste = json_from_file["vore_taste"]
can_be_drop_prey = json_from_file["can_be_drop_prey"]
@@ -117,6 +119,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
//Quick sanitize
if(isnull(digestable))
digestable = TRUE
if(isnull(digest_leave_remains))
digest_leave_remains = FALSE
if(isnull(allowmobvore))
allowmobvore = TRUE
if(isnull(can_be_drop_prey))
@@ -130,11 +134,12 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
/datum/vore_preferences/proc/save_vore()
if(!path) return 0
var/version = 1 //For "good times" use in the future
var/list/settings_list = list(
"version" = version,
"digestable" = digestable,
"digest_leave_remains" = digest_leave_remains,
"allowmobvore" = allowmobvore,
"vore_taste" = vore_taste,
"can_be_drop_prey" = can_be_drop_prey,
@@ -147,7 +152,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
if(!json_to_file)
log_debug("Saving: [path] failed jsonencode")
return 0
//Write it out
#ifdef RUST_G
call(RUST_G, "file_write")(json_to_file, path)
+19
View File
@@ -298,6 +298,12 @@
if(0)
dat += "<a href='?src=\ref[src];toggledg=1'><span style='color:green;'>Toggle Digestable</span></a>"
switch(user.digest_leave_remains)
if(1)
dat += "<a href='?src=\ref[src];toggledlm=1'><span style='color:red;'>Toggle Leaving Remains</span></a>"
if(0)
dat += "<a href='?src=\ref[src];toggledlm=1'>Toggle Leaving Remains</a>"
switch(user.allowmobvore)
if(1)
dat += "<a href='?src=\ref[src];togglemv=1'>Toggle Mob Vore</a>"
@@ -837,6 +843,19 @@
if(user.client.prefs_vr)
user.client.prefs_vr.digestable = user.digestable
if(href_list["toggledlm"])
var/choice = alert(user, "This button allows preds to have your remains be left in their belly after you are digested. This will only happen if pred sets their belly to do so. Remains consist of skeletal parts. Currently you are [user.digest_leave_remains? "" : "not"] leaving remains.", "", "Allow Post-digestion Remains", "Cancel", "Disallow Post-digestion Remains")
switch(choice)
if("Cancel")
return 0
if("Allow Post-digestion Remains")
user.digest_leave_remains = TRUE
if("Disallow Post-digestion Remains")
user.digest_leave_remains = FALSE
if(user.client.prefs_vr)
user.client.prefs_vr.digest_leave_remains = user.digest_leave_remains
if(href_list["togglemv"])
var/choice = alert(user, "This button is for those who don't like being eaten by mobs. Messages admins when changed, so don't try to use it for mechanical benefit. Set it once and save it. Mobs are currently: [user.allowmobvore ? "Allowed to eat" : "Prevented from eating"] you.", "", "Allow Mob Predation", "Cancel", "Prevent Mob Predation")
switch(choice)