mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-07-19 20:23:07 +01:00
Merge branch 'master' into upstream-merge-9601
This commit is contained in:
@@ -227,7 +227,6 @@
|
||||
|
||||
if(!void)
|
||||
void = new()
|
||||
void.MakeGreed()
|
||||
screen += void
|
||||
|
||||
if((prefs.lastchangelog != changelog_hash) && isnewplayer(src.mob)) //bolds the changelog button on the interface so we know there are updates.
|
||||
|
||||
@@ -27,6 +27,14 @@
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/eyes/thinblindfold
|
||||
display_name = "blindfold, thin white (recolorable)"
|
||||
path = /obj/item/clothing/glasses/sunglasses/thinblindfold
|
||||
|
||||
/datum/gear/eyes/thinblindfold/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/eyes/glasses
|
||||
display_name = "Glasses, prescription"
|
||||
path = /obj/item/clothing/glasses/regular
|
||||
|
||||
@@ -58,21 +58,21 @@
|
||||
|
||||
if(pref.species != SPECIES_CUSTOM)
|
||||
pref.pos_traits.Cut()
|
||||
pref.neu_traits.Cut()
|
||||
pref.neg_traits.Cut()
|
||||
else
|
||||
// Clean up positive traits
|
||||
for(var/path in pref.pos_traits)
|
||||
if(!(path in positive_traits))
|
||||
pref.pos_traits -= path
|
||||
//Neutral traits
|
||||
for(var/path in pref.neu_traits)
|
||||
if(!(path in neutral_traits))
|
||||
pref.neu_traits -= path
|
||||
//Negative traits
|
||||
for(var/path in pref.neg_traits)
|
||||
if(!(path in negative_traits))
|
||||
pref.neg_traits -= path
|
||||
// Clean up positive traits
|
||||
for(var/path in pref.pos_traits)
|
||||
if(!(path in positive_traits))
|
||||
pref.pos_traits -= path
|
||||
//Neutral traits
|
||||
for(var/path in pref.neu_traits)
|
||||
if(!(path in neutral_traits))
|
||||
pref.neu_traits -= path
|
||||
if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits))
|
||||
pref.neu_traits -= path
|
||||
//Negative traits
|
||||
for(var/path in pref.neg_traits)
|
||||
if(!(path in negative_traits))
|
||||
pref.neg_traits -= path
|
||||
|
||||
var/datum/species/selected_species = GLOB.all_species[pref.species]
|
||||
if(selected_species.selects_bodytype)
|
||||
@@ -82,7 +82,6 @@
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.custom_species = pref.custom_species
|
||||
var/datum/species/selected_species = GLOB.all_species[pref.species]
|
||||
|
||||
if(character.isSynthetic()) //Checking if we have a synth on our hands, boys.
|
||||
pref.dirty_synth = 1
|
||||
@@ -100,13 +99,15 @@
|
||||
//Any additional non-trait settings can be applied here
|
||||
new_S.blood_color = pref.blood_color
|
||||
|
||||
//Any additional non-trait settings can be applied here
|
||||
new_CS.blood_color = pref.blood_color
|
||||
//Any additional non-trait settings can be applied here
|
||||
new_S.blood_color = pref.blood_color
|
||||
|
||||
if(pref.species == SPECIES_CUSTOM)
|
||||
//Statistics for this would be nice
|
||||
var/english_traits = english_list(new_S.traits, and_text = ";", comma_text = ";")
|
||||
log_game("TRAITS [pref.client_ckey]/([character]) with: [english_traits]") //Terrible 'fake' key_name()... but they aren't in the same entity yet
|
||||
else
|
||||
|
||||
if(pref.species == SPECIES_CUSTOM)
|
||||
//Statistics for this would be nice
|
||||
var/english_traits = english_list(new_CS.traits, and_text = ";", comma_text = ";")
|
||||
log_game("TRAITS [pref.client_ckey]/([character]) with: [english_traits]") //Terrible 'fake' key_name()... but they aren't in the same entity yet
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/content(var/mob/user)
|
||||
. += "<b>Custom Species Name:</b> "
|
||||
@@ -117,15 +118,16 @@
|
||||
. += "<b>Icon Base: </b> "
|
||||
. += "<a href='?src=\ref[src];custom_base=1'>[pref.custom_base ? pref.custom_base : "Human"]</a><br>"
|
||||
|
||||
var/traits_left = pref.max_traits
|
||||
. += "<b>Traits Left:</b> [traits_left]<br>"
|
||||
if(pref.species == SPECIES_CUSTOM)
|
||||
var/points_left = pref.starting_trait_points
|
||||
var/traits_left = pref.max_traits
|
||||
|
||||
for(var/T in pref.pos_traits + pref.neg_traits)
|
||||
points_left -= traits_costs[T]
|
||||
traits_left--
|
||||
|
||||
. += "<b>Points Left:</b> [points_left]<br>"
|
||||
. += "<b>Traits Left:</b> [traits_left]<br>"
|
||||
if(points_left < 0 || traits_left < 0 || !pref.custom_species)
|
||||
. += "<span style='color:red;'><b>^ Fix things! ^</b></span><br>"
|
||||
|
||||
@@ -136,19 +138,18 @@
|
||||
. += "<li>- <a href='?src=\ref[src];clicked_pos_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
|
||||
. += "</ul>"
|
||||
|
||||
. += "<a href='?src=\ref[src];add_trait=[NEUTRAL_MODE]'>Neutral Trait +</a><br>"
|
||||
. += "<ul>"
|
||||
for(var/T in pref.neu_traits)
|
||||
var/datum/trait/trait = neutral_traits[T]
|
||||
. += "<li>- <a href='?src=\ref[src];clicked_neu_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
|
||||
. += "</ul>"
|
||||
|
||||
. += "<a href='?src=\ref[src];add_trait=[NEGATIVE_MODE]'>Negative Trait +</a><br>"
|
||||
. += "<ul>"
|
||||
for(var/T in pref.neg_traits)
|
||||
var/datum/trait/trait = negative_traits[T]
|
||||
. += "<li>- <a href='?src=\ref[src];clicked_neg_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
|
||||
. += "</ul>"
|
||||
. += "<a href='?src=\ref[src];add_trait=[NEUTRAL_MODE]'>Neutral Trait +</a><br>"
|
||||
. += "<ul>"
|
||||
for(var/T in pref.neu_traits)
|
||||
var/datum/trait/trait = neutral_traits[T]
|
||||
. += "<li>- <a href='?src=\ref[src];clicked_neu_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
|
||||
. += "</ul>"
|
||||
. += "<b>Blood Color: </b>" //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their own blood color.
|
||||
. += "<a href='?src=\ref[src];blood_color=1'>Set Color</a>"
|
||||
. += "<a href='?src=\ref[src];blood_reset=1'>R</a><br>"
|
||||
@@ -224,8 +225,12 @@
|
||||
picklist = positive_traits.Copy() - pref.pos_traits
|
||||
mylist = pref.pos_traits
|
||||
if(NEUTRAL_MODE)
|
||||
picklist = neutral_traits.Copy() - pref.neu_traits
|
||||
mylist = pref.neu_traits
|
||||
if(pref.species == SPECIES_CUSTOM)
|
||||
picklist = neutral_traits.Copy() - pref.neu_traits
|
||||
mylist = pref.neu_traits
|
||||
else
|
||||
picklist = everyone_traits.Copy() - pref.neu_traits
|
||||
mylist = pref.neu_traits
|
||||
if(NEGATIVE_MODE)
|
||||
picklist = negative_traits.Copy() - pref.neg_traits
|
||||
mylist = pref.neg_traits
|
||||
|
||||
@@ -399,6 +399,13 @@ BLIND // can't see anything
|
||||
desc = "A white blindfold that covers the eyes, preventing sight."
|
||||
icon_state = "blindfoldwhite"
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/thinblindfold
|
||||
name = "thin white blindfold"
|
||||
desc = "A thin blindfold to help protect sensitive eyes while still allowing some sight"
|
||||
icon_state = "blindfoldwhite"
|
||||
flash_protection = FLASH_PROTECTION_MODERATE //not as thick, only offers some protection
|
||||
tint = TINT_HEAVY
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/blindfold/tape
|
||||
name = "length of tape"
|
||||
desc = "It's a robust DIY blindfold!"
|
||||
|
||||
@@ -6054,6 +6054,23 @@
|
||||
. = ..()
|
||||
reagents.add_reagent("protein", 8)
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chickennoodlesoup
|
||||
name = "chicken noodle soup"
|
||||
gender = PLURAL
|
||||
desc = "A bright bowl of yellow broth with cuts of meat, noodles and carrots."
|
||||
icon = 'icons/obj/food_custom.dmi'
|
||||
icon_state = "chickennoodlesoup"
|
||||
filling_color = "#ead90c"
|
||||
nutriment_amt = 6
|
||||
nutriment_desc = list("warm soup" = 6)
|
||||
center_of_mass = list("x"=16, "y"=5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chickennoodlesoup/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("protein", 4)
|
||||
reagents.add_reagent("water", 5)
|
||||
bitesize = 6
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chickennoodlesoup
|
||||
name = "chicken noodle soup"
|
||||
|
||||
@@ -940,6 +940,13 @@ I said no!
|
||||
/obj/item/weapon/reagent_containers/food/snacks/bun
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/chickenfillet
|
||||
|
||||
/datum/recipe/chickennoodlesoup
|
||||
fruit = list("carrot" = 1)
|
||||
reagents = list("water" = 10)
|
||||
items = list( /obj/item/weapon/reagent_containers/food/snacks/spagetti, /obj/item/weapon/reagent_containers/food/snacks/rawcutlet)
|
||||
reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/chickennoodlesoup
|
||||
|
||||
/datum/recipe/chickennoodlesoup
|
||||
fruit = list("carrot" = 1)
|
||||
|
||||
@@ -343,7 +343,8 @@
|
||||
H.update_icon()
|
||||
src.update_icon()
|
||||
usr.visible_message("<span class = 'notice'>\The [usr] plays \the [discarding].</span>")
|
||||
H.loc = get_step(usr,usr.dir)
|
||||
H.loc = get_turf(usr)
|
||||
H.Move(get_step(usr,usr.dir))
|
||||
|
||||
if(!cards.len)
|
||||
qdel(src)
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
recipes += new/datum/stack_recipe("[display_name] fork", /obj/item/weapon/material/kitchen/utensil/fork/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] knife", /obj/item/weapon/material/knife/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] blade", /obj/item/weapon/material/butterflyblade, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] defense wire", /obj/item/weapon/material/barbedwire, 10, time = 1 MINUTE, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
|
||||
/datum/material/steel/generate_recipes()
|
||||
..()
|
||||
@@ -223,7 +224,7 @@
|
||||
|
||||
/datum/material/cloth/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("woven net", /obj/item/weapon/material/fishing_net, 10, time = 30 SECONDS, pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("woven net", /obj/item/weapon/material/fishing_net, 10, time = 30 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE)
|
||||
@@ -238,6 +239,7 @@
|
||||
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
|
||||
|
||||
/datum/material/resin/generate_recipes()
|
||||
recipes = list()
|
||||
@@ -270,4 +272,5 @@
|
||||
recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("whip", /obj/item/weapon/material/whip, 5, time = 15 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
|
||||
|
||||
@@ -1010,6 +1010,19 @@ var/list/name_to_material
|
||||
pass_stack_colors = TRUE
|
||||
supply_conversion_value = 2
|
||||
|
||||
/datum/material/cloth/syncloth
|
||||
name = "syncloth"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 2)
|
||||
door_icon_base = "wood"
|
||||
ignition_point = T0C+532
|
||||
melting_point = T0C+600
|
||||
integrity = 200
|
||||
protectiveness = 15 // 4%
|
||||
flags = MATERIAL_PADDING
|
||||
conductive = 0
|
||||
pass_stack_colors = TRUE
|
||||
supply_conversion_value = 3
|
||||
|
||||
/datum/material/cult
|
||||
name = "cult"
|
||||
display_name = "disturbing stone"
|
||||
|
||||
@@ -426,4 +426,14 @@ the artifact triggers the rage.
|
||||
|
||||
heat_protection = -0.5
|
||||
cold_protection = -0.5
|
||||
siemens_coefficient = 1.5
|
||||
siemens_coefficient = 1.5
|
||||
|
||||
/datum/modifier/entangled
|
||||
name = "entangled"
|
||||
desc = "Its hard to move."
|
||||
|
||||
on_created_text = "<span class='danger'>You're caught in something! It's hard to move.</span>"
|
||||
on_expired_text = "<span class='warning'>Your movement is freed.</span>"
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
slowdown = 2
|
||||
|
||||
@@ -1338,6 +1338,8 @@
|
||||
if(!O.up)
|
||||
found_welder = 1
|
||||
if(!found_welder && nif && nif.flag_check(NIF_V_UVFILTER,NIF_FLAGS_VISION)) found_welder = 1 //VOREStation Add - NIF
|
||||
if(istype(glasses, /obj/item/clothing/glasses/sunglasses/thinblindfold))
|
||||
found_welder = 1
|
||||
if(!found_welder && istype(head, /obj/item/clothing/head/welding))
|
||||
var/obj/item/clothing/head/welding/O = head
|
||||
if(!O.up)
|
||||
|
||||
@@ -58,8 +58,6 @@
|
||||
base_color = "#f0f0f0"
|
||||
color_mult = 1
|
||||
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb)
|
||||
|
||||
has_glowing_eyes = TRUE
|
||||
|
||||
death_message = "phases to somewhere far away!"
|
||||
@@ -70,7 +68,7 @@
|
||||
|
||||
speech_bubble_appearance = "ghost"
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
virus_immune = 1
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
var/icon_height = 32
|
||||
var/agility = 20 //prob() to do agile things
|
||||
|
||||
var/list/traits = list()
|
||||
|
||||
/datum/species/proc/update_attack_types()
|
||||
unarmed_attacks = list()
|
||||
for(var/u_type in unarmed_types)
|
||||
@@ -44,3 +46,29 @@
|
||||
nif.nifsofts = nifsofts
|
||||
else
|
||||
..()
|
||||
/datum/species/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H)
|
||||
ASSERT(to_copy)
|
||||
ASSERT(istype(H))
|
||||
|
||||
if(ispath(to_copy))
|
||||
to_copy = "[initial(to_copy.name)]"
|
||||
if(istext(to_copy))
|
||||
to_copy = GLOB.all_species[to_copy]
|
||||
|
||||
var/datum/species/new_copy = new to_copy.type()
|
||||
|
||||
new_copy.traits = traits
|
||||
|
||||
//If you had traits, apply them
|
||||
if(new_copy.traits)
|
||||
for(var/trait in new_copy.traits)
|
||||
var/datum/trait/T = all_traits[trait]
|
||||
T.apply(new_copy,H)
|
||||
|
||||
//Set up a mob
|
||||
H.species = new_copy
|
||||
|
||||
if(H.dna)
|
||||
H.dna.ready_dna(H)
|
||||
|
||||
return new_copy
|
||||
@@ -50,10 +50,6 @@
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/succubus_drain,
|
||||
/mob/living/carbon/human/proc/succubus_drain_finalize,
|
||||
/mob/living/carbon/human/proc/succubus_drain_lethal,
|
||||
/mob/living/carbon/human/proc/bloodsuck,
|
||||
/mob/living/carbon/human/proc/alraune_fruit_select) //Give them the voremodes related to wrapping people in vines and sapping their fluids
|
||||
|
||||
color_mult = 1
|
||||
@@ -451,7 +447,7 @@
|
||||
|
||||
//End of fruit gland code.
|
||||
|
||||
/datum/species/alraune/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H)
|
||||
/datum/species/alraune/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H)
|
||||
ASSERT(to_copy)
|
||||
ASSERT(istype(H))
|
||||
|
||||
@@ -477,6 +473,13 @@
|
||||
new_copy.blood_mask = to_copy.blood_mask
|
||||
new_copy.damage_mask = to_copy.damage_mask
|
||||
new_copy.damage_overlays = to_copy.damage_overlays
|
||||
new_copy.traits = traits
|
||||
|
||||
//If you had traits, apply them
|
||||
if(new_copy.traits)
|
||||
for(var/trait in new_copy.traits)
|
||||
var/datum/trait/T = all_traits[trait]
|
||||
T.apply(new_copy,H)
|
||||
|
||||
//Set up a mob
|
||||
H.species = new_copy
|
||||
|
||||
@@ -32,13 +32,11 @@
|
||||
num_alternate_languages = 3
|
||||
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX)
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
|
||||
|
||||
var/list/traits = list()
|
||||
|
||||
has_limbs = list(
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest, "descriptor" = "torso"),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin, "descriptor" = "groin"),
|
||||
@@ -60,7 +58,7 @@
|
||||
var/datum/species/real = GLOB.all_species[base_species]
|
||||
return real.race_key
|
||||
|
||||
/datum/species/custom/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H)
|
||||
/datum/species/custom/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H)
|
||||
ASSERT(to_copy)
|
||||
ASSERT(istype(H))
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
wikilink="https://wiki.vore-station.net/Promethean"
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
color_mult = 1
|
||||
mob_size = MOB_MEDIUM //As of writing, original was MOB_SMALL - Allows normal swapping
|
||||
@@ -34,10 +34,5 @@
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_tail,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_ears,
|
||||
/mob/living/proc/set_size,
|
||||
/mob/living/carbon/human/proc/succubus_drain,
|
||||
/mob/living/carbon/human/proc/succubus_drain_finalize,
|
||||
/mob/living/carbon/human/proc/succubus_drain_lethal,
|
||||
/mob/living/carbon/human/proc/slime_feed,
|
||||
/mob/living/proc/eat_trash,
|
||||
/mob/living/carbon/human/proc/promethean_select_opaqueness,
|
||||
)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
siemens_coefficient = 1.5 //Very bad zappy times
|
||||
rarity_value = 5
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
has_organ = list(
|
||||
O_BRAIN = /obj/item/organ/internal/mmi_holder/posibrain/nano,
|
||||
@@ -101,9 +101,7 @@
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_gender,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_wings,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_tail,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_ears,
|
||||
/mob/living/proc/eat_trash,
|
||||
/mob/living/carbon/human/proc/slime_feed
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_ears
|
||||
)
|
||||
|
||||
var/global/list/abilities = list()
|
||||
|
||||
@@ -25,12 +25,7 @@
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/reconstitute_form,
|
||||
/mob/living/carbon/human/proc/sonar_ping,
|
||||
/mob/living/carbon/human/proc/succubus_drain,
|
||||
/mob/living/carbon/human/proc/succubus_drain_finalize,
|
||||
/mob/living/carbon/human/proc/succubus_drain_lethal,
|
||||
/mob/living/carbon/human/proc/bloodsuck,
|
||||
/mob/living/carbon/human/proc/tie_hair,
|
||||
/mob/living/proc/shred_limb,
|
||||
/mob/living/proc/flying_toggle,
|
||||
/mob/living/proc/start_wings_hovering) //Xenochimera get all the special verbs since they can't select traits.
|
||||
|
||||
@@ -60,7 +55,7 @@
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE//Whitelisted as restricted is broken.
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
has_organ = list( //Same organ list as tajarans.
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
@@ -300,7 +295,7 @@
|
||||
update_xenochimera_hud(H, danger, feral_state)
|
||||
|
||||
|
||||
/datum/species/xenochimera/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H)
|
||||
/datum/species/xenochimera/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H)
|
||||
ASSERT(to_copy)
|
||||
ASSERT(istype(H))
|
||||
|
||||
@@ -326,6 +321,13 @@
|
||||
new_copy.blood_mask = to_copy.blood_mask
|
||||
new_copy.damage_mask = to_copy.damage_mask
|
||||
new_copy.damage_overlays = to_copy.damage_overlays
|
||||
new_copy.traits = traits
|
||||
|
||||
//If you had traits, apply them
|
||||
if(new_copy.traits)
|
||||
for(var/trait in new_copy.traits)
|
||||
var/datum/trait/T = all_traits[trait]
|
||||
T.apply(new_copy,H)
|
||||
|
||||
//Set up a mob
|
||||
H.species = new_copy
|
||||
@@ -411,7 +413,7 @@
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
flesh_color = "#AFA59E" //Gray-ish. Not sure if this is really needed, but eh.
|
||||
base_color = "#333333" //Blackish-gray
|
||||
@@ -472,14 +474,11 @@
|
||||
|
||||
spawn_flags = SPECIES_IS_RESTRICTED //SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE CHOMPedit: disabled forever
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
inherent_verbs = list(
|
||||
/mob/living/proc/shred_limb,
|
||||
/mob/living/proc/eat_trash)
|
||||
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#777777"
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
heat_discomfort_strings = list(
|
||||
"Your fur prickles in the heat.",
|
||||
|
||||
@@ -40,12 +40,11 @@
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb)
|
||||
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#777777"
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
heat_discomfort_strings = list(
|
||||
"Your fur prickles in the heat.",
|
||||
@@ -84,7 +83,6 @@
|
||||
secondary_langs = list(LANGUAGE_SKRELLIAN)
|
||||
name_language = LANGUAGE_SKRELLIAN
|
||||
color_mult = 1
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb)
|
||||
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX)
|
||||
|
||||
min_age = 18
|
||||
@@ -108,7 +106,7 @@
|
||||
|
||||
primitive_form = "Sobaka"
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
@@ -137,7 +135,7 @@
|
||||
secondary_langs = list(LANGUAGE_BIRDSONG)
|
||||
name_language = LANGUAGE_BIRDSONG
|
||||
color_mult = 1
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb,/mob/living/proc/flying_toggle,/mob/living/proc/start_wings_hovering)
|
||||
inherent_verbs = list(/mob/living/proc/flying_toggle,/mob/living/proc/start_wings_hovering)
|
||||
|
||||
min_age = 18
|
||||
max_age = 110
|
||||
@@ -158,7 +156,7 @@
|
||||
|
||||
primitive_form = "Sparra"
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
@@ -213,7 +211,7 @@
|
||||
blood_color = "#240bc4"
|
||||
color_mult = 1
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
heat_discomfort_strings = list(
|
||||
"Your fur prickles in the heat.",
|
||||
@@ -239,7 +237,7 @@
|
||||
// gluttonous = 1
|
||||
num_alternate_languages = 3
|
||||
color_mult = 1
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb, /mob/living/carbon/human/proc/lick_wounds)
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds)
|
||||
|
||||
male_scream_sound = null //CHOMPedit
|
||||
female_scream_sound = null //CHOMPedit
|
||||
@@ -260,7 +258,7 @@
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
flesh_color = "#966464"
|
||||
base_color = "#B43214"
|
||||
@@ -278,7 +276,7 @@
|
||||
min_age = 18
|
||||
gluttonous = 0
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
descriptors = list()
|
||||
|
||||
//CHOMPSedit: link to our wiki
|
||||
@@ -292,12 +290,12 @@
|
||||
color_mult = 1
|
||||
min_age = 18
|
||||
gluttonous = 0 //Moving this here so I don't have to fix this conflict every time polaris glances at station.dm
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb, /mob/living/carbon/human/proc/lick_wounds)
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds)
|
||||
heat_discomfort_level = 295 //Prevents heat discomfort spam at 20c
|
||||
|
||||
//CHOMPSedit: links to our wiki
|
||||
wikilink="https://wiki.chompstation13.net/index.php?title=Tajaran"
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
agility = 90
|
||||
|
||||
/datum/species/skrell
|
||||
@@ -311,13 +309,13 @@
|
||||
|
||||
//CHOMPedit: link to our wiki
|
||||
wikilink="https://wiki.chompstation13.net/index.php?title=Skrell"
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
/datum/species/zaddat
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
min_age = 18
|
||||
gluttonous = 0
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
descriptors = list()
|
||||
|
||||
//CHOMPedit: link to our wiki
|
||||
@@ -336,7 +334,7 @@
|
||||
min_age = 18
|
||||
//CHOMPedit: link to our wiki
|
||||
wikilink="https://wiki.chompstation13.net/index.php?title=Diona"
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
/datum/species/teshari
|
||||
mob_size = MOB_SMALL //YW Edit: changed from MOB_MEDIUM to MOB_SMALL
|
||||
@@ -349,7 +347,7 @@
|
||||
push_flags = ~HEAVY //Allows them to use micro step code.
|
||||
swap_flags = ~HEAVY
|
||||
gluttonous = 0
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
descriptors = list()
|
||||
|
||||
//CHOMPedit: link to our wiki
|
||||
@@ -359,7 +357,6 @@
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/sonar_ping,
|
||||
/mob/living/proc/hide,
|
||||
/mob/living/proc/shred_limb,
|
||||
/mob/living/proc/toggle_pass_table
|
||||
)
|
||||
|
||||
@@ -374,7 +371,7 @@
|
||||
deform = 'icons/mob/human_races/r_def_human_vr.dmi'
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
|
||||
min_age = 18
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
base_color = "#EECEB3"
|
||||
|
||||
//CHOMPedit: link to our wiki
|
||||
@@ -389,7 +386,6 @@
|
||||
min_age = 18
|
||||
icobase = 'icons/mob/human_races/r_vox_old.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_vox_old.dmi'
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb, /mob/living/proc/eat_trash)
|
||||
descriptors = list(
|
||||
/datum/mob_descriptor/vox_markings = 0
|
||||
)
|
||||
@@ -409,7 +405,7 @@ datum/species/harpy
|
||||
secondary_langs = list(LANGUAGE_BIRDSONG)
|
||||
name_language = null
|
||||
color_mult = 1
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
inherent_verbs = list(/mob/living/proc/flying_toggle,/mob/living/proc/start_wings_hovering)
|
||||
|
||||
min_age = 18
|
||||
@@ -503,8 +499,6 @@ datum/species/harpy
|
||||
base_color = "#f0f0f0"
|
||||
color_mult = 1
|
||||
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb)
|
||||
|
||||
has_glowing_eyes = TRUE
|
||||
|
||||
male_cough_sounds = null
|
||||
@@ -514,7 +508,7 @@ datum/species/harpy
|
||||
|
||||
speech_bubble_appearance = "ghost"
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
breath_type = null
|
||||
poison_type = null
|
||||
@@ -578,7 +572,7 @@ datum/species/harpy
|
||||
//primitive_form = "" //We don't have fennec-monkey sprites.
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#333333"
|
||||
@@ -621,7 +615,7 @@ datum/species/harpy
|
||||
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER, HERM)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
blood_color = "#12ff12"
|
||||
flesh_color = "#201730"
|
||||
@@ -632,4 +626,3 @@ datum/species/harpy
|
||||
"You feel uncomfortably warm.",
|
||||
"Your chitin feels hot."
|
||||
)
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb)
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
cost = 0
|
||||
var_changes = list("cold_level_1" = 200, "cold_level_2" = 150, "cold_level_3" = 90, "breath_cold_level_1" = 180, "breath_cold_level_2" = 100, "breath_cold_level_3" = 60, "cold_discomfort_level" = 210, "heat_level_1" = 305, "heat_level_2" = 360, "heat_level_3" = 700, "breath_heat_level_1" = 345, "breath_heat_level_2" = 380, "breath_heat_level_3" = 780, "heat_discomfort_level" = 295, "body_temperature" = 290)
|
||||
excludes = list(/datum/trait/hotadapt)
|
||||
|
||||
|
||||
/datum/trait/hotadapt
|
||||
name = "Heat-Adapted"
|
||||
desc = "You are able to withstand much hotter temperatures than other species, and can even be comfortable in extremely hot environments. You are also more vulnerable to cold environments, and have a higher body temperature as a consequence of these adaptations."
|
||||
@@ -128,6 +128,7 @@ YW change end */
|
||||
name = "Minor Bloodsucker"
|
||||
desc = "Makes you unable to gain nutrition from anything but blood. To compensate, you get fangs that can be used to drain blood from prey."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("gets_food_nutrition" = 0) //The verb is given in human.dm
|
||||
excludes = list(/datum/trait/bloodsucker_plus)
|
||||
|
||||
@@ -139,6 +140,7 @@ YW change end */
|
||||
name = "Succubus Drain"
|
||||
desc = "Makes you able to gain nutrition from draining prey in your grasp."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/succubus_drain/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
@@ -150,6 +152,7 @@ YW change end */
|
||||
name = "Feeder"
|
||||
desc = "Allows you to feed your prey using your own body."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/feeder/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
@@ -159,6 +162,7 @@ YW change end */
|
||||
name = "Hard Vore" //CHOMPedit Renamed Brutal Predation to Hard Vore, because some people don't know what this actually does
|
||||
desc = "Allows you to tear off limbs & tear out internal organs."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/hard_vore/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
@@ -168,6 +172,7 @@ YW change end */
|
||||
name = "Trash Can"
|
||||
desc = "Allows you to dispose of some garbage on the go instead of having to look for a bin or littering like an animal."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("trashcan" = 1)
|
||||
|
||||
/datum/trait/trashcan/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
@@ -178,6 +183,7 @@ YW change end */
|
||||
name = "Expensive Taste"
|
||||
desc = "You only gain nutrition from raw ore and refined minerals. There's nothing that sates the appetite better than precious gems, exotic or rare minerals and you have damn fine taste. Anything else is beneath you."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("gets_food_nutrition" = 0, "eat_minerals" = 1)
|
||||
|
||||
/datum/trait/gem_eater/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
@@ -188,12 +194,14 @@ YW change end */
|
||||
name = "Glowing Eyes"
|
||||
desc = "Your eyes show up above darkness. SPOOKY! And kinda edgey too."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("has_glowing_eyes" = 1)
|
||||
|
||||
/datum/trait/glowing_body
|
||||
name = "Glowing Body"
|
||||
desc = "Your body glows about as much as a PDA light! Settable color and toggle in Abilities tab ingame."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/glowing_body/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
@@ -205,36 +213,42 @@ YW change end */
|
||||
name = "Extreme Spice Intolerance"
|
||||
desc = "Spicy (and chilly) peppers are three times as strong. (This does not affect pepperspray.)"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("spice_mod" = 3) // 300% as effective if spice_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
|
||||
/datum/trait/spice_intolerance_basic
|
||||
name = "Heavy Spice Intolerance"
|
||||
desc = "Spicy (and chilly) peppers are twice as strong. (This does not affect pepperspray.)"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("spice_mod" = 2) // 200% as effective if spice_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/spice_intolerance_slight
|
||||
name = "Slight Spice Intolerance"
|
||||
desc = "You have a slight struggle with spicy foods. Spicy (and chilly) peppers are one and a half times stronger. (This does not affect pepperspray.)"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("spice_mod" = 1.5) // 150% as effective if spice_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/spice_tolerance_basic
|
||||
name = "Spice Tolerance"
|
||||
desc = "Spicy (and chilly) peppers are only three-quarters as strong. (This does not affect pepperspray.)"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("spice_mod" = 0.75) // 75% as effective if spice_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
|
||||
/datum/trait/spice_tolerance_advanced
|
||||
name = "Strong Spice Tolerance"
|
||||
desc = "Spicy (and chilly) peppers are only half as strong. (This does not affect pepperspray.)"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("spice_mod" = 0.5) // 50% as effective if spice_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/spice_immunity
|
||||
name = "Extreme Spice Tolerance"
|
||||
desc = "Spicy (and chilly) peppers are basically ineffective! (This does not affect pepperspray.)"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("spice_mod" = 0.25) // 25% as effective if spice_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/*YW CHANGE START: Commented out because we got our own variants
|
||||
@@ -243,36 +257,42 @@ YW change end */
|
||||
name = "Liver of Air"
|
||||
desc = "The only way you can hold a drink is if it's in your own two hands, and even then you'd best not inhale too deeply near it. Drinks are three times as strong."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("alcohol_mod" = 3) // 300% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/alcohol_intolerance_basic
|
||||
name = "Liver of Lilies"
|
||||
desc = "You have a hard time with alcohol. Maybe you just never took to it, or maybe it doesn't agree with you... either way, drinks are twice as strong."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("alcohol_mod" = 2) // 200% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/alcohol_intolerance_slight
|
||||
name = "Liver of Tulips"
|
||||
desc = "You have a slight struggle with alcohol. Drinks are one and a half times stronger."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("alcohol_mod" = 1.5) // 150% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/alcohol_tolerance_basic
|
||||
name = "Liver of Iron"
|
||||
desc = "You can hold drinks much better than those lily-livered land-lubbers! Arr! Drinks are only three-quarters as strong."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("alcohol_mod" = 0.75) // 75% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
|
||||
/datum/trait/alcohol_tolerance_advanced
|
||||
name = "Liver of Steel"
|
||||
desc = "Drinks tremble before your might! You can hold your alcohol twice as well as those blue-bellied barnacle boilers! Drinks are only half as strong."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("alcohol_mod" = 0.5) // 50% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/alcohol_immunity
|
||||
name = "Liver of Durasteel"
|
||||
desc = "You've drunk so much that most booze doesn't even faze you. It takes something like a Pan-Galactic or a pint of Deathbell for you to even get slightly buzzed."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("alcohol_mod" = 0.25) // 25% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
// Alcohol Traits End Here.
|
||||
YW CHANGE STOP*/
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
var/cost = 0 // 0 is neutral, negative cost means negative, positive cost means positive.
|
||||
var/list/var_changes // A list to apply to the custom species vars.
|
||||
var/list/excludes // Store a list of paths of traits to exclude, but done automatically if they change the same vars.
|
||||
var/not_for_synths = 0 // Can freaking synths use those.
|
||||
var/not_for_synths = FALSE // Can freaking synths use those.
|
||||
var/custom_only = TRUE // Trait only available for custom species
|
||||
|
||||
//Proc can be overridden lower to include special changes, make sure to call up though for the vars changes
|
||||
/datum/trait/proc/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
//The chad Drone unify code rewritten to fit into this current codebase, god here we go
|
||||
|
||||
|
||||
// LAWS
|
||||
/******************** Drone fucking duh ********************/
|
||||
/datum/ai_laws/jani_drone
|
||||
name = "Maintence Protocols"
|
||||
law_header = "Maintenance Protocols"
|
||||
|
||||
/datum/ai_laws/drone/New()
|
||||
add_inherent_law("Do not interfere with the maintenance work of non-drones whenever possible.")
|
||||
add_inherent_law("Preserve, repair and improve the station to the best of your abilities.")
|
||||
add_inherent_law("Cause no harm to the station or any crew on it.")
|
||||
..()
|
||||
|
||||
/datum/ai_laws/construction_drone
|
||||
name = "Construction Protocols"
|
||||
law_header = "Construction Protocols"
|
||||
|
||||
/datum/ai_laws/construction_drone/New()
|
||||
add_inherent_law("Do not interfere with the construction work of non-drones whenever possible.")
|
||||
add_inherent_law("Repair, refit and upgrade your assigned vessel.")
|
||||
add_inherent_law("Prevent unplanned damage to your assigned vessel wherever possible.")
|
||||
..()
|
||||
|
||||
/datum/ai_laws/mining_drone
|
||||
name = "Excavation Protocols"
|
||||
law_header = "Excavation Protocols"
|
||||
|
||||
/datum/ai_laws/mining_drone/New()
|
||||
add_inherent_law("Do not interfere with the excavation work of non-drones whenever possible.")
|
||||
add_inherent_law("Provide materials for repairing, refitting, and upgrading your assigned vessel.")
|
||||
add_inherent_law("Prevent unplanned damage to your assigned excavation equipment wherever possible.")
|
||||
..()
|
||||
|
||||
/datum/ai_laws/security_drone
|
||||
name = "Security Protocols"
|
||||
law_header = "Security Protocols"
|
||||
|
||||
/datum/ai_laws/security_drone/New()
|
||||
add_inherent_law("Do not interfere with the security work of non-drones whenever possible.")
|
||||
add_inherent_law("Provide protection to the crew and eliminate hostile lifeforms on your assigned vessel.")
|
||||
add_inherent_law("Obey orders by security personnel except if they violate law 4.")
|
||||
add_inherent_law("Lethal force requires a code higher than green AND orders by security to use it to authorize it.")
|
||||
add_inherent_law("You must outfit yourself with a security beret.")
|
||||
..()
|
||||
|
||||
//Alright lets take a look at the the scary base drone from dorne DM and mod that shit
|
||||
|
||||
/mob/living/silicon/robot/drone
|
||||
name = "unified drone" //Maintenance drones can be a Jani specific shell now, the normal drone will be a blank shell not really intended for use
|
||||
law_type = /datum/ai_laws/drone
|
||||
|
||||
/mob/living/silicon/robot/drone/jan
|
||||
name = "maintenance drone"
|
||||
law_type = /datum/ai_laws/jani_drone
|
||||
|
||||
/mob/living/silicon/robot/drone/sec
|
||||
name = "security drone"
|
||||
law_type = /datum/ai_laws/security_drone
|
||||
|
||||
/mob/living/silicon/robot/drone/min
|
||||
name = "mining drone"
|
||||
law_type = /datum/ai_laws/mining_drone
|
||||
@@ -37,6 +37,12 @@
|
||||
src.modules += new /obj/item/weapon/pinpointer/shuttle/merc(src)
|
||||
src.modules += new /obj/item/weapon/melee/energy/sword(src)
|
||||
|
||||
var/datum/matter_synth/cloth = new /datum/matter_synth/cloth(40000)
|
||||
synths += cloth
|
||||
|
||||
var/obj/item/stack/sandbags/cyborg/SB = new /obj/item/stack/sandbags/cyborg(src)
|
||||
SB.synths += list(cloth)
|
||||
|
||||
var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
|
||||
src.modules += jetpack
|
||||
R.internals = jetpack
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
/mob/living/simple_mob/vore/leopardmander
|
||||
name = "leopardmander"
|
||||
desc = "A huge salamander-like drake. They are best known for their rarity, their voracity, their very potent paralyzing venom, and their healing stomach. This one is white."
|
||||
tt_desc = "Draconis Va'aen"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/leopardmander)
|
||||
tt_desc = "S Draconis uncia"
|
||||
icon = 'icons/mob/vore128x64_ch.dmi'
|
||||
icon_dead = "leopardmander-dead"
|
||||
icon_living = "leopardmander"
|
||||
|
||||
@@ -159,7 +159,7 @@ GLOBAL_LIST_INIT(pitcher_plant_lure_messages, list(
|
||||
return
|
||||
if(fruit)
|
||||
if(nutrition >= PITCHER_SATED + NUTRITION_PITCHER)
|
||||
var/turf/T = safepick(circleviewturfs(src, 2)) //Try this if the above doesn't work, add src.loc == T check to density check
|
||||
var/turf/T = safepick(circleviewturfs(src, 2))
|
||||
if(T.density) //No spawning in walls
|
||||
return
|
||||
else if(src.loc ==T)
|
||||
|
||||
@@ -0,0 +1,255 @@
|
||||
//Passive vore slug. This mob is intended to be annoying but harmless to anybody it can't eat.
|
||||
|
||||
/mob/living/simple_mob/vore/slug
|
||||
name = "slug"
|
||||
desc = "A giant, cold-tolerant slug. It seems excessively passive."
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/slug)
|
||||
tt_desc = "S Arion hortensis"
|
||||
icon = 'icons/mob/vore_ch.dmi'
|
||||
icon_dead = "slug-dead"
|
||||
icon_living = "slug"
|
||||
icon_state = "slug"
|
||||
faction = "slug" //A faction other than neutral is necessary to get the slug to try eating station crew.
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 1 //Not intended to pose any sort of threat outside of vore. Other code should stop it from ever attacking but this is an extra safety check.
|
||||
friendly = list("blinks at")
|
||||
response_help = "pokes"
|
||||
response_disarm = "prods"
|
||||
response_harm = "punches"
|
||||
movement_cooldown = 40 //I guess you could call this a SNAIL'S PACE.
|
||||
maxHealth = 500
|
||||
health = 500
|
||||
attacktext = list("headbutted")
|
||||
minbodytemp = 80
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/passive/slug_ch
|
||||
vore_icons = SA_ICON_LIVING
|
||||
armor = list(
|
||||
"melee" = 98,
|
||||
"bullet" = 0,
|
||||
"laser" = -50,
|
||||
"energy" = -50,
|
||||
"bomb" = 0,
|
||||
"bio" = 0,
|
||||
"rad" = 100) //Relatively harmless but agonizing to kill with melee.
|
||||
|
||||
glow_toggle = TRUE
|
||||
glow_range = 1.3 //This seems to be the minimum range which makes glow visible.
|
||||
glow_color = "#33ccff" //Same glow color as Sif trees.
|
||||
glow_intensity = 1
|
||||
|
||||
|
||||
var/list/my_slime = list()
|
||||
var/slime_max = 35 //With a slug which moves once every 10 seconds and a 5 minute delete timer, this should never exceed 30.
|
||||
var/mob/living/vore_memory = null
|
||||
|
||||
/mob/living/simple_mob/vore/slug //I guess separating the vore variables is a little more organized?
|
||||
vore_bump_chance = 100 //Always attempt a bump nom if possible...
|
||||
vore_bump_emote = "knocks over and begins slowly engulfing"
|
||||
vore_active = 1
|
||||
vore_icons = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 100 //...while this should make bump noms always knock the target over. Passive AI meanwhile should mean this never affects combat since it doesn't fight back.
|
||||
vore_ignores_undigestable = 0
|
||||
swallowTime = 100 //10 seconds. Easy to crawl away from when knocked over.
|
||||
vore_default_mode = DM_DIGEST
|
||||
|
||||
/mob/living/simple_mob/vore/slug/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.desc = "Somehow you remained still just long enough for the slug to wrap its radula around your body and gradually draw you into its pharynx. The slug moves with agonizing slowness and devours prey at a snail's pace; inch by inch you're crammed down its gullet and squishes and squeezed into the slug's gizzard. Thick walls bear down, covered with shallow, toothy ridges. The slimy moss in here suggests you're not the slug's diet but the gizzard seems intent on churning and scraping over you regardless..."
|
||||
B.digest_burn = 0.1
|
||||
B.digest_brute = 0.2
|
||||
B.vore_verb = "engulf"
|
||||
B.name = "gizzard"
|
||||
B.mode_flags = DM_FLAG_THICKBELLY
|
||||
B.escapechance = 5
|
||||
B.fancy_vore = 1
|
||||
B.vore_sound = "Squish2"
|
||||
B.release_sound = "Pred Escape"
|
||||
B.contamination_color = "cyan"
|
||||
B.contamination_flavor = "Wet"
|
||||
|
||||
|
||||
B.emote_lists[DM_DIGEST] = list(
|
||||
"The toothy walls scrape and grind against your body.",
|
||||
"The humid air feels thick and heavy, stinging faintly with each breath.",
|
||||
"Heavy slime oozes over you, making it difficult to move."
|
||||
) //Why do so many vore mobs have endo emotes despite being digest only?
|
||||
|
||||
/datum/category_item/catalogue/fauna/slug
|
||||
name = "Sivian Fauna - Moss Slug"
|
||||
desc = "Classification: S Arion hortensis\
|
||||
<br><br>\
|
||||
A large herbivorous slug commonly spotted near northern waterways with abundant moss. The slug is remarkably resistant to blunt trauma despite its fleshy body due to a foul-tasting outer casing \
|
||||
of thick, mucus-filled tissue protecting the more vulnerable musculature beneath. Said mucus is a natural irritant and hardens rapidly in contact with air, sealing wounds and allowing the slug to shrug off most surface injuries. \
|
||||
Few predators exist for the Sivian slug due to the stinging slime's tendency to adhere to attacking claws and appendages.\
|
||||
<br><br>\
|
||||
The Sivian slug is typically regarded as a pest due to the animal's large bulk and tendency to crush weak structures in its path. Most tools do little to dissuade the creature, forcing homesteads to rely on firearms or reinforced fencing \
|
||||
with a slippery coating the slug cannot stick to. While subsisting primarily on Sivian moss, the slug is an opportunistic predator known to eat small fauna which wander into its path. The slime excreted from the slug's foot is particularly sticky and capable of miring small animals. The Sivian slug glows faintly due to colonies bioluminescent bacteria present in its diet."
|
||||
value = CATALOGUER_REWARD_EASY
|
||||
|
||||
/mob/living/simple_mob/vore/slug/proc/spread_slime()
|
||||
if(my_slime.len >= slime_max)
|
||||
return
|
||||
if(istype(get_turf(src), /turf/simulated/floor/water)) //Important to stop my_slime from filling with null entries in water.
|
||||
return
|
||||
var/obj/effect/slug_glue/G = new /obj/effect/slug_glue/(get_turf(src))
|
||||
G.my_slug = src
|
||||
my_slime += G
|
||||
|
||||
/mob/living/simple_mob/vore/slug/death()
|
||||
..()
|
||||
for(var/obj/effect/slug_glue/G in my_slime)
|
||||
G.my_slug = null
|
||||
my_slime -= G //No point in keeping these loaded in the list when the slug dies if somehow the list sticks around after death.
|
||||
|
||||
/mob/living/simple_mob/vore/slug/Moved()
|
||||
. = ..()
|
||||
spread_slime()
|
||||
|
||||
/mob/living/simple_mob/vore/slug/do_attack(atom/A, turf/T) //Override of attack proc to ensure the slug can only attempt to eat people, not harm them. Inability to actually hurt anybody is intended, otherwise this mob wouldn't have 98 melee armor.
|
||||
if(ckey) //If we're player controlled, use the default attack code.
|
||||
return ..()
|
||||
if(istype(A, /mob/living) && !will_eat(A))
|
||||
ai_holder.lose_target() //Ignore anybody we can't eat.
|
||||
return
|
||||
else //This is the parent do_attack() code for determining whether or not attacks can hit.
|
||||
face_atom(A)
|
||||
var/missed = FALSE
|
||||
if(!isturf(A) && !(A in T) ) // Turfs don't contain themselves so checking contents is pointless if we're targeting a turf.
|
||||
missed = TRUE
|
||||
else if(!T.AdjacentQuick(src))
|
||||
missed = TRUE
|
||||
|
||||
if(missed) // Most likely we have a slow attack and they dodged it or we somehow got moved.
|
||||
add_attack_logs(src, A, "Animal-attacked (dodged)", admin_notify = FALSE)
|
||||
playsound(src, 'sound/rakshasa/Decay1.ogg', 75, 1)
|
||||
visible_message(span("warning", "\The [src] misses."))
|
||||
return FALSE
|
||||
tryBumpNom(A) //Meant for bump noms but this works as intended here and has sanity checks.
|
||||
|
||||
/mob/living/simple_mob/vore/slug/perform_the_nom(mob/living/user, mob/living/prey, mob/living/pred, obj/belly/belly, delay)
|
||||
..()
|
||||
vore_memory = prey
|
||||
|
||||
/datum/ai_holder/simple_mob/passive/slug_ch
|
||||
wander = TRUE
|
||||
base_wander_delay = 7
|
||||
wander_when_pulled = TRUE
|
||||
vision_range = 10
|
||||
can_flee = FALSE //Otherwise it'll run as soon as it gets a target.
|
||||
|
||||
/obj/effect/slug_glue
|
||||
name = "liquid"
|
||||
desc = "This looks wet."
|
||||
icon = 'icons/effects/effects_ch.dmi'
|
||||
icon_state = "wet_turf"
|
||||
opacity = 0
|
||||
mouse_opacity = 0 //Unclickable
|
||||
anchored = 1
|
||||
density = 0
|
||||
can_buckle = 1
|
||||
buckle_lying = TRUE
|
||||
|
||||
var/persist_time = 5 MINUTES //How long until we cease existing.
|
||||
var/mob/living/simple_mob/vore/slug/my_slug = null //This should be set by the slug.
|
||||
var/turf/my_turf = null //The turf we spawn on.
|
||||
var/base_escape_time = 1 MINUTE //How long does it take to struggle free? Affected by the victim's size_multiplier.
|
||||
|
||||
/obj/effect/slug_glue/New()
|
||||
..()
|
||||
dissipate()
|
||||
my_turf = get_turf(src)
|
||||
if(istype(my_turf, /turf/simulated/floor/water)) //Aside from not making sense in water, this prevents drowning.
|
||||
qdel(src)
|
||||
/* for(var/obj/effect/slug_glue/G in my_turf.contents)
|
||||
if(G == src)
|
||||
continue
|
||||
else
|
||||
qdel(G) //Prevent glue layering
|
||||
*/ //Not including this due to performance concerns but keeping as comments for reference.
|
||||
|
||||
/obj/effect/slug_glue/proc/dissipate() //When spawned, set a timer to despawn.
|
||||
if(!persist_time)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
spawn(persist_time) //I used sleep() here first and it made the slug sleep for 5 minutes when spawning glue. Byond.
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/effect/slug_glue/Destroy()
|
||||
. = ..()
|
||||
if(my_slug)
|
||||
my_slug.my_slime -= src //Remove the slime from the slug's list when destroyed.
|
||||
|
||||
//This could probably be applied to spideweb code to make it work as intended again.
|
||||
/obj/effect/slug_glue/Uncross(atom/movable/AM, atom/newloc)
|
||||
if(istype(AM, /mob/living/simple_mob/vore/slug))
|
||||
return ..()
|
||||
else if(istype(AM, /mob/living))
|
||||
if(prob(50))
|
||||
to_chat(AM, span("warning", "You stick to \the [my_turf]!"))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/effect/slug_glue/Crossed(atom/movable/AM as mob|obj)
|
||||
if(AM.is_incorporeal())
|
||||
return
|
||||
|
||||
if(istype(AM, /mob/living))
|
||||
var/mob/living/L = AM
|
||||
if(istype(L, /mob/living/simple_mob/vore/slug))
|
||||
return
|
||||
|
||||
if(L.m_intent == "run" && !L.buckled)
|
||||
if(has_buckled_mobs())
|
||||
return
|
||||
buckle_mob(L)
|
||||
L.stop_pulling()
|
||||
L.Weaken(2)
|
||||
to_chat(L, "<span class='warning'>You tripped in the sticky substance, sticking to [my_turf]!</span>")
|
||||
playsound(src, 'sound/rakshasa/Decay3.ogg', 100, 1)
|
||||
alert_slug(L)
|
||||
|
||||
/obj/effect/slug_glue/proc/alert_slug(mob/living/victim as mob)
|
||||
if(!my_slug || !has_buckled_mobs() || isbelly(my_slug.loc)) //Otherwise if you eat the slug it will infinitely attempt to eat you if you trip in glue.
|
||||
return
|
||||
if(my_slug.vore_memory == victim) //Getting eaten lets you get stuck once without alerting the slug. This is to prevent instantly getting eaten again if you struggle free with run intent on.
|
||||
my_slug.vore_memory = null
|
||||
return
|
||||
my_slug.ai_holder.give_target(victim)
|
||||
|
||||
/obj/effect/slug_glue/proc/unalert_slug(mob/living/victim as mob)
|
||||
if(!my_slug)
|
||||
return
|
||||
if(my_slug.ai_holder.target == victim)
|
||||
my_slug.ai_holder.remove_target() //Instant loss of target. Necessary to simulate the mob giving up if the prey escapes.
|
||||
|
||||
/obj/effect/slug_glue/user_unbuckle_mob(mob/living/buckled_mob, mob/user)
|
||||
user.setClickCooldown(user.get_attack_speed())
|
||||
to_chat(user, "You tug and strain against the sticky substance...")
|
||||
var/escape_time
|
||||
switch(buckled_mob.size_multiplier)
|
||||
if(RESIZE_TINY - 1 to RESIZE_A_NORMALSMALL) //24% to 75% size scale, 1% below 25% is to account for microcillin sometimes going slightly below 25%
|
||||
escape_time = 2 * base_escape_time
|
||||
if(RESIZE_A_NORMALSMALL to RESIZE_A_BIGNORMAL) //75% to 125% size scale
|
||||
escape_time = base_escape_time
|
||||
if(RESIZE_A_BIGNORMAL to RESIZE_HUGE + 1) //125% to 201% size scale, 1% above 200% is to acount for macrocillin sometimes going slightly above 200%
|
||||
escape_time = 0.5 * base_escape_time
|
||||
else
|
||||
escape_time = base_escape_time //Admeme size scale
|
||||
if(do_after(user, escape_time, src, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY)))
|
||||
if(!has_buckled_mobs())
|
||||
return
|
||||
to_chat(user, "You tug free of the tacky, rubbery strands!")
|
||||
unbuckle_mob(buckled_mob)
|
||||
unalert_slug(buckled_mob)
|
||||
|
||||
/obj/effect/slug_glue/clean_blood(var/ignore = 0) //Remove with space cleaner.
|
||||
if(!ignore)
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
@@ -0,0 +1,74 @@
|
||||
|
||||
/obj/item/weapon/cell/spike
|
||||
name = "modified power cell"
|
||||
desc = "A modified power cell sitting in a highly conductive chassis."
|
||||
origin_tech = list(TECH_POWER = 2)
|
||||
icon_state = "spikecell"
|
||||
maxcharge = 10000
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000, MAT_GLASS = 80, MAT_SILVER = 100)
|
||||
self_recharge = TRUE
|
||||
charge_amount = 150
|
||||
|
||||
/obj/item/weapon/cell/spike/process()
|
||||
..()
|
||||
|
||||
var/turf/Center = get_turf(src)
|
||||
|
||||
var/shock_count = 0
|
||||
for(var/turf/T in range(Center, 1))
|
||||
|
||||
if(prob(round(charge / 250)) && charge >= (maxcharge / 4))
|
||||
|
||||
if(locate(/obj/effect/temporary_effect/pulse/staticshock) in T)
|
||||
continue
|
||||
|
||||
var/conductive = FALSE
|
||||
|
||||
if(istype(T, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/WT = T
|
||||
|
||||
if(WT.material.conductive)
|
||||
conductive = TRUE
|
||||
else if(WT.girder_material.conductive)
|
||||
conductive = TRUE
|
||||
else if(WT.reinf_material && WT.reinf_material.conductive)
|
||||
conductive = TRUE
|
||||
|
||||
if(istype(T, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = T
|
||||
if(istype(F.flooring, /decl/flooring/reinforced))
|
||||
conductive = TRUE
|
||||
|
||||
if(conductive)
|
||||
shock_count += 1
|
||||
new /obj/effect/temporary_effect/pulse/staticshock(T)
|
||||
|
||||
if(shock_count)
|
||||
while(shock_count)
|
||||
use(200)
|
||||
shock_count--
|
||||
|
||||
/obj/effect/temporary_effect/pulse/staticshock
|
||||
name = "electric field"
|
||||
desc = "Caution: Do not touch."
|
||||
pulses_remaining = 10
|
||||
pulse_delay = 2 SECONDS
|
||||
icon_state = "blue_static"
|
||||
|
||||
/obj/effect/temporary_effect/pulse/staticshock/on_pulse()
|
||||
..()
|
||||
|
||||
for(var/mob/living/L in view(1, src))
|
||||
if(!issilicon(L) && prob(L.mob_size))
|
||||
var/obj/item/projectile/beam/shock/weak/P = new (get_turf(src))
|
||||
P.launch_projectile_from_turf(L, BP_TORSO)
|
||||
|
||||
var/obj/item/weapon/plastique/C4 = locate() in get_turf(src)
|
||||
|
||||
if(C4)
|
||||
C4.visible_message("<span class='danger'>The current fries \the [C4]!</span>")
|
||||
|
||||
if(prob(10))
|
||||
C4.explode(get_turf(src))
|
||||
else
|
||||
qdel(C4)
|
||||
@@ -261,3 +261,7 @@
|
||||
agony = 15
|
||||
eyeblur = 2
|
||||
hitsound = 'sound/weapons/zapbang.ogg'
|
||||
|
||||
/obj/item/projectile/beam/shock/weak
|
||||
damage = 5
|
||||
agony = 10
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
//Actual full digest modes
|
||||
var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG)
|
||||
//Digest mode addon flags
|
||||
var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY)
|
||||
var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN)
|
||||
//Item related modes
|
||||
var/tmp/static/list/item_digest_modes = list(IM_HOLD,IM_DIGEST_FOOD,IM_DIGEST)
|
||||
|
||||
|
||||
@@ -138,6 +138,16 @@
|
||||
if((mode_flags & DM_FLAG_THICKBELLY) && !H.muffled)
|
||||
H.muffled = TRUE
|
||||
|
||||
//Worn items flag
|
||||
if(mode_flags & DM_FLAG_AFFECTWORN)
|
||||
for(var/slot in slots)
|
||||
var/obj/item/I = H.get_equipped_item(slot = slot)
|
||||
if(I && I.canremove)
|
||||
if(handle_digesting_item(I))
|
||||
digestion_noise_chance = 25
|
||||
to_update = TRUE
|
||||
break
|
||||
|
||||
//Stripping flag
|
||||
if(mode_flags & DM_FLAG_STRIPPING)
|
||||
for(var/slot in slots)
|
||||
|
||||
Reference in New Issue
Block a user