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

View File

@@ -31,7 +31,7 @@
//Addon mode flags
#define DM_FLAG_NUMBING 0x1
#define DM_FLAG_STRIPPING 0x2
//#define DM_FLAG_ITEMWEAK 0x4
#define DM_FLAG_LEAVEREMAINS 0x4
//Item related modes
#define IM_HOLD "Hold"

View File

@@ -30,3 +30,8 @@
#define SPECIES_ZORREN_FLAT "Flatland Zorren"
#define SPECIES_ZORREN_HIGH "Highlander Zorren"
#define SPECIES_CUSTOM "Custom Species"
#define SPECIES_MONKEY_AKULA "Sobaka"
#define SPECIES_MONKEY_NEVREAN "Sparra"
#define SPECIES_MONKEY_SERGAL "Saru"
#define SPECIES_MONKEY_VULPKANIN "Wolpin"

View File

@@ -394,6 +394,27 @@ var/global/list/contamination_colors = list("green",
"beige",
"pink")
//For the mechanic of leaving remains. Ones listed below are basically ones that got no bones.
var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
SPECIES_DIONA,
SPECIES_ALRAUNE,
SPECIES_PROTEAN,
SPECIES_MONKEY, //Exclude all monkey subtypes, to prevent abuse of it. They aren't,
SPECIES_MONKEY_TAJ, //set to have remains anyway, but making double sure,
SPECIES_MONKEY_SKRELL,
SPECIES_MONKEY_UNATHI,
SPECIES_MONKEY_AKULA,
SPECIES_MONKEY_NEVREAN,
SPECIES_MONKEY_SERGAL,
SPECIES_MONKEY_VULPKANIN,
SPECIES_XENO, //Same for xenos,
SPECIES_XENO_DRONE,
SPECIES_XENO_HUNTER,
SPECIES_XENO_SENTINEL,
SPECIES_XENO_QUEEN,
SPECIES_SHADOW,
SPECIES_GOLEM) //Some special species that may or may not be ever used in event too
/hook/startup/proc/init_vore_datum_ref_lists()
var/paths

View File

@@ -1,5 +1,5 @@
/datum/species/monkey/shark
name = "Sobaka"
name = SPECIES_MONKEY_AKULA
name_plural = "Sobaka"
icobase = 'icons/mob/human_races/monkeys/r_sobaka_vr.dmi'
deform = 'icons/mob/human_races/monkeys/r_sobaka_vr.dmi'
@@ -8,7 +8,7 @@
default_language = "Skrellian" //Closest we have.
/datum/species/monkey/sergal
name = "Saru"
name = SPECIES_MONKEY_SERGAL
greater_form = "Sergal"
icobase = 'icons/mob/human_races/monkeys/r_sergaling_vr.dmi'
deform = 'icons/mob/human_races/monkeys/r_sergaling_vr.dmi'
@@ -16,7 +16,7 @@
default_language = LANGUAGE_SAGARU
/datum/species/monkey/sparra
name = "Sparra"
name = SPECIES_MONKEY_NEVREAN
name_plural = "Sparra"
greater_form = "Nevrean"
tail = null
@@ -41,7 +41,7 @@
*/
/datum/species/monkey/vulpkanin
name = "Wolpin"
name = SPECIES_MONKEY_VULPKANIN
name_plural = "Wolpin"
icobase = 'icons/mob/human_races/monkeys/r_wolpin.dmi'

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

View File

@@ -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)

View File

@@ -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

View File

@@ -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"

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>"

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"
@@ -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))
@@ -135,6 +139,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
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,

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)

BIN
icons/obj/bones_vr.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

View File

@@ -2951,6 +2951,7 @@
#include "code\modules\vore\eating\bellymodes_vr.dm"
#include "code\modules\vore\eating\contaminate_vr.dm"
#include "code\modules\vore\eating\digest_act_vr.dm"
#include "code\modules\vore\eating\leave_remains_vr.dm"
#include "code\modules\vore\eating\living_vr.dm"
#include "code\modules\vore\eating\silicon_vr.dm"
#include "code\modules\vore\eating\simple_animal_vr.dm"