mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 03:33:21 +00:00
Added a remains option to digesty vore
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
156
code/modules/vore/eating/leave_remains_vr.dm
Normal file
156
code/modules/vore/eating/leave_remains_vr.dm
Normal 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"
|
||||
@@ -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>"
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
BIN
icons/obj/bones_vr.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 700 B |
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user