what is this
This commit is contained in:
@@ -20,3 +20,20 @@
|
||||
|
||||
/datum/tgs_chat_command/despacito/Run()
|
||||
return "https://www.youtube.com/watch?v=kJQP7kiw5Fk"
|
||||
|
||||
/datum/tgs_chat_command/poly
|
||||
name = "poly"
|
||||
help_text = "The Lewder, more applicable Poly speak for Citadel Station 13."
|
||||
var/list/speech_buffer
|
||||
|
||||
/datum/tgs_chat_command/poly/Run()
|
||||
LAZYINITLIST(speech_buffer) //I figure this is just safe to do for everything at this point
|
||||
if(length(speech_buffer)) //Let's not look up the whole json EVERY TIME, just the first time.
|
||||
return "[pick(speech_buffer)]"
|
||||
else
|
||||
var/json_file = file("data/npc_saves/Poly.json")
|
||||
if(!fexists(json_file))
|
||||
return "**BAWWWWWK!** LEAVE THE HEADSET! ***BAWKKKKK!!***"
|
||||
var/list/json = json_decode(file2text(json_file))
|
||||
speech_buffer = json["phrases"]
|
||||
return "[pick(speech_buffer)]"
|
||||
|
||||
@@ -21,10 +21,6 @@
|
||||
can_climax = TRUE
|
||||
fluid_transfer_factor = 0.5
|
||||
|
||||
/obj/item/organ/genital/breasts/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent(fluid_id, fluid_max_volume)
|
||||
|
||||
/obj/item/organ/genital/breasts/on_life()
|
||||
if(QDELETED(src))
|
||||
return
|
||||
@@ -32,6 +28,14 @@
|
||||
return
|
||||
reagents.maximum_volume = fluid_max_volume
|
||||
if(fluid_id && producing)
|
||||
if(reagents.total_volume == 0) // Apparently, 0.015 gets rounded down to zero and no reagents are created if we don't start it with 0.1 in the tank.
|
||||
fluid_rate = 0.1
|
||||
else
|
||||
fluid_rate = CUM_RATE
|
||||
if(reagents.total_volume >= 5)
|
||||
fluid_mult = 0.5
|
||||
else
|
||||
fluid_mult = 1
|
||||
generate_milk()
|
||||
|
||||
/obj/item/organ/genital/breasts/proc/generate_milk()
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
var/fluid_transfer_factor = 0.0 //How much would a partner get in them if they climax using this?
|
||||
var/size = 2 //can vary between num or text, just used in icon_state strings
|
||||
var/fluid_id = null
|
||||
var/fluid_max_volume = 50
|
||||
var/fluid_max_volume = 15
|
||||
var/fluid_efficiency = 1
|
||||
var/fluid_rate = 1
|
||||
var/fluid_mult = 1
|
||||
@@ -230,6 +230,7 @@
|
||||
B.prev_size = B.size
|
||||
B.shape = dna.features["breasts_shape"]
|
||||
B.fluid_id = dna.features["breasts_fluid"]
|
||||
B.producing = dna.features["breasts_producing"]
|
||||
B.update()
|
||||
|
||||
|
||||
@@ -270,8 +271,8 @@
|
||||
switch(layer)
|
||||
if(GENITALS_BEHIND_LAYER)
|
||||
return "BEHIND"
|
||||
if(GENITALS_ADJ_LAYER)
|
||||
return "ADJ"
|
||||
/*if(GENITALS_ADJ_LAYER)
|
||||
return "ADJ"*/
|
||||
if(GENITALS_FRONT_LAYER)
|
||||
return "FRONT"
|
||||
|
||||
@@ -344,7 +345,7 @@
|
||||
if(HAS_TRAIT(H, TRAIT_HUSK))
|
||||
return
|
||||
var/list/genitals_to_add = list()
|
||||
var/list/relevant_layers = list(GENITALS_BEHIND_LAYER, GENITALS_ADJ_LAYER, GENITALS_FRONT_LAYER)
|
||||
var/list/relevant_layers = list(GENITALS_BEHIND_LAYER, GENITALS_FRONT_LAYER) //GENITALS_ADJ_LAYER removed
|
||||
var/list/standing = list()
|
||||
var/size
|
||||
var/aroused_state
|
||||
|
||||
@@ -16,14 +16,18 @@
|
||||
can_climax = TRUE
|
||||
var/sent_full_message = TRUE //defaults to 1 since they're full to start
|
||||
|
||||
/obj/item/organ/genital/testicles/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent(fluid_id, fluid_max_volume)
|
||||
|
||||
/obj/item/organ/genital/testicles/on_life()
|
||||
if(QDELETED(src))
|
||||
return
|
||||
if(reagents && producing)
|
||||
if(reagents.total_volume == 0) // Apparently, 0.015 gets rounded down to zero and no reagents are created if we don't start it with 0.1 in the tank.
|
||||
fluid_rate = 0.1
|
||||
else
|
||||
fluid_rate = CUM_RATE
|
||||
if(reagents.total_volume >= 5)
|
||||
fluid_mult = 0.5
|
||||
else
|
||||
fluid_mult = 1
|
||||
generate_cum()
|
||||
|
||||
/obj/item/organ/genital/testicles/proc/generate_cum()
|
||||
|
||||
@@ -9,14 +9,18 @@
|
||||
fluid_id = "femcum"
|
||||
producing = TRUE
|
||||
|
||||
/obj/item/organ/genital/womb/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent(fluid_id, fluid_max_volume)
|
||||
|
||||
/obj/item/organ/genital/womb/on_life()
|
||||
if(QDELETED(src))
|
||||
return
|
||||
if(reagents && producing)
|
||||
if(reagents.total_volume == 0) // Apparently, 0.015 gets rounded down to zero and no reagents are created if we don't start it with 0.1 in the tank.
|
||||
fluid_rate = 0.1
|
||||
else
|
||||
fluid_rate = CUM_RATE
|
||||
if(reagents.total_volume >= 5)
|
||||
fluid_mult = 0.5
|
||||
else
|
||||
fluid_mult = 1
|
||||
generate_femcum()
|
||||
|
||||
/obj/item/organ/genital/womb/proc/generate_femcum()
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
/datum/outfit/lavaknight/captain
|
||||
name ="Cydonian Knight Captain"
|
||||
l_pocket = /obj/item/twohanded/hypereutactic
|
||||
l_pocket = /obj/item/twohanded/dualsaber/hypereutactic
|
||||
|
||||
/datum/outfit/lavaknight/captain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
if(visualsOnly)
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
/obj/machinery/computer/cargo
|
||||
req_access = list(ACCESS_CARGO)
|
||||
|
||||
|
||||
/obj/machinery/computer/cargo/request
|
||||
req_access = list()
|
||||
|
||||
/obj/machinery/computer/cargo/emag_act(mob/user)
|
||||
req_access = list()
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/computer/cargo/ui_act(action, params, datum/tgui/ui)
|
||||
if(!allowed(usr))
|
||||
to_chat(usr, "<span class='notice'>Access denied.</span>")
|
||||
|
||||
@@ -220,13 +220,13 @@
|
||||
/datum/gear/torisword
|
||||
name = "Rainbow Zweihander"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/twohanded/hypereutactic/toy/rainbow
|
||||
path = /obj/item/twohanded/dualsaber/hypereutactic/toy/rainbow
|
||||
ckeywhitelist = list("annoymous35")
|
||||
|
||||
/datum/gear/darksabre
|
||||
name = "Dark Sabre"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/toy/sword/darksabre
|
||||
path = /obj/item/toy/darksabre
|
||||
ckeywhitelist = list("inferno707")
|
||||
|
||||
datum/gear/darksabresheath
|
||||
@@ -434,3 +434,17 @@ datum/gear/darksabresheath
|
||||
category = SLOT_NECK
|
||||
path = /obj/item/bedsheet/captain
|
||||
ckeywhitelist = list("tikibomb")
|
||||
|
||||
/datum/gear/borgplush
|
||||
name = "Robot Plush"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/toy/plush/borgplushie
|
||||
ckeywhitelist = list("nicholaiavenicci")
|
||||
|
||||
/datum/gear/donorberet
|
||||
name = "Atmos Beret"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/blueberet
|
||||
ckeywhitelist = list("foxystalin")
|
||||
|
||||
|
||||
|
||||
+21
-1
@@ -50,12 +50,32 @@ GLOBAL_LIST_EMPTY(loadout_whitelist_ids)
|
||||
var/path //item-to-spawn path
|
||||
var/cost = 1 //normally, each loadout costs a single point.
|
||||
var/geargroupID //defines the ID that the gear inherits from the config
|
||||
|
||||
//NEW DONATOR SYTSEM STUFF
|
||||
var/donoritem //autoset on new if null
|
||||
var/donator_group_id //New donator group ID system.
|
||||
//END
|
||||
|
||||
var/list/restricted_roles
|
||||
|
||||
//Old donator system/snowflake ckey whitelist, used for single ckeys/exceptions
|
||||
var/list/ckeywhitelist
|
||||
//END
|
||||
|
||||
var/restricted_desc
|
||||
|
||||
/datum/gear/New()
|
||||
..()
|
||||
if(isnull(donoritem))
|
||||
if(donator_group_id || ckeywhitelist)
|
||||
donoritem = TRUE
|
||||
if(!description && path)
|
||||
var/obj/O = path
|
||||
description = initial(O.desc)
|
||||
|
||||
//a comprehensive donator check proc is intentionally not implemented due to the fact that we (((might))) have job-whitelists for donator items in the future and I like to stay on the safe side.
|
||||
|
||||
//ckey only check
|
||||
/datum/gear/proc/donator_ckey_check(key)
|
||||
if(ckeywhitelist && ckeywhitelist.Find(key))
|
||||
return TRUE
|
||||
return IS_CKEY_DONATOR_GROUP(key, donator_group_id)
|
||||
@@ -79,8 +79,24 @@
|
||||
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
|
||||
/datum/gear/box
|
||||
name = "Spare box"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/storage/box
|
||||
cost = 2
|
||||
|
||||
/datum/gear/crowbar
|
||||
name = "Pocket Crowbar"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/crowbar
|
||||
cost = 2
|
||||
|
||||
/datum/gear/tapeplayer
|
||||
name = "Taperecorder"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/taperecorder
|
||||
|
||||
/datum/gear/tape
|
||||
name = "Spare cassette tape"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/tape/random
|
||||
@@ -65,6 +65,7 @@
|
||||
WRITE_FILE(S["feature_breasts_shape"], features["breasts_shape"])
|
||||
WRITE_FILE(S["feature_breasts_color"], features["breasts_color"])
|
||||
WRITE_FILE(S["feature_breasts_fluid"], features["breasts_fluid"])
|
||||
WRITE_FILE(S["feature_breasts_producing"], features["breasts_producing"])
|
||||
//vagina features
|
||||
WRITE_FILE(S["feature_has_vag"], features["has_vag"])
|
||||
WRITE_FILE(S["feature_vag_shape"], features["vag_shape"])
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
*//////////////////////////////////////////////////////////////////////////////////
|
||||
// <3 Nienhaus && Joan.
|
||||
// I made the Voy and DS9 stuff tho. - Poojy
|
||||
|
||||
// Armor lists for even Heads of Staff is Nulled out do round start armor as well most armor going onto the suit itself rather then a armor slot - Trilby
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/trek
|
||||
@@ -22,7 +23,7 @@
|
||||
desc = "The uniform worn by command officers in the mid 2260s."
|
||||
icon_state = "trek_command"
|
||||
item_state = "trek_command"
|
||||
armor = list("melee" = 10, "bullet" = 10, "laser" = 10,"energy" = 10, "bomb" = 0, "bio" = 10, "rad" = 10, "fire" = 0, "acid" = 0) // Considering only staff heads get to pick it
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/trek/engsec
|
||||
name = "Operations Uniform"
|
||||
@@ -104,7 +105,7 @@
|
||||
/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)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
/obj/item/clothing/suit/storage/trek/ds9/admiral // Only for adminuz
|
||||
name = "Admiral Overcoat"
|
||||
@@ -135,7 +136,6 @@
|
||||
/obj/item/clothing/suit/storage/fluff/fedcoat
|
||||
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'
|
||||
icon_state = "fedcoat"
|
||||
@@ -160,7 +160,7 @@
|
||||
/obj/item/reagent_containers/glass/beaker,
|
||||
/obj/item/storage/pill_bottle,
|
||||
/obj/item/taperecorder)
|
||||
armor = list("melee" = 10, "bullet" = 5, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 5, "rad" = 10, "fire" = 10, "acid" = 0)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
var/unbuttoned = 0
|
||||
|
||||
verb/toggle()
|
||||
@@ -214,7 +214,7 @@
|
||||
/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)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
//Variants
|
||||
/obj/item/clothing/suit/storage/fluff/modernfedcoat/medsci
|
||||
@@ -231,6 +231,7 @@
|
||||
|
||||
/obj/item/clothing/head/caphat/formal/fedcover
|
||||
name = "Federation Officer's Cap"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
desc = "An officer's cap that demands discipline from the one who wears it."
|
||||
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
|
||||
icon_state = "fedcapofficer"
|
||||
|
||||
@@ -43,8 +43,8 @@
|
||||
icon_state = "bb_turtle"
|
||||
item_state = "w_suit"
|
||||
item_color = "bb_turtle"
|
||||
body_parts_covered = CHEST|ARMS
|
||||
can_adjust = 1
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
can_adjust = TRUE
|
||||
icon = 'modular_citadel/icons/obj/clothing/turtlenecks.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
@@ -5,26 +5,6 @@
|
||||
*//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/security/skirt
|
||||
name = "security skirt"
|
||||
desc = "A tactical security skirt for officers complete with Nanotrasen belt buckle."
|
||||
icon = 'modular_citadel/icons/obj/clothing/cit_clothes.dmi'
|
||||
icon_state = "secskirt"
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
item_state = "r_suit"
|
||||
item_color = "secskirt"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_security/skirt
|
||||
name = "head of security's skirt"
|
||||
desc = "A security skirt decorated for those few with the dedication to achieve the position of Head of Security."
|
||||
icon = 'modular_citadel/icons/obj/clothing/cit_clothes.dmi'
|
||||
icon_state = "hosskirt"
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
item_state = "gy_suit"
|
||||
item_color = "hosskirt"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
|
||||
/obj/item/clothing/under/corporateuniform
|
||||
name = "corporate uniform"
|
||||
desc = "A comfortable, tight fitting jumpsuit made of premium materials. Not space-proof."
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
item_color = "steele"
|
||||
medaltype = "medal-silver"
|
||||
|
||||
/obj/item/toy/sword/darksabre
|
||||
/obj/item/toy/darksabre
|
||||
name = "Kiara's Sabre"
|
||||
desc = "This blade looks as dangerous as its owner."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
@@ -58,9 +58,13 @@
|
||||
item_state = "darksabre"
|
||||
lefthand_file = 'modular_citadel/icons/mob/inhands/stunsword_left.dmi'
|
||||
righthand_file = 'modular_citadel/icons/mob/inhands/stunsword_right.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
|
||||
/obj/item/toy/darksabre/get_belt_overlay()
|
||||
return mutable_appearance('icons/obj/custom.dmi', "darksheath-darksabre")
|
||||
|
||||
/obj/item/toy/darksabre/get_worn_belt_overlay(icon_file)
|
||||
return mutable_appearance(icon_file, "darksheath-darksabre")
|
||||
|
||||
/obj/item/storage/belt/sabre/darksabre
|
||||
name = "Ornate Sheathe"
|
||||
@@ -69,32 +73,8 @@
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
icon_state = "darksheath"
|
||||
item_state = "darksheath"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
|
||||
/obj/item/storage/belt/sabre/darksabre/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.max_items = 1
|
||||
STR.rustle_sound = FALSE
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY
|
||||
STR.can_hold = typecacheof(list(
|
||||
/obj/item/toy/sword/darksabre
|
||||
))
|
||||
|
||||
/obj/item/storage/belt/sabre/darksabre/update_icon()
|
||||
icon_state = "darksheath"
|
||||
item_state = "darksheath"
|
||||
if(contents.len)
|
||||
icon_state += "-darksabre"
|
||||
item_state += "-darksabre"
|
||||
if(loc && isliving(loc))
|
||||
var/mob/living/L = loc
|
||||
L.regenerate_icons()
|
||||
..()
|
||||
|
||||
/obj/item/storage/belt/sabre/darksabre/PopulateContents()
|
||||
new /obj/item/toy/sword/darksabre(src)
|
||||
update_icon()
|
||||
fitting_swords = list(/obj/item/toy/darksabre)
|
||||
starting_sword = /obj/item/toy/darksabre
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/darkcarapace
|
||||
name = "Dark Armor"
|
||||
@@ -342,31 +322,6 @@
|
||||
name = "worn pet collar"
|
||||
desc = "a pet collar that looks well used."
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/examine(mob/user)
|
||||
. = ..()
|
||||
if(usr.ckey != "technicalmagi")
|
||||
to_chat(user, "There's something odd about the it. You probably shouldn't wear it...")//warn people not to wear it if they're not Naomi, lest they become as crazy as she is
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/equipped()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/dropped()
|
||||
. = ..()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/process()
|
||||
var/mob/living/carbon/human/H
|
||||
if(ishuman(loc))
|
||||
H = loc
|
||||
if(!H)
|
||||
return
|
||||
else if(H.get_item_by_slot(SLOT_NECK) == src)
|
||||
if(H.arousalloss < H.max_arousal / 3)
|
||||
H.arousalloss = H.max_arousal / 3
|
||||
if(prob(5) && H.hallucination < 15)
|
||||
H.hallucination += 10
|
||||
|
||||
/obj/item/clothing/neck/cloak/green
|
||||
name = "Generic Green Cloak"
|
||||
desc = "This cloak doesn't seem too special."
|
||||
@@ -528,3 +483,11 @@
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/head/blueberet
|
||||
name = "Atmos Beret"
|
||||
desc = "A fitted beret designed to be worn by Atmos Techs."
|
||||
icon_state = "blueberet"
|
||||
item_state = "blueberet"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
/datum/job/hop
|
||||
minimal_player_age = 20
|
||||
head_announce = list("Service")
|
||||
exp_type_department = EXP_TYPE_SERVICE
|
||||
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
set category = "Mentor"
|
||||
set name = "Mentor PM"
|
||||
if(!is_mentor())
|
||||
to_chat(src, "<font color='red'>Error: Mentor-PM-Panel: Only Mentors and Admins may use this command.</font>")
|
||||
to_chat(src, "<span class='danger'>Error: Mentor-PM-Panel: Only Mentors and Admins may use this command.</span>")
|
||||
return
|
||||
var/list/client/targets[0]
|
||||
for(var/client/T)
|
||||
@@ -27,24 +27,24 @@
|
||||
else if(istype(whom,/client))
|
||||
C = whom
|
||||
if(!C)
|
||||
if(is_mentor()) to_chat(src, "<font color='red'>Error: Mentor-PM: Client not found.</font>")
|
||||
if(is_mentor()) to_chat(src, "<span class='danger'>Error: Mentor-PM: Client not found.</span>")
|
||||
else mentorhelp(msg) //Mentor we are replying to left. Mentorhelp instead(check below)
|
||||
return
|
||||
|
||||
if(is_mentor(whom))
|
||||
to_chat(GLOB.admins | GLOB.mentors, "<font color='purple'>[src] has started replying to [whom]'s mhelp.</font color>")
|
||||
to_chat(GLOB.admins | GLOB.mentors, "<font color='purple'>[src] has started replying to [whom]'s mhelp.</font>")
|
||||
|
||||
//get message text, limit it's length.and clean/escape html
|
||||
if(!msg)
|
||||
msg = input(src,"Message:", "Private message") as text|null
|
||||
|
||||
|
||||
if(!msg && is_mentor(whom))
|
||||
to_chat(GLOB.admins | GLOB.mentors, "<font color='purple'>[src] has stopped their reply to [whom]'s mhelp.</font color>")
|
||||
to_chat(GLOB.admins | GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
|
||||
return
|
||||
|
||||
if(!C)
|
||||
if(is_mentor())
|
||||
to_chat(src, "<font color='red'>Error: Mentor-PM: Client not found.</font>")
|
||||
to_chat(src, "<span class='danger'>Error: Mentor-PM: Client not found.</span>")
|
||||
else
|
||||
mentorhelp(msg) //Mentor we are replying to has vanished, Mentorhelp instead (how the fuck does this work?let's hope it works,shrug)
|
||||
return
|
||||
@@ -54,8 +54,8 @@
|
||||
return
|
||||
|
||||
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
|
||||
if(!msg && is_mentor(whom))
|
||||
to_chat(GLOB.admins | GLOB.mentors, "<font color='purple'>[src] has stopped their reply to [whom]'s mhelp.</font color>")
|
||||
if(!msg && is_mentor(whom))
|
||||
to_chat(GLOB.admins | GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
|
||||
return
|
||||
|
||||
log_mentor("Mentor PM: [key_name(src)]->[key_name(C)]: [msg]")
|
||||
@@ -65,21 +65,21 @@
|
||||
var/show_char = CONFIG_GET(flag/mentors_mobname_only)
|
||||
if(C.is_mentor())
|
||||
if(is_mentor())//both are mentors
|
||||
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, 0)]</b>: [msg]</font>")
|
||||
to_chat(C, "<span class='purple'>Mentor PM from-<b>[key_name_mentor(src, C, 1, 0, 0)]</b>: [msg]</span>")
|
||||
to_chat(src, "<span class='green'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, 0)]</b>: [msg]</font>")
|
||||
|
||||
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='brown'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, 0)]</b>: [msg]</font>")
|
||||
else //recipient is a mentor but sender is not
|
||||
to_chat(C, "<span class='purple'>Reply PM from-<b>[key_name_mentor(src, C, 1, 0, show_char)]</b>: [msg]</span>")
|
||||
to_chat(src, "<span class='pink'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, 0)]</b>: [msg]</span>")
|
||||
|
||||
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='brown'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, show_char)]</b>: [msg]</font>")
|
||||
if(is_mentor()) //sender is a mentor but recipient is not.
|
||||
to_chat(C, "<span class='purple'>Mentor PM from-<b>[key_name_mentor(src, C, 1, 0, 0)]</b>: [msg]</span>")
|
||||
to_chat(src, "<span class='pink'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, show_char)]</b>: [msg]</span>")
|
||||
|
||||
//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='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
|
||||
to_chat(X, "<B><span class='pink'>Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]:</span></B> <span class='blue'>[msg]</span>") //inform X
|
||||
|
||||
@@ -185,22 +185,6 @@
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
restraint_check = TRUE
|
||||
|
||||
|
||||
|
||||
/datum/emote/living/dab/run_emote(mob/living/user, params)
|
||||
if (ishuman(user))
|
||||
var/def_zone = BODY_ZONE_CHEST
|
||||
var/luck = (rand(1,100))
|
||||
if(luck >= 65)
|
||||
user.adjustStaminaLoss(70)
|
||||
if(luck >= 80)
|
||||
def_zone = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
|
||||
user.apply_damage(20, BRUTE, def_zone)
|
||||
if(luck >= 95)
|
||||
user.adjustBrainLoss(100)
|
||||
. = ..()
|
||||
|
||||
|
||||
/datum/emote/living/mothsqueak
|
||||
key = "msqueak"
|
||||
key_third_person = "lets out a tiny squeak"
|
||||
|
||||
@@ -18,3 +18,21 @@
|
||||
if(recoveringstam && amount > 20)
|
||||
incomingstammult = max(0.01, incomingstammult/(amount*0.05))
|
||||
return amount
|
||||
|
||||
/mob/living/carbon/doSprintLossTiles(tiles)
|
||||
doSprintBufferRegen(FALSE) //first regen.
|
||||
if(sprint_buffer)
|
||||
var/use = min(tiles, sprint_buffer)
|
||||
sprint_buffer -= use
|
||||
tiles -= use
|
||||
update_hud_sprint_bar()
|
||||
if(!tiles) //we had enough, we're done!
|
||||
return
|
||||
adjustStaminaLoss(tiles * sprint_stamina_cost) //use stamina to cover deficit.
|
||||
|
||||
/mob/living/carbon/proc/doSprintBufferRegen(updating = TRUE)
|
||||
var/diff = world.time - sprint_buffer_regen_last
|
||||
sprint_buffer_regen_last = world.time
|
||||
sprint_buffer = min(sprint_buffer_max, sprint_buffer + sprint_buffer_regen_ds * diff)
|
||||
if(updating)
|
||||
update_hud_sprint_bar()
|
||||
|
||||
@@ -13,18 +13,19 @@
|
||||
/mob/living/carbon/human/species/xeno
|
||||
race = /datum/species/xeno
|
||||
|
||||
/mob/living/carbon/human/resist()
|
||||
. = ..()
|
||||
if(wear_suit && wear_suit.breakouttime)//added in human cuff breakout proc
|
||||
/mob/living/proc/resist_embedded()
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/resist_embedded()
|
||||
if(handcuffed || legcuffed || (wear_suit && wear_suit.breakouttime))
|
||||
return
|
||||
if(.)
|
||||
if(canmove && !on_fire)
|
||||
for(var/obj/item/bodypart/L in bodyparts)
|
||||
if(istype(L) && L.embedded_objects.len)
|
||||
for(var/obj/item/I in L.embedded_objects)
|
||||
if(istype(I) && I.w_class >= WEIGHT_CLASS_NORMAL) //minimum weight class to insta-ripout via resist
|
||||
remove_embedded_unsafe(L, I, src, 1.5) //forcefully call the remove embedded unsafe proc but with extra pain multiplier. if you want to remove it less painfully, examine and remove it carefully.
|
||||
return FALSE //Hands are occupied
|
||||
if(canmove && !on_fire)
|
||||
for(var/obj/item/bodypart/L in bodyparts)
|
||||
if(istype(L) && L.embedded_objects.len)
|
||||
for(var/obj/item/I in L.embedded_objects)
|
||||
if(istype(I) && I.w_class >= WEIGHT_CLASS_NORMAL) //minimum weight class to insta-ripout via resist
|
||||
remove_embedded_unsafe(L, I, src, 1.5) //forcefully call the remove embedded unsafe proc but with extra pain multiplier. if you want to remove it less painfully, examine and remove it carefully.
|
||||
return TRUE //Hands are occupied
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/remove_embedded_unsafe(obj/item/bodypart/L, obj/item/I, mob/user, painmul = 1)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
var/oldpseudoheight = pseudo_z_axis
|
||||
. = ..()
|
||||
if(. && sprinting && !(movement_type & FLYING) && canmove && !resting && m_intent == MOVE_INTENT_RUN && has_gravity(loc) && !pulledby)
|
||||
adjustStaminaLossBuffered(0.3)
|
||||
doSprintLossTiles(1)
|
||||
if((oldpseudoheight - pseudo_z_axis) >= 8)
|
||||
to_chat(src, "<span class='warning'>You trip off of the elevated surface!</span>")
|
||||
for(var/obj/item/I in held_items)
|
||||
|
||||
@@ -80,10 +80,23 @@
|
||||
else
|
||||
target.Move(target_shove_turf, shove_dir)
|
||||
if(get_turf(target) == target_oldturf)
|
||||
target_table = locate(/obj/structure/table) in target_shove_turf.contents
|
||||
shove_blocked = TRUE
|
||||
if(target_shove_turf.density)
|
||||
shove_blocked = TRUE
|
||||
else
|
||||
var/thoushallnotpass = FALSE
|
||||
for(var/obj/O in target_shove_turf)
|
||||
if(istype(O, /obj/structure/table))
|
||||
target_table = O
|
||||
else if(!O.CanPass(src, target_shove_turf))
|
||||
shove_blocked = TRUE
|
||||
thoushallnotpass = TRUE
|
||||
if(thoushallnotpass)
|
||||
target_table = null
|
||||
|
||||
if(shove_blocked && !target.is_shove_knockdown_blocked())
|
||||
if(target.is_shove_knockdown_blocked())
|
||||
return
|
||||
|
||||
if(shove_blocked || target_table)
|
||||
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
|
||||
var/target_turf = get_turf(target)
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
say_mod = "says"
|
||||
hair_color = "mutcolor"
|
||||
hair_alpha = 160 //a notch brighter so it blends better.
|
||||
liked_food = MEAT
|
||||
coldmod = 3
|
||||
heatmod = 1
|
||||
burnmod = 1
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
/mob/living/carbon/Life()
|
||||
. = ..()
|
||||
doSprintBufferRegen()
|
||||
@@ -1,2 +1,5 @@
|
||||
/mob/living/proc/adjustStaminaLossBuffered(amount, updating_stamina = TRUE, forced = FALSE)
|
||||
return
|
||||
|
||||
/mob/living/proc/doSprintLossTiles(amount)
|
||||
return
|
||||
|
||||
@@ -8,6 +8,14 @@
|
||||
var/intentionalresting = FALSE
|
||||
var/attemptingcrawl = FALSE
|
||||
|
||||
//Sprint buffer---
|
||||
var/sprint_buffer = 42 //Tiles
|
||||
var/sprint_buffer_max = 42
|
||||
var/sprint_buffer_regen_ds = 0.3 //Tiles per world.time decisecond
|
||||
var/sprint_buffer_regen_last = 0 //last world.time this was regen'd for math.
|
||||
var/sprint_stamina_cost = 0.55 //stamina loss per tile while insufficient sprint buffer.
|
||||
//---End
|
||||
|
||||
/mob/living/movement_delay(ignorewalk = 0)
|
||||
. = ..()
|
||||
if(resting)
|
||||
@@ -118,3 +126,7 @@
|
||||
filters -= CIT_FILTER_STAMINACRIT
|
||||
update_canmove()
|
||||
update_health_hud()
|
||||
|
||||
/mob/living/proc/update_hud_sprint_bar()
|
||||
if(hud_used && hud_used.sprint_buffer)
|
||||
hud_used.sprint_buffer.update_to_mob(src)
|
||||
|
||||
@@ -0,0 +1,633 @@
|
||||
// List is required to compile the resources into the game when it loads.
|
||||
// Dynamically loading it has bad results with sounds overtaking each other, even with the wait variable.
|
||||
#ifdef AI_VOX
|
||||
|
||||
GLOBAL_LIST_INIT(vox_sounds_male, list("," = 'modular_citadel/sound/vox/_comma.ogg',
|
||||
"." = 'modular_citadel/sound/vox/_period.ogg',
|
||||
"a" = 'modular_citadel/sound/vox/a.ogg',
|
||||
"accelerating" = 'modular_citadel/sound/vox/accelerating.ogg',
|
||||
"accelerator" = 'modular_citadel/sound/vox/accelerator.ogg',
|
||||
"accepted" = 'modular_citadel/sound/vox/accepted.ogg',
|
||||
"access" = 'modular_citadel/sound/vox/access.ogg',
|
||||
"acknowledge" = 'modular_citadel/sound/vox/acknowledge.ogg',
|
||||
"acknowledged" = 'modular_citadel/sound/vox/acknowledged.ogg',
|
||||
"acquired" = 'modular_citadel/sound/vox/acquired.ogg',
|
||||
"acquisition" = 'modular_citadel/sound/vox/acquisition.ogg',
|
||||
"across" = 'modular_citadel/sound/vox/across.ogg',
|
||||
"activate" = 'modular_citadel/sound/vox/activate.ogg',
|
||||
"activated" = 'modular_citadel/sound/vox/activated.ogg',
|
||||
"activity" = 'modular_citadel/sound/vox/activity.ogg',
|
||||
"adios" = 'modular_citadel/sound/vox/adios.ogg',
|
||||
"administration" = 'modular_citadel/sound/vox/administration.ogg',
|
||||
"advanced" = 'modular_citadel/sound/vox/advanced.ogg',
|
||||
"after" = 'modular_citadel/sound/vox/after.ogg',
|
||||
"agent" = 'modular_citadel/sound/vox/agent.ogg',
|
||||
"alarm" = 'modular_citadel/sound/vox/alarm.ogg',
|
||||
"alert" = 'modular_citadel/sound/vox/alert.ogg',
|
||||
"alien" = 'modular_citadel/sound/vox/alien.ogg',
|
||||
"aligned" = 'modular_citadel/sound/vox/aligned.ogg',
|
||||
"all" = 'modular_citadel/sound/vox/all.ogg',
|
||||
"alpha" = 'modular_citadel/sound/vox/alpha.ogg',
|
||||
"am" = 'modular_citadel/sound/vox/am.ogg',
|
||||
"amigo" = 'modular_citadel/sound/vox/amigo.ogg',
|
||||
"ammunition" = 'modular_citadel/sound/vox/ammunition.ogg',
|
||||
"an" = 'modular_citadel/sound/vox/an.ogg',
|
||||
"and" = 'modular_citadel/sound/vox/and.ogg',
|
||||
"announcement" = 'modular_citadel/sound/vox/announcement.ogg',
|
||||
"anomalous" = 'modular_citadel/sound/vox/anomalous.ogg',
|
||||
"antenna" = 'modular_citadel/sound/vox/antenna.ogg',
|
||||
"any" = 'modular_citadel/sound/vox/any.ogg',
|
||||
"apprehend" = 'modular_citadel/sound/vox/apprehend.ogg',
|
||||
"approach" = 'modular_citadel/sound/vox/approach.ogg',
|
||||
"are" = 'modular_citadel/sound/vox/are.ogg',
|
||||
"area" = 'modular_citadel/sound/vox/area.ogg',
|
||||
"arm" = 'modular_citadel/sound/vox/arm.ogg',
|
||||
"armed" = 'modular_citadel/sound/vox/armed.ogg',
|
||||
"armor" = 'modular_citadel/sound/vox/armor.ogg',
|
||||
"armory" = 'modular_citadel/sound/vox/armory.ogg',
|
||||
"arrest" = 'modular_citadel/sound/vox/arrest.ogg',
|
||||
"ass" = 'modular_citadel/sound/vox/ass.ogg',
|
||||
"at" = 'modular_citadel/sound/vox/at.ogg',
|
||||
"atomic" = 'modular_citadel/sound/vox/atomic.ogg',
|
||||
"attention" = 'modular_citadel/sound/vox/attention.ogg',
|
||||
"authorize" = 'modular_citadel/sound/vox/authorize.ogg',
|
||||
"authorized" = 'modular_citadel/sound/vox/authorized.ogg',
|
||||
"automatic" = 'modular_citadel/sound/vox/automatic.ogg',
|
||||
"away" = 'modular_citadel/sound/vox/away.ogg',
|
||||
"b" = 'modular_citadel/sound/vox/b.ogg',
|
||||
"back" = 'modular_citadel/sound/vox/back.ogg',
|
||||
"backman" = 'modular_citadel/sound/vox/backman.ogg',
|
||||
"bad" = 'modular_citadel/sound/vox/bad.ogg',
|
||||
"bag" = 'modular_citadel/sound/vox/bag.ogg',
|
||||
"bailey" = 'modular_citadel/sound/vox/bailey.ogg',
|
||||
"barracks" = 'modular_citadel/sound/vox/barracks.ogg',
|
||||
"base" = 'modular_citadel/sound/vox/base.ogg',
|
||||
"bay" = 'modular_citadel/sound/vox/bay.ogg',
|
||||
"be" = 'modular_citadel/sound/vox/be.ogg',
|
||||
"been" = 'modular_citadel/sound/vox/been.ogg',
|
||||
"before" = 'modular_citadel/sound/vox/before.ogg',
|
||||
"beyond" = 'modular_citadel/sound/vox/beyond.ogg',
|
||||
"biohazard" = 'modular_citadel/sound/vox/biohazard.ogg',
|
||||
"biological" = 'modular_citadel/sound/vox/biological.ogg',
|
||||
"birdwell" = 'modular_citadel/sound/vox/birdwell.ogg',
|
||||
"bizwarn" = 'modular_citadel/sound/vox/bizwarn.ogg',
|
||||
"black" = 'modular_citadel/sound/vox/black.ogg',
|
||||
"blast" = 'modular_citadel/sound/vox/blast.ogg',
|
||||
"blocked" = 'modular_citadel/sound/vox/blocked.ogg',
|
||||
"bloop" = 'modular_citadel/sound/vox/bloop.ogg',
|
||||
"blue" = 'modular_citadel/sound/vox/blue.ogg',
|
||||
"bottom" = 'modular_citadel/sound/vox/bottom.ogg',
|
||||
"bravo" = 'modular_citadel/sound/vox/bravo.ogg',
|
||||
"breach" = 'modular_citadel/sound/vox/breach.ogg',
|
||||
"breached" = 'modular_citadel/sound/vox/breached.ogg',
|
||||
"break" = 'modular_citadel/sound/vox/break.ogg',
|
||||
"bridge" = 'modular_citadel/sound/vox/bridge.ogg',
|
||||
"bust" = 'modular_citadel/sound/vox/bust.ogg',
|
||||
"but" = 'modular_citadel/sound/vox/but.ogg',
|
||||
"button" = 'modular_citadel/sound/vox/button.ogg',
|
||||
"buzwarn" = 'modular_citadel/sound/vox/buzwarn.ogg',
|
||||
"bypass" = 'modular_citadel/sound/vox/bypass.ogg',
|
||||
"c" = 'modular_citadel/sound/vox/c.ogg',
|
||||
"cable" = 'modular_citadel/sound/vox/cable.ogg',
|
||||
"call" = 'modular_citadel/sound/vox/call.ogg',
|
||||
"called" = 'modular_citadel/sound/vox/called.ogg',
|
||||
"canal" = 'modular_citadel/sound/vox/canal.ogg',
|
||||
"cap" = 'modular_citadel/sound/vox/cap.ogg',
|
||||
"captain" = 'modular_citadel/sound/vox/captain.ogg',
|
||||
"capture" = 'modular_citadel/sound/vox/capture.ogg',
|
||||
"captured" = 'modular_citadel/sound/vox/captured.ogg',
|
||||
"ceiling" = 'modular_citadel/sound/vox/ceiling.ogg',
|
||||
"celsius" = 'modular_citadel/sound/vox/celsius.ogg',
|
||||
"center" = 'modular_citadel/sound/vox/center.ogg',
|
||||
"centi" = 'modular_citadel/sound/vox/centi.ogg',
|
||||
"central" = 'modular_citadel/sound/vox/central.ogg',
|
||||
"chamber" = 'modular_citadel/sound/vox/chamber.ogg',
|
||||
"charlie" = 'modular_citadel/sound/vox/charlie.ogg',
|
||||
"check" = 'modular_citadel/sound/vox/check.ogg',
|
||||
"checkpoint" = 'modular_citadel/sound/vox/checkpoint.ogg',
|
||||
"chemical" = 'modular_citadel/sound/vox/chemical.ogg',
|
||||
"cleanup" = 'modular_citadel/sound/vox/cleanup.ogg',
|
||||
"clear" = 'modular_citadel/sound/vox/clear.ogg',
|
||||
"clearance" = 'modular_citadel/sound/vox/clearance.ogg',
|
||||
"close" = 'modular_citadel/sound/vox/close.ogg',
|
||||
"clown" = 'modular_citadel/sound/vox/clown.ogg',
|
||||
"code" = 'modular_citadel/sound/vox/code.ogg',
|
||||
"coded" = 'modular_citadel/sound/vox/coded.ogg',
|
||||
"collider" = 'modular_citadel/sound/vox/collider.ogg',
|
||||
"command" = 'modular_citadel/sound/vox/command.ogg',
|
||||
"communication" = 'modular_citadel/sound/vox/communication.ogg',
|
||||
"complex" = 'modular_citadel/sound/vox/complex.ogg',
|
||||
"computer" = 'modular_citadel/sound/vox/computer.ogg',
|
||||
"condition" = 'modular_citadel/sound/vox/condition.ogg',
|
||||
"containment" = 'modular_citadel/sound/vox/containment.ogg',
|
||||
"contamination" = 'modular_citadel/sound/vox/contamination.ogg',
|
||||
"control" = 'modular_citadel/sound/vox/control.ogg',
|
||||
"coolant" = 'modular_citadel/sound/vox/coolant.ogg',
|
||||
"coomer" = 'modular_citadel/sound/vox/coomer.ogg',
|
||||
"core" = 'modular_citadel/sound/vox/core.ogg',
|
||||
"correct" = 'modular_citadel/sound/vox/correct.ogg',
|
||||
"corridor" = 'modular_citadel/sound/vox/corridor.ogg',
|
||||
"crew" = 'modular_citadel/sound/vox/crew.ogg',
|
||||
"cross" = 'modular_citadel/sound/vox/cross.ogg',
|
||||
"cryogenic" = 'modular_citadel/sound/vox/cryogenic.ogg',
|
||||
"d" = 'modular_citadel/sound/vox/d.ogg',
|
||||
"dadeda" = 'modular_citadel/sound/vox/dadeda.ogg',
|
||||
"damage" = 'modular_citadel/sound/vox/damage.ogg',
|
||||
"damaged" = 'modular_citadel/sound/vox/damaged.ogg',
|
||||
"danger" = 'modular_citadel/sound/vox/danger.ogg',
|
||||
"day" = 'modular_citadel/sound/vox/day.ogg',
|
||||
"deactivated" = 'modular_citadel/sound/vox/deactivated.ogg',
|
||||
"decompression" = 'modular_citadel/sound/vox/decompression.ogg',
|
||||
"decontamination" = 'modular_citadel/sound/vox/decontamination.ogg',
|
||||
"deeoo" = 'modular_citadel/sound/vox/deeoo.ogg',
|
||||
"defense" = 'modular_citadel/sound/vox/defense.ogg',
|
||||
"degrees" = 'modular_citadel/sound/vox/degrees.ogg',
|
||||
"delta" = 'modular_citadel/sound/vox/delta.ogg',
|
||||
"denied" = 'modular_citadel/sound/vox/denied.ogg',
|
||||
"deploy" = 'modular_citadel/sound/vox/deploy.ogg',
|
||||
"deployed" = 'modular_citadel/sound/vox/deployed.ogg',
|
||||
"destroy" = 'modular_citadel/sound/vox/destroy.ogg',
|
||||
"destroyed" = 'modular_citadel/sound/vox/destroyed.ogg',
|
||||
"detain" = 'modular_citadel/sound/vox/detain.ogg',
|
||||
"detected" = 'modular_citadel/sound/vox/detected.ogg',
|
||||
"detonation" = 'modular_citadel/sound/vox/detonation.ogg',
|
||||
"device" = 'modular_citadel/sound/vox/device.ogg',
|
||||
"did" = 'modular_citadel/sound/vox/did.ogg',
|
||||
"die" = 'modular_citadel/sound/vox/die.ogg',
|
||||
"dimensional" = 'modular_citadel/sound/vox/dimensional.ogg',
|
||||
"dirt" = 'modular_citadel/sound/vox/dirt.ogg',
|
||||
"disengaged" = 'modular_citadel/sound/vox/disengaged.ogg',
|
||||
"dish" = 'modular_citadel/sound/vox/dish.ogg',
|
||||
"disposal" = 'modular_citadel/sound/vox/disposal.ogg',
|
||||
"distance" = 'modular_citadel/sound/vox/distance.ogg',
|
||||
"distortion" = 'modular_citadel/sound/vox/distortion.ogg',
|
||||
"do" = 'modular_citadel/sound/vox/do.ogg',
|
||||
"doctor" = 'modular_citadel/sound/vox/doctor.ogg',
|
||||
"doop" = 'modular_citadel/sound/vox/doop.ogg',
|
||||
"door" = 'modular_citadel/sound/vox/door.ogg',
|
||||
"down" = 'modular_citadel/sound/vox/down.ogg',
|
||||
"dual" = 'modular_citadel/sound/vox/dual.ogg',
|
||||
"duct" = 'modular_citadel/sound/vox/duct.ogg',
|
||||
"e" = 'modular_citadel/sound/vox/e.ogg',
|
||||
"east" = 'modular_citadel/sound/vox/east.ogg',
|
||||
"echo" = 'modular_citadel/sound/vox/echo.ogg',
|
||||
"ed" = 'modular_citadel/sound/vox/ed.ogg',
|
||||
"effect" = 'modular_citadel/sound/vox/effect.ogg',
|
||||
"egress" = 'modular_citadel/sound/vox/egress.ogg',
|
||||
"eight" = 'modular_citadel/sound/vox/eight.ogg',
|
||||
"eighteen" = 'modular_citadel/sound/vox/eighteen.ogg',
|
||||
"eighty" = 'modular_citadel/sound/vox/eighty.ogg',
|
||||
"electric" = 'modular_citadel/sound/vox/electric.ogg',
|
||||
"electromagnetic" = 'modular_citadel/sound/vox/electromagnetic.ogg',
|
||||
"elevator" = 'modular_citadel/sound/vox/elevator.ogg',
|
||||
"eleven" = 'modular_citadel/sound/vox/eleven.ogg',
|
||||
"eliminate" = 'modular_citadel/sound/vox/eliminate.ogg',
|
||||
"emergency" = 'modular_citadel/sound/vox/emergency.ogg',
|
||||
"enemy" = 'modular_citadel/sound/vox/enemy.ogg',
|
||||
"energy" = 'modular_citadel/sound/vox/energy.ogg',
|
||||
"engage" = 'modular_citadel/sound/vox/engage.ogg',
|
||||
"engaged" = 'modular_citadel/sound/vox/engaged.ogg',
|
||||
"engine" = 'modular_citadel/sound/vox/engine.ogg',
|
||||
"enter" = 'modular_citadel/sound/vox/enter.ogg',
|
||||
"entry" = 'modular_citadel/sound/vox/entry.ogg',
|
||||
"environment" = 'modular_citadel/sound/vox/environment.ogg',
|
||||
"error" = 'modular_citadel/sound/vox/error.ogg',
|
||||
"escape" = 'modular_citadel/sound/vox/escape.ogg',
|
||||
"evacuate" = 'modular_citadel/sound/vox/evacuate.ogg',
|
||||
"exchange" = 'modular_citadel/sound/vox/exchange.ogg',
|
||||
"exit" = 'modular_citadel/sound/vox/exit.ogg',
|
||||
"expect" = 'modular_citadel/sound/vox/expect.ogg',
|
||||
"experiment" = 'modular_citadel/sound/vox/experiment.ogg',
|
||||
"experimental" = 'modular_citadel/sound/vox/experimental.ogg',
|
||||
"explode" = 'modular_citadel/sound/vox/explode.ogg',
|
||||
"explosion" = 'modular_citadel/sound/vox/explosion.ogg',
|
||||
"exposure" = 'modular_citadel/sound/vox/exposure.ogg',
|
||||
"exterminate" = 'modular_citadel/sound/vox/exterminate.ogg',
|
||||
"extinguish" = 'modular_citadel/sound/vox/extinguish.ogg',
|
||||
"extinguisher" = 'modular_citadel/sound/vox/extinguisher.ogg',
|
||||
"extreme" = 'modular_citadel/sound/vox/extreme.ogg',
|
||||
"f" = 'modular_citadel/sound/vox/f.ogg',
|
||||
"face" = 'modular_citadel/sound/vox/face.ogg',
|
||||
"facility" = 'modular_citadel/sound/vox/facility.ogg',
|
||||
"fahrenheit" = 'modular_citadel/sound/vox/fahrenheit.ogg',
|
||||
"failed" = 'modular_citadel/sound/vox/failed.ogg',
|
||||
"failure" = 'modular_citadel/sound/vox/failure.ogg',
|
||||
"farthest" = 'modular_citadel/sound/vox/farthest.ogg',
|
||||
"fast" = 'modular_citadel/sound/vox/fast.ogg',
|
||||
"feet" = 'modular_citadel/sound/vox/feet.ogg',
|
||||
"field" = 'modular_citadel/sound/vox/field.ogg',
|
||||
"fifteen" = 'modular_citadel/sound/vox/fifteen.ogg',
|
||||
"fifth" = 'modular_citadel/sound/vox/fifth.ogg',
|
||||
"fifty" = 'modular_citadel/sound/vox/fifty.ogg',
|
||||
"final" = 'modular_citadel/sound/vox/final.ogg',
|
||||
"fine" = 'modular_citadel/sound/vox/fine.ogg',
|
||||
"fire" = 'modular_citadel/sound/vox/fire.ogg',
|
||||
"first" = 'modular_citadel/sound/vox/first.ogg',
|
||||
"five" = 'modular_citadel/sound/vox/five.ogg',
|
||||
"flag" = 'modular_citadel/sound/vox/flag.ogg',
|
||||
"flooding" = 'modular_citadel/sound/vox/flooding.ogg',
|
||||
"floor" = 'modular_citadel/sound/vox/floor.ogg',
|
||||
"fool" = 'modular_citadel/sound/vox/fool.ogg',
|
||||
"for" = 'modular_citadel/sound/vox/for.ogg',
|
||||
"forbidden" = 'modular_citadel/sound/vox/forbidden.ogg',
|
||||
"force" = 'modular_citadel/sound/vox/force.ogg',
|
||||
"forms" = 'modular_citadel/sound/vox/forms.ogg',
|
||||
"found" = 'modular_citadel/sound/vox/found.ogg',
|
||||
"four" = 'modular_citadel/sound/vox/four.ogg',
|
||||
"fourteen" = 'modular_citadel/sound/vox/fourteen.ogg',
|
||||
"fourth" = 'modular_citadel/sound/vox/fourth.ogg',
|
||||
"fourty" = 'modular_citadel/sound/vox/fourty.ogg',
|
||||
"foxtrot" = 'modular_citadel/sound/vox/foxtrot.ogg',
|
||||
"freeman" = 'modular_citadel/sound/vox/freeman.ogg',
|
||||
"freezer" = 'modular_citadel/sound/vox/freezer.ogg',
|
||||
"from" = 'modular_citadel/sound/vox/from.ogg',
|
||||
"front" = 'modular_citadel/sound/vox/front.ogg',
|
||||
"fuel" = 'modular_citadel/sound/vox/fuel.ogg',
|
||||
"g" = 'modular_citadel/sound/vox/g.ogg',
|
||||
"gay" = 'modular_citadel/sound/vox/gay.ogg',
|
||||
"get" = 'modular_citadel/sound/vox/get.ogg',
|
||||
"go" = 'modular_citadel/sound/vox/go.ogg',
|
||||
"going" = 'modular_citadel/sound/vox/going.ogg',
|
||||
"good" = 'modular_citadel/sound/vox/good.ogg',
|
||||
"goodbye" = 'modular_citadel/sound/vox/goodbye.ogg',
|
||||
"gordon" = 'modular_citadel/sound/vox/gordon.ogg',
|
||||
"got" = 'modular_citadel/sound/vox/got.ogg',
|
||||
"government" = 'modular_citadel/sound/vox/government.ogg',
|
||||
"granted" = 'modular_citadel/sound/vox/granted.ogg',
|
||||
"great" = 'modular_citadel/sound/vox/great.ogg',
|
||||
"green" = 'modular_citadel/sound/vox/green.ogg',
|
||||
"grenade" = 'modular_citadel/sound/vox/grenade.ogg',
|
||||
"guard" = 'modular_citadel/sound/vox/guard.ogg',
|
||||
"gulf" = 'modular_citadel/sound/vox/gulf.ogg',
|
||||
"gun" = 'modular_citadel/sound/vox/gun.ogg',
|
||||
"guthrie" = 'modular_citadel/sound/vox/guthrie.ogg',
|
||||
"handling" = 'modular_citadel/sound/vox/handling.ogg',
|
||||
"hangar" = 'modular_citadel/sound/vox/hangar.ogg',
|
||||
"has" = 'modular_citadel/sound/vox/has.ogg',
|
||||
"have" = 'modular_citadel/sound/vox/have.ogg',
|
||||
"hazard" = 'modular_citadel/sound/vox/hazard.ogg',
|
||||
"head" = 'modular_citadel/sound/vox/head.ogg',
|
||||
"health" = 'modular_citadel/sound/vox/health.ogg',
|
||||
"heat" = 'modular_citadel/sound/vox/heat.ogg',
|
||||
"helicopter" = 'modular_citadel/sound/vox/helicopter.ogg',
|
||||
"helium" = 'modular_citadel/sound/vox/helium.ogg',
|
||||
"hello" = 'modular_citadel/sound/vox/hello.ogg',
|
||||
"help" = 'modular_citadel/sound/vox/help.ogg',
|
||||
"here" = 'modular_citadel/sound/vox/here.ogg',
|
||||
"hide" = 'modular_citadel/sound/vox/hide.ogg',
|
||||
"high" = 'modular_citadel/sound/vox/high.ogg',
|
||||
"highest" = 'modular_citadel/sound/vox/highest.ogg',
|
||||
"hit" = 'modular_citadel/sound/vox/hit.ogg',
|
||||
"holds" = 'modular_citadel/sound/vox/holds.ogg',
|
||||
"hole" = 'modular_citadel/sound/vox/hole.ogg',
|
||||
"hostile" = 'modular_citadel/sound/vox/hostile.ogg',
|
||||
"hot" = 'modular_citadel/sound/vox/hot.ogg',
|
||||
"hotel" = 'modular_citadel/sound/vox/hotel.ogg',
|
||||
"hour" = 'modular_citadel/sound/vox/hour.ogg',
|
||||
"hours" = 'modular_citadel/sound/vox/hours.ogg',
|
||||
"hundred" = 'modular_citadel/sound/vox/hundred.ogg',
|
||||
"hydro" = 'modular_citadel/sound/vox/hydro.ogg',
|
||||
"i" = 'modular_citadel/sound/vox/i.ogg',
|
||||
"idiot" = 'modular_citadel/sound/vox/idiot.ogg',
|
||||
"illegal" = 'modular_citadel/sound/vox/illegal.ogg',
|
||||
"immediate" = 'modular_citadel/sound/vox/immediate.ogg',
|
||||
"immediately" = 'modular_citadel/sound/vox/immediately.ogg',
|
||||
"in" = 'modular_citadel/sound/vox/in.ogg',
|
||||
"inches" = 'modular_citadel/sound/vox/inches.ogg',
|
||||
"india" = 'modular_citadel/sound/vox/india.ogg',
|
||||
"ing" = 'modular_citadel/sound/vox/ing.ogg',
|
||||
"inoperative" = 'modular_citadel/sound/vox/inoperative.ogg',
|
||||
"inside" = 'modular_citadel/sound/vox/inside.ogg',
|
||||
"inspection" = 'modular_citadel/sound/vox/inspection.ogg',
|
||||
"inspector" = 'modular_citadel/sound/vox/inspector.ogg',
|
||||
"interchange" = 'modular_citadel/sound/vox/interchange.ogg',
|
||||
"intruder" = 'modular_citadel/sound/vox/intruder.ogg',
|
||||
"invallid" = 'modular_citadel/sound/vox/invallid.ogg',
|
||||
"invasion" = 'modular_citadel/sound/vox/invasion.ogg',
|
||||
"is" = 'modular_citadel/sound/vox/is.ogg',
|
||||
"it" = 'modular_citadel/sound/vox/it.ogg',
|
||||
"johnson" = 'modular_citadel/sound/vox/johnson.ogg',
|
||||
"juliet" = 'modular_citadel/sound/vox/juliet.ogg',
|
||||
"key" = 'modular_citadel/sound/vox/key.ogg',
|
||||
"kill" = 'modular_citadel/sound/vox/kill.ogg',
|
||||
"kilo" = 'modular_citadel/sound/vox/kilo.ogg',
|
||||
"kit" = 'modular_citadel/sound/vox/kit.ogg',
|
||||
"lab" = 'modular_citadel/sound/vox/lab.ogg',
|
||||
"lambda" = 'modular_citadel/sound/vox/lambda.ogg',
|
||||
"laser" = 'modular_citadel/sound/vox/laser.ogg',
|
||||
"last" = 'modular_citadel/sound/vox/last.ogg',
|
||||
"launch" = 'modular_citadel/sound/vox/launch.ogg',
|
||||
"leak" = 'modular_citadel/sound/vox/leak.ogg',
|
||||
"leave" = 'modular_citadel/sound/vox/leave.ogg',
|
||||
"left" = 'modular_citadel/sound/vox/left.ogg',
|
||||
"legal" = 'modular_citadel/sound/vox/legal.ogg',
|
||||
"level" = 'modular_citadel/sound/vox/level.ogg',
|
||||
"lever" = 'modular_citadel/sound/vox/lever.ogg',
|
||||
"lie" = 'modular_citadel/sound/vox/lie.ogg',
|
||||
"lieutenant" = 'modular_citadel/sound/vox/lieutenant.ogg',
|
||||
"life" = 'modular_citadel/sound/vox/life.ogg',
|
||||
"light" = 'modular_citadel/sound/vox/light.ogg',
|
||||
"lima" = 'modular_citadel/sound/vox/lima.ogg',
|
||||
"liquid" = 'modular_citadel/sound/vox/liquid.ogg',
|
||||
"loading" = 'modular_citadel/sound/vox/loading.ogg',
|
||||
"locate" = 'modular_citadel/sound/vox/locate.ogg',
|
||||
"located" = 'modular_citadel/sound/vox/located.ogg',
|
||||
"location" = 'modular_citadel/sound/vox/location.ogg',
|
||||
"lock" = 'modular_citadel/sound/vox/lock.ogg',
|
||||
"locked" = 'modular_citadel/sound/vox/locked.ogg',
|
||||
"locker" = 'modular_citadel/sound/vox/locker.ogg',
|
||||
"lockout" = 'modular_citadel/sound/vox/lockout.ogg',
|
||||
"lower" = 'modular_citadel/sound/vox/lower.ogg',
|
||||
"lowest" = 'modular_citadel/sound/vox/lowest.ogg',
|
||||
"magnetic" = 'modular_citadel/sound/vox/magnetic.ogg',
|
||||
"main" = 'modular_citadel/sound/vox/main.ogg',
|
||||
"maintenance" = 'modular_citadel/sound/vox/maintenance.ogg',
|
||||
"malfunction" = 'modular_citadel/sound/vox/malfunction.ogg',
|
||||
"man" = 'modular_citadel/sound/vox/man.ogg',
|
||||
"mass" = 'modular_citadel/sound/vox/mass.ogg',
|
||||
"materials" = 'modular_citadel/sound/vox/materials.ogg',
|
||||
"maximum" = 'modular_citadel/sound/vox/maximum.ogg',
|
||||
"may" = 'modular_citadel/sound/vox/may.ogg',
|
||||
"med" = 'modular_citadel/sound/vox/med.ogg',
|
||||
"medical" = 'modular_citadel/sound/vox/medical.ogg',
|
||||
"men" = 'modular_citadel/sound/vox/men.ogg',
|
||||
"mercy" = 'modular_citadel/sound/vox/mercy.ogg',
|
||||
"mesa" = 'modular_citadel/sound/vox/mesa.ogg',
|
||||
"message" = 'modular_citadel/sound/vox/message.ogg',
|
||||
"meter" = 'modular_citadel/sound/vox/meter.ogg',
|
||||
"micro" = 'modular_citadel/sound/vox/micro.ogg',
|
||||
"middle" = 'modular_citadel/sound/vox/middle.ogg',
|
||||
"mike" = 'modular_citadel/sound/vox/mike.ogg',
|
||||
"miles" = 'modular_citadel/sound/vox/miles.ogg',
|
||||
"military" = 'modular_citadel/sound/vox/military.ogg',
|
||||
"milli" = 'modular_citadel/sound/vox/milli.ogg',
|
||||
"million" = 'modular_citadel/sound/vox/million.ogg',
|
||||
"minefield" = 'modular_citadel/sound/vox/minefield.ogg',
|
||||
"minimum" = 'modular_citadel/sound/vox/minimum.ogg',
|
||||
"minutes" = 'modular_citadel/sound/vox/minutes.ogg',
|
||||
"mister" = 'modular_citadel/sound/vox/mister.ogg',
|
||||
"mode" = 'modular_citadel/sound/vox/mode.ogg',
|
||||
"motor" = 'modular_citadel/sound/vox/motor.ogg',
|
||||
"motorpool" = 'modular_citadel/sound/vox/motorpool.ogg',
|
||||
"move" = 'modular_citadel/sound/vox/move.ogg',
|
||||
"must" = 'modular_citadel/sound/vox/must.ogg',
|
||||
"nearest" = 'modular_citadel/sound/vox/nearest.ogg',
|
||||
"nice" = 'modular_citadel/sound/vox/nice.ogg',
|
||||
"nine" = 'modular_citadel/sound/vox/nine.ogg',
|
||||
"nineteen" = 'modular_citadel/sound/vox/nineteen.ogg',
|
||||
"ninety" = 'modular_citadel/sound/vox/ninety.ogg',
|
||||
"no" = 'modular_citadel/sound/vox/no.ogg',
|
||||
"nominal" = 'modular_citadel/sound/vox/nominal.ogg',
|
||||
"north" = 'modular_citadel/sound/vox/north.ogg',
|
||||
"not" = 'modular_citadel/sound/vox/not.ogg',
|
||||
"november" = 'modular_citadel/sound/vox/november.ogg',
|
||||
"now" = 'modular_citadel/sound/vox/now.ogg',
|
||||
"number" = 'modular_citadel/sound/vox/number.ogg',
|
||||
"objective" = 'modular_citadel/sound/vox/objective.ogg',
|
||||
"observation" = 'modular_citadel/sound/vox/observation.ogg',
|
||||
"of" = 'modular_citadel/sound/vox/of.ogg',
|
||||
"officer" = 'modular_citadel/sound/vox/officer.ogg',
|
||||
"ok" = 'modular_citadel/sound/vox/ok.ogg',
|
||||
"on" = 'modular_citadel/sound/vox/on.ogg',
|
||||
"one" = 'modular_citadel/sound/vox/one.ogg',
|
||||
"open" = 'modular_citadel/sound/vox/open.ogg',
|
||||
"operating" = 'modular_citadel/sound/vox/operating.ogg',
|
||||
"operations" = 'modular_citadel/sound/vox/operations.ogg',
|
||||
"operative" = 'modular_citadel/sound/vox/operative.ogg',
|
||||
"option" = 'modular_citadel/sound/vox/option.ogg',
|
||||
"order" = 'modular_citadel/sound/vox/order.ogg',
|
||||
"organic" = 'modular_citadel/sound/vox/organic.ogg',
|
||||
"oscar" = 'modular_citadel/sound/vox/oscar.ogg',
|
||||
"out" = 'modular_citadel/sound/vox/out.ogg',
|
||||
"outside" = 'modular_citadel/sound/vox/outside.ogg',
|
||||
"over" = 'modular_citadel/sound/vox/over.ogg',
|
||||
"overload" = 'modular_citadel/sound/vox/overload.ogg',
|
||||
"override" = 'modular_citadel/sound/vox/override.ogg',
|
||||
"pacify" = 'modular_citadel/sound/vox/pacify.ogg',
|
||||
"pain" = 'modular_citadel/sound/vox/pain.ogg',
|
||||
"pal" = 'modular_citadel/sound/vox/pal.ogg',
|
||||
"panel" = 'modular_citadel/sound/vox/panel.ogg',
|
||||
"percent" = 'modular_citadel/sound/vox/percent.ogg',
|
||||
"perimeter" = 'modular_citadel/sound/vox/perimeter.ogg',
|
||||
"permitted" = 'modular_citadel/sound/vox/permitted.ogg',
|
||||
"personnel" = 'modular_citadel/sound/vox/personnel.ogg',
|
||||
"pipe" = 'modular_citadel/sound/vox/pipe.ogg',
|
||||
"plant" = 'modular_citadel/sound/vox/plant.ogg',
|
||||
"platform" = 'modular_citadel/sound/vox/platform.ogg',
|
||||
"please" = 'modular_citadel/sound/vox/please.ogg',
|
||||
"point" = 'modular_citadel/sound/vox/point.ogg',
|
||||
"portal" = 'modular_citadel/sound/vox/portal.ogg',
|
||||
"power" = 'modular_citadel/sound/vox/power.ogg',
|
||||
"presence" = 'modular_citadel/sound/vox/presence.ogg',
|
||||
"press" = 'modular_citadel/sound/vox/press.ogg',
|
||||
"primary" = 'modular_citadel/sound/vox/primary.ogg',
|
||||
"proceed" = 'modular_citadel/sound/vox/proceed.ogg',
|
||||
"processing" = 'modular_citadel/sound/vox/processing.ogg',
|
||||
"progress" = 'modular_citadel/sound/vox/progress.ogg',
|
||||
"proper" = 'modular_citadel/sound/vox/proper.ogg',
|
||||
"propulsion" = 'modular_citadel/sound/vox/propulsion.ogg',
|
||||
"prosecute" = 'modular_citadel/sound/vox/prosecute.ogg',
|
||||
"protective" = 'modular_citadel/sound/vox/protective.ogg',
|
||||
"push" = 'modular_citadel/sound/vox/push.ogg',
|
||||
"quantum" = 'modular_citadel/sound/vox/quantum.ogg',
|
||||
"quebec" = 'modular_citadel/sound/vox/quebec.ogg',
|
||||
"question" = 'modular_citadel/sound/vox/question.ogg',
|
||||
"questioning" = 'modular_citadel/sound/vox/questioning.ogg',
|
||||
"quick" = 'modular_citadel/sound/vox/quick.ogg',
|
||||
"quit" = 'modular_citadel/sound/vox/quit.ogg',
|
||||
"radiation" = 'modular_citadel/sound/vox/radiation.ogg',
|
||||
"radioactive" = 'modular_citadel/sound/vox/radioactive.ogg',
|
||||
"rads" = 'modular_citadel/sound/vox/rads.ogg',
|
||||
"rapid" = 'modular_citadel/sound/vox/rapid.ogg',
|
||||
"reach" = 'modular_citadel/sound/vox/reach.ogg',
|
||||
"reached" = 'modular_citadel/sound/vox/reached.ogg',
|
||||
"reactor" = 'modular_citadel/sound/vox/reactor.ogg',
|
||||
"red" = 'modular_citadel/sound/vox/red.ogg',
|
||||
"relay" = 'modular_citadel/sound/vox/relay.ogg',
|
||||
"released" = 'modular_citadel/sound/vox/released.ogg',
|
||||
"remaining" = 'modular_citadel/sound/vox/remaining.ogg',
|
||||
"renegade" = 'modular_citadel/sound/vox/renegade.ogg',
|
||||
"repair" = 'modular_citadel/sound/vox/repair.ogg',
|
||||
"report" = 'modular_citadel/sound/vox/report.ogg',
|
||||
"reports" = 'modular_citadel/sound/vox/reports.ogg',
|
||||
"required" = 'modular_citadel/sound/vox/required.ogg',
|
||||
"research" = 'modular_citadel/sound/vox/research.ogg',
|
||||
"reset" = 'modular_citadel/sound/vox/reset.ogg',
|
||||
"resevoir" = 'modular_citadel/sound/vox/resevoir.ogg',
|
||||
"resistance" = 'modular_citadel/sound/vox/resistance.ogg',
|
||||
"returned" = 'modular_citadel/sound/vox/returned.ogg',
|
||||
"right" = 'modular_citadel/sound/vox/right.ogg',
|
||||
"rocket" = 'modular_citadel/sound/vox/rocket.ogg',
|
||||
"roger" = 'modular_citadel/sound/vox/roger.ogg',
|
||||
"romeo" = 'modular_citadel/sound/vox/romeo.ogg',
|
||||
"room" = 'modular_citadel/sound/vox/room.ogg',
|
||||
"round" = 'modular_citadel/sound/vox/round.ogg',
|
||||
"run" = 'modular_citadel/sound/vox/run.ogg',
|
||||
"safe" = 'modular_citadel/sound/vox/safe.ogg',
|
||||
"safety" = 'modular_citadel/sound/vox/safety.ogg',
|
||||
"sargeant" = 'modular_citadel/sound/vox/sargeant.ogg',
|
||||
"satellite" = 'modular_citadel/sound/vox/satellite.ogg',
|
||||
"save" = 'modular_citadel/sound/vox/save.ogg',
|
||||
"science" = 'modular_citadel/sound/vox/science.ogg',
|
||||
"scores" = 'modular_citadel/sound/vox/scores.ogg',
|
||||
"scream" = 'modular_citadel/sound/vox/scream.ogg',
|
||||
"screen" = 'modular_citadel/sound/vox/screen.ogg',
|
||||
"search" = 'modular_citadel/sound/vox/search.ogg',
|
||||
"second" = 'modular_citadel/sound/vox/second.ogg',
|
||||
"secondary" = 'modular_citadel/sound/vox/secondary.ogg',
|
||||
"seconds" = 'modular_citadel/sound/vox/seconds.ogg',
|
||||
"sector" = 'modular_citadel/sound/vox/sector.ogg',
|
||||
"secure" = 'modular_citadel/sound/vox/secure.ogg',
|
||||
"secured" = 'modular_citadel/sound/vox/secured.ogg',
|
||||
"security" = 'modular_citadel/sound/vox/security.ogg',
|
||||
"select" = 'modular_citadel/sound/vox/select.ogg',
|
||||
"selected" = 'modular_citadel/sound/vox/selected.ogg',
|
||||
"service" = 'modular_citadel/sound/vox/service.ogg',
|
||||
"seven" = 'modular_citadel/sound/vox/seven.ogg',
|
||||
"seventeen" = 'modular_citadel/sound/vox/seventeen.ogg',
|
||||
"seventy" = 'modular_citadel/sound/vox/seventy.ogg',
|
||||
"severe" = 'modular_citadel/sound/vox/severe.ogg',
|
||||
"sewage" = 'modular_citadel/sound/vox/sewage.ogg',
|
||||
"sewer" = 'modular_citadel/sound/vox/sewer.ogg',
|
||||
"shield" = 'modular_citadel/sound/vox/shield.ogg',
|
||||
"shipment" = 'modular_citadel/sound/vox/shipment.ogg',
|
||||
"shock" = 'modular_citadel/sound/vox/shock.ogg',
|
||||
"shoot" = 'modular_citadel/sound/vox/shoot.ogg',
|
||||
"shower" = 'modular_citadel/sound/vox/shower.ogg',
|
||||
"shut" = 'modular_citadel/sound/vox/shut.ogg',
|
||||
"side" = 'modular_citadel/sound/vox/side.ogg',
|
||||
"sierra" = 'modular_citadel/sound/vox/sierra.ogg',
|
||||
"sight" = 'modular_citadel/sound/vox/sight.ogg',
|
||||
"silo" = 'modular_citadel/sound/vox/silo.ogg',
|
||||
"six" = 'modular_citadel/sound/vox/six.ogg',
|
||||
"sixteen" = 'modular_citadel/sound/vox/sixteen.ogg',
|
||||
"sixty" = 'modular_citadel/sound/vox/sixty.ogg',
|
||||
"slime" = 'modular_citadel/sound/vox/slime.ogg',
|
||||
"slow" = 'modular_citadel/sound/vox/slow.ogg',
|
||||
"soldier" = 'modular_citadel/sound/vox/soldier.ogg',
|
||||
"some" = 'modular_citadel/sound/vox/some.ogg',
|
||||
"someone" = 'modular_citadel/sound/vox/someone.ogg',
|
||||
"something" = 'modular_citadel/sound/vox/something.ogg',
|
||||
"son" = 'modular_citadel/sound/vox/son.ogg',
|
||||
"sorry" = 'modular_citadel/sound/vox/sorry.ogg',
|
||||
"south" = 'modular_citadel/sound/vox/south.ogg',
|
||||
"squad" = 'modular_citadel/sound/vox/squad.ogg',
|
||||
"square" = 'modular_citadel/sound/vox/square.ogg',
|
||||
"stairway" = 'modular_citadel/sound/vox/stairway.ogg',
|
||||
"status" = 'modular_citadel/sound/vox/status.ogg',
|
||||
"sterile" = 'modular_citadel/sound/vox/sterile.ogg',
|
||||
"sterilization" = 'modular_citadel/sound/vox/sterilization.ogg',
|
||||
"stolen" = 'modular_citadel/sound/vox/stolen.ogg',
|
||||
"storage" = 'modular_citadel/sound/vox/storage.ogg',
|
||||
"sub" = 'modular_citadel/sound/vox/sub.ogg',
|
||||
"subsurface" = 'modular_citadel/sound/vox/subsurface.ogg',
|
||||
"sudden" = 'modular_citadel/sound/vox/sudden.ogg',
|
||||
"suit" = 'modular_citadel/sound/vox/suit.ogg',
|
||||
"superconducting" = 'modular_citadel/sound/vox/superconducting.ogg',
|
||||
"supercooled" = 'modular_citadel/sound/vox/supercooled.ogg',
|
||||
"supply" = 'modular_citadel/sound/vox/supply.ogg',
|
||||
"surface" = 'modular_citadel/sound/vox/surface.ogg',
|
||||
"surrender" = 'modular_citadel/sound/vox/surrender.ogg',
|
||||
"surround" = 'modular_citadel/sound/vox/surround.ogg',
|
||||
"surrounded" = 'modular_citadel/sound/vox/surrounded.ogg',
|
||||
"switch" = 'modular_citadel/sound/vox/switch.ogg',
|
||||
"system" = 'modular_citadel/sound/vox/system.ogg',
|
||||
"systems" = 'modular_citadel/sound/vox/systems.ogg',
|
||||
"tactical" = 'modular_citadel/sound/vox/tactical.ogg',
|
||||
"take" = 'modular_citadel/sound/vox/take.ogg',
|
||||
"talk" = 'modular_citadel/sound/vox/talk.ogg',
|
||||
"tango" = 'modular_citadel/sound/vox/tango.ogg',
|
||||
"tank" = 'modular_citadel/sound/vox/tank.ogg',
|
||||
"target" = 'modular_citadel/sound/vox/target.ogg',
|
||||
"team" = 'modular_citadel/sound/vox/team.ogg',
|
||||
"temperature" = 'modular_citadel/sound/vox/temperature.ogg',
|
||||
"temporal" = 'modular_citadel/sound/vox/temporal.ogg',
|
||||
"ten" = 'modular_citadel/sound/vox/ten.ogg',
|
||||
"terminal" = 'modular_citadel/sound/vox/terminal.ogg',
|
||||
"terminated" = 'modular_citadel/sound/vox/terminated.ogg',
|
||||
"termination" = 'modular_citadel/sound/vox/termination.ogg',
|
||||
"test" = 'modular_citadel/sound/vox/test.ogg',
|
||||
"that" = 'modular_citadel/sound/vox/that.ogg',
|
||||
"the" = 'modular_citadel/sound/vox/the.ogg',
|
||||
"then" = 'modular_citadel/sound/vox/then.ogg',
|
||||
"there" = 'modular_citadel/sound/vox/there.ogg',
|
||||
"third" = 'modular_citadel/sound/vox/third.ogg',
|
||||
"thirteen" = 'modular_citadel/sound/vox/thirteen.ogg',
|
||||
"thirty" = 'modular_citadel/sound/vox/thirty.ogg',
|
||||
"this" = 'modular_citadel/sound/vox/this.ogg',
|
||||
"those" = 'modular_citadel/sound/vox/those.ogg',
|
||||
"thousand" = 'modular_citadel/sound/vox/thousand.ogg',
|
||||
"threat" = 'modular_citadel/sound/vox/threat.ogg',
|
||||
"three" = 'modular_citadel/sound/vox/three.ogg',
|
||||
"through" = 'modular_citadel/sound/vox/through.ogg',
|
||||
"time" = 'modular_citadel/sound/vox/time.ogg',
|
||||
"to" = 'modular_citadel/sound/vox/to.ogg',
|
||||
"top" = 'modular_citadel/sound/vox/top.ogg',
|
||||
"topside" = 'modular_citadel/sound/vox/topside.ogg',
|
||||
"touch" = 'modular_citadel/sound/vox/touch.ogg',
|
||||
"towards" = 'modular_citadel/sound/vox/towards.ogg',
|
||||
"track" = 'modular_citadel/sound/vox/track.ogg',
|
||||
"train" = 'modular_citadel/sound/vox/train.ogg',
|
||||
"transportation" = 'modular_citadel/sound/vox/transportation.ogg',
|
||||
"truck" = 'modular_citadel/sound/vox/truck.ogg',
|
||||
"tunnel" = 'modular_citadel/sound/vox/tunnel.ogg',
|
||||
"turn" = 'modular_citadel/sound/vox/turn.ogg',
|
||||
"turret" = 'modular_citadel/sound/vox/turret.ogg',
|
||||
"twelve" = 'modular_citadel/sound/vox/twelve.ogg',
|
||||
"twenty" = 'modular_citadel/sound/vox/twenty.ogg',
|
||||
"two" = 'modular_citadel/sound/vox/two.ogg',
|
||||
"unauthorized" = 'modular_citadel/sound/vox/unauthorized.ogg',
|
||||
"under" = 'modular_citadel/sound/vox/under.ogg',
|
||||
"uniform" = 'modular_citadel/sound/vox/uniform.ogg',
|
||||
"unlocked" = 'modular_citadel/sound/vox/unlocked.ogg',
|
||||
"until" = 'modular_citadel/sound/vox/until.ogg',
|
||||
"up" = 'modular_citadel/sound/vox/up.ogg',
|
||||
"upper" = 'modular_citadel/sound/vox/upper.ogg',
|
||||
"uranium" = 'modular_citadel/sound/vox/uranium.ogg',
|
||||
"us" = 'modular_citadel/sound/vox/us.ogg',
|
||||
"usa" = 'modular_citadel/sound/vox/usa.ogg',
|
||||
"use" = 'modular_citadel/sound/vox/use.ogg',
|
||||
"used" = 'modular_citadel/sound/vox/used.ogg',
|
||||
"user" = 'modular_citadel/sound/vox/user.ogg',
|
||||
"vacate" = 'modular_citadel/sound/vox/vacate.ogg',
|
||||
"valid" = 'modular_citadel/sound/vox/valid.ogg',
|
||||
"vapor" = 'modular_citadel/sound/vox/vapor.ogg',
|
||||
"vent" = 'modular_citadel/sound/vox/vent.ogg',
|
||||
"ventillation" = 'modular_citadel/sound/vox/ventillation.ogg',
|
||||
"victor" = 'modular_citadel/sound/vox/victor.ogg',
|
||||
"violated" = 'modular_citadel/sound/vox/violated.ogg',
|
||||
"violation" = 'modular_citadel/sound/vox/violation.ogg',
|
||||
"voltage" = 'modular_citadel/sound/vox/voltage.ogg',
|
||||
"vox_login" = 'modular_citadel/sound/vox/vox_login.ogg',
|
||||
"walk" = 'modular_citadel/sound/vox/walk.ogg',
|
||||
"wall" = 'modular_citadel/sound/vox/wall.ogg',
|
||||
"want" = 'modular_citadel/sound/vox/want.ogg',
|
||||
"wanted" = 'modular_citadel/sound/vox/wanted.ogg',
|
||||
"warm" = 'modular_citadel/sound/vox/warm.ogg',
|
||||
"warn" = 'modular_citadel/sound/vox/warn.ogg',
|
||||
"warning" = 'modular_citadel/sound/vox/warning.ogg',
|
||||
"waste" = 'modular_citadel/sound/vox/waste.ogg',
|
||||
"water" = 'modular_citadel/sound/vox/water.ogg',
|
||||
"we" = 'modular_citadel/sound/vox/we.ogg',
|
||||
"weapon" = 'modular_citadel/sound/vox/weapon.ogg',
|
||||
"west" = 'modular_citadel/sound/vox/west.ogg',
|
||||
"whiskey" = 'modular_citadel/sound/vox/whiskey.ogg',
|
||||
"white" = 'modular_citadel/sound/vox/white.ogg',
|
||||
"wilco" = 'modular_citadel/sound/vox/wilco.ogg',
|
||||
"will" = 'modular_citadel/sound/vox/will.ogg',
|
||||
"with" = 'modular_citadel/sound/vox/with.ogg',
|
||||
"without" = 'modular_citadel/sound/vox/without.ogg',
|
||||
"woop" = 'modular_citadel/sound/vox/woop.ogg',
|
||||
"xeno" = 'modular_citadel/sound/vox/xeno.ogg',
|
||||
"yankee" = 'modular_citadel/sound/vox/yankee.ogg',
|
||||
"yards" = 'modular_citadel/sound/vox/yards.ogg',
|
||||
"year" = 'modular_citadel/sound/vox/year.ogg',
|
||||
"yellow" = 'modular_citadel/sound/vox/yellow.ogg',
|
||||
"yes" = 'modular_citadel/sound/vox/yes.ogg',
|
||||
"you" = 'modular_citadel/sound/vox/you.ogg',
|
||||
"your" = 'modular_citadel/sound/vox/your.ogg',
|
||||
"yourself" = 'modular_citadel/sound/vox/yourself.ogg',
|
||||
"zero" = 'modular_citadel/sound/vox/zero.ogg',
|
||||
"zone" = 'modular_citadel/sound/vox/zone.ogg',
|
||||
"zulu" = 'modular_citadel/sound/vox/zulu.ogg',))
|
||||
#endif
|
||||
@@ -1,10 +0,0 @@
|
||||
/mob/living/Knockdown(amount, updating = TRUE, ignore_canknockdown = FALSE, override_hardstun, override_stamdmg) //Can't go below remaining duration
|
||||
if(((status_flags & CANKNOCKDOWN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canknockdown)
|
||||
if(absorb_stun(isnull(override_hardstun)? amount : override_hardstun, ignore_canknockdown))
|
||||
return
|
||||
var/datum/status_effect/incapacitating/knockdown/K = IsKnockdown()
|
||||
if(K)
|
||||
K.duration = max(world.time + (isnull(override_hardstun)? amount : override_hardstun), K.duration)
|
||||
else if((amount || override_hardstun) > 0)
|
||||
K = apply_status_effect(STATUS_EFFECT_KNOCKDOWN, amount, updating, override_hardstun, override_stamdmg)
|
||||
return K
|
||||
@@ -9,13 +9,3 @@
|
||||
return 0
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/proc/getinaccuracy(mob/living/user)
|
||||
if(!iscarbon(user))
|
||||
return 0
|
||||
else
|
||||
var/mob/living/carbon/holdingdude = user
|
||||
if(istype(holdingdude) && holdingdude.combatmode)
|
||||
return max((holdingdude.lastdirchange + weapon_weight * 25) - world.time,0)
|
||||
else
|
||||
return weapon_weight * 25
|
||||
|
||||
@@ -1,117 +0,0 @@
|
||||
//////Flechette Launcher//////
|
||||
|
||||
///projectiles///
|
||||
|
||||
/obj/item/projectile/bullet/cflechetteap //shreds armor
|
||||
name = "flechette (armor piercing)"
|
||||
damage = 8
|
||||
armour_penetration = 80
|
||||
|
||||
/obj/item/projectile/bullet/cflechettes //shreds flesh and forces bleeding
|
||||
name = "flechette (serrated)"
|
||||
damage = 15
|
||||
dismemberment = 10
|
||||
armour_penetration = -80
|
||||
|
||||
/obj/item/projectile/bullet/cflechettes/on_hit(atom/target, blocked = FALSE)
|
||||
if((blocked != 100) && iscarbon(target))
|
||||
var/mob/living/carbon/C = target
|
||||
C.bleed(10)
|
||||
return ..()
|
||||
|
||||
///ammo casings (CASELESS AMMO CASINGS WOOOOOOOO)///
|
||||
|
||||
/obj/item/ammo_casing/caseless/flechetteap
|
||||
name = "flechette (armor piercing)"
|
||||
desc = "A flechette made with a tungsten alloy."
|
||||
projectile_type = /obj/item/projectile/bullet/cflechetteap
|
||||
caliber = "flechette"
|
||||
throwforce = 1
|
||||
throw_speed = 3
|
||||
|
||||
/obj/item/ammo_casing/caseless/flechettes
|
||||
name = "flechette (serrated)"
|
||||
desc = "A serrated flechette made of a special alloy intended to deform drastically upon penetration of human flesh."
|
||||
projectile_type = /obj/item/projectile/bullet/cflechettes
|
||||
caliber = "flechette"
|
||||
throwforce = 2
|
||||
throw_speed = 3
|
||||
embedding = list("embedded_pain_multiplier" = 0, "embed_chance" = 40, "embedded_fall_chance" = 10)
|
||||
|
||||
///magazine///
|
||||
|
||||
/obj/item/ammo_box/magazine/flechette
|
||||
name = "flechette magazine (armor piercing)"
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "flechettemag"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/flechetteap
|
||||
caliber = "flechette"
|
||||
max_ammo = 40
|
||||
multiple_sprites = 2
|
||||
|
||||
/obj/item/ammo_box/magazine/flechette/s
|
||||
name = "flechette magazine (serrated)"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/flechettes
|
||||
|
||||
///the gun itself///
|
||||
|
||||
/obj/item/gun/ballistic/automatic/flechette
|
||||
name = "\improper CX Flechette Launcher"
|
||||
desc = "A flechette launching machine pistol with an unconventional bullpup frame."
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "flechettegun"
|
||||
item_state = "gun"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
slot_flags = 0
|
||||
/obj/item/firing_pin/implant/pindicate
|
||||
mag_type = /obj/item/ammo_box/magazine/flechette/
|
||||
fire_sound = 'sound/weapons/gunshot_smg.ogg'
|
||||
can_suppress = 0
|
||||
burst_size = 5
|
||||
fire_delay = 1
|
||||
casing_ejector = 0
|
||||
spread = 10
|
||||
recoil = 0.05
|
||||
|
||||
/obj/item/gun/ballistic/automatic/flechette/update_icon()
|
||||
..()
|
||||
if(magazine)
|
||||
cut_overlays()
|
||||
add_overlay("flechettegun-magazine")
|
||||
else
|
||||
cut_overlays()
|
||||
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
|
||||
|
||||
///unique variant///
|
||||
|
||||
/obj/item/projectile/bullet/cflechetteshredder
|
||||
name = "flechette (shredder)"
|
||||
damage = 5
|
||||
dismemberment = 40
|
||||
|
||||
/obj/item/ammo_casing/caseless/flechetteshredder
|
||||
name = "flechette (shredder)"
|
||||
desc = "A serrated flechette made of a special alloy that forms a monofilament edge."
|
||||
projectile_type = /obj/item/projectile/bullet/cflechettes
|
||||
|
||||
/obj/item/ammo_box/magazine/flechette/shredder
|
||||
name = "flechette magazine (shredder)"
|
||||
icon_state = "shreddermag"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/flechetteshredder
|
||||
|
||||
/obj/item/gun/ballistic/automatic/flechette/shredder
|
||||
name = "\improper CX Shredder"
|
||||
desc = "A flechette launching machine pistol made of ultra-light CFRP optimized for firing serrated monofillament flechettes."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
mag_type = /obj/item/ammo_box/magazine/flechette/shredder
|
||||
spread = 15
|
||||
recoil = 0.1
|
||||
|
||||
/obj/item/gun/ballistic/automatic/flechette/shredder/update_icon()
|
||||
..()
|
||||
if(magazine)
|
||||
cut_overlays()
|
||||
add_overlay("shreddergun-magazine")
|
||||
else
|
||||
cut_overlays()
|
||||
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
|
||||
@@ -86,7 +86,7 @@
|
||||
/obj/item/ammo_box/magazine/mmag/small
|
||||
name = "magpistol magazine (non-lethal disabler)"
|
||||
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
|
||||
icon_state = "nlmagmag"
|
||||
icon_state = "smallmagmag"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/anlmags
|
||||
caliber = "mags"
|
||||
max_ammo = 15
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
/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"
|
||||
icon_state = "smallmagmag"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/mag_e/anlmags
|
||||
caliber = "mag_e"
|
||||
max_ammo = 16
|
||||
|
||||
@@ -123,8 +123,8 @@
|
||||
item_state = "gun"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
slot_flags = 0
|
||||
/obj/item/firing_pin/implant/pindicate
|
||||
mag_type = /obj/item/ammo_box/magazine/flechette/
|
||||
pin = /obj/item/firing_pin/implant/pindicate
|
||||
mag_type = /obj/item/ammo_box/magazine/flechette
|
||||
fire_sound = 'sound/weapons/gunshot_smg.ogg'
|
||||
can_suppress = 0
|
||||
burst_size = 5
|
||||
@@ -134,12 +134,9 @@
|
||||
recoil = 0.05
|
||||
|
||||
/obj/item/gun/ballistic/automatic/flechette/update_icon()
|
||||
..()
|
||||
cut_overlays()
|
||||
if(magazine)
|
||||
cut_overlays()
|
||||
add_overlay("flechettegun-magazine")
|
||||
else
|
||||
cut_overlays()
|
||||
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
|
||||
|
||||
///unique variant///
|
||||
@@ -163,17 +160,13 @@
|
||||
name = "\improper CX Shredder"
|
||||
desc = "A flechette launching machine pistol made of ultra-light CFRP optimized for firing serrated monofillament flechettes."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
mag_type = /obj/item/ammo_box/magazine/flechette/shredder
|
||||
spread = 15
|
||||
recoil = 0.1
|
||||
|
||||
/obj/item/gun/ballistic/automatic/flechette/shredder/update_icon()
|
||||
..()
|
||||
cut_overlays()
|
||||
if(magazine)
|
||||
cut_overlays()
|
||||
add_overlay("shreddergun-magazine")
|
||||
else
|
||||
cut_overlays()
|
||||
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
|
||||
|
||||
/*/////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -66,7 +66,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
startHunger = M.nutrition
|
||||
if(pollStarted == FALSE)
|
||||
pollStarted = TRUE
|
||||
candies = pollGhostCandidates("Do you want to play as a clone of [M], and do you agree to respect their character and act in a similar manner to them? I swear to god if you diddle them I will be very disapointed in you and it will likely earn you a bwoink.")
|
||||
candies = pollGhostCandidates("Do you want to play as a clone of [M], and do you agree to respect their character and act in a similar manner to them? Do not engage in ERP as them unless you have LOOC permission from them, and ensure it is permission from the original, not a clone.")
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has taken SDGF, and ghosts have been polled.")
|
||||
if(20 to INFINITY)
|
||||
if(LAZYLEN(candies) && playerClone == FALSE) //If there's candidates, clone the person and put them in there!
|
||||
@@ -80,7 +80,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
M.dna.transfer_identity(SM)
|
||||
SM.updateappearance(mutcolor_update=1)
|
||||
var/mob/dead/observer/C = pick(candies)
|
||||
message_admins("Ghost candidate found! [C] is becoming a clone of [M] (They agreed to respect the character they're becoming. If they don't, then they agreed to a a bwoinking.) (Hee~!! Exciting!!)")
|
||||
message_admins("Ghost candidate found! [C] key [C.key] is becoming a clone of [M] key: [M.key] (They agreed to respect the character they're becoming, and agreed to not ERP without express permission from the original.)")
|
||||
SM.key = C.key
|
||||
SM.mind.enslave_mind_to_creator(M)
|
||||
|
||||
@@ -92,10 +92,10 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
ZI.Insert(SM)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key]'s zombie_infection has been transferred to their clone")
|
||||
|
||||
to_chat(SM, "<span class='warning'>You feel a strange sensation building in your mind as you realise there's two of you, before you get a chance to think about it, you suddenly split from your old body, and find yourself face to face with yourself, or rather, your original self.</span>")
|
||||
to_chat(SM, "<span class='warning'>You feel a strange sensation building in your mind as you realise there's two of you, before you get a chance to think about it, you suddenly split from your old body, and find yourself face to face with your original, a perfect clone of your origin.</span>")
|
||||
|
||||
if(prob(50))
|
||||
to_chat(SM, "<span class='userdanger'>While you find your newfound existence strange, you share the same memories as [M.real_name]. However, You find yourself indifferent to the goals you previously had, and take more interest in your newfound independence, but still have an indescribable care for the safety of your original</span>")
|
||||
to_chat(SM, "<span class='userdanger'>While you find your newfound existence strange, you share the same memories as [M.real_name]. However, You find yourself indifferent to the goals you previously had, and take more interest in your newfound independence, but still have an indescribable care for the safety of your original.</span>")
|
||||
log_game("FERMICHEM: [SM] ckey: [SM.key]'s is not bound by [M] ckey [M.key]'s will, and is free to determine their own goals, while respecting and acting as their origin.")
|
||||
else
|
||||
to_chat(SM, "<span class='userdanger'>While you find your newfound existence strange, you share the same memories as [M.real_name]. Your mind has not deviated from the tasks you set out to do, and now that there's two of you the tasks should be much easier.</span>")
|
||||
@@ -208,6 +208,64 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
if (M.nutrition < 1500)
|
||||
M.nutrition += 500
|
||||
|
||||
/datum/reagent/fermi/SDGF/reaction_mob(mob/living/carbon/human/M, method=TOUCH, reac_volume)
|
||||
if(volume<5)
|
||||
M.visible_message("<span class='warning'>The growth factor froths upon [M]'s body, failing to do anything of note.</span>")
|
||||
return
|
||||
if(M.stat == DEAD)
|
||||
if(M.suiciding || (HAS_TRAIT(M, TRAIT_NOCLONE)) || M.hellbound)
|
||||
M.visible_message("<span class='warning'>The growth factor inertly sticks to [M]'s body, failing to do anything of note.</span>")
|
||||
return
|
||||
if(!M.mind)
|
||||
M.visible_message("<span class='warning'>The growth factor shudders, merging with [M]'s body, but is unable to replicate properly.</span>")
|
||||
|
||||
var/bodydamage = (M.getBruteLoss() + M.getFireLoss())
|
||||
var/typepath = M.type
|
||||
volume =- 5
|
||||
|
||||
var/mob/living/carbon/human/fermi_Gclone = new typepath(M.loc)
|
||||
var/mob/living/carbon/human/SM = fermi_Gclone
|
||||
if(istype(SM) && istype(M))
|
||||
SM.real_name = M.real_name
|
||||
M.dna.transfer_identity(SM)
|
||||
SM.updateappearance(mutcolor_update=1)
|
||||
M.mind.transfer_to(SM)
|
||||
M.visible_message("<span class='warning'>[M]'s body shudders, the growth factor rapidly splitting into a new clone of [M].</span>")
|
||||
|
||||
if(bodydamage>50)
|
||||
SM.adjustOxyLoss(-(bodydamage/10), 0)
|
||||
SM.adjustToxLoss(-(bodydamage/10), 0)
|
||||
SM.blood_volume = (BLOOD_VOLUME_NORMAL*SM.blood_ratio)/1.5
|
||||
SM.adjustCloneLoss((bodydamage/10), 0)
|
||||
SM.setBrainLoss((bodydamage/10))
|
||||
SM.nutrition = 400
|
||||
if(bodydamage>200)
|
||||
SM.gain_trauma_type(BRAIN_TRAUMA_MILD)
|
||||
if(bodydamage>300)
|
||||
var/obj/item/bodypart/l_arm = SM.get_bodypart(BODY_ZONE_L_ARM) //We get the body parts we want this way.
|
||||
var/obj/item/bodypart/r_arm = SM.get_bodypart(BODY_ZONE_R_ARM)
|
||||
l_arm.drop_limb()
|
||||
r_arm.drop_limb()
|
||||
if(bodydamage>400)
|
||||
var/obj/item/bodypart/l_leg = SM.get_bodypart(BODY_ZONE_L_LEG) //We get the body parts we want this way.
|
||||
var/obj/item/bodypart/r_leg = SM.get_bodypart(BODY_ZONE_R_LEG)
|
||||
l_leg.drop_limb()
|
||||
r_leg.drop_limb()
|
||||
if(bodydamage>500)
|
||||
SM.gain_trauma_type(BRAIN_TRAUMA_SEVERE)
|
||||
if(bodydamage>600)
|
||||
var/datum/species/mutation = pick(subtypesof(/datum/species))
|
||||
SM.set_species(mutation)
|
||||
|
||||
//Transfer remaining reagent to clone. I think around 30u will make a healthy clone, otherwise they'll have clone damage, blood loss, brain damage and hunger.
|
||||
SM.reagents.add_reagent("SDGFheal", volume)
|
||||
M.reagents.remove_reagent(id, volume)
|
||||
|
||||
SM.updatehealth()
|
||||
SM.emote("gasp")
|
||||
log_combat(M, M, "SDGF clone-vived", src)
|
||||
..()
|
||||
|
||||
//Unobtainable, used in clone spawn.
|
||||
/datum/reagent/fermi/SDGFheal
|
||||
name = "synthetic-derived growth factor"
|
||||
@@ -271,7 +329,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
|
||||
if(86)//mean clone time!
|
||||
if (!M.reagents.has_reagent("pen_acid"))//Counterplay is pent.)
|
||||
message_admins("(non-infectious) Zombie spawned at [M.loc], produced by impure chem, wah!")
|
||||
message_admins("(non-infectious) SDZF: Zombie spawned at [M] [COORD(M)]!")
|
||||
M.nutrition = startHunger - 500//YOU BEST BE RUNNING AWAY AFTER THIS YOU BADDIE
|
||||
M.next_move_modifier = 1
|
||||
to_chat(M, "<span class='warning'>Your body splits away from the cell clone of yourself, your attempted clone birthing itself violently from you as it begins to shamble around, a terrifying abomination of science.</span>")
|
||||
|
||||
@@ -52,10 +52,10 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
|
||||
qdel(O)
|
||||
|
||||
|
||||
/datum/reagent/fermi/astral/on_mob_life(mob/living/M) // Gives you the ability to astral project for a moment!
|
||||
/datum/reagent/fermi/astral/on_mob_life(mob/living/carbon/M) // Gives you the ability to astral project for a moment!
|
||||
M.alpha = 255
|
||||
originalmind = M.mind
|
||||
if(current_cycle == 0)
|
||||
originalmind = M.mind
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] became an astral ghost")
|
||||
origin = M
|
||||
if (G == null)
|
||||
@@ -64,7 +64,8 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
|
||||
var/datum/action/chem/astral/AS = new(G)
|
||||
AS.origin = M
|
||||
AS.ghost = G
|
||||
M.mind.transfer_to(G)
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(G)
|
||||
SSblackbox.record_feedback("tally", "fermi_chem", 1, "Astral projections")
|
||||
if(overdosed)
|
||||
if(prob(50))
|
||||
@@ -77,23 +78,26 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
|
||||
if(G.stat == DEAD || G.pseudo_death == TRUE)
|
||||
G.mind.transfer_to(M)
|
||||
qdel(G)
|
||||
else
|
||||
M.Sleeping(20, 0)
|
||||
M.reagents.remove_reagent(id, 2, FALSE)
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/astral/on_mob_delete(mob/living/carbon/M)
|
||||
if(!G)
|
||||
if(M.mind)
|
||||
var/mob/living/simple_animal/astral/G = new(get_turf(M.loc))
|
||||
M.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end.
|
||||
to_chat(G, "<span class='warning'>[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'</b></span>")
|
||||
log_game("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!")
|
||||
originalmind.transfer_to(M)
|
||||
else if(G.mind)
|
||||
G.mind.transfer_to(origin)
|
||||
qdel(G)
|
||||
if(overdosed)
|
||||
to_chat(M, "<span class='warning'>The high volume of Astrogren you just took causes you to black out momentarily as your mind snaps back to your body.</b></span>")
|
||||
to_chat(M, "<span class='warning'>The high volume of astrogen you just took causes you to black out momentarily as your mind snaps back to your body.</b></span>")
|
||||
M.Sleeping(sleepytime, 0)
|
||||
antiGenetics = 255
|
||||
if(G)//just in case
|
||||
qdel(G)
|
||||
log_game("FERMICHEM: [M] has astrally returned to their body!")
|
||||
..()
|
||||
|
||||
//Okay so, this might seem a bit too good, but my counterargument is that it'll likely take all round to eventually kill you this way, then you have to be revived without a body. It takes approximately 50-80 minutes to die from this.
|
||||
@@ -119,6 +123,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
|
||||
M.alpha--
|
||||
antiGenetics--
|
||||
ADD_TRAIT(M, TRAIT_NOCLONE, "astral") //So you can't scan yourself, then die, to metacomm. You can only use your memories if you come back as something else.
|
||||
M.hellbound = TRUE
|
||||
if(180)
|
||||
to_chat(M, "<span class='notice'>You feel fear build up in yourself as more and more of your body and consciousness begins to fade.</b></span>")
|
||||
M.alpha--
|
||||
@@ -135,7 +140,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
|
||||
to_chat(M, "<span class='warning'>The last vestiges of your mind eagerly await your imminent annihilation.</b></span>")
|
||||
M.alpha--
|
||||
antiGenetics--
|
||||
if(0 to 30)
|
||||
if(-INFINITY to 30)
|
||||
to_chat(M, "<span class='warning'>Your body disperses from existence, as you become one with the universe.</b></span>")
|
||||
to_chat(M, "<span class='userdanger'>As your body disappears, your consciousness doesn't. Should you find a way back into the mortal coil, your memories of your previous life remain with you. (At the cost of staying in character while dead. Failure to do this may get you banned from this chem. You are still obligated to follow your directives if you play a midround antag, you do not remember the afterlife IC)</span>")//Legalised IC OOK? I have a suspicion this won't make it past the review. At least it'll be presented as a neat idea! If this is unacceptable how about the player can retain living memories across lives if they die in this way only.
|
||||
deadchat_broadcast("<span class='warning'>[M] has become one with the universe, meaning that their IC conciousness is continuous in a new life. If they find a way back to life, they are allowed to remember their previous life. Be careful what you say. If they abuse this, bwoink the FUCK outta them.</span>")
|
||||
|
||||
@@ -171,4 +171,33 @@
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "[id]_overdose")//holdover until above fix works
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/eigenstate/reaction_turf(turf/T, reac_volume)
|
||||
//if(cached_purity < 0.99) To add with next batch of fixes and tweaks.
|
||||
var/obj/structure/closet/First
|
||||
var/obj/structure/closet/Previous
|
||||
for(var/obj/structure/closet/C in T.contents)
|
||||
if(C.eigen_teleport == TRUE)
|
||||
C.visible_message("[C] fizzes, it's already linked to something else!")
|
||||
continue
|
||||
if(!Previous)
|
||||
First = C
|
||||
Previous = C
|
||||
continue
|
||||
C.eigen_teleport = TRUE
|
||||
C.eigen_target = Previous
|
||||
C.color = "#9999FF" //Tint the locker slightly.
|
||||
C.alpha = 200
|
||||
do_sparks(5,FALSE,C)
|
||||
Previous = C
|
||||
if(!First)
|
||||
return
|
||||
if(Previous == First)
|
||||
return
|
||||
First.eigen_teleport = TRUE
|
||||
First.eigen_target = Previous
|
||||
First.color = "#9999FF"
|
||||
First.alpha = 200
|
||||
do_sparks(5,FALSE,First)
|
||||
First.visible_message("The lockers' eigenstates spilt and merge, linking each of their contents together.")
|
||||
|
||||
//eigenstate END
|
||||
|
||||
@@ -71,8 +71,12 @@
|
||||
//If they have Acute hepatic pharmacokinesis, then route processing though liver.
|
||||
if(HAS_TRAIT(M, TRAIT_PHARMA))
|
||||
var/obj/item/organ/liver/L = M.getorganslot("liver")
|
||||
L.swelling+= 0.05
|
||||
return..()
|
||||
if(L)
|
||||
L.swelling+= 0.05
|
||||
return..()
|
||||
else
|
||||
M.adjustToxLoss(1)
|
||||
return..()
|
||||
|
||||
//otherwise proceed as normal
|
||||
var/obj/item/organ/genital/breasts/nB = new
|
||||
@@ -169,12 +173,14 @@
|
||||
|
||||
/datum/reagent/fermi/BEsmaller_hypo/on_mob_add(mob/living/carbon/M)
|
||||
. = ..()
|
||||
if(M.dna.features["has_vag"])
|
||||
var/obj/item/organ/genital/vagina/nV = new
|
||||
nV.Insert(M)
|
||||
if(M.dna.features["has_womb"])
|
||||
var/obj/item/organ/genital/womb/nW = new
|
||||
nW.Insert(M)
|
||||
if(!M.getorganslot("vagina"))
|
||||
if(M.dna.features["has_vag"])
|
||||
var/obj/item/organ/genital/vagina/nV = new
|
||||
nV.Insert(M)
|
||||
if(!M.getorganslot("womb"))
|
||||
if(M.dna.features["has_womb"])
|
||||
var/obj/item/organ/genital/womb/nW = new
|
||||
nW.Insert(M)
|
||||
|
||||
/datum/reagent/fermi/BEsmaller_hypo/on_mob_life(mob/living/carbon/M)
|
||||
var/obj/item/organ/genital/breasts/B = M.getorganslot("breasts")
|
||||
@@ -245,8 +251,12 @@
|
||||
//If they have Acute hepatic pharmacokinesis, then route processing though liver.
|
||||
if(HAS_TRAIT(M, TRAIT_PHARMA))
|
||||
var/obj/item/organ/liver/L = M.getorganslot("liver")
|
||||
L.swelling+= 0.05
|
||||
return..()
|
||||
if(L)
|
||||
L.swelling+= 0.05
|
||||
return..()
|
||||
else
|
||||
M.adjustToxLoss(1)
|
||||
return..()
|
||||
|
||||
//otherwise proceed as normal
|
||||
var/obj/item/organ/genital/penis/nP = new
|
||||
@@ -334,15 +344,16 @@
|
||||
|
||||
/datum/reagent/fermi/PEsmaller_hypo/on_mob_add(mob/living/carbon/M)
|
||||
. = ..()
|
||||
if(M.dna.features["has_balls"])
|
||||
var/obj/item/organ/genital/testicles/nT = new
|
||||
nT.Insert(M)
|
||||
if(!M.getorganslot("testicles"))
|
||||
if(M.dna.features["has_balls"])
|
||||
var/obj/item/organ/genital/testicles/nT = new
|
||||
nT.Insert(M)
|
||||
|
||||
/datum/reagent/fermi/PEsmaller_hypo/on_mob_life(mob/living/carbon/M)
|
||||
var/obj/item/organ/genital/penis/P = M.getorganslot("penis")
|
||||
if(!P)
|
||||
return ..()
|
||||
if(!M.dna.features["has_penis"])//Fast fix for those who don't want it.
|
||||
if(!M.dna.features["has_cock"])//Fast fix for those who don't want it.
|
||||
P.cached_length = P.cached_length - 0.2
|
||||
P.update()
|
||||
else if(P.cached_length > (M.dna.features["cock_length"]+0.1))
|
||||
|
||||
@@ -134,6 +134,23 @@
|
||||
var/obj/item/organ/tongue/T
|
||||
can_synth = TRUE
|
||||
|
||||
/datum/reagent/fermi/furranium/reaction_mob(mob/living/carbon/human/M, method=INJECT, reac_volume)
|
||||
if(method == INJECT)
|
||||
var/turf/T = get_turf(M)
|
||||
M.adjustOxyLoss(15)
|
||||
M.Knockdown(50)
|
||||
M.Stun(50)
|
||||
M.emote("cough")
|
||||
var/obj/item/toy/plush/P = pick(subtypesof(/obj/item/toy/plush))
|
||||
new P(T)
|
||||
to_chat(M, "<span class='warning'>You feel a lump form in your throat, as you suddenly cough up what seems to be a hairball?</b></span>")
|
||||
var/list/seen = viewers(8, T)
|
||||
for(var/mob/S in seen)
|
||||
to_chat(S, "<span class='warning'>[M] suddenly coughs up a [P.name]!</b></span>")
|
||||
var/T2 = get_random_station_turf()
|
||||
P.throw_at(T2, 8, 1)
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/furranium/on_mob_life(mob/living/carbon/M)
|
||||
|
||||
switch(current_cycle)
|
||||
@@ -160,15 +177,15 @@
|
||||
T.Remove(M)
|
||||
nT.Insert(M)
|
||||
T.moveToNullspace()//To valhalla
|
||||
to_chat(M, "<span class='notice'>Youw tongue feews... weally fwuffy!!</span>")
|
||||
to_chat(M, "<span class='big warning'>Your tongue feels... weally fwuffy!!</span>")
|
||||
if(17 to INFINITY)
|
||||
if(prob(10))
|
||||
if(prob(5))
|
||||
to_chat(M, "You find yourself unable to supress the desire to meow!")
|
||||
M.emote("nya")
|
||||
if(prob(10))
|
||||
if(prob(5))
|
||||
to_chat(M, "You find yourself unable to supress the desire to howl!")
|
||||
M.emote("awoo")
|
||||
if(prob(20))
|
||||
if(prob(5))
|
||||
var/list/seen = viewers(5, get_turf(M))//Sound and sight checkers
|
||||
for(var/victim in seen)
|
||||
if((istype(victim, /mob/living/simple_animal/pet/)) || (victim == M) || (!isliving(victim)))
|
||||
@@ -178,7 +195,7 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/furranium/on_mob_delete(mob/living/carbon/M)
|
||||
if(purity < 0.9)//Only permanent if you're a good chemist.
|
||||
if(purity < 1)//Only permanent if you're a good chemist.
|
||||
nT = M.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
nT.Remove(M)
|
||||
qdel(nT)
|
||||
@@ -188,6 +205,7 @@
|
||||
else
|
||||
log_game("FERMICHEM: [M] ckey: [M.key]'s tongue has been made permanent")
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//Nanite removal
|
||||
//Writen by Trilby!! Embellsished a little by me.
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
pH = 8.6
|
||||
overdose_threshold = 35
|
||||
ImpureChem = "yamerol_tox"
|
||||
InverseChemVal = 0.3
|
||||
InverseChemVal = 0.4
|
||||
InverseChem = "yamerol_tox"
|
||||
can_synth = TRUE
|
||||
|
||||
@@ -16,17 +16,31 @@
|
||||
var/obj/item/organ/lungs/L = C.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
|
||||
if(T)
|
||||
T.adjustTongueLoss(C, -2)
|
||||
T.adjustTongueLoss(C, -2)//Fix the inputs me!
|
||||
if(L)
|
||||
L.adjustLungLoss(-5, C)
|
||||
C.adjustOxyLoss(-2)
|
||||
else
|
||||
C.adjustOxyLoss(-10)
|
||||
|
||||
if(T)
|
||||
if(T.name == "fluffy tongue")
|
||||
var/obj/item/organ/tongue/nT
|
||||
if(C.dna && C.dna.species && C.dna.species.mutanttongue)
|
||||
nT = new C.dna.species.mutanttongue()
|
||||
else
|
||||
nT = new()
|
||||
T.Remove(C)
|
||||
qdel(T)
|
||||
nT.Insert(C)
|
||||
to_chat(C, "<span class='notice'>You feel your tongue.... unfluffify...?</span>")
|
||||
holder.remove_reagent(src.id, "10")
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/yamerol/overdose_process(mob/living/carbon/C)
|
||||
var/obj/item/organ/tongue/oT = C.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
|
||||
if(current_cycle == 1)
|
||||
to_chat(C, "<span class='notice'>You feel the Yamerol sooth your tongue and lungs.</span>")
|
||||
if(current_cycle > 10)
|
||||
if(!C.getorganslot(ORGAN_SLOT_TONGUE))
|
||||
var/obj/item/organ/tongue/T
|
||||
@@ -40,7 +54,6 @@
|
||||
else
|
||||
if((oT.name == "fluffy tongue") && (purity == 1))
|
||||
var/obj/item/organ/tongue/T
|
||||
|
||||
if(C.dna && C.dna.species && C.dna.species.mutanttongue)
|
||||
T = new C.dna.species.mutanttongue()
|
||||
else
|
||||
@@ -57,6 +70,10 @@
|
||||
to_chat(C, "<span class='notice'>You feel your lungs reform in your chest.</span>")
|
||||
holder.remove_reagent(src.id, "10")
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
C.adjustOxyLoss(-3)
|
||||
>>>>>>> upstream/master
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/yamerol/reaction_mob(var/mob/living/L)
|
||||
@@ -87,7 +104,7 @@
|
||||
T.adjustTongueLoss(C, 1)
|
||||
if(L)
|
||||
L.adjustLungLoss(4, C)
|
||||
C.adjustOxyLoss(2)
|
||||
C.adjustOxyLoss(3)
|
||||
else
|
||||
C.adjustOxyLoss(10)
|
||||
..()
|
||||
|
||||
@@ -29,10 +29,22 @@
|
||||
for(var/turf/turf in range(2,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
|
||||
if (1101 to INFINITY) //If you're crafty
|
||||
if (1101 to 1500) //If you're crafty
|
||||
for(var/turf/turf in range(3,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
|
||||
if (1501 to 2500) //requested
|
||||
for(var/turf/turf in range(4,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
|
||||
if (2501 to 5000)
|
||||
for(var/turf/turf in range(5,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
|
||||
if (5001 to INFINITY)
|
||||
for(var/turf/turf in range(6,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
|
||||
|
||||
message_admins("Fermi explosion at [T], with a temperature of [temp], pH of [pH], Impurity tot of [ImpureTot].")
|
||||
log_game("Fermi explosion at [T], with a temperature of [temp], pH of [pH], Impurity tot of [ImpureTot].")
|
||||
@@ -512,7 +524,7 @@
|
||||
name = "Yamerol"
|
||||
id = "yamerol"
|
||||
results = list("yamerol" = 1.5)
|
||||
required_reagents = list("perfluorodecalin" = 0.5, "furranium" = 0.5, "water" = 0.5)
|
||||
required_reagents = list("perfluorodecalin" = 0.5, "salbutamol" = 0.5, "water" = 0.5)
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 300
|
||||
OptimalTempMax = 500
|
||||
|
||||
@@ -64,42 +64,6 @@
|
||||
else
|
||||
message += "\" and tips their hat. \"[pick("Yeehaw!", "Boy howdy.", "Darn tootin'.", "Well don't that beat all.", "Whoooowee, would ya look at that!", "Whoooowee! Makin' bacon!", "Cream Gravy!", "Yippekeeyah-heeyapeeah-kayoh!", "Move 'em out!", "Giddy up!")]"
|
||||
speech_args[SPEECH_MESSAGE] = trim(message)
|
||||
/*
|
||||
if(message[1] != "*")
|
||||
message = " [message]"
|
||||
var/list/french_words = strings("french_replacement.json", "french")
|
||||
|
||||
for(var/key in french_words)
|
||||
var/value = french_words[key]
|
||||
if(islist(value))
|
||||
value = pick(value)
|
||||
|
||||
message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
|
||||
message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
|
||||
message = replacetextEx(message, " [key]", " [value]")
|
||||
|
||||
if(prob(3))
|
||||
message += pick(" Honh honh honh!"," Honh!"," Zut Alors!")
|
||||
speech_args[SPEECH_MESSAGE] = trim(message)
|
||||
*/
|
||||
/*
|
||||
/obj/item/clothing/head/hattip/speechModification(message, /mob/living/carbon/C)
|
||||
..()
|
||||
var/mob/living/carbon/C = get_wearer()//user
|
||||
var/obj/item/organ/tongue/T = C.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
if (T.name == "fluffy tongue")
|
||||
if(prob(0.01))
|
||||
message += "\" and tips their hat. \"swpy's sappin' my chem dispwencer uwu!!"
|
||||
return message
|
||||
message += "\" and tips their hat. \"[pick("weehaw!", "bwoy howdy.", "dawn tuutin'.", "weww don't that beat aww.", "whoooowee, wouwd ya wook at that!", "whoooowee! makin' bwacon!", "cweam gwavy!", "yippekeeyah-heeyapeeah-kwayoh!", "mwove 'em uut!", "gwiddy up!")]"
|
||||
return message
|
||||
if(prob(0.01))
|
||||
message += "\" and tips their hat. \"Spy's sappin' my chem dispenser!"//How did I not think of this earlier
|
||||
message_admins("I really appreciate all the hard work you put into adminning citadel, I hope you're all having a good day and I hope this hidden and rare message admins brightens up your day.")
|
||||
return message
|
||||
message += "\" and tips their hat. \"[pick("Yeehaw!", "Boy howdy.", "Darn tootin'.", "Well don't that beat all.", "Whoooowee, would ya look at that!", "Whoooowee! Makin' bacon!", "Cream Gravy!", "Yippekeeyah-heeyapeeah-kayoh!", "Move 'em out!", "Giddy up!")]"
|
||||
return message
|
||||
*/
|
||||
|
||||
/obj/item/clothing/head/hattip/proc/get_wearer()
|
||||
return loc
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
//A little janky with pockets
|
||||
/obj/item/fermichem/pHbooklet/attack_hand(mob/user)
|
||||
if(user.get_held_index_of_item(src))//Does this check pockets too..?
|
||||
if(numberOfPages == 50)
|
||||
icon_state = "pHbookletOpen"
|
||||
if(numberOfPages >= 1)
|
||||
var/obj/item/fermichem/pHpaper/P = new /obj/item/fermichem/pHpaper
|
||||
P.add_fingerprint(user)
|
||||
|
||||
@@ -141,12 +141,18 @@
|
||||
|
||||
// Gunna allow this for now, still really don't approve - Pooj
|
||||
/obj/item/hypospray/mkii/emag_act(mob/user)
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, "[src] happens to be already overcharged.")
|
||||
return
|
||||
inject_wait = COMBAT_WAIT_INJECT
|
||||
spray_wait = COMBAT_WAIT_SPRAY
|
||||
spray_self = COMBAT_SELF_INJECT
|
||||
inject_self = COMBAT_SELF_SPRAY
|
||||
penetrates = TRUE
|
||||
to_chat(user, "You overcharge [src]'s control circuit.")
|
||||
obj_flags |= EMAGGED
|
||||
return TRUE
|
||||
|
||||
/obj/item/hypospray/mkii/attack_hand(mob/user)
|
||||
. = ..() //Don't bother changing this or removing it from containers will break.
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null)
|
||||
reagent_state = LIQUID
|
||||
color = "#FFFFFF" // rgb: 255, 255, 255
|
||||
can_synth = FALSE
|
||||
nutriment_factor = 0.5 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume)
|
||||
@@ -19,7 +20,6 @@
|
||||
var/obj/effect/decal/cleanable/semen/S = locate() in T
|
||||
if(!S)
|
||||
S = new(T)
|
||||
S.reagents.add_reagent("semen", reac_volume)
|
||||
if(data["blood_DNA"])
|
||||
S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"]))
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null)
|
||||
reagent_state = LIQUID
|
||||
color = "#AAAAAA77"
|
||||
can_synth = FALSE
|
||||
nutriment_factor = 0.5 * REAGENTS_METABOLISM
|
||||
|
||||
/obj/effect/decal/cleanable/femcum
|
||||
@@ -82,7 +83,6 @@
|
||||
var/obj/effect/decal/cleanable/femcum/S = locate() in T
|
||||
if(!S)
|
||||
S = new(T)
|
||||
S.reagents.add_reagent("femcum", reac_volume)
|
||||
if(data["blood_DNA"])
|
||||
S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"]))
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
var/tmp/next_process = 0 // Waiting for this SSbellies times_fired to process again.
|
||||
var/tmp/list/items_preserved = list() // Stuff that wont digest so we shouldn't process it again.
|
||||
var/tmp/next_emote = 0 // When we're supposed to print our next emote, as a belly controller tick #
|
||||
var/tmp/recent_sound = FALSE // Prevent audio spam
|
||||
var/tmp/recent_sound // Prevent audio spam
|
||||
var/tmp/last_hearcheck = 0
|
||||
var/tmp/list/hearing_mobs
|
||||
|
||||
@@ -152,11 +152,13 @@
|
||||
SSbellies.belly_list += src
|
||||
|
||||
/obj/belly/Destroy()
|
||||
SSbellies.belly_list -= src
|
||||
if(owner)
|
||||
owner.vore_organs -= src
|
||||
owner = null
|
||||
. = ..()
|
||||
Remove(owner)
|
||||
return ..()
|
||||
|
||||
/obj/belly/proc/Remove(mob/living/owner)
|
||||
owner.vore_organs -= src
|
||||
owner = null
|
||||
|
||||
// Called whenever an atom enters this belly
|
||||
/obj/belly/Entered(var/atom/movable/thing,var/atom/OldLoc)
|
||||
@@ -167,12 +169,13 @@
|
||||
to_chat(owner,"<span class='notice'>[thing] slides into your [lowertext(name)].</span>")
|
||||
|
||||
//Sound w/ antispam flag setting
|
||||
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))
|
||||
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
|
||||
if(is_wet && (world.time > recent_sound))
|
||||
var/turf/source = get_turf(owner)
|
||||
var/sound/eating = GLOB.vore_sounds[vore_sound]
|
||||
for(var/mob/living/M in get_hearers_in_view(3, source))
|
||||
if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
|
||||
SEND_SOUND(M, eating)
|
||||
recent_sound = (world.time + 20 SECONDS)
|
||||
|
||||
//Messages if it's a mob
|
||||
if(isliving(thing))
|
||||
@@ -187,7 +190,7 @@
|
||||
var/atom/destination = drop_location()
|
||||
//Don't bother if we don't have contents
|
||||
if(!contents.len)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/count = 0
|
||||
for(var/thing in contents)
|
||||
@@ -206,10 +209,10 @@
|
||||
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(2, get_turf(owner)))
|
||||
for(var/mob/living/M in get_hearers_in_view(2, get_turf(owner)))
|
||||
if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
|
||||
var/sound/releasement = GLOB.release_sounds[release_sound]
|
||||
playsound(get_turf(owner),releasement,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
SEND_SOUND(M, releasement)
|
||||
|
||||
//Clean up our own business
|
||||
items_preserved.Cut()
|
||||
@@ -233,10 +236,10 @@
|
||||
M.forceMove(drop_location()) // Move the belly contents into the same location as belly's owner.
|
||||
items_preserved -= M
|
||||
if(!silent)
|
||||
for(var/mob/H in get_hearers_in_view(2, get_turf(owner)))
|
||||
for(var/mob/living/H in get_hearers_in_view(2, get_turf(owner)))
|
||||
if(H.client && (H.client.prefs.cit_toggles & EATING_NOISES))
|
||||
var/sound/releasement = GLOB.release_sounds[release_sound]
|
||||
playsound(get_turf(owner),releasement,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
SEND_SOUND(H, releasement)
|
||||
|
||||
if(istype(M,/mob/living))
|
||||
var/mob/living/ML = M
|
||||
@@ -285,10 +288,6 @@
|
||||
SEND_SIGNAL(prey, COMSIG_CLEAR_MOOD_EVENT, "emptyprey", /datum/mood_event/emptyprey)
|
||||
|
||||
prey.forceMove(src)
|
||||
var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
|
||||
|
||||
if(is_wet)
|
||||
prey.playsound_local(loc,preyloop,70,0, channel = CHANNEL_PREYLOOP)
|
||||
|
||||
owner.updateVRPanel()
|
||||
|
||||
@@ -317,10 +316,12 @@
|
||||
M.cure_blind("belly_[REF(src)]")
|
||||
target.nom_mob(content, target.owner)
|
||||
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))
|
||||
var/sound/devourments = GLOB.vore_sounds[vore_sound]
|
||||
playsound(get_turf(owner),devourments,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
var/turf/source = get_turf(owner)
|
||||
var/sound/eating = GLOB.vore_sounds[vore_sound]
|
||||
for(var/mob/living/M in get_hearers_in_view(3, source))
|
||||
if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
|
||||
SEND_SOUND(M, eating)
|
||||
|
||||
owner.updateVRPanel()
|
||||
for(var/mob/living/M in contents)
|
||||
M.updateVRPanel()
|
||||
@@ -524,22 +525,25 @@
|
||||
struggle_outer_message = "<span class='alert'>" + struggle_outer_message + "</span>"
|
||||
struggle_user_message = "<span class='alert'>" + struggle_user_message + "</span>"
|
||||
|
||||
var/turf/source = get_turf(owner)
|
||||
var/sound/struggle_snuggle = sound(get_sfx("struggle_sound"))
|
||||
var/sound/struggle_rustle = sound(get_sfx("rustle"))
|
||||
|
||||
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)
|
||||
for(var/mob/living/M in get_hearers_in_view(3, source))
|
||||
if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
|
||||
SEND_SOUND(M, struggle_snuggle)
|
||||
|
||||
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/living/M in get_hearers_in_view(3, source))
|
||||
if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
|
||||
SEND_SOUND(M, struggle_rustle)
|
||||
|
||||
for(var/mob/M in get_hearers_in_view(3, get_turf(owner)))
|
||||
var/list/watching = hearers(3, owner)
|
||||
for(var/mob/living/M in watching)
|
||||
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.
|
||||
|
||||
@@ -4,10 +4,16 @@
|
||||
recent_sound = FALSE
|
||||
return SSBELLIES_IGNORED
|
||||
|
||||
if(!owner)
|
||||
qdel(src)
|
||||
SSbellies.belly_list -= src
|
||||
return SSBELLIES_PROCESSED
|
||||
|
||||
if(loc != owner)
|
||||
if(istype(owner))
|
||||
loc = owner
|
||||
if(isliving(owner)) //we don't have machine based bellies. (yet :honk:)
|
||||
forceMove(owner)
|
||||
else
|
||||
SSbellies.belly_list -= src
|
||||
qdel(src)
|
||||
return SSBELLIES_PROCESSED
|
||||
|
||||
@@ -26,10 +32,13 @@
|
||||
if(isbelly(M.loc))
|
||||
if(world.time > M.next_preyloop)
|
||||
if(is_wet)
|
||||
if(!M.client)
|
||||
continue
|
||||
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)
|
||||
M.next_preyloop = world.time + 52 SECONDS
|
||||
if(M.client.prefs.cit_toggles & DIGESTION_NOISES)
|
||||
var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
|
||||
M.playsound_local(get_turf(src),preyloop, 80,0, channel = CHANNEL_PREYLOOP)
|
||||
M.next_preyloop = (world.time + 52 SECONDS)
|
||||
|
||||
|
||||
/////////////////////////// Exit Early ////////////////////////////
|
||||
@@ -63,12 +72,12 @@
|
||||
if(prob(25))
|
||||
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
|
||||
LAZYCLEARLIST(hearing_mobs)
|
||||
for(var/mob/H in get_hearers_in_view(3, source))
|
||||
for(var/mob/living/H in get_hearers_in_view(3, source))
|
||||
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
|
||||
continue
|
||||
LAZYADD(hearing_mobs, H)
|
||||
last_hearcheck = world.time
|
||||
for(var/mob/H in hearing_mobs)
|
||||
for(var/mob/living/H in hearing_mobs)
|
||||
if(!isbelly(H.loc))
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
|
||||
else if(H in contents)
|
||||
@@ -100,12 +109,12 @@
|
||||
owner.nutrition += 400 // so eating dead mobs gives you *something*.
|
||||
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
|
||||
LAZYCLEARLIST(hearing_mobs)
|
||||
for(var/mob/H in get_hearers_in_view(3, source))
|
||||
for(var/mob/living/H in get_hearers_in_view(3, source))
|
||||
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
|
||||
continue
|
||||
LAZYADD(hearing_mobs, H)
|
||||
last_hearcheck = world.time
|
||||
for(var/mob/H in hearing_mobs)
|
||||
for(var/mob/living/H in hearing_mobs)
|
||||
if(!isbelly(H.loc))
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_death)
|
||||
else if(H in contents)
|
||||
@@ -135,12 +144,12 @@
|
||||
if(prob(25))
|
||||
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
|
||||
LAZYCLEARLIST(hearing_mobs)
|
||||
for(var/mob/H in get_hearers_in_view(3, source))
|
||||
for(var/mob/living/H in get_hearers_in_view(3, source))
|
||||
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
|
||||
continue
|
||||
LAZYADD(hearing_mobs, H)
|
||||
last_hearcheck = world.time
|
||||
for(var/mob/H in hearing_mobs)
|
||||
for(var/mob/living/H in hearing_mobs)
|
||||
if(!isbelly(H.loc))
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
|
||||
else if(H in contents)
|
||||
@@ -159,12 +168,12 @@
|
||||
if(prob(35))
|
||||
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
|
||||
LAZYCLEARLIST(hearing_mobs)
|
||||
for(var/mob/H in get_hearers_in_view(3, source))
|
||||
for(var/mob/living/H in get_hearers_in_view(3, source))
|
||||
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
|
||||
continue
|
||||
LAZYADD(hearing_mobs, H)
|
||||
last_hearcheck = world.time
|
||||
for(var/mob/H in hearing_mobs)
|
||||
for(var/mob/living/H in hearing_mobs)
|
||||
if(!isbelly(H.loc))
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
|
||||
else if(H in contents)
|
||||
@@ -179,12 +188,12 @@
|
||||
if(prob(10))//Less often than gurgles. People might leave this on forever.
|
||||
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
|
||||
LAZYCLEARLIST(hearing_mobs)
|
||||
for(var/mob/H in get_hearers_in_view(3, source))
|
||||
for(var/mob/living/H in get_hearers_in_view(3, source))
|
||||
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
|
||||
continue
|
||||
LAZYADD(hearing_mobs, H)
|
||||
last_hearcheck = world.time
|
||||
for(var/mob/H in hearing_mobs)
|
||||
for(var/mob/living/H in hearing_mobs)
|
||||
if(!isbelly(H.loc))
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
|
||||
else if(H in contents)
|
||||
@@ -221,12 +230,12 @@
|
||||
if(prob(55)) //if you're hearing this, you're a vore ho anyway.
|
||||
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
|
||||
LAZYCLEARLIST(hearing_mobs)
|
||||
for(var/mob/H in get_hearers_in_view(3, source))
|
||||
for(var/mob/living/H in get_hearers_in_view(3, source))
|
||||
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
|
||||
continue
|
||||
LAZYADD(hearing_mobs, H)
|
||||
last_hearcheck = world.time
|
||||
for(var/mob/H in hearing_mobs)
|
||||
for(var/mob/living/H in hearing_mobs)
|
||||
if(!isbelly(H.loc))
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
|
||||
else if(H in contents)
|
||||
@@ -254,12 +263,12 @@
|
||||
M.visible_message("<span class='notice'>You watch as [owner]'s guts loudly rumble as it finishes off a meal.</span>")
|
||||
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
|
||||
LAZYCLEARLIST(hearing_mobs)
|
||||
for(var/mob/H in get_hearers_in_view(3, source))
|
||||
for(var/mob/living/H in get_hearers_in_view(3, source))
|
||||
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
|
||||
continue
|
||||
LAZYADD(hearing_mobs, H)
|
||||
last_hearcheck = world.time
|
||||
for(var/mob/H in hearing_mobs)
|
||||
for(var/mob/living/H in hearing_mobs)
|
||||
if(!isbelly(H.loc))
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_death)
|
||||
else if(H in contents)
|
||||
|
||||
@@ -60,18 +60,6 @@
|
||||
B.can_taste = 1
|
||||
return TRUE
|
||||
|
||||
/*
|
||||
// Hide vore organs in contents
|
||||
//
|
||||
/datum/proc/view_variables_filter_contents(list/L)
|
||||
return 0
|
||||
|
||||
/mob/living/view_variables_filter_contents(list/L)
|
||||
. = ..()
|
||||
var/len_before = L.len
|
||||
L -= vore_organs
|
||||
. += len_before - L.len*/
|
||||
|
||||
// Handle being clicked, perhaps with something to devour
|
||||
//
|
||||
|
||||
@@ -121,21 +109,12 @@
|
||||
/mob/living/proc/feed_grabbed_to_self(var/mob/living/user, var/mob/living/prey)
|
||||
var/belly = user.vore_selected
|
||||
return perform_the_nom(user, prey, user, belly)
|
||||
/*
|
||||
/mob/living/proc/eat_held_mob(var/mob/living/user, var/mob/living/prey, var/mob/living/pred)
|
||||
var/belly
|
||||
if(user != pred)
|
||||
belly = input("Choose Belly") in pred.vore_organs
|
||||
else
|
||||
belly = pred.vore_selected
|
||||
return perform_the_nom(user, prey, pred, belly)*/
|
||||
|
||||
/mob/living/proc/feed_self_to_grabbed(var/mob/living/user, var/mob/living/pred)
|
||||
var/belly = input("Choose Belly") in pred.vore_organs
|
||||
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
|
||||
var/belly = input("Choose Belly") in pred.vore_organs
|
||||
return perform_the_nom(user, prey, pred, belly)
|
||||
|
||||
@@ -182,9 +161,13 @@
|
||||
|
||||
// If we got this far, nom successful! Announce it!
|
||||
user.visible_message(success_msg)
|
||||
for(var/mob/M in get_hearers_in_view(5, get_turf(user)))
|
||||
|
||||
// incredibly contentious eating noises time
|
||||
var/turf/source = get_turf(user)
|
||||
var/sound/eating = GLOB.vore_sounds[belly.vore_sound]
|
||||
for(var/mob/living/M in get_hearers_in_view(3, source))
|
||||
if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
|
||||
playsound(get_turf(user),"[belly.vore_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
SEND_SOUND(M, eating)
|
||||
|
||||
// Actually shove prey into the belly.
|
||||
belly.nom_mob(prey, user)
|
||||
@@ -214,41 +197,7 @@
|
||||
|
||||
//
|
||||
//End vore code.
|
||||
/*
|
||||
//Handle case: /obj/item/holder
|
||||
if(/obj/item/holder/micro)
|
||||
var/obj/item/holder/H = I
|
||||
|
||||
if(!isliving(user)) return 0 // Return 0 to continue upper procs
|
||||
var/mob/living/attacker = user // Typecast to living
|
||||
|
||||
if (is_vore_predator(src))
|
||||
for (var/mob/living/M in H.contents)
|
||||
attacker.eat_held_mob(attacker, M, src)
|
||||
return 1 //Return 1 to exit upper procs
|
||||
else
|
||||
log_attack("[attacker] attempted to feed [H.contents] to [src] ([src.type]) but it failed.")
|
||||
|
||||
// I just can't imagine this not being complained about
|
||||
//Handle case: /obj/item/radio/beacon
|
||||
if(/obj/item/radio/beacon)
|
||||
var/confirm = alert(user, "[src == user ? "Eat the beacon?" : "Feed the beacon to [src]?"]", "Confirmation", "Yes!", "Cancel")
|
||||
if(confirm == "Yes!")
|
||||
var/bellychoice = input("Which belly?","Select A Belly") in src.vore_organs
|
||||
var/datum/belly/B = src.vore_organs[bellychoice]
|
||||
src.visible_message("<span class='warning'>[user] is trying to stuff a beacon into [src]'s [bellychoice]!</span>","<span class='warning'>[user] is trying to stuff a beacon into you!</span>")
|
||||
if(do_after(user,30,src))
|
||||
user.drop_item()
|
||||
I.loc = src
|
||||
B.internal_contents += I
|
||||
src.visible_message("<span class='warning'>[src] is fed the beacon!</span>","You're fed the beacon!")
|
||||
playsound(get_turf(src), B.vore_sound,50,0,-6,0)
|
||||
return 1
|
||||
else
|
||||
return 1 //You don't get to hit someone 'later'
|
||||
|
||||
return 0
|
||||
*/
|
||||
|
||||
//
|
||||
// Our custom resist catches for /mob/living
|
||||
@@ -272,7 +221,7 @@
|
||||
if(isbelly(loc))
|
||||
src.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case
|
||||
var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
|
||||
src.playsound_local(get_turf(src),preyloop,80,0, channel = CHANNEL_PREYLOOP)
|
||||
SEND_SOUND(src, preyloop)
|
||||
else
|
||||
to_chat(src, "<span class='alert'>You aren't inside anything, you clod.</span>")
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
/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 += "Remember that your prey is blind, use audible mode subtle messages to communicate to them with posts!<br>"
|
||||
dat += "Remember that the prey is blind, use audible mode subtle messages to communicate to them with posts!<br>"
|
||||
dat += "<HR>"
|
||||
var/atom/userloc = user.loc
|
||||
if (isbelly(userloc))
|
||||
@@ -554,7 +554,7 @@
|
||||
if(href_list["b_releasesoundtest"])
|
||||
var/sound/releasetest = GLOB.release_sounds[selected.release_sound]
|
||||
if(releasetest)
|
||||
user << releasetest
|
||||
SEND_SOUND(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
|
||||
@@ -567,7 +567,7 @@
|
||||
if(href_list["b_soundtest"])
|
||||
var/sound/voretest = GLOB.vore_sounds[selected.vore_sound]
|
||||
if(voretest)
|
||||
user << voretest
|
||||
SEND_SOUND(user, voretest)
|
||||
|
||||
if(href_list["b_tastes"])
|
||||
selected.can_taste = !selected.can_taste
|
||||
|
||||
Reference in New Issue
Block a user