Merge branch 'master' into FermiChem
This commit is contained in:
@@ -79,7 +79,8 @@
|
||||
var/string = "penis_[GLOB.cock_shapes_icons[shape]]_[size]"
|
||||
icon_state = sanitize_text(string)
|
||||
var/lowershape = lowertext(shape)
|
||||
desc = "You see a [lowershape] penis. You estimate it's about [round(length, 0.25)] inch[length > 1 ? "es" : ""] long."
|
||||
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] penis. You estimate it's about [round(length, 0.25)] inch[round(length, 0.25) != 1 ? "es" : ""] long and [round(girth, 0.25)] inch[round(girth, 0.25) != 1 ? "es" : ""] in girth."
|
||||
|
||||
if(owner)
|
||||
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
|
||||
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
|
||||
|
||||
@@ -367,4 +367,10 @@ datum/gear/darksabresheath
|
||||
name = "Soul Necklace"
|
||||
category = SLOT_NECK
|
||||
path = /obj/item/clothing/neck/undertale
|
||||
ckeywhitelist = list("twilightic")
|
||||
ckeywhitelist = list("twilightic")
|
||||
|
||||
/datum/gear/frenchberet
|
||||
name = "French Beret"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/frenchberet
|
||||
ckeywhitelist = list("notazoltan")
|
||||
@@ -29,10 +29,10 @@
|
||||
restricted_roles = list("Security Officer")
|
||||
|
||||
/datum/gear/navyblueuniformofficer
|
||||
name = "security officer navyblue uniform"
|
||||
name = "Security officer navyblue uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/security/navyblue
|
||||
restricted_roles = list("Security officer")
|
||||
restricted_roles = list("Security Officer")
|
||||
|
||||
/datum/gear/navybluejacketwarden
|
||||
name = "warden navyblue jacket"
|
||||
|
||||
@@ -72,3 +72,15 @@
|
||||
name = "Box of crayons"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/storage/crayons
|
||||
|
||||
/datum/gear/toykatana
|
||||
name = "Toy Katana"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/toy/katana
|
||||
cost = 3
|
||||
|
||||
//datum/gear/lumeyes
|
||||
// name = "Luminescent eye auto surgeon"
|
||||
// category = SLOT_IN_BACKPACK
|
||||
// path = /obj/item/autosurgeon/gloweyes
|
||||
// cost = 4
|
||||
|
||||
@@ -56,25 +56,34 @@
|
||||
|
||||
//trek fancy Hats!
|
||||
/datum/gear/trekcap
|
||||
name = "Federation Officer's Cap"
|
||||
name = "Federation Officer's Cap (White)"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/caphat/formal/fedcover
|
||||
restricted_roles = list("Captain","Head of Personnel")
|
||||
|
||||
/datum/gear/trekcapcap
|
||||
name = "Federation Officer's Cap (Black)"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/caphat/formal/fedcover/black
|
||||
restricted_roles = list("Captain","Head of Personnel")
|
||||
|
||||
/datum/gear/trekcapmedisci
|
||||
name = "Federation Officer's Cap"
|
||||
name = "Federation Officer's Cap (Blue)"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/caphat/formal/fedcover/medsci
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekcapeng
|
||||
name = "Federation Officer's Cap"
|
||||
name = "Federation Officer's Cap (Yellow)"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/caphat/formal/fedcover/eng
|
||||
restricted_desc = "Engineering, Security, and Cargo"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
/datum/gear/trekcapsec
|
||||
name = "Federation Officer's Cap"
|
||||
name = "Federation Officer's Cap (Red)"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/caphat/formal/fedcover/sec
|
||||
restricted_desc = "Engineering, Security, and Cargo"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
@@ -52,6 +52,7 @@ GLOBAL_LIST_EMPTY(loadout_whitelist_ids)
|
||||
var/geargroupID //defines the ID that the gear inherits from the config
|
||||
var/list/restricted_roles
|
||||
var/list/ckeywhitelist
|
||||
var/restricted_desc
|
||||
|
||||
/datum/gear/New()
|
||||
..()
|
||||
|
||||
@@ -84,31 +84,62 @@
|
||||
name = "DS9 Overcoat (use uniform)"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/storage/trek/ds9
|
||||
restricted_desc = "All, barring Service and Civilian"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster",
|
||||
"Medical Doctor","Chemist","Virologist","Geneticist","Scientist", "Roboticist",
|
||||
"Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer",
|
||||
"Cargo Technician", "Shaft Miner") //everyone who actually deserves a job.
|
||||
//Federation jackets from movies
|
||||
/datum/gear/trekcmdcap
|
||||
name = "fed (movie) uniform, Captain"
|
||||
name = "Fed (movie) uniform, Black"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/storage/fluff/fedcoat/capt
|
||||
restricted_roles = list("Captain","Head of Personnel")
|
||||
|
||||
/datum/gear/trekcmdmov
|
||||
name = "fed (movie) uniform, sec"
|
||||
name = "Fed (movie) uniform, Red"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/storage/fluff/fedcoat
|
||||
restricted_desc = "Heads of Staff and Security"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster","Warden","Detective","Security Officer")
|
||||
|
||||
/datum/gear/trekmedscimov
|
||||
name = "fed (movie) uniform, med/sci"
|
||||
name = "Fed (movie) uniform, Blue"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/storage/fluff/fedcoat/medsci
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengmov
|
||||
name = "fed (movie) uniform, ops/eng"
|
||||
name = "Fed (movie) uniform, Yellow"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/storage/fluff/fedcoat/eng
|
||||
restricted_desc = "Engineering and Cargo"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
/datum/gear/trekcmdcapmod
|
||||
name = "Fed (Modern) uniform, White"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/storage/fluff/modernfedcoat
|
||||
restricted_roles = list("Captain","Head of Personnel")
|
||||
|
||||
/datum/gear/trekcmdmod
|
||||
name = "Fed (Modern) uniform, Red"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/storage/fluff/modernfedcoat/sec
|
||||
restricted_desc = "Heads of Staff and Security"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster","Warden","Detective","Security Officer")
|
||||
|
||||
/datum/gear/trekmedscimod
|
||||
name = "Fed (Modern) uniform, Blue"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/storage/fluff/modernfedcoat/medsci
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengmod
|
||||
name = "Fed (Modern) uniform, Yellow"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/storage/fluff/modernfedcoat/eng
|
||||
restricted_desc = "Engineering and Cargo"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
@@ -179,18 +179,21 @@
|
||||
name = "TOS uniform, cmd"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/command
|
||||
restricted_desc = "Heads of Staff"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
|
||||
|
||||
/datum/gear/trekmedscitos
|
||||
name = "TOS uniform, med/sci"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/medsci
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengtos
|
||||
name = "TOS uniform, ops/sec"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/engsec
|
||||
restricted_desc = "Engineering and Security"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
//TNG
|
||||
@@ -198,18 +201,21 @@
|
||||
name = "TNG uniform, cmd"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/command/next
|
||||
restricted_desc = "Heads of Staff"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
|
||||
|
||||
/datum/gear/trekmedscitng
|
||||
name = "TNG uniform, med/sci"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/medsci/next
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengtng
|
||||
name = "TNG uniform, ops/sec"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/engsec/next
|
||||
restricted_desc = "Engineering and Security"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
//VOY
|
||||
@@ -217,18 +223,21 @@
|
||||
name = "VOY uniform, cmd"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/command/voy
|
||||
restricted_desc = "Heads of Staff"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
|
||||
|
||||
/datum/gear/trekmedscivoy
|
||||
name = "VOY uniform, med/sci"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/medsci/voy
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengvoy
|
||||
name = "VOY uniform, ops/sec"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/engsec/voy
|
||||
restricted_desc = "Engineering and Security"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
//DS9
|
||||
@@ -236,18 +245,21 @@
|
||||
name = "DS9 uniform, cmd"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/command/ds9
|
||||
restricted_desc = "Heads of Staff"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
|
||||
|
||||
/datum/gear/trekmedscids9
|
||||
name = "DS9 uniform, med/sci"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/medsci/ds9
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengds9
|
||||
name = "DS9 uniform, ops/sec"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/engsec/ds9
|
||||
restricted_desc = "Engineering and Security"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
//ENT
|
||||
@@ -255,16 +267,19 @@
|
||||
name = "ENT uniform, cmd"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/command/ent
|
||||
restricted_desc = "Heads of Staff"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
|
||||
|
||||
/datum/gear/trekmedscient
|
||||
name = "ENT uniform, med/sci"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/medsci/ent
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengent
|
||||
name = "ENT uniform, ops/sec"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/engsec/ent
|
||||
restricted_desc = "Engineering and Security"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
@@ -24,77 +24,7 @@
|
||||
|
||||
// stuff that was in base
|
||||
max_save_slots = 10
|
||||
features = list("mcolor" = "FFF",
|
||||
"tail_lizard" = "Smooth",
|
||||
"tail_human" = "None",
|
||||
"snout" = "Round",
|
||||
"horns" = "None",
|
||||
"ears" = "None",
|
||||
"wings" = "None",
|
||||
"frills" = "None",
|
||||
"spines" = "None",
|
||||
"body_markings" = "None",
|
||||
"legs" = "Normal Legs",
|
||||
"moth_wings" = "Plain",
|
||||
"mcolor2" = "FFF",
|
||||
"mcolor3" = "FFF",
|
||||
"mam_body_markings" = "None",
|
||||
"mam_ears" = "None",
|
||||
"mam_snouts" = "None",
|
||||
"mam_tail" = "None",
|
||||
"mam_tail_animated" = "None",
|
||||
"xenodorsal" = "Standard",
|
||||
"xenohead" = "Standard",
|
||||
"xenotail" = "Xenomorph Tail",
|
||||
"taur" = "None",
|
||||
"exhibitionist" = FALSE,
|
||||
"genitals_use_skintone" = FALSE,
|
||||
"has_cock" = FALSE,
|
||||
"cock_shape" = "Human",
|
||||
"cock_length" = 6,
|
||||
"cock_girth_ratio" = COCK_GIRTH_RATIO_DEF,
|
||||
"cock_color" = "fff",
|
||||
"has_sheath" = FALSE,
|
||||
"sheath_color" = "fff",
|
||||
"has_balls" = FALSE,
|
||||
"balls_internal" = FALSE,
|
||||
"balls_color" = "fff",
|
||||
"balls_amount" = 2,
|
||||
"balls_sack_size" = BALLS_SACK_SIZE_DEF,
|
||||
"balls_size" = BALLS_SIZE_DEF,
|
||||
"balls_cum_rate" = CUM_RATE,
|
||||
"balls_cum_mult" = CUM_RATE_MULT,
|
||||
"balls_efficiency" = CUM_EFFICIENCY,
|
||||
"balls_fluid" = "semen",
|
||||
"has_ovi" = FALSE,
|
||||
"ovi_shape" = "knotted",
|
||||
"ovi_length" = 6,
|
||||
"ovi_color" = "fff",
|
||||
"has_eggsack" = FALSE,
|
||||
"eggsack_internal" = TRUE,
|
||||
"eggsack_color" = "fff",
|
||||
"eggsack_size" = BALLS_SACK_SIZE_DEF,
|
||||
"eggsack_egg_color" = "fff",
|
||||
"eggsack_egg_size" = EGG_GIRTH_DEF,
|
||||
"has_breasts" = FALSE,
|
||||
"breasts_color" = "fff",
|
||||
"breasts_size" = "C",
|
||||
"breasts_shape" = "Pair",
|
||||
"breasts_fluid" = "milk",
|
||||
"has_vag" = FALSE,
|
||||
"vag_shape" = "Human",
|
||||
"vag_color" = "fff",
|
||||
"vag_clits" = 1,
|
||||
"vag_clit_diam" = 0.25,
|
||||
"has_womb" = FALSE,
|
||||
"womb_cum_rate" = CUM_RATE,
|
||||
"womb_cum_mult" = CUM_RATE_MULT,
|
||||
"womb_efficiency" = CUM_EFFICIENCY,
|
||||
"womb_fluid" = "femcum",
|
||||
"ipc_screen" = "Sunburst",
|
||||
"ipc_antenna" = "None",
|
||||
"flavor_text" = ""
|
||||
)
|
||||
|
||||
|
||||
/datum/preferences/New(client/C)
|
||||
..()
|
||||
|
||||
@@ -86,6 +86,7 @@
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet)
|
||||
var/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/linkedhelm
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
var/energy_color = "#35FFF0"
|
||||
|
||||
@@ -101,7 +102,14 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/update_icon()
|
||||
var/mutable_appearance/suit_overlay = mutable_appearance('modular_citadel/icons/lavaknight/item/suit.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
|
||||
var/mutable_appearance/suit_overlay
|
||||
|
||||
if(taurmode == SNEK_TAURIC)
|
||||
suit_overlay = mutable_appearance('modular_citadel/icons/mob/taur_naga.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
|
||||
else if(taurmode == PAW_TAURIC)
|
||||
suit_overlay = mutable_appearance('modular_citadel/icons/mob/taur_canine.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
|
||||
else
|
||||
suit_overlay = mutable_appearance('modular_citadel/icons/lavaknight/item/suit.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
|
||||
|
||||
if(energy_color)
|
||||
suit_overlay.color = energy_color
|
||||
@@ -122,7 +130,14 @@
|
||||
emissivelightsoff()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/proc/emissivelights(mob/user = usr)
|
||||
var/mutable_appearance/energy_overlay = mutable_appearance('modular_citadel/icons/lavaknight/mob/suit.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
|
||||
var/mutable_appearance/energy_overlay
|
||||
if(taurmode == SNEK_TAURIC)
|
||||
energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_naga.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
|
||||
else if(taurmode == PAW_TAURIC)
|
||||
energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_canine.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
|
||||
else
|
||||
energy_overlay = mutable_appearance('modular_citadel/icons/lavaknight/mob/suit.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
|
||||
|
||||
energy_overlay.color = energy_color
|
||||
energy_overlay.plane = LIGHTING_PLANE + 1
|
||||
user.cut_overlay(energy_overlay) //honk
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
|
||||
item_state = ""
|
||||
can_adjust = FALSE //to prevent you from "wearing it casually"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
//TOS
|
||||
/obj/item/clothing/under/rank/trek/command
|
||||
@@ -117,25 +116,25 @@
|
||||
|
||||
/obj/item/clothing/under/rank/trek/command/ds9
|
||||
desc = "The uniform worn by command officers of the 2380s."
|
||||
icon_state = "trek_command"
|
||||
icon_state = "trek_ds9_command"
|
||||
item_state = "trek_ds9_command"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/engsec/ds9
|
||||
desc = "The uniform worn by operations officers of the 2380s."
|
||||
icon_state = "trek_engsec"
|
||||
icon_state = "trek_ds9_engsec"
|
||||
item_state = "trek_ds9_engsec"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/medsci/ds9
|
||||
desc = "The uniform undershirt worn by medsci officers of the 2380s."
|
||||
icon_state = "trek_medsci"
|
||||
icon_state = "trek_ds9_medsci"
|
||||
item_state = "trek_ds9_medsci"
|
||||
|
||||
//MODERN ish Joan sqrl sprites. I think
|
||||
|
||||
//For general use
|
||||
/obj/item/clothing/suit/storage/fluff/fedcoat
|
||||
name = "Federation Uniform Jacket (Red)"
|
||||
desc = "A uniform jacket from the United Federation. Starfleet still uses this uniform and there are variations of it. Set phasers to awesome."
|
||||
name = "Federation Uniform Jacket"
|
||||
desc = "A uniform jacket from the United Federation. Set phasers to awesome."
|
||||
|
||||
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
|
||||
@@ -177,27 +176,24 @@
|
||||
icon_state = "[initial(icon_state)]_open"
|
||||
item_state = "[initial(item_state)]_open"
|
||||
unbuttoned = 1
|
||||
usr << "You unbutton the coat."
|
||||
to_chat(usr,"You unbutton the coat.")
|
||||
if(1)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
item_state = "[initial(item_state)]"
|
||||
unbuttoned = 0
|
||||
usr << "You button up the coat."
|
||||
to_chat(usr,"You button up the coat.")
|
||||
usr.update_inv_wear_suit()
|
||||
|
||||
//Variants
|
||||
/obj/item/clothing/suit/storage/fluff/fedcoat/medsci
|
||||
desc = "A uniform jacket from the United Federation. Starfleet still uses this uniform and there are variations of it. Wearing this may make you feel all scientific."
|
||||
icon_state = "fedblue"
|
||||
item_state = "fedblue"
|
||||
|
||||
/obj/item/clothing/suit/storage/fluff/fedcoat/eng
|
||||
desc = "A uniform jacket from the United Federation. Starfleet still uses this uniform and there are variations of it.Wearing it may make you feel like checking a warp core, whatever that is."
|
||||
icon_state = "fedeng"
|
||||
item_state = "fedeng"
|
||||
|
||||
/obj/item/clothing/suit/storage/fluff/fedcoat/capt
|
||||
desc = "A uniform jacket from the United Federation. Starfleet still uses this uniform and there are variations of it. You feel like a commanding officer of Starfleet."
|
||||
icon_state = "fedcapt"
|
||||
item_state = "fedcapt"
|
||||
|
||||
@@ -205,34 +201,31 @@
|
||||
|
||||
/obj/item/clothing/suit/storage/fluff/modernfedcoat
|
||||
name = "Modern Federation Uniform Jacket"
|
||||
desc = "A modern uniform jacket from the United Federation. Their Starfleet had recently started using these uniforms. Wearing this makes you feel like a competant commander."
|
||||
desc = "A modern uniform jacket from the United Federation."
|
||||
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
|
||||
icon_state = "fedmodern"
|
||||
item_state = "fedmodern"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
allowed = list(
|
||||
/obj/item/tank/internals/emergency_oxygen,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/gun,
|
||||
/obj/item/melee/baton,
|
||||
/obj/item/restraints/handcuffs,
|
||||
/obj/item/taperecorder)
|
||||
armor = list("melee" = 45, "bullet" = 25, "laser" = 25,"energy" = 25, "bomb" = 25, "bio" = 25, "rad" = 50, "fire" = 50, "acid" = 50)
|
||||
/obj/item/flashlight, /obj/item/analyzer,
|
||||
/obj/item/radio, /obj/item/tank/internals/emergency_oxygen,
|
||||
/obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer,/obj/item/reagent_containers/syringe,
|
||||
/obj/item/reagent_containers/glass/bottle/vial,/obj/item/reagent_containers/glass/beaker,
|
||||
/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle, /obj/item/restraints/handcuffs,/obj/item/hypospray
|
||||
)
|
||||
armor = list("melee" = 10, "bullet" = 5, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 5, "rad" = 10, "fire" = 10, "acid" = 0)
|
||||
|
||||
//Variants
|
||||
/obj/item/clothing/suit/storage/fluff/modernfedcoat/medsci
|
||||
desc = "A modern uniform jacket from the United Federation. Their Starfleet had recently started using these uniforms. Wearing this makes you feel like a scientist or a pilot."
|
||||
icon_state = "fedmodernblue"
|
||||
item_state = "fedmodernblue"
|
||||
|
||||
/obj/item/clothing/suit/storage/fluff/modernfedcoat/eng
|
||||
desc = "A modern uniform jacket from the United Federation. Their Starfleet had recently started using these uniforms. You feel like you can handle any type of technical engineering problems."
|
||||
icon_state = "fedmoderneng"
|
||||
item_state = "fedmoderneng"
|
||||
|
||||
/obj/item/clothing/suit/storage/fluff/modernfedcoat/sec
|
||||
desc = "A modern uniform jacket from the United Federation. Their Starfleet had recently started using these uniforms. This uniform makes you want to protect and serve as an officer."
|
||||
icon_state = "fedmodernsec"
|
||||
item_state = "fedmodernsec"
|
||||
|
||||
@@ -256,3 +249,7 @@
|
||||
/obj/item/clothing/head/caphat/formal/fedcover/sec
|
||||
icon_state = "fedcapsec"
|
||||
item_state = "fedcapsec"
|
||||
|
||||
/obj/item/clothing/head/caphat/formal/fedcover/black
|
||||
icon_state = "fedcapblack"
|
||||
item_state = "fedcapblack"
|
||||
|
||||
@@ -1,33 +1,54 @@
|
||||
/obj/item/integrated_circuit/manipulation/electric_stimulator
|
||||
name = "electronic stimulation module"
|
||||
desc = "Used to induce sexual stimulation with electricity."
|
||||
desc = "Used to induce sexual stimulation in a target via electricity."
|
||||
icon_state = "power_relay"
|
||||
extended_desc = "The circuit accepts a reference to a person and upon activation, attempts to stimulate them to orgasm."
|
||||
complexity = 10
|
||||
size = 3
|
||||
inputs = list("target" = IC_PINTYPE_REF)
|
||||
outputs = list()
|
||||
activators = list("fire" = IC_PINTYPE_PULSE_IN)
|
||||
extended_desc = "The circuit accepts a reference to a person, as well as a number representing the strength of the shock, and upon activation, attempts to stimulate them to orgasm. The number ranges from -35 to 35, with negative numbers reducing arousal and positive numbers increasing it by that amount."
|
||||
complexity = 15
|
||||
size = 2
|
||||
inputs = list("target" = IC_PINTYPE_REF, "strength" = IC_PINTYPE_NUMBER)
|
||||
outputs = list("arousal gain"=IC_PINTYPE_NUMBER)
|
||||
activators = list("fire" = IC_PINTYPE_PULSE_IN, "on success" = IC_PINTYPE_PULSE_OUT, "on fail" = IC_PINTYPE_PULSE_OUT, "on orgasm" = IC_PINTYPE_PULSE_OUT)
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
power_draw_per_use = 500
|
||||
cooldown_per_use = 50
|
||||
ext_cooldown = 25
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/electric_stimulator/do_work()
|
||||
..()
|
||||
set_pin_data(IC_OUTPUT, 1, 0)
|
||||
var/mob/living/M = get_pin_data_as_type(IC_INPUT, 1, /mob/living)
|
||||
if(!check_target(M))
|
||||
return
|
||||
if(ismob(M) && M.canbearoused)
|
||||
if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna())
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/orgasm_message = pick("A sharp pulse of electricity pushes you to orgasm!", "You feel a jolt of electricity force you into orgasm!")
|
||||
H.visible_message("<span class='warning'>\The [assembly] electrodes shock [H]!</span>", "<span class='warning'>[orgasm_message]</span>")
|
||||
playsound(src, "sound/effects/light_flicker.ogg", 30, 1)
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
|
||||
var/arousal_gain = CLAMP(get_pin_data(IC_INPUT, 2),-35,35)
|
||||
set_pin_data(IC_OUTPUT, 1, arousal_gain)
|
||||
|
||||
if(ismob(M) && M.canbearoused && arousal_gain != 0)
|
||||
var/orgasm = FALSE
|
||||
if(arousal_gain > 0)
|
||||
if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna())
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/orgasm_message = pick("A sharp pulse of electricity pushes you to orgasm!", "You feel a jolt of electricity force you into orgasm!")
|
||||
H.visible_message("<span class='warning'>\The [assembly] electrodes shock [H]!</span>", "<span class='warning'>[orgasm_message]</span>")
|
||||
playsound(src, "sound/effects/light_flicker.ogg", 30, 1)
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
orgasm = TRUE
|
||||
else
|
||||
M.adjustArousalLoss(arousal_gain)
|
||||
var/stimulate_message = pick("You feel a sharp warming tingle of electricity through your body!", "A burst of arousing electricity flows through your body!")
|
||||
M.visible_message("<span class='warning'>\The [assembly] electrodes shock [M]!</span>", "<span class='warning'>[stimulate_message]</span>")
|
||||
|
||||
else
|
||||
M.adjustArousalLoss(35)
|
||||
var/stimulate_message = pick("You feel a sharp warming tingle of electricity through your body!", "A burst of arousing electricity flows through your body!")
|
||||
var/stimulate_message = pick("You feel a dull prickle of electricity through your body!", "A burst of dull electricity flows through your body!")
|
||||
M.visible_message("<span class='warning'>\The [assembly] electrodes shock [M]!</span>", "<span class='warning'>[stimulate_message]</span>")
|
||||
playsound(src, "sound/effects/light_flicker.ogg", 30, 1)
|
||||
M.adjustArousalLoss(arousal_gain)
|
||||
|
||||
playsound(src, "sound/effects/light_flicker.ogg", 30, 1)
|
||||
push_data()
|
||||
activate_pin(2)
|
||||
if(orgasm) activate_pin(4)
|
||||
|
||||
else
|
||||
visible_message("<span class='warning'>\The [assembly] electrodes fail to shock [M]!</span>")
|
||||
push_data()
|
||||
activate_pin(3)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/datum/job/captain
|
||||
minimal_player_age = 60
|
||||
minimal_player_age = 20
|
||||
exp_type = EXP_TYPE_COMMAND
|
||||
|
||||
/datum/job/hop
|
||||
minimal_player_age = 60
|
||||
minimal_player_age = 20
|
||||
head_announce = list("Service")
|
||||
exp_type_department = EXP_TYPE_SERVICE
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/job/chief_engineer
|
||||
minimal_player_age = 30
|
||||
minimal_player_age = 10
|
||||
|
||||
/datum/job/engineer
|
||||
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/job/cmo
|
||||
minimal_player_age = 30
|
||||
minimal_player_age = 10
|
||||
|
||||
/datum/outfit/job/doctor
|
||||
backpack_contents = list(/obj/item/storage/hypospraykit/regular)
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
/datum/job/rd
|
||||
minimal_player_age = 30
|
||||
minimal_player_age = 10
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/job/hos
|
||||
minimal_player_age = 30
|
||||
minimal_player_age = 10
|
||||
|
||||
/datum/outfit/job/warden
|
||||
suit_store = /obj/item/gun/energy/pumpaction/defender
|
||||
suit_store = /obj/item/gun/energy/pumpaction/defender
|
||||
|
||||
@@ -70,16 +70,16 @@
|
||||
|
||||
else //recipient is an mentor but sender is not
|
||||
to_chat(C, "<font color='purple'>Reply PM from-<b>[key_name_mentor(src, C, 1, 0, show_char)]</b>: [msg]</font>")
|
||||
to_chat(src, "<font color='green'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, 0)]</b>: [msg]</font>")
|
||||
to_chat(src, "<font color='brown'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, 0)]</b>: [msg]</font>")
|
||||
|
||||
else
|
||||
if(is_mentor()) //sender is an mentor but recipient is not.
|
||||
to_chat(C, "<font color='purple'>Mentor PM from-<b>[key_name_mentor(src, C, 1, 0, 0)]</b>: [msg]</font>")
|
||||
to_chat(src, "<font color='green'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, show_char)]</b>: [msg]</font>")
|
||||
to_chat(src, "<font color='brown'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, show_char)]</b>: [msg]</font>")
|
||||
|
||||
//we don't use message_Mentors here because the sender/receiver might get it too
|
||||
var/show_char_sender = !is_mentor() && CONFIG_GET(flag/mentors_mobname_only)
|
||||
var/show_char_recip = !C.is_mentor() && CONFIG_GET(flag/mentors_mobname_only)
|
||||
for(var/client/X in GLOB.mentors | GLOB.admins)
|
||||
if(X.key!=key && X.key!=C.key) //check client/X is an Mentor and isn't the sender or recipient
|
||||
to_chat(X, "<B><font color='green'>Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]:</B> <font color ='blue'> [msg]</font>") //inform X
|
||||
to_chat(X, "<B><font color='brown'>Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]:</B> <font color ='blue'> [msg]</font>") //inform X
|
||||
|
||||
@@ -36,7 +36,26 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/************* Lizard compatable snoots ************/
|
||||
/datum/sprite_accessory/body_markings/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
//christ this was a mistake, but it's here just in case someone wants to selectively fix
|
||||
/************* Lizard compatable snoots ***********
|
||||
/datum/sprite_accessory/snouts/bird
|
||||
name = "Beak"
|
||||
icon_state = "bird"
|
||||
@@ -155,73 +174,29 @@
|
||||
icon_state = "toucan"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
*/
|
||||
|
||||
/******************************************
|
||||
************ Human Ears/Tails *************
|
||||
*************** Human Ears ****************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/tails/human/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/curled
|
||||
name = "Curled Horn"
|
||||
icon_state = "horn1"
|
||||
@@ -234,69 +209,228 @@
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/elephant
|
||||
name = "Elephant"
|
||||
icon_state = "elephant"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/elf
|
||||
name = "Elf"
|
||||
icon_state = "elf"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = SKINTONE
|
||||
|
||||
/datum/sprite_accessory/ears/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/jellyfish
|
||||
name = "Jellyfish"
|
||||
icon_state = "jellyfish"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/ears/lab
|
||||
name = "Dog, Floppy"
|
||||
icon_state = "lab"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/skunk
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/squirrel
|
||||
name = "Squirrel"
|
||||
icon_state = "squirrel"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
|
||||
|
||||
/******************************************
|
||||
************** Human Tails ****************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/tails/human/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/tails/human/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "crow"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "crow"
|
||||
|
||||
/datum/sprite_accessory/tails/human/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/horse
|
||||
name = "Horse"
|
||||
@@ -314,26 +448,25 @@
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/insect
|
||||
name = "Insect"
|
||||
icon_state = "insect"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/insect
|
||||
name = "insect"
|
||||
icon_state = "insect"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/jellyfish
|
||||
name = "Jellyfish"
|
||||
icon_state = "jellyfish"
|
||||
color_src = HAIR
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/kitsune
|
||||
name = "Kitsune"
|
||||
@@ -347,18 +480,6 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/lab
|
||||
name = "Dog, Floppy"
|
||||
icon_state = "lab"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
@@ -371,12 +492,6 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
@@ -401,12 +516,6 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
@@ -419,12 +528,6 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
@@ -437,12 +540,6 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
@@ -455,12 +552,6 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/skunk
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/skunk
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
@@ -479,17 +570,31 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/shark/datashark
|
||||
/datum/sprite_accessory/tails_animated/human/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/datashark
|
||||
name = "datashark"
|
||||
icon_state = "datashark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/squirrel
|
||||
name = "Squirrel"
|
||||
icon_state = "squirrel"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
/datum/sprite_accessory/tails_animated/human/datashark
|
||||
name = "datashark"
|
||||
icon_state = "datashark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/straighttail
|
||||
name = "Straight Tail"
|
||||
icon_state = "straighttail"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/straighttail
|
||||
name = "Straight Tail"
|
||||
icon_state = "straighttail"
|
||||
|
||||
/datum/sprite_accessory/tails/human/squirrel
|
||||
name = "Squirrel"
|
||||
@@ -503,7 +608,7 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/yentacle
|
||||
/datum/sprite_accessory/tails/human/tentacle
|
||||
name = "Tentacle"
|
||||
icon_state = "tentacle"
|
||||
color_src = MATRIXED
|
||||
@@ -515,11 +620,17 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
/datum/sprite_accessory/tails/human/tiger
|
||||
name = "Tiger"
|
||||
icon_state = "tiger"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/tiger
|
||||
name = "Tiger"
|
||||
icon_state = "tiger"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/wolf
|
||||
name = "Wolf"
|
||||
@@ -534,7 +645,7 @@
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/******************************************
|
||||
*************** Body Parts ****************
|
||||
*********** Mammal Body Parts *************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/mam_ears
|
||||
@@ -624,6 +735,10 @@
|
||||
name = "WahCoon"
|
||||
icon_state = "wah"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/redpandaalt
|
||||
name = "WahCoon ALT"
|
||||
icon_state = "wahalt"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/rhino
|
||||
name = "Horn"
|
||||
icon_state = "rhino"
|
||||
@@ -931,13 +1046,13 @@
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
/datum/sprite_accessory/mam_tails/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
/datum/sprite_accessory/mam_tails_animated/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/cat
|
||||
name = "Cat"
|
||||
@@ -1189,27 +1304,32 @@ datum/sprite_accessory/mam_tails/insect
|
||||
/datum/sprite_accessory/mam_body_markings/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
color_src = MUTCOLORS
|
||||
ckeys_allowed = list("yousshouldnteverbeseeingthisyoumeme")
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/ailurus
|
||||
/datum/sprite_accessory/mam_body_markings/redpanda
|
||||
name = "Redpanda"
|
||||
icon_state = "wah"
|
||||
icon_state = "redpanda"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/belly
|
||||
name = "Belly"
|
||||
icon_state = "belly"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/bellyslim
|
||||
name = "Bellyslim"
|
||||
icon_state = "bellyslim"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/corgi
|
||||
name = "Corgi"
|
||||
@@ -1254,6 +1374,7 @@ datum/sprite_accessory/mam_tails/insect
|
||||
/datum/sprite_accessory/mam_body_markings/frog
|
||||
name = "Frog"
|
||||
icon_state = "frog"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/goat
|
||||
name = "Goat"
|
||||
@@ -1262,6 +1383,7 @@ datum/sprite_accessory/mam_tails/insect
|
||||
/datum/sprite_accessory/mam_body_markings/handsfeet
|
||||
name = "Handsfeet"
|
||||
icon_state = "handsfeet"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/hawk
|
||||
name = "Hawk"
|
||||
@@ -1282,6 +1404,7 @@ datum/sprite_accessory/mam_tails/insect
|
||||
/datum/sprite_accessory/mam_body_markings/moth
|
||||
name = "Moth"
|
||||
icon_state = "moth"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/otie
|
||||
name = "Otie"
|
||||
@@ -1310,6 +1433,7 @@ datum/sprite_accessory/mam_tails/insect
|
||||
/datum/sprite_accessory/mam_body_markings/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "scolipede"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/shark
|
||||
name = "Shark"
|
||||
@@ -1338,6 +1462,7 @@ datum/sprite_accessory/mam_tails/insect
|
||||
/datum/sprite_accessory/mam_body_markings/turian
|
||||
name = "Turian"
|
||||
icon_state = "turian"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/wolf
|
||||
name = "Wolf"
|
||||
@@ -1346,6 +1471,7 @@ datum/sprite_accessory/mam_tails/insect
|
||||
/datum/sprite_accessory/mam_body_markings/xeno
|
||||
name = "Xeno"
|
||||
icon_state = "xeno"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
|
||||
/******************************************
|
||||
@@ -1655,19 +1781,6 @@ datum/sprite_accessory/mam_tails/insect
|
||||
|
||||
// *** Snooooow flaaaaake ***
|
||||
|
||||
/datum/sprite_accessory/body_markings/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
|
||||
/datum/sprite_accessory/horns/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
@@ -1697,6 +1810,7 @@ datum/sprite_accessory/mam_tails/insect
|
||||
name = "sabresune"
|
||||
icon_state = "sabresune"
|
||||
ckeys_allowed = list("poojawa")
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails/sabresune
|
||||
name = "sabresune"
|
||||
@@ -1730,7 +1844,7 @@ datum/sprite_accessory/mam_tails/insect
|
||||
icon_state = "lunasune"
|
||||
|
||||
/*************** VIRGO PORTED HAIRS ****************************/
|
||||
#define VHAIR(_name, new_state) /datum/sprite_accessory/hair/##new_state/icon_state=#new_state;/datum/sprite_accessory/hair/##new_state/name = "Virgo - " + #_name
|
||||
#define VHAIR(_name, new_state) /datum/sprite_accessory/hair/##new_state/icon_state=#new_state;/datum/sprite_accessory/hair/##new_state/name = #_name + " (Virgo)"
|
||||
//VIRGO PORTED HAIRS
|
||||
VHAIR("Short Hair Rosa", hair_rosa_s)
|
||||
VHAIR("Short Hair 80s", hair_80s_s)
|
||||
@@ -1888,7 +2002,7 @@ VHAIR("Tressshoulder", hair_tressshoulder_s)
|
||||
//END
|
||||
#undef VHAIR
|
||||
|
||||
#define VFACE(_name, new_state) /datum/sprite_accessory/facial_hair/##new_state/icon_state=#new_state;;/datum/sprite_accessory/facial_hair/##new_state/name="Virgo" + #_name
|
||||
#define VFACE(_name, new_state) /datum/sprite_accessory/facial_hair/##new_state/icon_state=#new_state;;/datum/sprite_accessory/facial_hair/##new_state/name= #_name + " (Virgo)"
|
||||
VFACE("Watson", facial_watson_s)
|
||||
VFACE("Chaplin", facial_chaplin_s)
|
||||
VFACE("Fullbeard", facial_fullbeard_s)
|
||||
@@ -1927,4 +2041,4 @@ VFACE("Cropped Fullbeard", facial_croppedfullbeard_s)
|
||||
VFACE("Chinless Beard", facial_chinlessbeard_s)
|
||||
VFACE("Moonshiner", facial_moonshiner_s)
|
||||
VFACE("Tribearder", facial_tribearder_s)
|
||||
#undef VFACE
|
||||
#undef VFACE
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
var/lastdirchange
|
||||
var/combatmessagecooldown
|
||||
|
||||
//oh no vore time
|
||||
var/voremode = FALSE
|
||||
|
||||
/mob/living/carbon/CanPass(atom/movable/mover, turf/target)
|
||||
. = ..()
|
||||
if(.)
|
||||
@@ -19,6 +22,8 @@
|
||||
if(recoveringstam)
|
||||
return TRUE
|
||||
combatmode = !combatmode
|
||||
if(voremode)
|
||||
toggle_vore_mode()
|
||||
if(combatmode)
|
||||
playsound_local(src, 'modular_citadel/sound/misc/ui_toggle.ogg', 50, FALSE, pressure_affected = FALSE) //Sound from interbay!
|
||||
else
|
||||
@@ -34,6 +39,16 @@
|
||||
SEND_SIGNAL(src, COMSIG_COMBAT_TOGGLED, src, combatmode)
|
||||
return TRUE
|
||||
|
||||
mob/living/carbon/proc/toggle_vore_mode()
|
||||
voremode = !voremode
|
||||
if(hud_used && hud_used.static_inventory)
|
||||
for(var/obj/screen/voretoggle/selector in hud_used.static_inventory)
|
||||
selector.rebaseintomygut(src)
|
||||
if(combatmode)
|
||||
return FALSE //let's not override the main draw of the game these days
|
||||
SEND_SIGNAL(src, COMSIG_VORE_TOGGLED, src, voremode)
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/Move(atom/newloc, direct = 0)
|
||||
var/currentdirection = dir
|
||||
. = ..()
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
/mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0)
|
||||
if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && isliving(pulling))
|
||||
vore_attack(user, pulling)
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/alt_attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/mob/living/carbon/human/Move(NewLoc, direct)
|
||||
var/oldpseudoheight = pseudo_z_axis
|
||||
. = ..()
|
||||
if(. && sprinting && !(movement_type & FLYING) && canmove && !resting && m_intent == MOVE_INTENT_RUN)
|
||||
if(. && sprinting && !(movement_type & FLYING) && canmove && !resting && m_intent == MOVE_INTENT_RUN && has_gravity(loc) && !pulledby)
|
||||
adjustStaminaLossBuffered(0.3)
|
||||
if((oldpseudoheight - pseudo_z_axis) >= 8)
|
||||
to_chat(src, "<span class='warning'>You trip off of the elevated surface!</span>")
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
if(get_turf(target) == target_oldturf)
|
||||
target_table = locate(/obj/structure/table) in target_shove_turf.contents
|
||||
shove_blocked = TRUE
|
||||
|
||||
|
||||
if(shove_blocked && !target.is_shove_knockdown_blocked())
|
||||
var/directional_blocked = FALSE
|
||||
if(shove_dir in GLOB.cardinals) //Directional checks to make sure that we're not shoving through a windoor or something like that
|
||||
@@ -151,28 +151,3 @@
|
||||
|
||||
/obj/item/bodypart
|
||||
var/should_draw_citadel = FALSE
|
||||
|
||||
/datum/species/proc/citadel_mutant_bodyparts(bodypart, mob/living/carbon/human/H)
|
||||
switch(bodypart)
|
||||
if("ipc_screen")
|
||||
return GLOB.ipc_screens_list[H.dna.features["ipc_screen"]]
|
||||
if("ipc_antenna")
|
||||
return GLOB.ipc_antennas_list[H.dna.features["ipc_antenna"]]
|
||||
if("mam_tail")
|
||||
return GLOB.mam_tails_list[H.dna.features["mam_tail"]]
|
||||
if("mam_waggingtail")
|
||||
return GLOB.mam_tails_animated_list[H.dna.features["mam_tail"]]
|
||||
if("mam_body_markings")
|
||||
return GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]]
|
||||
if("mam_ears")
|
||||
return GLOB.mam_ears_list[H.dna.features["mam_ears"]]
|
||||
if("mam_snouts")
|
||||
return GLOB.mam_snouts_list[H.dna.features["mam_snouts"]]
|
||||
if("taur")
|
||||
return GLOB.taur_list[H.dna.features["taur"]]
|
||||
if("xenodorsal")
|
||||
return GLOB.xeno_dorsal_list[H.dna.features["xenodorsal"]]
|
||||
if("xenohead")
|
||||
return GLOB.xeno_head_list[H.dna.features["xenohead"]]
|
||||
if("xenotail")
|
||||
return GLOB.xeno_tail_list[H.dna.features["xenotail"]]
|
||||
|
||||
@@ -195,10 +195,10 @@
|
||||
say_mod = "hisses"
|
||||
default_color = "00FF00"
|
||||
should_draw_citadel = TRUE
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
|
||||
mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur")
|
||||
default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None")
|
||||
mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur", "legs")
|
||||
default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade Legs")
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
@@ -233,3 +233,5 @@
|
||||
|
||||
/mob/living/carbon/human/vore
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
|
||||
@@ -10,16 +10,44 @@
|
||||
default_color = "00FFFF"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
|
||||
inherent_traits = list(TRAIT_TOXINLOVER)
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears", "taur")
|
||||
default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None")
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur")
|
||||
default_features = list("mcolor" = "FFF", "mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "Plain", "mam_snouts" = "None", "taur" = "None")
|
||||
say_mod = "says"
|
||||
hair_color = "mutcolor"
|
||||
hair_alpha = 180
|
||||
hair_alpha = 160 //a notch brighter so it blends better.
|
||||
liked_food = MEAT
|
||||
coldmod = 3
|
||||
heatmod = 1
|
||||
burnmod = 1
|
||||
|
||||
/datum/species/jelly/roundstartslime/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
|
||||
/datum/species/jelly/roundstartslime/spec_stun(mob/living/carbon/human/H,amount)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
. = ..()
|
||||
|
||||
/datum/species/jelly/roundstartslime/can_wag_tail(mob/living/carbon/human/H)
|
||||
return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/jelly/roundstartslime/is_wagging_tail(mob/living/carbon/human/H)
|
||||
return ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/jelly/roundstartslime/start_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_tail"
|
||||
mutant_bodyparts |= "mam_waggingtail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/jelly/roundstartslime/stop_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_waggingtail"
|
||||
mutant_bodyparts |= "mam_tail"
|
||||
H.update_body()
|
||||
|
||||
|
||||
/datum/action/innate/slime_change
|
||||
name = "Alter Form"
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
@@ -41,7 +69,7 @@
|
||||
|
||||
/datum/action/innate/slime_change/proc/change_form()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Ears", "Taur body", "Cancel")
|
||||
var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Cancel")
|
||||
if(select_alteration == "Hair Style")
|
||||
if(H.gender == MALE)
|
||||
var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list
|
||||
@@ -102,6 +130,39 @@
|
||||
H.dna.features["mam_ears"] = new_ears
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Snout")
|
||||
var/list/snowflake_snouts_list = list("Normal" = null)
|
||||
for(var/path in GLOB.mam_snouts_list)
|
||||
var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_snouts_list[S.name] = path
|
||||
var/new_snout
|
||||
new_snout = input(owner, "Choose your character's face:", "Face Alteration") as null|anything in snowflake_snouts_list
|
||||
if(new_snout)
|
||||
H.dna.features["mam_snouts"] = new_snout
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Markings")
|
||||
var/list/snowflake_markings_list = list()
|
||||
for(var/path in GLOB.mam_body_markings_list)
|
||||
var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_markings_list[S.name] = path
|
||||
var/new_mam_body_markings
|
||||
new_mam_body_markings = input(H, "Choose your character's body markings:", "Marking Alteration") as null|anything in snowflake_markings_list
|
||||
if(new_mam_body_markings)
|
||||
H.dna.features["mam_body_markings"] = new_mam_body_markings
|
||||
if(new_mam_body_markings == "None")
|
||||
H.dna.features["mam_body_markings"] = "Plain"
|
||||
for(var/X in H.bodyparts) //propagates the markings changes
|
||||
var/obj/item/bodypart/BP = X
|
||||
BP.update_limb(FALSE, H)
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Tail")
|
||||
var/list/snowflake_tails_list = list("Normal" = null)
|
||||
for(var/path in GLOB.mam_tails_list)
|
||||
@@ -113,7 +174,7 @@
|
||||
var/new_tail
|
||||
new_tail = input(owner, "Choose your character's Tail(s):", "Tail Alteration") as null|anything in snowflake_tails_list
|
||||
if(new_tail)
|
||||
H.dna.features["mam_tails"] = new_tail
|
||||
H.dna.features["mam_tail"] = new_tail
|
||||
if(new_tail != "None")
|
||||
H.dna.features["taur"] = "None"
|
||||
H.update_body()
|
||||
@@ -132,7 +193,6 @@
|
||||
H.dna.features["taur"] = new_taur
|
||||
if(new_taur != "None")
|
||||
H.dna.features["mam_tail"] = "None"
|
||||
H.dna.features["xenotail"] = "None"
|
||||
H.update_body()
|
||||
else
|
||||
return
|
||||
|
||||
@@ -1,85 +1,141 @@
|
||||
/mob/living/simple_animal/pet/cat
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/crab
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/dog
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/cow
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/chick
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/chicken
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/pet/fox
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/lizard
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/mouse
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/penguin
|
||||
no_vore = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/sloth
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/alien
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/bear
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/poison/snake
|
||||
devourable = TRUE
|
||||
no_vore = FALSE //oh yes my pretty.
|
||||
|
||||
/mob/living/simple_animal/hostile/gorilla
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/parrot
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal
|
||||
no_vore = TRUE
|
||||
|
||||
//CARBON MOBS
|
||||
/mob/living/carbon/alien
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
|
||||
/mob/living/carbon/monkey
|
||||
devourable = TRUE
|
||||
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
|
||||
|
||||
/*
|
||||
REFER TO code/modules/mob/living/simple_animal/simple_animal_vr.dm for Var information!
|
||||
*/
|
||||
|
||||
|
||||
//NUETRAL MOBS
|
||||
/mob/living/simple_animal/crab
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
|
||||
/mob/living/simple_animal/cow
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
vore_active = TRUE
|
||||
isPredator = TRUE
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
/mob/living/simple_animal/chick
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
|
||||
/mob/living/simple_animal/chicken
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
|
||||
/mob/living/simple_animal/mouse
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
|
||||
//STATION PETS
|
||||
/mob/living/simple_animal/pet
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/fox
|
||||
vore_active = TRUE
|
||||
isPredator = TRUE
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
/mob/living/simple_animal/pet/cat
|
||||
vore_active = TRUE
|
||||
isPredator = TRUE
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
/mob/living/simple_animal/pet/dog
|
||||
vore_active = TRUE
|
||||
isPredator = TRUE
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
/mob/living/simple_animal/sloth
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
|
||||
/mob/living/simple_animal/parrot
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
|
||||
//HOSTILE MOBS
|
||||
/mob/living/simple_animal/hostile/retaliate/goat
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
vore_active = TRUE
|
||||
isPredator = TRUE
|
||||
vore_stomach_flavor = "You find yourself squeezed into the hollow of the goat, the smell of oats and hay thick in the tight space, all of which grinds in on you. Harmless for now..."
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
/mob/living/simple_animal/hostile/lizard
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/alien
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
vore_active = TRUE
|
||||
isPredator = TRUE
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
/mob/living/simple_animal/hostile/bear
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
vore_active = TRUE
|
||||
isPredator = TRUE
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
vore_active = TRUE
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/poison/snake
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
vore_active = TRUE
|
||||
isPredator = TRUE
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
/mob/living/simple_animal/hostile/gorilla
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
vore_active = TRUE
|
||||
isPredator = TRUE
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
vore_active = TRUE
|
||||
isPredator = TRUE
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
/mob/living/simple_animal/hostile/carp
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
vore_active = TRUE
|
||||
isPredator = TRUE
|
||||
vore_default_mode = DM_HOLD
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
/obj/item/projectile/bullet/nlmags //non-lethal boolets
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "magjectile-nl"
|
||||
damage = 0
|
||||
damage = 2
|
||||
knockdown = 0
|
||||
stamina = 25
|
||||
armour_penetration = -10
|
||||
@@ -123,7 +123,7 @@
|
||||
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
|
||||
|
||||
///research memes///
|
||||
|
||||
/*
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag/nopin
|
||||
pin = null
|
||||
spawnwithmagazine = FALSE
|
||||
@@ -155,7 +155,7 @@
|
||||
materials = list(MAT_METAL = 3000, MAT_SILVER = 250, MAT_TITANIUM = 250)
|
||||
build_path = /obj/item/ammo_box/magazine/mmag/small
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
*/
|
||||
//////toy memes/////
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart/mag
|
||||
@@ -210,7 +210,7 @@
|
||||
/obj/item/projectile/bullet/nlmagrifle //non-lethal boolets
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "magjectile-large-nl"
|
||||
damage = 0
|
||||
damage = 2
|
||||
knockdown = 0
|
||||
stamina = 25
|
||||
armour_penetration = -10
|
||||
@@ -271,7 +271,8 @@
|
||||
recoil = 0.15
|
||||
casing_ejector = 0
|
||||
|
||||
///research///
|
||||
/*
|
||||
//research///
|
||||
|
||||
/obj/item/gun/ballistic/automatic/magrifle/nopin
|
||||
pin = null
|
||||
@@ -304,7 +305,7 @@
|
||||
materials = list(MAT_METAL = 6000, MAT_SILVER = 500, MAT_TITANIUM = 500)
|
||||
build_path = /obj/item/ammo_box/magazine/mmag
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
*/
|
||||
///foamagrifle///
|
||||
|
||||
/obj/item/ammo_box/magazine/toy/foamag
|
||||
@@ -326,10 +327,9 @@
|
||||
spread = 60
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
weapon_weight = WEAPON_HEAVY
|
||||
|
||||
/*
|
||||
// TECHWEBS IMPLEMENTATION
|
||||
*/
|
||||
//
|
||||
|
||||
/datum/techweb_node/magnetic_weapons
|
||||
id = "magnetic_weapons"
|
||||
@@ -339,7 +339,7 @@
|
||||
design_ids = list("magrifle", "magpisol", "mag_magrifle", "mag_magrifle_nl", "mag_magpistol", "mag_magpistol_nl")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
*/
|
||||
|
||||
//////Hyper-Burst Rifle//////
|
||||
|
||||
|
||||
@@ -0,0 +1,292 @@
|
||||
///ammo///
|
||||
|
||||
/obj/item/ammo_casing/caseless/mag_e
|
||||
var/energy_cost = 0
|
||||
|
||||
/obj/item/ammo_casing/caseless/mag_e/amagm_e
|
||||
desc = "A large ferromagnetic slug intended to be launched out of a compatible weapon."
|
||||
caliber = "mag_e"
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "mag-casing-live"
|
||||
projectile_type = /obj/item/projectile/bullet/magrifle
|
||||
energy_cost = 300
|
||||
|
||||
/obj/item/ammo_casing/caseless/mag_e/anlmagm_e
|
||||
desc = "A large, specialized ferromagnetic slug designed with a less-than-lethal payload."
|
||||
caliber = "mag_e"
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "mag-casing-live"
|
||||
projectile_type = /obj/item/projectile/bullet/nlmagrifle
|
||||
energy_cost = 300
|
||||
|
||||
/obj/item/ammo_casing/caseless/mag_e/amags
|
||||
desc = "A ferromagnetic slug intended to be launched out of a compatible weapon."
|
||||
caliber = "mag_e"
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "mag-casing-live"
|
||||
projectile_type = /obj/item/projectile/bullet/mags
|
||||
energy_cost = 200
|
||||
|
||||
/obj/item/ammo_casing/caseless/mag_e/anlmags
|
||||
desc = "A specialized ferromagnetic slug designed with a less-than-lethal payload."
|
||||
caliber = "mag_e"
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "mag-casing-live"
|
||||
projectile_type = /obj/item/projectile/bullet/nlmags
|
||||
energy_cost = 200
|
||||
|
||||
///magazines///
|
||||
|
||||
/obj/item/ammo_box/magazine/mmag_e/
|
||||
name = "magrifle magazine (non-lethal disabler)"
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "mediummagmag"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/mag_e/anlmagm_e
|
||||
caliber = "mag_e"
|
||||
max_ammo = 24
|
||||
multiple_sprites = 2
|
||||
|
||||
/obj/item/ammo_box/magazine/mmag_e/lethal
|
||||
name = "magrifle magazine (lethal)"
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "mediummagmag"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/mag_e/amagm_e
|
||||
max_ammo = 24
|
||||
|
||||
|
||||
/obj/item/ammo_box/magazine/mmag_e/small
|
||||
name = "magpistol magazine (non-lethal disabler)"
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "nlmagmag"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/mag_e/anlmags
|
||||
caliber = "mag_e"
|
||||
max_ammo = 15
|
||||
multiple_sprites = 2
|
||||
|
||||
/obj/item/ammo_box/magazine/mmag_e/small/lethal
|
||||
name = "magpistol magazine (lethal)"
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "smallmagmag"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/mag_e/amags
|
||||
|
||||
///cells///
|
||||
|
||||
/obj/item/stock_parts/cell/magrifle_e
|
||||
name = "magrifle power supply"
|
||||
maxcharge = 14400
|
||||
|
||||
/obj/item/stock_parts/cell/magpistol_e
|
||||
name = "magpistol power supply"
|
||||
maxcharge = 6000
|
||||
|
||||
///sci designs///
|
||||
|
||||
/datum/design/magrifle_e
|
||||
name = "Magrifle"
|
||||
desc = "An upscaled Magpistol in rifle form."
|
||||
id = "magrifle_e"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_URANIUM = 2000, MAT_TITANIUM = 10000, MAT_SILVER = 4000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/gun/ballistic/automatic/magrifle_e/nopin
|
||||
category = list("Weapons")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/mag_magrifle_e
|
||||
name = "Magrifle Magazine (Lethal)"
|
||||
desc = "A 24-round magazine for the Magrifle."
|
||||
id = "mag_magrifle_e"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 8000, MAT_SILVER = 1000)
|
||||
build_path = /obj/item/ammo_box/magazine/mmag_e/lethal
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/mag_magrifle_e/nl
|
||||
name = "Magrifle Magazine (Non-Lethal)"
|
||||
desc = "A 24- round non-lethal magazine for the Magrifle."
|
||||
id = "mag_magrifle_e_nl"
|
||||
materials = list(MAT_METAL = 6000, MAT_SILVER = 500, MAT_TITANIUM = 500)
|
||||
build_path = /obj/item/ammo_box/magazine/mmag_e
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/magpistol_e
|
||||
name = "Magpistol"
|
||||
desc = "A weapon which fires ferromagnetic slugs."
|
||||
id = "magpistol_e"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 7500, MAT_GLASS = 1000, MAT_URANIUM = 1000, MAT_TITANIUM = 5000, MAT_SILVER = 2000)
|
||||
build_path = /obj/item/gun/ballistic/automatic/pistol/mag_e/nopin
|
||||
category = list("Weapons")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/mag_magpistol_e
|
||||
name = "Magpistol Magazine"
|
||||
desc = "A 14 round magazine for the Magpistol."
|
||||
id = "mag_magpistol_e"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 4000, MAT_SILVER = 500)
|
||||
build_path = /obj/item/ammo_box/magazine/mmag_e/small/lethal
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/mag_magpistol_e/nl
|
||||
name = "Magpistol Magazine (Non-Lethal)"
|
||||
desc = "A 14 round non-lethal magazine for the Magpistol."
|
||||
id = "mag_magpistol_e_nl"
|
||||
materials = list(MAT_METAL = 3000, MAT_SILVER = 250, MAT_TITANIUM = 250)
|
||||
build_path = /obj/item/ammo_box/magazine/mmag_e/small
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/*
|
||||
// TECHWEBS IMPLEMENTATION
|
||||
*/
|
||||
|
||||
/datum/techweb_node/magnetic_weapons
|
||||
id = "magnetic_weapons"
|
||||
display_name = "Magnetic Weapons"
|
||||
description = "Weapons using magnetic technology"
|
||||
prereq_ids = list("weaponry", "adv_weaponry", "emp_adv")
|
||||
design_ids = list("magrifle_e", "magpistol_e", "mag_magrifle_e", "mag_magrifle_e_nl", "mag_magpistol_e", "mag_magpistol_e_nl")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
///magrifle///
|
||||
|
||||
/obj/item/gun/ballistic/automatic/magrifle_e
|
||||
name = "\improper Magnetic Rifle"
|
||||
desc = "A simple upscalling of the technologies used in the magpistol, the magrifle is capable of firing slightly larger slugs in bursts. Compatible with the magpistol's slugs."
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "magrifle"
|
||||
item_state = "arg"
|
||||
slot_flags = 0
|
||||
mag_type = /obj/item/ammo_box/magazine/mmag_e
|
||||
fire_sound = 'sound/weapons/magrifle.ogg'
|
||||
can_suppress = 0
|
||||
burst_size = 3
|
||||
fire_delay = 2
|
||||
spread = 5
|
||||
recoil = 0.15
|
||||
casing_ejector = 0
|
||||
var/obj/item/stock_parts/cell/cell
|
||||
var/cell_type = /obj/item/stock_parts/cell/magrifle_e
|
||||
var/dead_cell = FALSE
|
||||
|
||||
/obj/item/gun/ballistic/automatic/magrifle_e/examine(mob/user)
|
||||
. = ..()
|
||||
if(cell)
|
||||
to_chat(user, "<span class='notice'>[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] doesn't seem to have a cell!</span>")
|
||||
|
||||
/obj/item/gun/ballistic/automatic/magrifle_e/can_shoot()
|
||||
if(QDELETED(cell))
|
||||
return 0
|
||||
|
||||
var/obj/item/ammo_casing/caseless/mag_e/shot = chambered
|
||||
if(!shot)
|
||||
return 0
|
||||
if(cell.charge < shot.energy_cost*burst_size)
|
||||
return 0
|
||||
. = ..()
|
||||
|
||||
/obj/item/gun/ballistic/automatic/magrifle_e/shoot_live_shot()
|
||||
var/obj/item/ammo_casing/caseless/mag_e/shot = chambered
|
||||
cell.use(shot.energy_cost)
|
||||
. = ..()
|
||||
|
||||
/obj/item/gun/ballistic/automatic/magrifle_e/emp_act(severity)
|
||||
. = ..()
|
||||
if(!(. & EMP_PROTECT_CONTENTS))
|
||||
cell.use(round(cell.charge / severity))
|
||||
|
||||
/obj/item/gun/ballistic/automatic/magrifle_e/get_cell()
|
||||
return cell
|
||||
|
||||
/obj/item/gun/ballistic/automatic/magrifle_e/Initialize()
|
||||
. = ..()
|
||||
if(cell_type)
|
||||
cell = new cell_type(src)
|
||||
else
|
||||
cell = new(src)
|
||||
|
||||
if(!dead_cell)
|
||||
cell.give(cell.maxcharge)
|
||||
|
||||
/obj/item/gun/ballistic/automatic/magrifle_e/nopin
|
||||
pin = null
|
||||
spawnwithmagazine = FALSE
|
||||
|
||||
|
||||
///magpistol///
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag_e
|
||||
name = "magpistol"
|
||||
desc = "A handgun utilizing maglev technologies to propel a ferromagnetic slug to extreme velocities."
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "magpistol"
|
||||
force = 10
|
||||
fire_sound = 'sound/weapons/magpistol.ogg'
|
||||
mag_type = /obj/item/ammo_box/magazine/mmag_e/small
|
||||
can_suppress = 0
|
||||
casing_ejector = 0
|
||||
fire_delay = 2
|
||||
recoil = 0.2
|
||||
var/obj/item/stock_parts/cell/cell
|
||||
var/cell_type = /obj/item/stock_parts/cell/magpistol_e
|
||||
var/dead_cell = FALSE
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag_e/examine(mob/user)
|
||||
. = ..()
|
||||
if(cell)
|
||||
to_chat(user, "<span class='notice'>[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] doesn't seem to have a cell!</span>")
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag_e/can_shoot()
|
||||
if(QDELETED(cell))
|
||||
return 0
|
||||
|
||||
var/obj/item/ammo_casing/caseless/mag_e/shot = chambered
|
||||
if(!shot)
|
||||
return 0
|
||||
if(cell.charge < shot.energy_cost)
|
||||
return 0
|
||||
. = ..()
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag_e/shoot_live_shot()
|
||||
var/obj/item/ammo_casing/caseless/mag_e/shot = chambered
|
||||
cell.use(shot.energy_cost)
|
||||
. = ..()
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag_e/emp_act(severity)
|
||||
. = ..()
|
||||
if(!(. & EMP_PROTECT_CONTENTS))
|
||||
cell.use(round(cell.charge / severity))
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag_e/get_cell()
|
||||
return cell
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag_e/Initialize()
|
||||
. = ..()
|
||||
if(cell_type)
|
||||
cell = new cell_type(src)
|
||||
else
|
||||
cell = new(src)
|
||||
|
||||
if(!dead_cell)
|
||||
cell.give(cell.maxcharge)
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag_e/update_icon()
|
||||
..()
|
||||
if(magazine)
|
||||
cut_overlays()
|
||||
add_overlay("magpistol-magazine")
|
||||
else
|
||||
cut_overlays()
|
||||
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag_e/nopin
|
||||
pin = null
|
||||
spawnwithmagazine = FALSE
|
||||
@@ -17,30 +17,3 @@
|
||||
/obj/item/gun/energy/laser/redtag
|
||||
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
|
||||
|
||||
/obj/item/gun/energy/laser/carbine
|
||||
name = "VGS blaster carbine"
|
||||
desc = "A ruggedized laser carbine featuring much higher capacity and improved handling when compared to a normal blaster carbine."
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "lasernew"
|
||||
item_state = "laser"
|
||||
force = 10
|
||||
throwforce = 10
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/lasergun)
|
||||
cell_type = /obj/item/stock_parts/cell/lascarbine
|
||||
|
||||
/obj/item/gun/energy/laser/carbine/nopin
|
||||
pin = null
|
||||
|
||||
/obj/item/stock_parts/cell/lascarbine
|
||||
name = "laser carbine power supply"
|
||||
maxcharge = 2500
|
||||
|
||||
/datum/design/lasercarbine
|
||||
name = "VGS Blaster Carbine"
|
||||
desc = "Beefed up version of a normal blaster carbine."
|
||||
id = "lasercarbine"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GOLD = 2500, MAT_METAL = 5000, MAT_GLASS = 5000)
|
||||
build_path = /obj/item/gun/energy/laser/carbine/nopin
|
||||
category = list("Weapons")
|
||||
@@ -36,11 +36,10 @@
|
||||
/obj/effect/decal/cleanable/semen/New()
|
||||
..()
|
||||
dir = pick(1,2,4,8)
|
||||
add_blood_DNA(list("Non-human DNA" = "A+"))
|
||||
|
||||
/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume)
|
||||
if(!isspaceturf(T))
|
||||
var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/semen(T)
|
||||
reagentdecal.reagents.add_reagent("semen", reac_volume)
|
||||
/obj/effect/decal/cleanable/semen/replace_decal(obj/effect/decal/cleanable/semen/S)
|
||||
S.add_blood_DNA(return_blood_DNA())
|
||||
|
||||
/datum/reagent/consumable/femcum
|
||||
name = "Female Ejaculate"
|
||||
@@ -98,7 +97,7 @@
|
||||
color = "#FFADFF"//PINK, rgb(255, 173, 255)
|
||||
|
||||
/datum/reagent/drug/aphrodisiac/on_mob_life(mob/living/M)
|
||||
if(M && M.canbearoused)
|
||||
if(M && M.canbearoused && !M.has_trait(TRAIT_CROCRIN_IMMUNE))
|
||||
if(prob(33))
|
||||
M.adjustArousalLoss(2)
|
||||
if(prob(5))
|
||||
@@ -120,7 +119,7 @@
|
||||
overdose_threshold = 20
|
||||
|
||||
/datum/reagent/drug/aphrodisiacplus/on_mob_life(mob/living/M)
|
||||
if(M && M.canbearoused)
|
||||
if(M && M.canbearoused && !M.has_trait(TRAIT_CROCRIN_IMMUNE))
|
||||
if(prob(33))
|
||||
M.adjustArousalLoss(6)//not quite six times as powerful, but still considerably more powerful.
|
||||
if(prob(5))
|
||||
@@ -152,7 +151,7 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/drug/aphrodisiacplus/overdose_process(mob/living/M)
|
||||
if(M && M.canbearoused && prob(33))
|
||||
if(M && M.canbearoused && !M.has_trait(TRAIT_CROCRIN_IMMUNE) && prob(33))
|
||||
if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna())
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(prob(50)) //Less spam
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
desc = "It's a belly! You're in it!" // Flavor text description of inside sight/sound/smells/feels.
|
||||
var/vore_sound = "Gulp" // Sound when ingesting someone
|
||||
var/vore_verb = "ingest" // Verb for eating with this in messages
|
||||
var/release_sound = "Splatter"
|
||||
var/release_sound = "Splatter" // Sound for letting someone out.
|
||||
var/human_prey_swallow_time = 100 // Time in deciseconds to swallow /mob/living/carbon/human
|
||||
var/nonhuman_prey_swallow_time = 30 // Time in deciseconds to swallow anything else
|
||||
var/emote_time = 60 SECONDS // How long between stomach emotes at prey
|
||||
@@ -26,18 +26,18 @@
|
||||
var/escapetime = 20 SECONDS // Deciseconds, how long to escape this belly
|
||||
var/digestchance = 0 // % Chance of stomach beginning to digest if prey struggles
|
||||
var/absorbchance = 0 // % Chance of stomach beginning to absorb if prey struggles
|
||||
var/escapechance = 100 // % Chance of prey beginning to escape if prey struggles.
|
||||
var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles.
|
||||
var/can_taste = FALSE // If this belly prints the flavor of prey when it eats someone.
|
||||
var/bulge_size = 0.25 // The minimum size the prey has to be in order to show up on examine.
|
||||
// var/shrink_grow_size = 1 // This horribly named variable determines the minimum/maximum size it will shrink/grow prey to.
|
||||
var/silent = FALSE
|
||||
|
||||
var/transferlocation = null // Location that the prey is released if they struggle and get dropped off.
|
||||
var/transferlocation // Location that the prey is released if they struggle and get dropped off.
|
||||
var/transferchance = 0 // % Chance of prey being transferred to transfer location when resisting
|
||||
var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location
|
||||
var/autotransferwait = 10 // Time between trying to transfer.
|
||||
var/swallow_time = 10 SECONDS // for mob transfering automation
|
||||
var/vore_capacity = 1 // simple animal nom capacity
|
||||
var/is_wet = TRUE // Is this belly inside slimy parts?
|
||||
|
||||
//I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere.
|
||||
var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_NOISY,DM_ABSORB,DM_UNABSORB) // Possible digest modes
|
||||
@@ -126,7 +126,6 @@
|
||||
"escapechance",
|
||||
"can_taste",
|
||||
"bulge_size",
|
||||
"silent",
|
||||
"transferlocation",
|
||||
"transferchance",
|
||||
"autotransferchance",
|
||||
@@ -138,7 +137,8 @@
|
||||
"digest_messages_owner",
|
||||
"digest_messages_prey",
|
||||
"examine_messages",
|
||||
"emote_lists"
|
||||
"emote_lists",
|
||||
"is_wet"
|
||||
)
|
||||
|
||||
//ommitted list
|
||||
@@ -167,10 +167,11 @@
|
||||
to_chat(owner,"<span class='notice'>[thing] slides into your [lowertext(name)].</span>")
|
||||
|
||||
//Sound w/ antispam flag setting
|
||||
if(!silent && !recent_sound)
|
||||
for(var/mob/M in get_hearers_in_view(5, get_turf(owner)))
|
||||
if(is_wet && !recent_sound)
|
||||
for(var/mob/M in get_hearers_in_view(2, get_turf(owner)))
|
||||
if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
|
||||
playsound(get_turf(owner),"[src.vore_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
var/sound/devourments = GLOB.vore_sounds[vore_sound]
|
||||
playsound(get_turf(owner),devourments,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
recent_sound = TRUE
|
||||
|
||||
//Messages if it's a mob
|
||||
@@ -182,8 +183,12 @@
|
||||
// Release all contents of this belly into the owning mob's location.
|
||||
// If that location is another mob, contents are transferred into whichever of its bellies the owning mob is in.
|
||||
// Returns the number of mobs so released.
|
||||
/obj/belly/proc/release_all_contents(var/include_absorbed = FALSE)
|
||||
/obj/belly/proc/release_all_contents(var/include_absorbed = FALSE, var/silent = FALSE)
|
||||
var/atom/destination = drop_location()
|
||||
//Don't bother if we don't have contents
|
||||
if(!contents.len)
|
||||
return 0
|
||||
|
||||
var/count = 0
|
||||
for(var/thing in contents)
|
||||
var/atom/movable/AM = thing
|
||||
@@ -201,9 +206,16 @@
|
||||
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "emptyprey", /datum/mood_event/emptyprey)
|
||||
AM.forceMove(destination) // Move the belly contents into the same location as belly's owner.
|
||||
count++
|
||||
for(var/mob/M in get_hearers_in_view(5, get_turf(owner)))
|
||||
for(var/mob/M in get_hearers_in_view(2, get_turf(owner)))
|
||||
if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
|
||||
playsound(get_turf(owner),"[src.release_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
var/sound/releasement = GLOB.release_sounds[release_sound]
|
||||
playsound(get_turf(owner),releasement,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
|
||||
//Clean up our own business
|
||||
items_preserved.Cut()
|
||||
if(isanimal(owner))
|
||||
owner.update_icons()
|
||||
|
||||
if(!silent)
|
||||
owner.visible_message("<font color='green'><b>[owner] expels everything from their [lowertext(name)]!</b></font>")
|
||||
items_preserved.Cut()
|
||||
@@ -214,16 +226,17 @@
|
||||
// Release a specific atom from the contents of this belly into the owning mob's location.
|
||||
// If that location is another mob, the atom is transferred into whichever of its bellies the owning mob is in.
|
||||
// Returns the number of atoms so released.
|
||||
/obj/belly/proc/release_specific_contents(var/atom/movable/M)
|
||||
/obj/belly/proc/release_specific_contents(var/atom/movable/M, var/silent = FALSE)
|
||||
if (!(M in contents))
|
||||
return FALSE // They weren't in this belly anyway
|
||||
|
||||
M.forceMove(drop_location()) // Move the belly contents into the same location as belly's owner.
|
||||
items_preserved -= M
|
||||
if(release_sound)
|
||||
for(var/mob/H in get_hearers_in_view(5, get_turf(owner)))
|
||||
if(!silent)
|
||||
for(var/mob/H in get_hearers_in_view(2, get_turf(owner)))
|
||||
if(H.client && (H.client.prefs.cit_toggles & EATING_NOISES))
|
||||
playsound(get_turf(owner),"[src.release_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
var/sound/releasement = GLOB.release_sounds[release_sound]
|
||||
playsound(get_turf(owner),releasement,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
|
||||
if(istype(M,/mob/living))
|
||||
var/mob/living/ML = M
|
||||
@@ -245,6 +258,11 @@
|
||||
if(P.absorbed)
|
||||
absorbed_count++
|
||||
Pred.reagents.trans_to(Prey, Pred.reagents.total_volume / absorbed_count)
|
||||
|
||||
//Clean up our own business
|
||||
if(isanimal(owner))
|
||||
owner.update_icons()
|
||||
|
||||
if(!silent)
|
||||
owner.visible_message("<font color='green'><b>[owner] expels [M] from their [lowertext(name)]!</b></font>")
|
||||
owner.update_icons()
|
||||
@@ -268,8 +286,10 @@
|
||||
|
||||
prey.forceMove(src)
|
||||
var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
|
||||
if(!silent)
|
||||
|
||||
if(is_wet)
|
||||
prey.playsound_local(loc,preyloop,70,0, channel = CHANNEL_PREYLOOP)
|
||||
|
||||
owner.updateVRPanel()
|
||||
|
||||
for(var/mob/living/M in contents)
|
||||
@@ -299,7 +319,8 @@
|
||||
if(!silent)
|
||||
for(var/mob/M in get_hearers_in_view(5, get_turf(owner)))
|
||||
if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
|
||||
playsound(get_turf(owner),"[src.vore_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
var/sound/devourments = GLOB.vore_sounds[vore_sound]
|
||||
playsound(get_turf(owner),devourments,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
owner.updateVRPanel()
|
||||
for(var/mob/living/M in contents)
|
||||
M.updateVRPanel()
|
||||
@@ -461,6 +482,9 @@
|
||||
//Yes, it's ""safe"" to drop items here
|
||||
/obj/belly/AllowDrop()
|
||||
return TRUE
|
||||
/*
|
||||
/obj/belly/onDropInto(var/atom/movable/AM)
|
||||
return null */
|
||||
|
||||
//Handle a mob struggling
|
||||
// Called from /mob/living/carbon/relaymove()
|
||||
@@ -469,6 +493,23 @@
|
||||
return // User is not in this belly
|
||||
|
||||
R.setClickCooldown(50)
|
||||
|
||||
if(owner.stat) //If owner is stat (dead, KO) we can actually escape
|
||||
to_chat(R,"<span class='warning'>You attempt to climb out of \the [lowertext(name)]. (This will take around [escapetime/10] seconds.)</span>")
|
||||
to_chat(owner,"<span class='warning'>Someone is attempting to climb out of your [lowertext(name)]!</span>")
|
||||
|
||||
if(do_after(R, owner, escapetime))
|
||||
if((owner.stat || escapable) && (R.loc == src)) //Can still escape?
|
||||
release_specific_contents(R)
|
||||
return
|
||||
else if(R.loc != src) //Aren't even in the belly. Quietly fail.
|
||||
return
|
||||
else //Belly became inescapable or mob revived
|
||||
to_chat(R,"<span class='warning'>Your attempt to escape [lowertext(name)] has failed!</span>")
|
||||
to_chat(owner,"<span class='notice'>The attempt to escape from your [lowertext(name)] has failed!</span>")
|
||||
return
|
||||
return
|
||||
|
||||
var/struggle_outer_message = pick(struggle_messages_outside)
|
||||
var/struggle_user_message = pick(struggle_messages_inside)
|
||||
|
||||
@@ -483,41 +524,38 @@
|
||||
struggle_outer_message = "<span class='alert'>" + struggle_outer_message + "</span>"
|
||||
struggle_user_message = "<span class='alert'>" + struggle_user_message + "</span>"
|
||||
|
||||
if((owner.stat || !owner.client) && (R.a_intent != INTENT_HELP)) //If owner is stat (dead, KO) we can actually escape
|
||||
to_chat(R,"<span class='warning'>You attempt to climb out of \the [lowertext(name)]. (This will take around 5 seconds.)</span>")
|
||||
to_chat(owner,"<span class='warning'>Someone is attempting to climb out of your [lowertext(name)]!</span>")
|
||||
|
||||
if(!do_mob(R,owner,50))
|
||||
return
|
||||
if(!(R in contents)) //Aren't even in the belly. Quietly fail.
|
||||
return
|
||||
if(R.a_intent != INTENT_HELP) //still want to?
|
||||
release_specific_contents(R)
|
||||
return
|
||||
else //Belly became inescapable or mob revived
|
||||
to_chat(R,"<span class='warning'>Your attempt to escape [lowertext(name)] has failed!</span>")
|
||||
to_chat(owner,"<span class='notice'>The attempt to escape from your [lowertext(name)] has failed!</span>")
|
||||
return
|
||||
else if(R.a_intent != INTENT_HELP) //failsafe to make sure people are able to struggle out. friendly ERP should be on help intent.
|
||||
to_chat(R,"<span class='warning'>You attempt to climb out of [lowertext(name)]. (This will take around [escapetime] seconds.)</span>")
|
||||
to_chat(owner,"<span class='warning'>Someone is attempting to climb out of your [lowertext(name)]!</span>")
|
||||
if(!do_mob(R,owner,escapetime))
|
||||
return
|
||||
release_specific_contents(R)
|
||||
return
|
||||
else if (R.a_intent == INTENT_HELP)
|
||||
for(var/mob/M in get_hearers_in_view(3, get_turf(owner)))
|
||||
M.show_message(struggle_outer_message, 1) // visible
|
||||
to_chat(R,struggle_user_message)
|
||||
|
||||
if(!silent)
|
||||
for(var/mob/M in get_hearers_in_view(5, get_turf(owner)))
|
||||
if(is_wet)
|
||||
for(var/mob/M in get_hearers_in_view(2, get_turf(owner)))
|
||||
if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
|
||||
playsound(get_turf(owner),"struggle_sound",35,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
R.stop_sound_channel(CHANNEL_PRED)
|
||||
var/sound/prey_struggle = sound(get_sfx("prey_struggle"))
|
||||
R.playsound_local(get_turf(R),prey_struggle,45,0)
|
||||
|
||||
else
|
||||
for(var/mob/M in get_hearers_in_view(2, get_turf(owner)))
|
||||
if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
|
||||
playsound(get_turf(owner),"rustle",35,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
|
||||
for(var/mob/M in get_hearers_in_view(3, get_turf(owner)))
|
||||
if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) //Might as well censor the normies here too.
|
||||
M.show_message(struggle_outer_message, 1) // visible
|
||||
to_chat(R,struggle_user_message)
|
||||
|
||||
if(escapable) //If the stomach has escapable enabled.
|
||||
if(prob(escapechance)) //Let's have it check to see if the prey escapes first.
|
||||
to_chat(R,"<span class='warning'>You start to climb out of \the [lowertext(name)].</span>")
|
||||
to_chat(owner,"<span class='warning'>Someone is attempting to climb out of your [lowertext(name)]!</span>")
|
||||
if(do_after(R, escapetime))
|
||||
if((owner.stat || escapable) && (R.loc == src)) //Can still escape?
|
||||
release_specific_contents(R)
|
||||
return
|
||||
else if(R.loc != src) //Aren't even in the belly. Quietly fail.
|
||||
return
|
||||
else //Belly became inescapable or mob revived
|
||||
to_chat(R,"<span class='warning'>Your attempt to escape [lowertext(name)] has failed!</span>")
|
||||
to_chat(owner,"<span class='notice'>The attempt to escape from your [lowertext(name)] has failed!</span>")
|
||||
return
|
||||
else if(prob(transferchance) && transferlocation) //Next, let's have it see if they end up getting into an even bigger mess then when they started.
|
||||
var/obj/belly/dest_belly
|
||||
for(var/belly in owner.vore_organs)
|
||||
@@ -525,6 +563,7 @@
|
||||
if(B.name == transferlocation)
|
||||
dest_belly = B
|
||||
break
|
||||
|
||||
if(!dest_belly)
|
||||
to_chat(owner, "<span class='warning'>Something went wrong with your belly transfer settings. Your <b>[lowertext(name)]</b> has had it's transfer chance and transfer location cleared as a precaution.</span>")
|
||||
transferchance = 0
|
||||
@@ -541,21 +580,10 @@
|
||||
to_chat(owner,"<span class='warning'>You feel your [lowertext(name)] start to cling onto its contents...</span>")
|
||||
digest_mode = DM_ABSORB
|
||||
return
|
||||
/*
|
||||
else if(prob(digestchance) && digest_mode != DM_ITEMWEAK && digest_mode != DM_DIGEST) //Finally, let's see if it should run the digest chance.
|
||||
|
||||
else if(prob(digestchance) && digest_mode != DM_DIGEST) //Finally, let's see if it should run the digest chance.
|
||||
to_chat(R,"<span class='warning'>In response to your struggling, \the [lowertext(name)] begins to get more active...</span>")
|
||||
to_chat(owner,"<span class='warning'>You feel your [lowertext(name)] beginning to become active!</span>")
|
||||
digest_mode = DM_ITEMWEAK
|
||||
return
|
||||
|
||||
else if(prob(digestchance) && digest_mode == DM_ITEMWEAK) //Oh god it gets even worse if you fail twice!
|
||||
to_chat(R,"<span class='warning'>In response to your struggling, \the [lowertext(name)] begins to get even more active!</span>")
|
||||
to_chat(owner,"<span class='warning'>You feel your [lowertext(name)] beginning to become even more active!</span>")
|
||||
digest_mode = DM_DIGEST
|
||||
return */
|
||||
else if(prob(digestchance)) //Finally, let's see if it should run the digest chance.)
|
||||
to_chat(R, "<span class='warning'>In response to your struggling, \the [name] begins to get more active...</span>")
|
||||
to_chat(owner, "<span class='warning'>You feel your [name] beginning to become active!</span>")
|
||||
digest_mode = DM_DIGEST
|
||||
return
|
||||
|
||||
@@ -602,13 +630,13 @@
|
||||
dupe.escapechance = escapechance
|
||||
dupe.can_taste = can_taste
|
||||
dupe.bulge_size = bulge_size
|
||||
dupe.silent = silent
|
||||
dupe.transferlocation = transferlocation
|
||||
dupe.transferchance = transferchance
|
||||
dupe.autotransferchance = autotransferchance
|
||||
dupe.autotransferwait = autotransferwait
|
||||
dupe.swallow_time = swallow_time
|
||||
dupe.vore_capacity = vore_capacity
|
||||
dupe.is_wet = is_wet
|
||||
|
||||
//// Object-holding variables
|
||||
//struggle_messages_outside - strings
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
for(var/mob/living/M in contents)
|
||||
if(isbelly(M.loc))
|
||||
if(world.time > M.next_preyloop)
|
||||
if(!silent)
|
||||
if(is_wet)
|
||||
M.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case
|
||||
var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
|
||||
M.playsound_local(get_turf(src),preyloop,80,0, channel = CHANNEL_PREYLOOP)
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
///////////////////// Mob Living /////////////////////
|
||||
/mob/living
|
||||
var/digestable = FALSE // Can the mob be digested inside a belly?
|
||||
var/obj/belly/vore_selected // Default to no vore capability.
|
||||
var/list/vore_organs = list() // List of vore containers inside a mob
|
||||
var/showvoreprefs = TRUE // 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.
|
||||
var/list/vore_organs = list() // List of vore containers inside a mob
|
||||
var/devourable = FALSE // Can the mob be vored at all?
|
||||
// var/feeding = FALSE // Are we going to feed someone else?
|
||||
var/vore_taste = null // What the character tastes like
|
||||
var/feeding = FALSE // Are we going to feed someone else?
|
||||
var/vore_taste = null // What the character tastes like
|
||||
var/no_vore = FALSE // If the character/mob can vore.
|
||||
var/openpanel = 0 // Is the vore panel open?
|
||||
var/noisy = FALSE // tummies are rumbly?
|
||||
var/absorbed = FALSE //are we absorbed?
|
||||
var/openpanel = 0 // Is the vore panel open?
|
||||
var/absorbed = FALSE //are we absorbed?
|
||||
var/next_preyloop
|
||||
var/vore_init = FALSE //Has this mob's vore been initialized yet?
|
||||
var/vorepref_init = FALSE //Has this mob's voreprefs been initialized?
|
||||
|
||||
//
|
||||
// Hook for generic creation of stuff on new creatures
|
||||
@@ -26,12 +28,14 @@
|
||||
|
||||
//Tries to load prefs if a client is present otherwise gives freebie stomach
|
||||
spawn(10 SECONDS) // long delay because the server delays in its startup. just on the safe side.
|
||||
M.init_vore()
|
||||
if(M)
|
||||
M.init_vore()
|
||||
|
||||
//Return 1 to hook-caller
|
||||
return 1
|
||||
|
||||
/mob/living/proc/init_vore()
|
||||
vore_init = TRUE
|
||||
//Something else made organs, meanwhile.
|
||||
if(LAZYLEN(vore_organs))
|
||||
return TRUE
|
||||
@@ -75,31 +79,42 @@
|
||||
|
||||
// Critical adjustments due to TG grab changes - Poojawa
|
||||
|
||||
/mob/living/proc/vore_attack(var/mob/living/user, var/mob/living/prey)
|
||||
if(!user || !prey)
|
||||
/mob/living/proc/vore_attack(var/mob/living/user, var/mob/living/prey, var/mob/living/pred)
|
||||
if(!user || !prey || !pred)
|
||||
return
|
||||
|
||||
if(prey == src && user.zone_selected == "mouth") //you click your target
|
||||
// if(!feeding(src))
|
||||
// return
|
||||
if(!is_vore_predator(prey))
|
||||
if(!isliving(pred)) //no badmin, you can't feed people to ghosts or objects.
|
||||
return
|
||||
|
||||
if(pred == prey) //you click your target
|
||||
if(!pred.feeding)
|
||||
to_chat(user, "<span class='notice'>They aren't able to be fed.</span>")
|
||||
to_chat(pred, "<span class='notice'>[user] tried to feed you themselves, but you aren't voracious enough to be fed.</span>")
|
||||
return
|
||||
if(!is_vore_predator(pred))
|
||||
to_chat(user, "<span class='notice'>They aren't voracious enough.</span>")
|
||||
return
|
||||
feed_self_to_grabbed(user, src)
|
||||
feed_self_to_grabbed(user, pred)
|
||||
|
||||
if(user == src) //you click yourself
|
||||
if(pred == user) //you click yourself
|
||||
if(!is_vore_predator(src))
|
||||
to_chat(user, "<span class='notice'>You aren't voracious enough.</span>")
|
||||
return
|
||||
user.feed_grabbed_to_self(src, prey)
|
||||
feed_grabbed_to_self(user, prey)
|
||||
|
||||
else // click someone other than you/prey
|
||||
// if(!feeding(src))
|
||||
// return
|
||||
if(!is_vore_predator(src))
|
||||
if(!pred.feeding)
|
||||
to_chat(user, "<span class='notice'>They aren't voracious enough to be fed.</span>")
|
||||
to_chat(pred, "<span class='notice'>[user] tried to feed you [prey], but you aren't voracious enough to be fed.</span>")
|
||||
return
|
||||
if(!prey.feeding)
|
||||
to_chat(user, "<span class='notice'>They aren't able to be fed to someone.</span>")
|
||||
to_chat(prey, "<span class='notice'>[user] tried to feed you to [pred], but you aren't able to be fed to them.</span>")
|
||||
return
|
||||
if(!is_vore_predator(pred))
|
||||
to_chat(user, "<span class='notice'>They aren't voracious enough.</span>")
|
||||
return
|
||||
feed_grabbed_to_other(user, prey, src)
|
||||
feed_grabbed_to_other(user, prey, pred)
|
||||
//
|
||||
// Eating procs depending on who clicked what
|
||||
//
|
||||
@@ -120,55 +135,10 @@
|
||||
return perform_the_nom(user, user, pred, belly)
|
||||
|
||||
/mob/living/proc/feed_grabbed_to_other(var/mob/living/user, var/mob/living/prey, var/mob/living/pred)
|
||||
return//disabled until I can make that toggle work
|
||||
// return//disabled until I can make that toggle work
|
||||
var/belly = input("Choose Belly") in pred.vore_organs
|
||||
return perform_the_nom(user, prey, pred, belly)
|
||||
|
||||
//Dragon noms need to be faster
|
||||
/mob/living/proc/dragon_feeding(var/mob/living/user, var/mob/living/prey)
|
||||
var/belly = user.vore_selected
|
||||
return perform_dragon(user, prey, user, belly)
|
||||
|
||||
/mob/living/proc/perform_dragon(var/mob/living/user, var/mob/living/prey, var/mob/living/pred, var/obj/belly/belly, swallow_time = 20)
|
||||
//Sanity
|
||||
if(!user || !prey || !pred || !istype(belly) || !(belly in pred.vore_organs))
|
||||
testing("[user] attempted to feed [prey] to [pred], via [lowertext(belly.name)] but it went wrong.")
|
||||
return FALSE
|
||||
|
||||
if(istype(pred, /mob/living/simple_animal/hostile/megafauna/dragon))
|
||||
if(isliving(prey) && !prey.Adjacent(pred))
|
||||
return FALSE
|
||||
|
||||
// The belly selected at the time of noms
|
||||
var/attempt_msg = "ERROR: Vore message couldn't be created. Notify a dev. (at)"
|
||||
var/success_msg = "ERROR: Vore message couldn't be created. Notify a dev. (sc)"
|
||||
|
||||
// Prepare messages
|
||||
if(user == pred) //Feeding someone to yourself
|
||||
attempt_msg = text("<span class='warning'>[] starts to [] [] into their []!</span>",pred,lowertext(belly.vore_verb),prey,lowertext(belly.name))
|
||||
success_msg = text("<span class='warning'>[] manages to [] [] into their []!</span>",pred,lowertext(belly.vore_verb),prey,lowertext(belly.name))
|
||||
|
||||
if(!prey.Adjacent(user)) // let's doublecheck for sanity's sake.
|
||||
return FALSE
|
||||
|
||||
// Announce that we start the attempt!
|
||||
user.visible_message(attempt_msg)
|
||||
|
||||
if(!do_mob(src, user, swallow_time))
|
||||
return FALSE // Prey escaped (or user disabled) before timer expired.
|
||||
|
||||
// If we got this far, nom successful! Announce it!
|
||||
user.visible_message(success_msg)
|
||||
playsound(get_turf(user), "[belly.vore_sound]",75,0,-6,0)
|
||||
|
||||
// Actually shove prey into the belly.
|
||||
belly.nom_mob(prey, user)
|
||||
if (pred == user)
|
||||
message_admins("[key_name(pred)] ate [key_name(prey)].")
|
||||
pred.log_message("[key_name(pred)] ate [key_name(prey)].", LOG_ATTACK)
|
||||
prey.log_message("[key_name(prey)] was eaten by [key_name(pred)].", LOG_ATTACK)
|
||||
return TRUE
|
||||
|
||||
//
|
||||
// Master vore proc that actually does vore procedures
|
||||
//
|
||||
@@ -281,7 +251,7 @@
|
||||
*/
|
||||
|
||||
//
|
||||
// Custom resist catches for /mob/living
|
||||
// Our custom resist catches for /mob/living
|
||||
//
|
||||
/mob/living/proc/vore_process_resist()
|
||||
|
||||
@@ -293,7 +263,7 @@
|
||||
|
||||
//Other overridden resists go here
|
||||
|
||||
return FALSE
|
||||
return 0
|
||||
|
||||
// internal slimy button in case the loop stops playing but the player wants to hear it
|
||||
/mob/living/proc/preyloop_refresh()
|
||||
@@ -319,10 +289,9 @@
|
||||
if(!confirm == "Okay" || loc != B)
|
||||
return
|
||||
//Actual escaping
|
||||
forceMove(get_turf(src)) //Just move me up to the turf, let's not cascade through bellies, there's been a problem, let's just leave.
|
||||
if(is_blind(src) && !has_trait(TRAIT_BLIND))
|
||||
src.adjust_blindness(-1)
|
||||
B.release_specific_contents(src,TRUE) //we might as well take advantage of that specific belly's handling. Else we stay blinded forever.
|
||||
src.stop_sound_channel(CHANNEL_PREYLOOP)
|
||||
SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey)
|
||||
for(var/mob/living/simple_animal/SA in range(10))
|
||||
SA.prey_excludes[src] = world.time
|
||||
|
||||
@@ -374,6 +343,7 @@
|
||||
|
||||
P.digestable = src.digestable
|
||||
P.devourable = src.devourable
|
||||
P.feeding = src.feeding
|
||||
P.vore_taste = src.vore_taste
|
||||
|
||||
var/list/serialized = list()
|
||||
@@ -392,11 +362,13 @@
|
||||
if(!client || !client.prefs_vr)
|
||||
to_chat(src,"<span class='warning'>You attempted to apply your vore prefs but somehow you're in this character without a client.prefs_vr variable. Tell a dev.</span>")
|
||||
return 0
|
||||
vorepref_init = TRUE
|
||||
|
||||
var/datum/vore_preferences/P = client.prefs_vr
|
||||
|
||||
digestable = P.digestable
|
||||
devourable = P.devourable
|
||||
feeding = P.feeding
|
||||
vore_taste = P.vore_taste
|
||||
|
||||
release_vore_contents(silent = TRUE)
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
///////////////////// Simple Animal /////////////////////
|
||||
/mob/living/simple_animal
|
||||
var/isPredator = FALSE //Are they capable of performing and pre-defined vore actions for their species?
|
||||
var/swallowTime = 5 SECONDS //How long it takes to eat its prey in 1/10 of a second. The default is 5 seconds.
|
||||
var/list/prey_excludes = list() //For excluding people from being eaten.
|
||||
|
||||
//
|
||||
// Simple proc for animals to have their digestion toggled on/off externally
|
||||
//
|
||||
/mob/living/simple_animal/verb/toggle_digestion()
|
||||
set name = "Toggle Animal's Digestion"
|
||||
set desc = "Enables digestion on this mob for 20 minutes."
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
var/datum/belly/B = vore_organs[vore_selected]
|
||||
if(faction != usr.faction)
|
||||
to_chat(usr,"<span class='warning'>This predator isn't friendly, and doesn't give a shit about your opinions of it digesting you.</span>")
|
||||
return
|
||||
if(B.digest_mode == "Hold")
|
||||
var/confirm = alert(usr, "Enabling digestion on [name] will cause it to digest all stomach contents. Using this to break OOC prefs is against the rules. Digestion will disable itself after 20 minutes.", "Enabling [name]'s Digestion", "Enable", "Cancel")
|
||||
if(confirm == "Enable")
|
||||
B.digest_mode = "Digest"
|
||||
sleep(20 MINUTES) //12000=20 minutes
|
||||
B.digest_mode = "Hold"
|
||||
else
|
||||
var/confirm = alert(usr, "This mob is currently set to digest all stomach contents. Do you want to disable this?", "Disabling [name]'s Digestion", "Disable", "Cancel")
|
||||
if(confirm == "Disable")
|
||||
B.digest_mode = "Hold"
|
||||
|
||||
//
|
||||
// Simple nom proc for if you get ckey'd into a simple_animal mob! Avoids grabs.
|
||||
//
|
||||
/mob/living/simple_animal/proc/animal_nom(var/mob/living/T in oview(1))
|
||||
set name = "Animal Nom"
|
||||
set category = "Vore"
|
||||
set desc = "Since you can't grab, you get a verb!"
|
||||
|
||||
if (stat != CONSCIOUS)
|
||||
return
|
||||
if (T.devourable == FALSE)
|
||||
to_chat(usr, "<span class='warning'>You can't eat this!</span>")
|
||||
return
|
||||
return feed_grabbed_to_self(src,T)
|
||||
@@ -28,7 +28,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
// The datum type bolted onto normal preferences datums for storing Vore stuff
|
||||
//
|
||||
|
||||
#define VORE_VERSION 2
|
||||
#define VORE_VERSION 4
|
||||
|
||||
GLOBAL_LIST_EMPTY(vore_preferences_datums)
|
||||
|
||||
@@ -39,6 +39,7 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums)
|
||||
//Actual preferences
|
||||
var/digestable = FALSE
|
||||
var/devourable = FALSE
|
||||
var/feeding = FALSE
|
||||
// var/allowmobvore = TRUE
|
||||
var/list/belly_prefs = list()
|
||||
var/vore_taste = "nothing in particular"
|
||||
@@ -105,6 +106,7 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums)
|
||||
|
||||
digestable = json_from_file["digestable"]
|
||||
devourable = json_from_file["devourable"]
|
||||
feeding = json_from_file["feeding"]
|
||||
vore_taste = json_from_file["vore_taste"]
|
||||
belly_prefs = json_from_file["belly_prefs"]
|
||||
|
||||
@@ -113,6 +115,8 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums)
|
||||
digestable = FALSE
|
||||
if(isnull(devourable))
|
||||
devourable = FALSE
|
||||
if(isnull(feeding))
|
||||
feeding = FALSE
|
||||
if(isnull(belly_prefs))
|
||||
belly_prefs = list()
|
||||
|
||||
@@ -127,6 +131,7 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums)
|
||||
"version" = version,
|
||||
"digestable" = digestable,
|
||||
"devourable" = devourable,
|
||||
"feeding" = feeding,
|
||||
"vore_taste" = vore_taste,
|
||||
"belly_prefs" = belly_prefs,
|
||||
)
|
||||
|
||||
@@ -18,9 +18,10 @@
|
||||
|
||||
var/dat = picker_holder.gen_vui(src)
|
||||
|
||||
picker_holder.popup = new(src, "insidePanel","Vore Panel", 400, 600, picker_holder)
|
||||
picker_holder.popup = new(src, "insidePanel","Vore Panel", 450, 700, picker_holder)
|
||||
picker_holder.popup.set_content(dat)
|
||||
picker_holder.popup.open()
|
||||
src.openpanel = 1
|
||||
|
||||
/mob/living/proc/updateVRPanel() //Panel popup update call from belly events.
|
||||
if(src.openpanel == 1)
|
||||
@@ -30,7 +31,7 @@
|
||||
|
||||
var/dat = picker_holder.gen_vui(src)
|
||||
|
||||
picker_holder.popup = new(src, "insidePanel","Vore Panel", 400, 600, picker_holder)
|
||||
picker_holder.popup = new(src, "insidePanel","Vore Panel", 450, 700, picker_holder)
|
||||
picker_holder.popup.set_content(dat)
|
||||
picker_holder.popup.open()
|
||||
|
||||
@@ -39,7 +40,7 @@
|
||||
//
|
||||
/datum/vore_look
|
||||
var/obj/belly/selected
|
||||
var/show_interacts = TRUE
|
||||
var/show_interacts = 0
|
||||
var/datum/browser/popup
|
||||
var/loop = null; // Magic self-reference to stop the handler from being GC'd before user takes action.
|
||||
|
||||
@@ -55,13 +56,14 @@
|
||||
|
||||
/datum/vore_look/proc/gen_vui(var/mob/living/user)
|
||||
var/dat
|
||||
|
||||
dat += "Remember to toggle the vore mode, it's to the left of your combat toggle. Open mouth means you're voracious!<br>"
|
||||
dat += "<HR>"
|
||||
var/atom/userloc = user.loc
|
||||
if (isbelly(userloc))
|
||||
var/obj/belly/inside_belly = userloc
|
||||
var/mob/living/eater = inside_belly.owner
|
||||
|
||||
//Don't display this part if we couldn't find the belly since could be held in hand.
|
||||
//Don't display this part if we couldn't find the belly since could be held in hand.
|
||||
if(inside_belly)
|
||||
dat += "<font color = 'green'>You are currently [user.absorbed ? "absorbed into " : "inside "]</font> <font color = 'yellow'>[eater]'s</font> <font color = 'red'>[inside_belly]</font>!<br><br>"
|
||||
|
||||
@@ -102,7 +104,6 @@
|
||||
dat += "<li style='float: left'><a href='?src=\ref[src];bellypick=\ref[B]'><b>[B.name]</b>"
|
||||
else
|
||||
dat += "<li style='float: left'><a href='?src=\ref[src];bellypick=\ref[B]'>[B.name]"
|
||||
|
||||
var/spanstyle
|
||||
switch(B.digest_mode)
|
||||
if(DM_HOLD)
|
||||
@@ -110,11 +111,13 @@
|
||||
if(DM_DIGEST)
|
||||
spanstyle = "color:red;"
|
||||
if(DM_HEAL)
|
||||
spanstyle = "color:green;"
|
||||
spanstyle = "color:darkgreen;"
|
||||
if(DM_NOISY)
|
||||
spanstyle = "color:purple;"
|
||||
if(DM_ABSORB)
|
||||
spanstyle = "color:purple;"
|
||||
if(DM_DRAGON)
|
||||
spanstyle = "color:blue;"
|
||||
|
||||
dat += "<span style='[spanstyle]'> ([B.contents.len])</span></a></li>"
|
||||
|
||||
@@ -156,6 +159,10 @@
|
||||
dat += "<a href='?src=\ref[src];b_name=\ref[selected]'>Name:</a>"
|
||||
dat += " '[selected.name]'"
|
||||
|
||||
//Belly Type button
|
||||
dat += "<br><a href='?src=\ref[src];b_wetness=\ref[selected]'>Is Fleshy:</a>"
|
||||
dat += "[selected.is_wet ? "Yes" : "No"]"
|
||||
|
||||
//Digest Mode Button
|
||||
dat += "<br><a href='?src=\ref[src];b_mode=\ref[selected]'>Belly Mode:</a>"
|
||||
dat += " [selected.digest_mode]"
|
||||
@@ -169,11 +176,11 @@
|
||||
dat += " '[selected.desc]'"
|
||||
|
||||
//Belly sound
|
||||
dat += "<br><a href='?src=\ref[src];b_sound=\ref[selected]'>Set Vore Sound</a>"
|
||||
dat += "<br><a href='?src=\ref[src];b_sound=\ref[selected]'>Vore Sound: [selected.vore_sound]</a>"
|
||||
dat += "<a href='?src=\ref[src];b_soundtest=\ref[selected]'>Test</a>"
|
||||
|
||||
//Release sound
|
||||
dat += "<br><a href='?src=\ref[src];b_release=\ref[selected]'>Set Release Sound</a>"
|
||||
dat += "<br><a href='?src=\ref[src];b_release=\ref[selected]'>Release Sound: [selected.release_sound]</a>"
|
||||
dat += "<a href='?src=\ref[src];b_releasesoundtest=\ref[selected]'>Test</a>"
|
||||
|
||||
//Belly messages
|
||||
@@ -201,10 +208,6 @@
|
||||
dat += "<br><a href='?src=\ref[src];b_escapetime=\ref[selected]'>Set Belly Escape Time</a>"
|
||||
dat += " [selected.escapetime/10]s"
|
||||
|
||||
dat += "<br style='line-height:5px;'>"
|
||||
dat += "<br><a href='?src=\ref[src];b_absorbchance=\ref[selected]'>Set Belly Absorb Chance</a>"
|
||||
dat += " [selected.absorbchance]%"
|
||||
|
||||
//Special <br> here to add a gap
|
||||
dat += "<br style='line-height:5px;'>"
|
||||
dat += "<br><a href='?src=\ref[src];b_transferchance=\ref[selected]'>Set Belly Transfer Chance</a>"
|
||||
@@ -215,19 +218,17 @@
|
||||
|
||||
//Special <br> here to add a gap
|
||||
dat += "<br style='line-height:5px;'>"
|
||||
dat += "<br><a href='?src=\ref[src];b_absorbchance=\ref[selected]'>Set Belly Absorb Chance</a>"
|
||||
dat += " [selected.absorbchance]%"
|
||||
|
||||
dat += "<br><a href='?src=\ref[src];b_digestchance=\ref[selected]'>Set Belly Digest Chance</a>"
|
||||
dat += " [selected.digestchance]%"
|
||||
dat += "<HR>"
|
||||
|
||||
// Belly Silence
|
||||
dat += "<br><a href='?src=\ref[src];b_silent=\ref[selected]'>Belly Silence (for not belly bellies):</a>"
|
||||
dat += " [selected.silent ? "Yes" : "No"]"
|
||||
|
||||
//Delete button
|
||||
dat += "<br><a style='background:#990000;' href='?src=\ref[src];b_del=\ref[selected]'>Delete Belly</a>"
|
||||
|
||||
dat += "<a href='?src=\ref[src];setflavor=1'>Set Flavor</a>"
|
||||
dat += "<a href='?src=\ref[src];togglenoisy=1'>Toggle Hunger Noises</a>"
|
||||
|
||||
dat += "<HR>"
|
||||
|
||||
@@ -239,15 +240,21 @@
|
||||
dat += "<HR>"
|
||||
switch(user.digestable)
|
||||
if(TRUE)
|
||||
dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable (Currently: ON)</a>"
|
||||
dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable <font color='darkgreen'>(Currently: ON)</font></a>"
|
||||
if(FALSE)
|
||||
dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable (Currently: OFF)</a>"
|
||||
dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable <font color='red'>(Currently: OFF)</font></a>"
|
||||
|
||||
switch(user.devourable)
|
||||
if(TRUE)
|
||||
dat += "<a href='?src=\ref[src];toggledvor=1'>Toggle Devourable (Currently: ON)</a>"
|
||||
dat += "<br><a href='?src=\ref[src];toggledvor=1'>Toggle Devourable <font color='darkgreen'>(Currently: ON)</font></a>"
|
||||
if(FALSE)
|
||||
dat += "<a href='?src=\ref[src];toggledvor=1'>Toggle Devourable (Currently: OFF)</a>"
|
||||
dat += "<br><a href='?src=\ref[src];toggledvor=1'>Toggle Devourable <font color='red'>(Currently: OFF)</font></a>"
|
||||
|
||||
switch(user.feeding)
|
||||
if(TRUE)
|
||||
dat += "<br><a href='?src=\ref[src];toggledfeed=1'>Toggle Feeding <font color='darkgreen'>(Currently: ON)</font></a>"
|
||||
if(FALSE)
|
||||
dat += "<br><a href='?src=\ref[src];toggledfeed=1'>Toggle Feeding <font color='red'>(Currently: OFF)</font></a>"
|
||||
|
||||
//Returns the dat html to the vore_look
|
||||
return dat
|
||||
@@ -258,25 +265,26 @@
|
||||
|
||||
if(href_list["close"])
|
||||
qdel(src) // Cleanup
|
||||
user.openpanel = 0
|
||||
return
|
||||
|
||||
if(href_list["show_int"])
|
||||
show_interacts = !show_interacts
|
||||
return TRUE //Force update
|
||||
return 1 //Force update
|
||||
|
||||
if(href_list["int_help"])
|
||||
to_chat(usr,"These control how your belly responds to someone using 'resist' while inside you. The percent chance to trigger each is listed below, \
|
||||
alert("These control how your belly responds to someone using 'resist' while inside you. The percent chance to trigger each is listed below, \
|
||||
and you can change them to whatever you see fit. Setting them to 0% will disable the possibility of that interaction. \
|
||||
These only function as long as interactions are turned on in general. Keep in mind, the 'belly mode' interactions (digest) \
|
||||
will affect all prey in that belly, if one resists and triggers digestion. If multiple trigger at the same time, \
|
||||
only the first in the order of 'Escape > Transfer > Absorb > Digest' will occur.")
|
||||
return TRUE //Force update
|
||||
These only function as long as interactions are turned on in general. Keep in mind, the 'belly mode' interactions (digest/absorb) \
|
||||
will affect all prey in that belly, if one resists and triggers digestion/absorption. If multiple trigger at the same time, \
|
||||
only the first in the order of 'Escape > Transfer > Absorb > Digest' will occur.","Interactions Help")
|
||||
return 0 //Force update
|
||||
|
||||
if(href_list["outsidepick"])
|
||||
var/atom/movable/tgt = locate(href_list["outsidepick"])
|
||||
var/obj/belly/OB = locate(href_list["outsidebelly"])
|
||||
if(!(tgt in OB)) //Aren't here anymore, need to update menu.
|
||||
return TRUE
|
||||
return 1
|
||||
var/intent = "Examine"
|
||||
|
||||
if(istype(tgt,/mob/living))
|
||||
@@ -289,11 +297,11 @@
|
||||
if("Help Out") //Help the inside-mob out
|
||||
if(user.stat || user.absorbed || M.absorbed)
|
||||
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
|
||||
return
|
||||
return 1
|
||||
|
||||
to_chat(user,"<font color='green'>You begin to push [M] to freedom!</font>")
|
||||
to_chat(M,"[usr] begins to push you to freedom!")
|
||||
to_chat(OB.owner,"<span class='warning'>Someone is trying to escape from inside you!</span>")
|
||||
to_chat(M.loc,"<span class='warning'>Someone is trying to escape from inside you!</span>")
|
||||
sleep(50)
|
||||
if(prob(33))
|
||||
OB.release_specific_contents(M)
|
||||
@@ -305,15 +313,14 @@
|
||||
to_chat(M,"<span class='alert'> Even with [user]'s help, you slip back inside again.</span>")
|
||||
to_chat(OB.owner,"<font color='green'>Your body efficiently shoves [M] back where they belong.</font>")
|
||||
|
||||
|
||||
if("Devour") //Eat the inside mob
|
||||
if(user.absorbed || user.stat)
|
||||
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
|
||||
return
|
||||
return 1
|
||||
|
||||
if(!user.vore_selected)
|
||||
to_chat(user,"<span class='warning'>Pick a belly on yourself first!</span>")
|
||||
return
|
||||
return 1
|
||||
|
||||
var/obj/belly/TB = user.vore_selected
|
||||
to_chat(user,"<span class='warning'>You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!</span>")
|
||||
@@ -329,9 +336,9 @@
|
||||
|
||||
else if(istype(tgt,/obj/item))
|
||||
var/obj/item/T = tgt
|
||||
if(!(tgt in OB.contents))
|
||||
if(!(tgt in OB))
|
||||
//Doesn't exist anymore, update.
|
||||
return TRUE
|
||||
return 1
|
||||
intent = alert("What do you want to do to that?","Query","Examine","Use Hand")
|
||||
switch(intent)
|
||||
if("Examine")
|
||||
@@ -339,8 +346,8 @@
|
||||
|
||||
if("Use Hand")
|
||||
if(user.stat)
|
||||
to_chat(user, "<span class='warning'>You can't do that in your state!</span>")
|
||||
return
|
||||
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
|
||||
return 1
|
||||
|
||||
user.ClickOn(T)
|
||||
sleep(5) //Seems to exit too fast for the panel to update
|
||||
@@ -353,32 +360,31 @@
|
||||
intent = alert("Eject all, Move all?","Query","Eject all","Cancel","Move all")
|
||||
switch(intent)
|
||||
if("Cancel")
|
||||
return
|
||||
return 0
|
||||
|
||||
if("Eject all")
|
||||
if(user.stat)
|
||||
to_chat(user, "<span class='warning'>You can't do that in your state!</span>")
|
||||
return
|
||||
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
|
||||
return 0
|
||||
|
||||
selected.release_all_contents()
|
||||
to_chat(user.loc,"<span class='danger'>Everything is released from [user]!</span>")
|
||||
|
||||
if("Move all")
|
||||
if(user.stat)
|
||||
to_chat(user, "<span class='warning'>You can't do that in your state!</span>")
|
||||
return FALSE
|
||||
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
|
||||
return 0
|
||||
|
||||
var/obj/belly/choice = input("Move all where?","Select Belly") as null|anything in user.vore_organs
|
||||
if(!choice)
|
||||
return FALSE
|
||||
return 0
|
||||
|
||||
for(var/atom/movable/tgt in selected)
|
||||
selected.transfer_contents(tgt, choice, 1)
|
||||
to_chat(tgt,"<span class='warning'>You're squished from [user]'s [lowertext(selected)] to their [lowertext(choice.name)]!</span>")
|
||||
selected.transfer_contents(tgt, choice, 1)
|
||||
|
||||
var/atom/movable/tgt = locate(href_list["insidepick"])
|
||||
if(!(tgt in selected)) //Old menu, needs updating because they aren't really there.
|
||||
return TRUE//Forces update
|
||||
return 1 //Forces update
|
||||
intent = "Examine"
|
||||
intent = alert("Examine, Eject, Move? Examine if you want to leave this box.","Query","Examine","Eject","Move")
|
||||
switch(intent)
|
||||
@@ -387,11 +393,10 @@
|
||||
|
||||
if("Eject")
|
||||
if(user.stat)
|
||||
to_chat(user, "<span class='warning'>You can't do that in your state!</span>")
|
||||
return FALSE
|
||||
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
|
||||
return 0
|
||||
|
||||
selected.release_specific_contents(tgt)
|
||||
user.loc << "<span class='danger'>[tgt] is released from [user]!</span>"
|
||||
|
||||
if("Move")
|
||||
if(user.stat)
|
||||
@@ -457,6 +462,9 @@
|
||||
|
||||
selected.name = new_name
|
||||
|
||||
if(href_list["b_wetness"])
|
||||
selected.is_wet = !selected.is_wet
|
||||
|
||||
if(href_list["b_mode"])
|
||||
var/list/menu_list = selected.digest_modes
|
||||
|
||||
@@ -540,12 +548,12 @@
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
selected.release_sound = GLOB.release_sounds[choice]
|
||||
selected.release_sound = choice
|
||||
|
||||
if(href_list["b_releasesoundtest"])
|
||||
var/soundfile = selected.release_sound
|
||||
if(soundfile)
|
||||
user << soundfile
|
||||
var/sound/releasetest = GLOB.release_sounds[selected.release_sound]
|
||||
if(releasetest)
|
||||
user << releasetest
|
||||
|
||||
if(href_list["b_sound"])
|
||||
var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") as null|anything in GLOB.vore_sounds
|
||||
@@ -553,12 +561,12 @@
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
selected.vore_sound = GLOB.vore_sounds[choice]
|
||||
selected.vore_sound = choice
|
||||
|
||||
if(href_list["b_soundtest"])
|
||||
var/soundfile = selected.vore_sound
|
||||
if(soundfile)
|
||||
user << soundfile
|
||||
var/sound/voretest = GLOB.vore_sounds[selected.vore_sound]
|
||||
if(voretest)
|
||||
user << voretest
|
||||
|
||||
if(href_list["b_tastes"])
|
||||
selected.can_taste = !selected.can_taste
|
||||
@@ -577,17 +585,17 @@
|
||||
selected.bulge_size = (new_bulge/100)
|
||||
|
||||
if(href_list["b_escapable"])
|
||||
if(selected.escapable == FALSE) //Possibly escapable and special interactions.
|
||||
selected.escapable = TRUE
|
||||
to_chat(usr,"<span class='warning'>Prey now have special interactions with your [selected.name] depending on your settings.</span>")
|
||||
else if(selected.escapable == TRUE) //Never escapable.
|
||||
selected.escapable = FALSE
|
||||
to_chat(usr,"<span class='warning'>Prey will not be able to have special interactions with your [selected.name].</span>")
|
||||
show_interacts = FALSE //Force the hiding of the panel
|
||||
if(selected.escapable == 0) //Possibly escapable and special interactions.
|
||||
selected.escapable = 1
|
||||
to_chat(usr,"<span class='warning'>Prey now have special interactions with your [lowertext(selected.name)] depending on your settings.</span>")
|
||||
else if(selected.escapable == 1) //Never escapable.
|
||||
selected.escapable = 0
|
||||
to_chat(usr,"<span class='warning'>Prey will not be able to have special interactions with your [lowertext(selected.name)].</span>")
|
||||
show_interacts = 0 //Force the hiding of the panel
|
||||
else
|
||||
to_chat(usr,"<span class='warning'>Something went wrong. Your stomach will now not have special interactions. Press the button enable them again and tell a dev.") //If they somehow have a varable that's not 0 or 1
|
||||
selected.escapable = TRUE
|
||||
show_interacts = FALSE //Force the hiding of the panel
|
||||
alert("Something went wrong. Your stomach will now not have special interactions. Press the button enable them again and tell a dev.","Error") //If they somehow have a varable that's not 0 or 1
|
||||
selected.escapable = 0
|
||||
show_interacts = 0 //Force the hiding of the panel
|
||||
|
||||
if(href_list["b_escapechance"])
|
||||
var/escape_chance_input = input(user, "Set prey escape chance on resist (as %)", "Prey Escape Chance") as num|null
|
||||
@@ -605,14 +613,14 @@
|
||||
selected.transferchance = sanitize_integer(transfer_chance_input, 0, 100, initial(selected.transferchance))
|
||||
|
||||
if(href_list["b_transferlocation"])
|
||||
var/choice = input("Where do you want your [selected.name] to lead if prey resists?","Select Belly") as null|anything in (user.vore_organs + "None - Remove" - selected.name)
|
||||
var/obj/belly/choice = input("Where do you want your [lowertext(selected.name)] to lead if prey resists?","Select Belly") as null|anything in (user.vore_organs + "None - Remove" - selected)
|
||||
|
||||
if(!choice) //They cancelled, no changes
|
||||
return FALSE
|
||||
return 0
|
||||
else if(choice == "None - Remove")
|
||||
selected.transferlocation = null
|
||||
else
|
||||
selected.transferlocation = user.vore_organs[choice]
|
||||
selected.transferlocation = choice.name
|
||||
|
||||
if(href_list["b_absorbchance"])
|
||||
var/absorb_chance_input = input(user, "Set belly absorb mode chance on resist (as %)", "Prey Absorb Chance") as num|null
|
||||
@@ -624,13 +632,10 @@
|
||||
if(!isnull(digest_chance_input))
|
||||
selected.digestchance = sanitize_integer(digest_chance_input, 0, 100, initial(selected.digestchance))
|
||||
|
||||
if(href_list["b_silent"])
|
||||
selected.silent = !selected.silent
|
||||
|
||||
if(href_list["b_del"])
|
||||
var/alert = alert("Are you sure you want to delete your [lowertext(selected.name)]?","Confirmation","Delete","Cancel")
|
||||
if(!alert == "Delete")
|
||||
return FALSE
|
||||
return 0
|
||||
|
||||
var/failure_msg = ""
|
||||
|
||||
@@ -651,7 +656,7 @@
|
||||
|
||||
if(failure_msg)
|
||||
alert(user,failure_msg,"Error!")
|
||||
return FALSE
|
||||
return 0
|
||||
|
||||
qdel(selected)
|
||||
selected = user.vore_organs[1]
|
||||
@@ -689,7 +694,7 @@
|
||||
var/choice = alert(user, "This button is for those who don't like being digested. It can make you undigestable to all mobs. Digesting you is currently: [user.digestable ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion")
|
||||
switch(choice)
|
||||
if("Cancel")
|
||||
return
|
||||
return 0
|
||||
if("Allow Digestion")
|
||||
user.digestable = TRUE
|
||||
if("Prevent Digestion")
|
||||
@@ -702,7 +707,7 @@
|
||||
var/choice = alert(user, "This button is for those who don't like vore at all. Devouring you is currently: [user.devourable ? "Allowed" : "Prevented"]", "", "Allow Devourment", "Cancel", "Prevent Devourment")
|
||||
switch(choice)
|
||||
if("Cancel")
|
||||
return
|
||||
return 0
|
||||
if("Allow Devourment")
|
||||
user.devourable = TRUE
|
||||
if("Prevent Devourment")
|
||||
@@ -711,5 +716,18 @@
|
||||
if(user.client.prefs_vr)
|
||||
user.client.prefs_vr.devourable = user.devourable
|
||||
|
||||
if(href_list["toggledfeed"])
|
||||
var/choice = alert(user, "This button is to toggle your ability to be fed to others. Feeding predators is currently: [user.feeding ? "Allowed" : "Prevented"]", "", "Allow Feeding", "Cancel", "Prevent Feeding")
|
||||
switch(choice)
|
||||
if("Cancel")
|
||||
return 0
|
||||
if("Allow Feeding")
|
||||
user.feeding = TRUE
|
||||
if("Prevent Feeding")
|
||||
user.feeding = FALSE
|
||||
|
||||
if(user.client.prefs_vr)
|
||||
user.client.prefs_vr.feeding = user.feeding
|
||||
|
||||
//Refresh when interacted with, returning 1 makes vore_look.Topic update
|
||||
return 1
|
||||
Reference in New Issue
Block a user