mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-18 18:46:24 +01:00
Merge branch 'master' into sord
This commit is contained in:
@@ -155,6 +155,7 @@ var/list/admin_verbs_fun = list(
|
||||
/client/proc/smite,
|
||||
/client/proc/smite_vr, //VOREStation Add,
|
||||
/client/proc/admin_lightning_strike,
|
||||
/client/proc/resize //VOREStation Add,
|
||||
)
|
||||
|
||||
var/list/admin_verbs_spawn = list(
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/client/proc/resize(var/mob/living/L in mob_list)
|
||||
set name = "Resize"
|
||||
set desc = "Resizes any living mob without any restrictions on size."
|
||||
set category = "Fun"
|
||||
if(!check_rights(R_ADMIN, R_FUN))
|
||||
return
|
||||
|
||||
var/size_multiplier = input(usr, "Input size multiplier.", "Resize", 1) as num|null
|
||||
if(!size_multiplier)
|
||||
return //cancelled
|
||||
|
||||
size_multiplier = clamp(size_multiplier, 0.01, 1000)
|
||||
var/can_be_big = L.has_large_resize_bounds()
|
||||
var/very_big = is_extreme_size(size_multiplier)
|
||||
|
||||
if(very_big && can_be_big) // made an extreme size in an area that allows it, don't assume adminbuse
|
||||
to_chat(src,"<span class='warning'>[L] will lose this size upon moving into an area where this size is not allowed.</span>")
|
||||
else if(very_big) // made an extreme size in an area that doesn't allow it, assume adminbuse
|
||||
to_chat(src,"<span class='warning'>[L] will retain this normally unallowed size outside this area.</span>")
|
||||
|
||||
L.resize(size_multiplier, animate = TRUE, uncapped = TRUE, ignore_prefs = TRUE)
|
||||
|
||||
log_and_message_admins("has changed [key_name(L)]'s size multiplier to [size_multiplier].")
|
||||
feedback_add_details("admin_verb","RESIZE")
|
||||
@@ -52,7 +52,7 @@
|
||||
return say(message)
|
||||
|
||||
/mob/living/proc/IIsAlly(mob/living/L)
|
||||
return src.faction == L.faction
|
||||
return istype(L) && src.faction == L.faction
|
||||
|
||||
/mob/living/simple_mob/IIsAlly(mob/living/L)
|
||||
. = ..()
|
||||
|
||||
@@ -1019,13 +1019,16 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
return
|
||||
organ = "brain"
|
||||
|
||||
var/datum/species/current_species = GLOB.all_species[pref.species]
|
||||
var/list/organ_choices = list("Normal")
|
||||
if(pref.organ_data[BP_TORSO] == "cyborg")
|
||||
organ_choices -= "Normal"
|
||||
if(organ_name == "Brain")
|
||||
organ_choices += "Cybernetic"
|
||||
organ_choices += "Positronic"
|
||||
organ_choices += "Drone"
|
||||
if(!(current_species.spawn_flags & SPECIES_NO_POSIBRAIN))
|
||||
organ_choices += "Positronic"
|
||||
if(!(current_species.spawn_flags & SPECIES_NO_DRONEBRAIN))
|
||||
organ_choices += "Drone"
|
||||
else
|
||||
organ_choices += "Assisted"
|
||||
organ_choices += "Mechanical"
|
||||
@@ -1043,7 +1046,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.organ_data[organ] = "assisted"
|
||||
if("Cybernetic")
|
||||
pref.organ_data[organ] = "assisted"
|
||||
if ("Mechanical")
|
||||
if("Mechanical")
|
||||
pref.organ_data[organ] = "mechanical"
|
||||
if("Drone")
|
||||
pref.organ_data[organ] = "digital"
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
display_name = "collar, holo"
|
||||
path = /obj/item/clothing/accessory/collar/holo
|
||||
|
||||
//TFF 17/6/19 - public loadout addition: Indigestible Holocollar
|
||||
/datum/gear/collar/holo/indigestible
|
||||
display_name = "collar, holo (indigestible)"
|
||||
path = /obj/item/clothing/accessory/collar/holo/indigestible
|
||||
|
||||
@@ -735,6 +735,12 @@
|
||||
ckeywhitelist = list("pimientopyro")
|
||||
character_name = list("Scylla Casmus")
|
||||
|
||||
/datum/gear/fluff/kiyoshi_cloak
|
||||
path = /obj/item/clothing/accessory/poncho/fluff/cloakglowing
|
||||
display_name = "glowing cloak"
|
||||
ckeywhitelist = list("pastelprincedan")
|
||||
character_name = list("Kiyoshi Maki", "Masumi Maki")
|
||||
|
||||
// Q CKEYS
|
||||
|
||||
// R CKEYS
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
character.weight_gain = pref.weight_gain
|
||||
character.weight_loss = pref.weight_loss
|
||||
character.fuzzy = pref.fuzzy
|
||||
character.resize(pref.size_multiplier, animate = FALSE)
|
||||
character.resize(pref.size_multiplier, animate = FALSE, ignore_prefs = TRUE)
|
||||
|
||||
/datum/category_item/player_setup_item/vore/size/content(var/mob/user)
|
||||
. += "<br>"
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
//TFF 5/8/19 - moved /datum/preferences to preferences_vr.dm
|
||||
|
||||
/datum/category_item/player_setup_item/vore/misc
|
||||
name = "Misc Settings"
|
||||
sort_order = 9
|
||||
@@ -9,16 +7,15 @@
|
||||
S["directory_tag"] >> pref.directory_tag
|
||||
S["directory_erptag"] >> pref.directory_erptag
|
||||
S["directory_ad"] >> pref.directory_ad
|
||||
S["sensorpref"] >> pref.sensorpref //TFF 5/8/19 - add sensor pref setting to load after saved
|
||||
S["sensorpref"] >> pref.sensorpref
|
||||
|
||||
/datum/category_item/player_setup_item/vore/misc/save_character(var/savefile/S)
|
||||
S["show_in_directory"] << pref.show_in_directory
|
||||
S["directory_tag"] << pref.directory_tag
|
||||
S["directory_erptag"] << pref.directory_erptag
|
||||
S["directory_ad"] << pref.directory_ad
|
||||
S["sensorpref"] << pref.sensorpref //TFF 5/8/19 - add sensor pref setting to be saveable
|
||||
S["sensorpref"] << pref.sensorpref
|
||||
|
||||
//TFF 5/8/19 - add new datum category to allow for setting multiple settings when this is selected in the loadout.
|
||||
/datum/category_item/player_setup_item/vore/misc/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
if(pref.sensorpref > 5 || pref.sensorpref < 1)
|
||||
pref.sensorpref = 5
|
||||
@@ -28,7 +25,7 @@
|
||||
pref.show_in_directory = sanitize_integer(pref.show_in_directory, 0, 1, initial(pref.show_in_directory))
|
||||
pref.directory_tag = sanitize_inlist(pref.directory_tag, GLOB.char_directory_tags, initial(pref.directory_tag))
|
||||
pref.directory_erptag = sanitize_inlist(pref.directory_erptag, GLOB.char_directory_erptags, initial(pref.directory_erptag))
|
||||
pref.sensorpref = sanitize_integer(pref.sensorpref, 1, sensorpreflist.len, initial(pref.sensorpref)) //TFF - 5/8/19 - add santisation for sensor prefs
|
||||
pref.sensorpref = sanitize_integer(pref.sensorpref, 1, sensorpreflist.len, initial(pref.sensorpref))
|
||||
|
||||
/datum/category_item/player_setup_item/vore/misc/content(var/mob/user)
|
||||
. += "<br>"
|
||||
@@ -36,7 +33,7 @@
|
||||
. += "<b>Character Directory Vore Tag:</b> <a href='?src=\ref[src];directory_tag=1'><b>[pref.directory_tag]</b></a><br>"
|
||||
. += "<b>Character Directory ERP Tag:</b> <a href='?src=\ref[src];directory_erptag=1'><b>[pref.directory_erptag]</b></a><br>"
|
||||
. += "<b>Character Directory Advertisement:</b> <a href='?src=\ref[src];directory_ad=1'><b>Set Directory Ad</b></a><br>"
|
||||
. += "<b>Suit Sensors Preference:</b> <a [pref.sensorpref ? "" : ""] href='?src=\ref[src];toggle_sensor_setting=1'><b>[sensorpreflist[pref.sensorpref]]</b></a><br>" //TFF 5/8/19 - Allow selection of sensor settings from off, binary, vitals, tracking, or random
|
||||
. += "<b>Suit Sensors Preference:</b> <a [pref.sensorpref ? "" : ""] href='?src=\ref[src];toggle_sensor_setting=1'><b>[sensorpreflist[pref.sensorpref]]</b></a><br>"
|
||||
|
||||
/datum/category_item/player_setup_item/vore/misc/OnTopic(var/href, var/list/href_list, var/mob/user)
|
||||
if(href_list["toggle_show_in_directory"])
|
||||
@@ -58,7 +55,6 @@
|
||||
var/msg = sanitize(input(user,"Write your advertisement here!", "Flavor Text", html_decode(pref.directory_ad)) as message, extra = 0) //VOREStation Edit: separating out OOC notes
|
||||
pref.directory_ad = msg
|
||||
return TOPIC_REFRESH
|
||||
//TFF 5/8/19 - add new thing so you can choose the sensor setting your character can get.
|
||||
else if(href_list["toggle_sensor_setting"])
|
||||
var/new_sensorpref = input(user, "Choose your character's sensor preferences:", "Character Preferences", sensorpreflist[pref.sensorpref]) as null|anything in sensorpreflist
|
||||
if (!isnull(new_sensorpref) && CanUseTopic(user))
|
||||
|
||||
@@ -153,7 +153,6 @@
|
||||
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi',
|
||||
SPECIES_WEREBEAST = 'icons/mob/species/werebeast/suit.dmi')
|
||||
|
||||
//TFF 5/8/19 - sets Vorestation /obj/item/clothing/under sensor setting default?
|
||||
/obj/item/clothing/under
|
||||
sensor_mode = 3
|
||||
var/sensorpref = 5
|
||||
@@ -162,7 +161,6 @@
|
||||
SPECIES_VOX = 'icons/mob/species/vox/uniform.dmi',
|
||||
SPECIES_WEREBEAST = 'icons/mob/species/werebeast/uniform.dmi')
|
||||
|
||||
//TFF 5/8/19 - define numbers and specifics for suit sensor settings
|
||||
/obj/item/clothing/under/New(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
sensorpref = isnull(H) ? 1 : (ishuman(H) ? H.sensorpref : 1)
|
||||
|
||||
@@ -329,13 +329,33 @@
|
||||
|
||||
/obj/item/clothing/suit/space/void/exploration
|
||||
name = "exploration voidsuit"
|
||||
desc = "A lightweight, radiation-resistant voidsuit, featuring the Explorer emblem on its chest plate. Designed for exploring unknown planetary environments."
|
||||
desc = "A hazard and radiation resistant voidsuit, featuring the Explorer emblem on its chest plate. Designed for exploring unknown planetary environments."
|
||||
icon_state = "void_explorer"
|
||||
item_state_slots = list(slot_r_hand_str = "skrell_suit_black", slot_l_hand_str = "skrell_suit_black")
|
||||
armor = list(melee = 40, bullet = 15, laser = 25,energy = 35, bomb = 30, bio = 100, rad = 70)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/device/healthanalyzer,/obj/item/device/gps,/obj/item/device/radio/beacon, \
|
||||
/obj/item/weapon/shovel,/obj/item/ammo_magazine,/obj/item/weapon/gun)
|
||||
|
||||
//SAR
|
||||
/obj/item/clothing/head/helmet/space/void/expedition_medical
|
||||
name = "exploration medic\'s voidsuit helmet"
|
||||
desc = "A radiation-resistant helmet made especially for exploring unknown planetary environments. Has a reinforced high-vis bubble style visor."
|
||||
icon_state = "helm_exp_medic"
|
||||
item_state = "helm_exp_medic"
|
||||
item_state_slots = list(slot_r_hand_str = "syndicate-helm-black", slot_l_hand_str = "syndicate-helm-black")
|
||||
armor = list(melee = 25, bullet = 10, laser = 20,energy = 30, bomb = 25, bio = 100, rad = 70)
|
||||
light_overlay = "helmet_light_dual" //explorer_light
|
||||
|
||||
/obj/item/clothing/suit/space/void/expedition_medical
|
||||
name = "exploration medic\'s voidsuit"
|
||||
desc = "A hazard and radiation resistant voidsuit, featuring the Explorer emblem and a green cross on its chest plate. Seems to be a little lighter and more flexible than the regular explorer issue."
|
||||
icon_state = "void_exp_medic"
|
||||
slowdown = 0.75
|
||||
item_state_slots = list(slot_r_hand_str = "skrell_suit_black", slot_l_hand_str = "skrell_suit_black")
|
||||
armor = list(melee = 25, bullet = 10, laser = 20,energy = 30, bomb = 25, bio = 100, rad = 70)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/device/healthanalyzer,/obj/item/device/gps,/obj/item/device/radio/beacon, \
|
||||
/obj/item/weapon/shovel,/obj/item/ammo_magazine,/obj/item/weapon/gun,/obj/item/weapon/storage/firstaid,/obj/item/stack/medical)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/exploration/alt
|
||||
desc = "A radiation-resistant helmet retrofitted for exploring unknown planetary environments."
|
||||
icon_state = "helm_explorer2"
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
icon_state = "grey"
|
||||
rolled_sleeves = 0
|
||||
|
||||
//TFF 5/8/19 - add a non perma-set orange jumpsuit, splits prison into its own obj with override var settings.
|
||||
//TFF 5/9/19 - add a different icon_state to both jumpsuits, orange and prison. Refactors orange and prison jumpsuit slightly.
|
||||
/obj/item/clothing/under/color/orange
|
||||
name = "orange jumpsuit"
|
||||
icon_state = "orange"
|
||||
|
||||
@@ -79,6 +79,8 @@
|
||||
return
|
||||
|
||||
var/new_size = input("Put the desired size (25-200%), or (1-600%) in dormitory areas.", "Set Size", 200) as num|null
|
||||
if(!new_size)
|
||||
return //cancelled
|
||||
|
||||
//Check AGAIN because we accepted user input which is blocking.
|
||||
if (src != H.w_uniform)
|
||||
@@ -88,9 +90,9 @@
|
||||
if (H.stat || H.restrained())
|
||||
return
|
||||
|
||||
if (isnull(H.size_multiplier))
|
||||
if (isnull(H.size_multiplier)) // Why would this ever be the case?
|
||||
to_chat(H,"<span class='warning'>The uniform panics and corrects your apparently microscopic size.</span>")
|
||||
H.resize(RESIZE_NORMAL)
|
||||
H.resize(RESIZE_NORMAL, ignore_prefs = TRUE)
|
||||
H.update_icons() //Just want the matrix transform
|
||||
return
|
||||
|
||||
@@ -102,7 +104,7 @@
|
||||
if(new_size != H.size_multiplier)
|
||||
if(!original_size)
|
||||
original_size = H.size_multiplier
|
||||
H.resize(new_size/100)
|
||||
H.resize(new_size/100, ignore_prefs = TRUE) // Ignores prefs because you can only resize yourself
|
||||
H.visible_message("<span class='warning'>The space around [H] distorts as they change size!</span>","<span class='notice'>The space around you distorts as you change size!</span>")
|
||||
else //They chose their current size.
|
||||
return
|
||||
@@ -111,7 +113,7 @@
|
||||
. = ..()
|
||||
if(. && ishuman(M) && original_size)
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.resize(original_size)
|
||||
H.resize(original_size, ignore_prefs = TRUE)
|
||||
original_size = null
|
||||
H.visible_message("<span class='warning'>The space around [H] distorts as they return to their original size!</span>","<span class='notice'>The space around you distorts as you return to your original size!</span>")
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
/datum/event/rogue_drone/announce()
|
||||
var/msg
|
||||
var/rng = rand(1,5)
|
||||
//VOREStation Edit Start TFF 16/12/19 - Sif -> Virgo 3b
|
||||
//VOREStation Edit Start
|
||||
switch(rng)
|
||||
if(1)
|
||||
msg = "A combat drone wing operating in close orbit above Virgo 3b has failed to return from a anti-piracy sweep. If any are sighted, \
|
||||
|
||||
@@ -171,3 +171,36 @@
|
||||
. = ..()
|
||||
reagents.add_reagent("rootbeer", 30)
|
||||
|
||||
//ADDITIONS BELOW THIS LINE MADE ON 04/03/2021
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/kvass
|
||||
name = "\improper Kvass"
|
||||
desc = "A true Slavic soda."
|
||||
description_fluff = "A classic slavic beverage which many Space Russians still enjoy to this day. Fun fact, it is actually considered a weak beer by non-russians."
|
||||
icon_state = "kvass"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/kvass/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("kvass", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/kompot
|
||||
name = "\improper Kompot"
|
||||
desc = "A taste of russia in the summertime - canned for you consumption."
|
||||
description_fluff = "A sweet and fruity beverage that was traditionally used to preserve frutis in harsh Russian winters that is now available for widespread comsumption."
|
||||
icon_state = "kompot"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/kompot/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("kompot", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/boda
|
||||
name = "\improper Boda"
|
||||
desc = "State regulated soda beverage. Enjoy comrades."
|
||||
icon_state = "boda"
|
||||
center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/boda/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("sodawater", 30)
|
||||
@@ -58,7 +58,7 @@
|
||||
desc = "It's beef. It's roasted. It's been a staple of dining tradition for centuries."
|
||||
icon = 'icons/obj/food_vr.dmi'
|
||||
icon_state = "roastbeef"
|
||||
trash = /obj/item/trash/plate //TFF 30/11/19 - Roast beef are put on plates, not waffle trays, you dunce~
|
||||
trash = /obj/item/trash/plate
|
||||
nutriment_amt = 8
|
||||
nutriment_desc = list("cooked meat" = 5)
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
var/datum/looping_sound/microwave/soundloop
|
||||
|
||||
|
||||
// see code/modules/food/recipes_microwave.dm for recipes
|
||||
//see code/modules/food/recipes_microwave.dm for recipes
|
||||
|
||||
/*******************
|
||||
* Initialising
|
||||
@@ -283,68 +283,69 @@
|
||||
if("dispose")
|
||||
dispose()
|
||||
return TRUE
|
||||
|
||||
// /obj/machinery/microwave/interact(mob/user as mob) // The microwave Menu
|
||||
// var/dat = ""
|
||||
// if(src.broken > 0)
|
||||
// dat = {"<TT>Bzzzzttttt</TT>"}
|
||||
// else if(src.operating)
|
||||
// dat = {"<TT>Microwaving in progress!<BR>Please wait...!</TT>"}
|
||||
// else if(src.dirty==100)
|
||||
// dat = {"<TT>This microwave is dirty!<BR>Please clean it before use!</TT>"}
|
||||
// else
|
||||
// var/list/items_counts = new
|
||||
// var/list/items_measures = new
|
||||
// var/list/items_measures_p = new
|
||||
// for (var/obj/O in ((contents - component_parts) - circuit))
|
||||
// var/display_name = O.name
|
||||
// if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
|
||||
// items_measures[display_name] = "egg"
|
||||
// items_measures_p[display_name] = "eggs"
|
||||
// if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu))
|
||||
// items_measures[display_name] = "tofu chunk"
|
||||
// items_measures_p[display_name] = "tofu chunks"
|
||||
// if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat
|
||||
// items_measures[display_name] = "slab of meat"
|
||||
// items_measures_p[display_name] = "slabs of meat"
|
||||
// if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket))
|
||||
// display_name = "Turnovers"
|
||||
// items_measures[display_name] = "turnover"
|
||||
// items_measures_p[display_name] = "turnovers"
|
||||
// if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat))
|
||||
// items_measures[display_name] = "fillet of meat"
|
||||
// items_measures_p[display_name] = "fillets of meat"
|
||||
// items_counts[display_name]++
|
||||
// for (var/O in items_counts)
|
||||
// var/N = items_counts[O]
|
||||
// if (!(O in items_measures))
|
||||
// dat += {"<B>[capitalize(O)]:</B> [N] [lowertext(O)]\s<BR>"}
|
||||
// else
|
||||
// if (N==1)
|
||||
// dat += {"<B>[capitalize(O)]:</B> [N] [items_measures[O]]<BR>"}
|
||||
// else
|
||||
// dat += {"<B>[capitalize(O)]:</B> [N] [items_measures_p[O]]<BR>"}
|
||||
/*
|
||||
/obj/machinery/microwave/interact(mob/user as mob) // The microwave Menu
|
||||
var/dat = ""
|
||||
if(src.broken > 0)
|
||||
dat = {"<TT>Bzzzzttttt</TT>"}
|
||||
else if(src.operating)
|
||||
dat = {"<TT>Microwaving in progress!<BR>Please wait...!</TT>"}
|
||||
else if(src.dirty==100)
|
||||
dat = {"<TT>This microwave is dirty!<BR>Please clean it before use!</TT>"}
|
||||
else
|
||||
var/list/items_counts = new
|
||||
var/list/items_measures = new
|
||||
var/list/items_measures_p = new
|
||||
for (var/obj/O in ((contents - component_parts) - circuit))
|
||||
var/display_name = O.name
|
||||
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
|
||||
items_measures[display_name] = "egg"
|
||||
items_measures_p[display_name] = "eggs"
|
||||
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu))
|
||||
items_measures[display_name] = "tofu chunk"
|
||||
items_measures_p[display_name] = "tofu chunks"
|
||||
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat
|
||||
items_measures[display_name] = "slab of meat"
|
||||
items_measures_p[display_name] = "slabs of meat"
|
||||
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket))
|
||||
display_name = "Turnovers"
|
||||
items_measures[display_name] = "turnover"
|
||||
items_measures_p[display_name] = "turnovers"
|
||||
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat))
|
||||
items_measures[display_name] = "fillet of meat"
|
||||
items_measures_p[display_name] = "fillets of meat"
|
||||
items_counts[display_name]++
|
||||
for (var/O in items_counts)
|
||||
var/N = items_counts[O]
|
||||
if (!(O in items_measures))
|
||||
dat += {"<B>[capitalize(O)]:</B> [N] [lowertext(O)]\s<BR>"}
|
||||
else
|
||||
if (N==1)
|
||||
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures[O]]<BR>"}
|
||||
else
|
||||
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures_p[O]]<BR>"}
|
||||
|
||||
// for (var/datum/reagent/R in reagents.reagent_list)
|
||||
// var/display_name = R.name
|
||||
// if (R.id == "capsaicin")
|
||||
// display_name = "Hotsauce"
|
||||
// if (R.id == "frostoil")
|
||||
// display_name = "Coldsauce"
|
||||
// dat += {"<B>[display_name]:</B> [R.volume] unit\s<BR>"}
|
||||
for (var/datum/reagent/R in reagents.reagent_list)
|
||||
var/display_name = R.name
|
||||
if (R.id == "capsaicin")
|
||||
display_name = "Hotsauce"
|
||||
if (R.id == "frostoil")
|
||||
display_name = "Coldsauce"
|
||||
dat += {"<B>[display_name]:</B> [R.volume] unit\s<BR>"}
|
||||
|
||||
// if (items_counts.len==0 && reagents.reagent_list.len==0)
|
||||
// dat = {"<B>The microwave is empty</B><BR>"}
|
||||
// else
|
||||
// dat = {"<b>Ingredients:</b><br>[dat]"}
|
||||
// dat += {"<HR><BR>\
|
||||
// <A href='?src=\ref[src];action=cook'>Turn on!<BR>\
|
||||
// <A href='?src=\ref[src];action=dispose'>Eject ingredients!<BR>\
|
||||
// "}
|
||||
if (items_counts.len==0 && reagents.reagent_list.len==0)
|
||||
dat = {"<B>The microwave is empty</B><BR>"}
|
||||
else
|
||||
dat = {"<b>Ingredients:</b><br>[dat]"}
|
||||
dat += {"<HR><BR>\
|
||||
<A href='?src=\ref[src];action=cook'>Turn on!<BR>\
|
||||
<A href='?src=\ref[src];action=dispose'>Eject ingredients!<BR>\
|
||||
"}
|
||||
|
||||
// user << browse("<HEAD><TITLE>Microwave Controls</TITLE></HEAD><TT>[dat]</TT>", "window=microwave")
|
||||
// onclose(user, "microwave")
|
||||
// return
|
||||
user << browse("<HEAD><TITLE>Microwave Controls</TITLE></HEAD><TT>[dat]</TT>", "window=microwave")
|
||||
onclose(user, "microwave")
|
||||
return
|
||||
*/
|
||||
|
||||
/***********************************
|
||||
* Microwave Menu Handling/Cooking
|
||||
|
||||
@@ -187,10 +187,10 @@
|
||||
|
||||
for(var/obj/item/stack/wetleather/WL in I.instances)
|
||||
if(!WL.wetness)
|
||||
if(WL.amount == 1)
|
||||
if(WL.amount)
|
||||
WL.forceMove(get_turf(src))
|
||||
WL.dry()
|
||||
I.instances -= WL
|
||||
WL.dry()
|
||||
break
|
||||
|
||||
WL.wetness = max(0, WL.wetness - rand(1, 3))
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
/datum/event2/event/prison_break/proc/flicker_area()
|
||||
for(var/area/A in areas_to_break)
|
||||
var/obj/machinery/power/apc/apc = A.get_apc()
|
||||
if(apc.operating) //If the apc's off, it's a little hard to overload the lights.
|
||||
if(istype(apc) && apc.operating) //If the apc's off, it's a little hard to overload the lights.
|
||||
for(var/obj/machinery/light/L in A)
|
||||
L.flicker(10)
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
|
||||
/area/engineering
|
||||
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
|
||||
//TFF 11/12/19 - Minor refactor, makes mice spawn only in Atmos.
|
||||
/area/engineering/atmos_intake
|
||||
holomap_color = null
|
||||
/area/maintenance/substation/engineering
|
||||
|
||||
@@ -94,7 +94,6 @@
|
||||
to_chat(user, "You load [W] into [src].")
|
||||
return
|
||||
|
||||
//TFF 3/6/19 - fix infinite frame creation, ported from Cit RP - also allow movement of hydroponic-related machines.
|
||||
if(default_deconstruction_screwdriver(user, W))
|
||||
return
|
||||
if(W.is_wrench())
|
||||
|
||||
@@ -1,276 +1,278 @@
|
||||
/datum/material/proc/get_recipes()
|
||||
if(!recipes)
|
||||
generate_recipes()
|
||||
return recipes
|
||||
|
||||
/datum/material/proc/generate_recipes()
|
||||
recipes = list()
|
||||
|
||||
// If is_brittle() returns true, these are only good for a single strike.
|
||||
recipes += new/datum/stack_recipe("[display_name] baseball bat", /obj/item/weapon/material/twohanded/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 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("[display_name] armor plate insert", /obj/item/weapon/material/armor_plating/insert, 2, time = 40, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
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)
|
||||
|
||||
if(integrity>=50)
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
|
||||
if(hardness>50)
|
||||
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()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe_list("office chairs",list( \
|
||||
new/datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]") \
|
||||
))
|
||||
recipes += new/datum/stack_recipe_list("comfy chairs", list( \
|
||||
new/datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("yellow comfy chair", /obj/structure/bed/chair/comfy/yellow, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("orange comfy chair", /obj/structure/bed/chair/comfy/orange, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("bench frame", /obj/structure/table/bench, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
|
||||
//recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe_list("airlock assemblies", list( \
|
||||
new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("eng atmos airlock assembly", /obj/structure/door_assembly/door_assembly_eat, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("voidcraft airlock assembly horizontal", /obj/structure/door_assembly/door_assembly_voidcraft, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("voidcraft airlock assembly vertical", /obj/structure/door_assembly/door_assembly_voidcraft/vertical, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
))
|
||||
//recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")//VOREStation Removal
|
||||
recipes += new/datum/stack_recipe("medical stand", /obj/structure/medical_stand, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")//VOREStation Replacement
|
||||
recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("floor lamp fixture frame", /obj/machinery/light_construct/flamp, 2, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe_list("modular computer frames", list( \
|
||||
new/datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20, recycle_material = "[name]"),\
|
||||
new/datum/stack_recipe("modular telescreen frame", /obj/item/modular_computer/telescreen, 10, recycle_material = "[name]"),\
|
||||
new/datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10, recycle_material = "[name]"),\
|
||||
new/datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5, recycle_material = "[name]"),\
|
||||
))
|
||||
recipes += new/datum/stack_recipe_list("filing cabinets", list( \
|
||||
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe("desk bell", /obj/item/weapon/deskbell, 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
/datum/material/plasteel/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/dark, 1, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10, recycle_material = "[name]")
|
||||
|
||||
/datum/material/stone/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
|
||||
/datum/material/stone/marble/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("light marble floor tile", /obj/item/stack/tile/wmarble, 1, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark marble floor tile", /obj/item/stack/tile/bmarble, 1, 4, 20, recycle_material = "[name]")
|
||||
|
||||
/datum/material/plastic/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 500u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 250u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 100u
|
||||
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic fishtank", /obj/item/glass_jar/fish/plastic, 2, time = 30 SECONDS, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("reagent tubing", /obj/item/stack/hose, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
|
||||
/datum/material/wood/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("oar", /obj/item/weapon/oar, 2, time = 30, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("boat", /obj/vehicle/boat, 20, time = 10 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("dragon boat", /obj/vehicle/boat/dragon, 50, time = 30 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]") //VOREStation Add
|
||||
recipes += new/datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]")
|
||||
|
||||
/datum/material/wood/log/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
|
||||
/datum/material/cardboard/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("donut box", /obj/item/weapon/storage/box/donut/empty, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("egg box", /obj/item/weapon/storage/fancy/egg_box, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("light tubes box", /obj/item/weapon/storage/box/lights/tubes, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("light bulbs box", /obj/item/weapon/storage/box/lights/bulbs, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("mouse traps box", /obj/item/weapon/storage/box/mousetraps, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("pizza box", /obj/item/pizzabox, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe_list("folders",list( \
|
||||
new/datum/stack_recipe("blue folder", /obj/item/weapon/folder/blue, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("grey folder", /obj/item/weapon/folder, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("red folder", /obj/item/weapon/folder/red, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow, recycle_material = "[name]"), \
|
||||
))
|
||||
|
||||
/datum/material/snow/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20, recycle_material = "[name]")
|
||||
|
||||
/datum/material/snowbrick/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
/datum/material/wood/sif/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("alien wood floor tile", /obj/item/stack/tile/wood/sif, 1, 4, 20, pass_stack_color = TRUE)
|
||||
for(var/datum/stack_recipe/r_recipe in recipes)
|
||||
if(r_recipe.title == "wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden chair")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
|
||||
/datum/material/supermatter/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("supermatter shard", /obj/machinery/power/supermatter/shard, 30 , one_per_turf = 1, time = 600, on_floor = 1, recycle_material = "[name]")
|
||||
|
||||
/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, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
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()
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door/resin, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/effect/alien/resin/wall, 5, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] nest", /obj/structure/bed/nest, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder/resin, 2, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] membrane", /obj/effect/alien/resin/membrane, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] node", /obj/effect/alien/weeds/node, 1, time = 4 SECONDS, recycle_material = "[name]")
|
||||
|
||||
/datum/material/leather/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
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]")
|
||||
/datum/material/proc/get_recipes()
|
||||
if(!recipes)
|
||||
generate_recipes()
|
||||
return recipes
|
||||
|
||||
/datum/material/proc/generate_recipes()
|
||||
recipes = list()
|
||||
|
||||
// If is_brittle() returns true, these are only good for a single strike.
|
||||
recipes += new/datum/stack_recipe("[display_name] baseball bat", /obj/item/weapon/material/twohanded/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 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("[display_name] armor plate insert", /obj/item/weapon/material/armor_plating/insert, 2, time = 40, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
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)
|
||||
|
||||
if(integrity>=50)
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
|
||||
if(hardness>50)
|
||||
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()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe_list("office chairs",list( \
|
||||
new/datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]") \
|
||||
))
|
||||
recipes += new/datum/stack_recipe_list("comfy chairs", list( \
|
||||
new/datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("yellow comfy chair", /obj/structure/bed/chair/comfy/yellow, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("orange comfy chair", /obj/structure/bed/chair/comfy/orange, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("bench frame", /obj/structure/table/bench, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
|
||||
//recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe_list("airlock assemblies", list( \
|
||||
new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("eng atmos airlock assembly", /obj/structure/door_assembly/door_assembly_eat, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("voidcraft airlock assembly horizontal", /obj/structure/door_assembly/door_assembly_voidcraft, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("voidcraft airlock assembly vertical", /obj/structure/door_assembly/door_assembly_voidcraft/vertical, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
))
|
||||
//recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")//VOREStation Removal
|
||||
recipes += new/datum/stack_recipe("medical stand", /obj/structure/medical_stand, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")//VOREStation Replacement
|
||||
recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("floor lamp fixture frame", /obj/machinery/light_construct/flamp, 2, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe_list("modular computer frames", list( \
|
||||
new/datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20, recycle_material = "[name]"),\
|
||||
new/datum/stack_recipe("modular telescreen frame", /obj/item/modular_computer/telescreen, 10, recycle_material = "[name]"),\
|
||||
new/datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10, recycle_material = "[name]"),\
|
||||
new/datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5, recycle_material = "[name]"),\
|
||||
))
|
||||
recipes += new/datum/stack_recipe_list("filing cabinets", list( \
|
||||
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe("desk bell", /obj/item/weapon/deskbell, 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
|
||||
|
||||
/datum/material/plasteel/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/dark, 1, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10, recycle_material = "[name]")
|
||||
|
||||
/datum/material/stone/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
|
||||
/datum/material/stone/marble/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("light marble floor tile", /obj/item/stack/tile/wmarble, 1, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark marble floor tile", /obj/item/stack/tile/bmarble, 1, 4, 20, recycle_material = "[name]")
|
||||
|
||||
/datum/material/plastic/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 500u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 250u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 100u
|
||||
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic fishtank", /obj/item/glass_jar/fish/plastic, 2, time = 30 SECONDS, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("reagent tubing", /obj/item/stack/hose, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
|
||||
/datum/material/wood/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("oar", /obj/item/weapon/oar, 2, time = 30, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("boat", /obj/vehicle/boat, 20, time = 10 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("dragon boat", /obj/vehicle/boat/dragon, 50, time = 30 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]") //VOREStation Add
|
||||
recipes += new/datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
|
||||
|
||||
/datum/material/wood/log/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
|
||||
/datum/material/cardboard/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("donut box", /obj/item/weapon/storage/box/donut/empty, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("egg box", /obj/item/weapon/storage/fancy/egg_box, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("light tubes box", /obj/item/weapon/storage/box/lights/tubes, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("light bulbs box", /obj/item/weapon/storage/box/lights/bulbs, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("mouse traps box", /obj/item/weapon/storage/box/mousetraps, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("pizza box", /obj/item/pizzabox, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe_list("folders",list( \
|
||||
new/datum/stack_recipe("blue folder", /obj/item/weapon/folder/blue, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("grey folder", /obj/item/weapon/folder, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("red folder", /obj/item/weapon/folder/red, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow, recycle_material = "[name]"), \
|
||||
))
|
||||
|
||||
/datum/material/snow/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20, recycle_material = "[name]")
|
||||
|
||||
/datum/material/snowbrick/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
/datum/material/wood/sif/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("alien wood floor tile", /obj/item/stack/tile/wood/sif, 1, 4, 20, pass_stack_color = TRUE)
|
||||
for(var/datum/stack_recipe/r_recipe in recipes)
|
||||
if(r_recipe.title == "wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden chair")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
|
||||
/datum/material/supermatter/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("supermatter shard", /obj/machinery/power/supermatter/shard, 30 , one_per_turf = 1, time = 600, on_floor = 1, recycle_material = "[name]")
|
||||
|
||||
/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, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
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()
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door/resin, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/effect/alien/resin/wall, 5, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] nest", /obj/structure/bed/nest, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder/resin, 2, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] membrane", /obj/effect/alien/resin/membrane, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] node", /obj/effect/alien/weeds/node, 1, time = 4 SECONDS, recycle_material = "[name]")
|
||||
|
||||
/datum/material/leather/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
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]")
|
||||
|
||||
@@ -55,4 +55,12 @@
|
||||
|
||||
/obj/fiftyspawner/plastitanium_glass
|
||||
name = "stack of plastitanium glass"
|
||||
type_to_spawn = /obj/item/stack/material/glass/plastitanium
|
||||
type_to_spawn = /obj/item/stack/material/glass/plastitanium
|
||||
|
||||
/obj/item/stack/material/gold/hull
|
||||
name = "gold hull sheets"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "sheet-plastitanium"
|
||||
item_state = "sheet-silver"
|
||||
no_variants = FALSE
|
||||
default_type = MAT_GOLDHULL
|
||||
@@ -53,9 +53,10 @@ var/list/name_to_material
|
||||
/proc/populate_material_list(force_remake=0)
|
||||
if(name_to_material && !force_remake) return // Already set up!
|
||||
name_to_material = list()
|
||||
for(var/type in typesof(/datum/material) - /datum/material)
|
||||
for(var/type in subtypesof(/datum/material))
|
||||
var/datum/material/new_mineral = new type
|
||||
if(!new_mineral.name)
|
||||
qdel(new_mineral)
|
||||
continue
|
||||
name_to_material[lowertext(new_mineral.name)] = new_mineral
|
||||
return 1
|
||||
|
||||
@@ -91,4 +91,14 @@
|
||||
created_fulltile_window = /obj/structure/window/plastitanium/full
|
||||
wire_product = null
|
||||
rod_product = /obj/item/stack/material/glass/plastitanium
|
||||
composite_material = list(MAT_PLASTITANIUM = SHEET_MATERIAL_AMOUNT, "glass" = SHEET_MATERIAL_AMOUNT)
|
||||
composite_material = list(MAT_PLASTITANIUM = SHEET_MATERIAL_AMOUNT, "glass" = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/gold/hull
|
||||
name = MAT_GOLDHULL
|
||||
stack_type = /obj/item/stack/material/gold/hull
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
explosion_resistance = 50
|
||||
|
||||
/datum/material/gold/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
|
||||
new /obj/item/stack/material/gold(target)
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
for(var/turf in visAdded)
|
||||
var/turf/t = turf
|
||||
if(t.obfuscations[obfuscation.type])
|
||||
if(LAZYLEN(t.obfuscations) && t.obfuscations[obfuscation.type])
|
||||
obscured -= t.obfuscations[obfuscation.type]
|
||||
for(var/eye in seenby)
|
||||
var/mob/observer/eye/m = eye
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
icon_state = "farmbot0"
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
req_one_access = list(access_robotics, access_hydroponics, access_xenobiology) //TFF 11/7/19 - adds Xenobio access on behalf of Nalarac
|
||||
req_one_access = list(access_robotics, access_hydroponics, access_xenobiology)
|
||||
|
||||
var/action = "" // Used to update icon
|
||||
var/waters_trays = 1
|
||||
|
||||
@@ -181,15 +181,6 @@
|
||||
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/verb/toggle_resizing_immunity()
|
||||
set name = "Toggle Resizing Immunity"
|
||||
set desc = "Toggles your ability to resist resizing attempts"
|
||||
set category = "IC"
|
||||
|
||||
resizable = !resizable
|
||||
to_chat(src, "<span class='notice'>You are now [resizable ? "susceptible" : "immune"] to being resized.</span>")
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/handle_flip_vr()
|
||||
var/original_density = density
|
||||
var/original_passflags = pass_flags
|
||||
|
||||
@@ -492,6 +492,7 @@ This function restores all organs.
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
damageoverlaytemp = 20
|
||||
if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)){damage *= 0.7}
|
||||
damage = damage*species.brute_mod
|
||||
|
||||
for(var/datum/modifier/M in modifiers)
|
||||
@@ -504,6 +505,7 @@ This function restores all organs.
|
||||
UpdateDamageIcon()
|
||||
if(BURN)
|
||||
damageoverlaytemp = 20
|
||||
if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){damage *= 0.7}
|
||||
damage = damage*species.burn_mod
|
||||
|
||||
for(var/datum/modifier/M in modifiers)
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
var/impersonate_bodytype //For impersonating a bodytype
|
||||
var/ability_flags = 0 //Shadekin abilities/potentially other species-based?
|
||||
var/sensorpref = 5 //Suit sensor loadout pref
|
||||
var/unnaturally_resized = FALSE //If one became larger than 200%, or smaller than 25%. This flag is needed for the case when admins want someone to be very big or very small outside of dorms.
|
||||
var/wings_hidden = FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/shadekin_get_energy()
|
||||
|
||||
@@ -97,6 +97,7 @@
|
||||
var/their_slowdown = max(H.calculate_item_encumbrance(), 1)
|
||||
item_tally = max(item_tally, their_slowdown) // If our slowdown is less than theirs, then we become as slow as them (before species modifires).
|
||||
|
||||
item_tally /= 2 //VOREStation Add
|
||||
item_tally *= species.item_slowdown_mod
|
||||
|
||||
. += item_tally
|
||||
@@ -189,7 +190,7 @@
|
||||
if(istype(back, /obj/item/weapon/tank/jetpack))
|
||||
return back
|
||||
else if(istype(rig))
|
||||
for(var/obj/item/rig_module/maneuvering_jets.module in rig.installed_modules)
|
||||
for(var/obj/item/rig_module/maneuvering_jets/module in rig.installed_modules)
|
||||
return module.jets
|
||||
|
||||
/mob/living/carbon/human/Process_Spacemove(var/check_drift = 0)
|
||||
|
||||
@@ -104,7 +104,8 @@
|
||||
else if (E.is_dislocated())
|
||||
stance_damage += 0.5
|
||||
|
||||
if(E) limb_pain = E.organ_can_feel_pain()
|
||||
if(E && (!E.is_usable() || E.is_broken() || E.is_dislocated())) //VOREStation Edit
|
||||
limb_pain = E.organ_can_feel_pain()
|
||||
|
||||
// Canes and crutches help you stand (if the latter is ever added)
|
||||
// One cane mitigates a broken leg+foot, or a missing foot.
|
||||
|
||||
@@ -62,8 +62,6 @@
|
||||
|
||||
//No need to update all of these procs if the guy is dead.
|
||||
fall() //VORESTATION EDIT. Prevents people from floating
|
||||
if(unnaturally_resized) //VORESTATION EDIT.
|
||||
handle_unnatural_size()
|
||||
if(stat != DEAD && !stasis)
|
||||
//Updates the number of stored chemicals for powers
|
||||
handle_changeling()
|
||||
@@ -1268,7 +1266,7 @@
|
||||
//VOREStation Add - Vampire hunger alert
|
||||
else if(get_species() == SPECIES_CUSTOM)
|
||||
var/datum/species/custom/C = species
|
||||
if(/datum/trait/bloodsucker in C.traits)
|
||||
if(/datum/trait/neutral/bloodsucker in C.traits)
|
||||
fat_alert = /obj/screen/alert/fat/vampire
|
||||
hungry_alert = /obj/screen/alert/hungry/vampire
|
||||
starving_alert = /obj/screen/alert/starving/vampire
|
||||
|
||||
@@ -78,10 +78,3 @@
|
||||
// Moving around increases germ_level faster
|
||||
if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8))
|
||||
germ_level++
|
||||
|
||||
/mob/living/carbon/human/proc/handle_unnatural_size()
|
||||
if(!in_dorms())
|
||||
if(src.size_multiplier > 2)
|
||||
src.resize(2)
|
||||
else if (src.size_multiplier < 0.25)
|
||||
src.resize(0.25)
|
||||
@@ -413,7 +413,6 @@
|
||||
H.visible_message( \
|
||||
"<span class='notice'>[H] shakes [target]'s hand.</span>", \
|
||||
"<span class='notice'>You shake [target]'s hand.</span>", )
|
||||
//TFF 15/12/19 - Port nose booping from CHOMPStation
|
||||
else if(H.zone_sel.selecting == "mouth")
|
||||
H.visible_message( \
|
||||
"<span class='notice'>[H] boops [target]'s nose.</span>", \
|
||||
|
||||
@@ -53,6 +53,9 @@
|
||||
|
||||
var/datum/species/new_copy = new to_copy.type()
|
||||
|
||||
for(var/organ in to_copy.has_limbs)
|
||||
var/list/organ_data = to_copy.has_limbs[organ]
|
||||
new_copy.has_limbs[organ] = organ_data.Copy()
|
||||
new_copy.traits = traits
|
||||
|
||||
//If you had traits, apply them
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#define PROTEAN_EDIBLE_MATERIALS list(MAT_STEEL, MAT_SILVER, MAT_GOLD, MAT_URANIUM, MAT_METALHYDROGEN)
|
||||
@@ -22,8 +22,8 @@
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 2
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
attacktext = list("slashed")
|
||||
|
||||
min_oxy = 0
|
||||
@@ -36,7 +36,7 @@
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 900
|
||||
movement_cooldown = 3
|
||||
movement_cooldown = 4
|
||||
|
||||
var/mob/living/carbon/human/humanform
|
||||
var/obj/item/organ/internal/nano/refactory/refactory
|
||||
@@ -267,9 +267,8 @@
|
||||
if(refactory && istype(A,/obj/item/stack/material))
|
||||
var/obj/item/stack/material/S = A
|
||||
var/substance = S.material.name
|
||||
var/list/edible_materials = list("steel", "plasteel", "diamond", "mhydrogen") //Can't eat all materials, just useful ones.
|
||||
var allowed = FALSE
|
||||
for(var/material in edible_materials)
|
||||
for(var/material in PROTEAN_EDIBLE_MATERIALS)
|
||||
if(material == substance) allowed = TRUE
|
||||
if(!allowed)
|
||||
return
|
||||
@@ -282,9 +281,8 @@
|
||||
if(refactory && istype(O,/obj/item/stack/material))
|
||||
var/obj/item/stack/material/S = O
|
||||
var/substance = S.material.name
|
||||
var/list/edible_materials = list("steel", "plasteel", "diamond", "mhydrogen") //Can't eat all materials, just useful ones.
|
||||
var allowed = FALSE
|
||||
for(var/material in edible_materials)
|
||||
for(var/material in PROTEAN_EDIBLE_MATERIALS)
|
||||
if(material == substance) allowed = TRUE
|
||||
if(!allowed)
|
||||
return
|
||||
@@ -432,7 +430,7 @@ var/global/list/disallowed_protean_accessories = list(
|
||||
var/atom/reform_spot = blob.drop_location()
|
||||
|
||||
//Size update
|
||||
resize(blob.size_multiplier, FALSE)
|
||||
resize(blob.size_multiplier, FALSE, ignore_prefs = TRUE)
|
||||
|
||||
//Move them back where the blob was
|
||||
forceMove(reform_spot)
|
||||
|
||||
@@ -201,9 +201,8 @@
|
||||
|
||||
var/obj/item/stack/material/matstack = held
|
||||
var/substance = matstack.material.name
|
||||
var/list/edible_materials = list(MAT_STEEL, MAT_SILVER, MAT_GOLD, MAT_URANIUM, MAT_METALHYDROGEN) //Can't eat all materials, just useful ones.
|
||||
var allowed = FALSE
|
||||
for(var/material in edible_materials)
|
||||
for(var/material in PROTEAN_EDIBLE_MATERIALS)
|
||||
if(material == substance) allowed = TRUE
|
||||
if(!allowed)
|
||||
to_chat(src,"<span class='warning'>You can't process [substance]!</span>")
|
||||
@@ -300,14 +299,14 @@
|
||||
//Sizing up
|
||||
if(cost > 0)
|
||||
if(refactory.use_stored_material(MAT_STEEL,cost))
|
||||
user.resize(size_factor)
|
||||
user.resize(size_factor, ignore_prefs = TRUE)
|
||||
else
|
||||
to_chat(user,"<span class='warning'>That size change would cost [cost] steel, which you don't have.</span>")
|
||||
//Sizing down (or not at all)
|
||||
else if(cost <= 0)
|
||||
cost = abs(cost)
|
||||
var/actually_added = refactory.add_stored_material(MAT_STEEL,cost)
|
||||
user.resize(size_factor)
|
||||
user.resize(size_factor, ignore_prefs = TRUE)
|
||||
if(actually_added != cost)
|
||||
to_chat(user,"<span class='warning'>Unfortunately, [cost-actually_added] steel was lost due to lack of storage space.</span>")
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
if(refactory.get_stored_material(MAT_GOLD) >= METAL_PER_TICK)
|
||||
H.add_modifier(/datum/modifier/protean/gold, origin = refactory)
|
||||
|
||||
//Silver adds darksight
|
||||
//Silver adds accuracy and evasion
|
||||
if(refactory.get_stored_material(MAT_SILVER) >= METAL_PER_TICK)
|
||||
H.add_modifier(/datum/modifier/protean/silver, origin = refactory)
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
ambiguous_genders = TRUE
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_NO_POSIBRAIN
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
bump_flag = MONKEY
|
||||
swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
@@ -162,7 +162,7 @@
|
||||
// without parachute, or falling bird without free wings goes splat.
|
||||
|
||||
// Are we landing from orbit, or handcuffed/unconscious/tied to something?
|
||||
if(planetary || !istype(H) || H.incapacitated())
|
||||
if(planetary || !istype(H) || H.incapacitated(INCAPACITATION_DEFAULT|INCAPACITATION_DISABLED))
|
||||
return ..()
|
||||
|
||||
// Are we landing on a turf? Not sure how this could not be the case, but let's be safe.
|
||||
@@ -201,7 +201,7 @@
|
||||
// Handled!
|
||||
if(!silent)
|
||||
to_chat(H, SPAN_NOTICE("You catch the air in your wings and greatly slow your fall."))
|
||||
H.visible_message(SPAN_NOTICE("\The [H] glides down from above, landing safely."))
|
||||
H.Stun(2)
|
||||
landing.visible_message(SPAN_NOTICE("\The [H] glides down from above, landing safely."))
|
||||
H.Stun(1)
|
||||
playsound(H, "rustle", 25, 1)
|
||||
return TRUE
|
||||
|
||||
@@ -1,31 +1,34 @@
|
||||
#define ORGANICS 1
|
||||
#define SYNTHETICS 2
|
||||
|
||||
/datum/trait/speed_slow
|
||||
/datum/trait/negative
|
||||
category = -1
|
||||
|
||||
/datum/trait/negative/speed_slow
|
||||
name = "Slowdown"
|
||||
desc = "Allows you to move slower on average than baseline."
|
||||
cost = -2
|
||||
var_changes = list("slowdown" = 0.5)
|
||||
|
||||
/datum/trait/speed_slow_plus
|
||||
/datum/trait/negative/speed_slow_plus
|
||||
name = "Major Slowdown"
|
||||
desc = "Allows you to move MUCH slower on average than baseline."
|
||||
cost = -3
|
||||
var_changes = list("slowdown" = 1.0)
|
||||
|
||||
/datum/trait/weakling
|
||||
/datum/trait/negative/weakling
|
||||
name = "Weakling"
|
||||
desc = "Causes heavy equipment to slow you down more when carried."
|
||||
cost = -1
|
||||
var_changes = list("item_slowdown_mod" = 1.5)
|
||||
|
||||
/datum/trait/weakling_plus
|
||||
/datum/trait/negative/weakling_plus
|
||||
name = "Major Weakling"
|
||||
desc = "Allows you to carry heavy equipment with much more slowdown."
|
||||
cost = -2
|
||||
var_changes = list("item_slowdown_mod" = 2.0)
|
||||
|
||||
/datum/trait/endurance_low
|
||||
/datum/trait/negative/endurance_low
|
||||
name = "Low Endurance"
|
||||
desc = "Reduces your maximum total hitpoints to 75."
|
||||
cost = -2
|
||||
@@ -35,7 +38,7 @@
|
||||
..(S,H)
|
||||
H.setMaxHealth(S.total_health)
|
||||
|
||||
/datum/trait/endurance_very_low
|
||||
/datum/trait/negative/endurance_very_low
|
||||
name = "Extremely Low Endurance"
|
||||
desc = "Reduces your maximum total hitpoints to 50."
|
||||
cost = -3 //Teshari HP. This makes the person a lot more suseptable to getting stunned, killed, etc.
|
||||
@@ -45,108 +48,81 @@
|
||||
..(S,H)
|
||||
H.setMaxHealth(S.total_health)
|
||||
|
||||
/datum/trait/minor_brute_weak
|
||||
/datum/trait/negative/minor_brute_weak
|
||||
name = "Minor Brute Weakness"
|
||||
desc = "Increases damage from brute damage sources by 15%"
|
||||
cost = -1
|
||||
var_changes = list("brute_mod" = 1.15)
|
||||
|
||||
/datum/trait/brute_weak
|
||||
/datum/trait/negative/brute_weak
|
||||
name = "Brute Weakness"
|
||||
desc = "Increases damage from brute damage sources by 25%"
|
||||
cost = -2
|
||||
var_changes = list("brute_mod" = 1.25)
|
||||
|
||||
/datum/trait/brute_weak_plus
|
||||
/datum/trait/negative/brute_weak_plus
|
||||
name = "Major Brute Weakness"
|
||||
desc = "Increases damage from brute damage sources by 50%"
|
||||
cost = -3
|
||||
var_changes = list("brute_mod" = 1.5)
|
||||
|
||||
/datum/trait/minor_burn_weak
|
||||
/datum/trait/negative/minor_burn_weak
|
||||
name = "Minor Burn Weakness"
|
||||
desc = "Increases damage from burn damage sources by 15%"
|
||||
cost = -1
|
||||
var_changes = list("burn_mod" = 1.15)
|
||||
|
||||
/datum/trait/burn_weak
|
||||
/datum/trait/negative/burn_weak
|
||||
name = "Burn Weakness"
|
||||
desc = "Increases damage from burn damage sources by 25%"
|
||||
cost = -2
|
||||
var_changes = list("burn_mod" = 1.25)
|
||||
|
||||
/datum/trait/burn_weak_plus
|
||||
/datum/trait/negative/burn_weak_plus
|
||||
name = "Major Burn Weakness"
|
||||
desc = "Increases damage from burn damage sources by 50%"
|
||||
cost = -3
|
||||
var_changes = list("burn_mod" = 1.5)
|
||||
|
||||
/datum/trait/conductive
|
||||
/datum/trait/negative/conductive
|
||||
name = "Conductive"
|
||||
desc = "Increases your susceptibility to electric shocks by 50%"
|
||||
cost = -1
|
||||
var_changes = list("siemens_coefficient" = 1.5) //This makes you a lot weaker to tasers.
|
||||
|
||||
/datum/trait/conductive_plus
|
||||
/datum/trait/negative/conductive_plus
|
||||
name = "Major Conductive"
|
||||
desc = "Increases your susceptibility to electric shocks by 100%"
|
||||
cost = -2
|
||||
cost = -1
|
||||
var_changes = list("siemens_coefficient" = 2.0) //This makes you extremely weak to tasers.
|
||||
|
||||
/datum/trait/haemophilia
|
||||
/datum/trait/negative/haemophilia
|
||||
name = "Haemophilia - Organics only"
|
||||
desc = "When you bleed, you bleed a LOT."
|
||||
cost = -2
|
||||
var_changes = list("bloodloss_rate" = 2)
|
||||
can_take = ORGANICS
|
||||
|
||||
/datum/trait/hollow
|
||||
/datum/trait/negative/hollow
|
||||
name = "Hollow Bones/Aluminum Alloy"
|
||||
desc = "Your bones and robot limbs are much easier to break."
|
||||
cost = -2 //I feel like this should be higher, but let's see where it goes
|
||||
|
||||
/datum/trait/hollow/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/negative/hollow/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
for(var/obj/item/organ/external/O in H.organs)
|
||||
O.min_broken_damage *= 0.5
|
||||
O.min_bruised_damage *= 0.5
|
||||
|
||||
/datum/trait/lightweight
|
||||
/datum/trait/negative/lightweight
|
||||
name = "Lightweight"
|
||||
desc = "Your light weight and poor balance make you very susceptible to unhelpful bumping. Think of it like a bowling ball versus a pin."
|
||||
cost = -2
|
||||
var_changes = list("lightweight" = 1)
|
||||
|
||||
/datum/trait/colorblind/mono
|
||||
name = "Colorblindness (Monochromancy)"
|
||||
desc = "You simply can't see colors at all, period. You are 100% colorblind."
|
||||
cost = -1
|
||||
|
||||
/datum/trait/colorblind/mono/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.add_modifier(/datum/modifier/trait/colorblind_monochrome)
|
||||
|
||||
/datum/trait/colorblind/para_vulp
|
||||
name = "Colorblindness (Para Vulp)"
|
||||
desc = "You have a severe issue with green colors and have difficulty recognizing them from red colors."
|
||||
cost = -1
|
||||
|
||||
/datum/trait/colorblind/para_vulp/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.add_modifier(/datum/modifier/trait/colorblind_vulp)
|
||||
|
||||
/datum/trait/colorblind/para_taj
|
||||
name = "Colorblindness (Para Taj)"
|
||||
desc = "You have a minor issue with blue colors and have difficulty recognizing them from red colors."
|
||||
cost = -1
|
||||
|
||||
/datum/trait/colorblind/para_taj/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.add_modifier(/datum/modifier/trait/colorblind_taj)
|
||||
|
||||
/datum/trait/neural_hypersensitivity
|
||||
/datum/trait/negative/neural_hypersensitivity
|
||||
name = "Neural Hypersensitivity"
|
||||
desc = "Your nerves are particularly sensitive to physical changes, leading to experiencing twice the intensity of pain and pleasure alike. Doubles traumatic shock."
|
||||
cost = -1
|
||||
var_changes = list("trauma_mod" = 2)
|
||||
|
||||
can_take = ORGANICS
|
||||
|
||||
@@ -1,42 +1,42 @@
|
||||
#define ORGANICS 1
|
||||
#define SYNTHETICS 2
|
||||
|
||||
/datum/trait/metabolism_up
|
||||
/datum/trait/neutral/metabolism_up
|
||||
name = "Fast Metabolism"
|
||||
desc = "You process ingested and injected reagents faster, but get hungry faster (Teshari speed)."
|
||||
cost = 0
|
||||
var_changes = list("metabolic_rate" = 1.2, "hunger_factor" = 0.2, "metabolism" = 0.06) // +20% rate and 4x hunger (Teshari level)
|
||||
excludes = list(/datum/trait/metabolism_down, /datum/trait/metabolism_apex)
|
||||
excludes = list(/datum/trait/neutral/metabolism_down, /datum/trait/neutral/metabolism_apex)
|
||||
|
||||
/datum/trait/metabolism_down
|
||||
/datum/trait/neutral/metabolism_down
|
||||
name = "Slow Metabolism"
|
||||
desc = "You process ingested and injected reagents slower, but get hungry slower."
|
||||
cost = 0
|
||||
var_changes = list("metabolic_rate" = 0.8, "hunger_factor" = 0.04, "metabolism" = 0.0012) // -20% of default.
|
||||
excludes = list(/datum/trait/metabolism_up, /datum/trait/metabolism_apex)
|
||||
excludes = list(/datum/trait/neutral/metabolism_up, /datum/trait/neutral/metabolism_apex)
|
||||
|
||||
/datum/trait/metabolism_apex
|
||||
/datum/trait/neutral/metabolism_apex
|
||||
name = "Apex Metabolism"
|
||||
desc = "Finally a proper excuse for your predatory actions. Essentially doubles the fast trait rates. Good for characters with big appetites."
|
||||
cost = 0
|
||||
var_changes = list("metabolic_rate" = 1.4, "hunger_factor" = 0.4, "metabolism" = 0.012) // +40% rate and 8x hunger (Double Teshari)
|
||||
excludes = list(/datum/trait/metabolism_up, /datum/trait/metabolism_down)
|
||||
excludes = list(/datum/trait/neutral/metabolism_up, /datum/trait/neutral/metabolism_down)
|
||||
|
||||
/datum/trait/coldadapt
|
||||
/datum/trait/neutral/coldadapt
|
||||
name = "Cold-Adapted"
|
||||
desc = "You are able to withstand much colder temperatures than other species, and can even be comfortable in extremely cold environments. You are also more vulnerable to hot environments, and have a lower body temperature as a consequence of these adaptations."
|
||||
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" = 330, "heat_level_2" = 380, "heat_level_3" = 700, "breath_heat_level_1" = 360, "breath_heat_level_2" = 400, "breath_heat_level_3" = 850, "heat_discomfort_level" = 295, "body_temperature" = 290)
|
||||
excludes = list(/datum/trait/hotadapt)
|
||||
excludes = list(/datum/trait/neutral/hotadapt)
|
||||
|
||||
/datum/trait/hotadapt
|
||||
/datum/trait/neutral/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."
|
||||
cost = 0
|
||||
var_changes = list("heat_level_1" = 420, "heat_level_2" = 460, "heat_level_3" = 1100, "breath_heat_level_1" = 440, "breath_heat_level_2" = 510, "breath_heat_level_3" = 1500, "heat_discomfort_level" = 390, "cold_level_1" = 280, "cold_level_2" = 220, "cold_level_3" = 140, "breath_cold_level_1" = 260, "breath_cold_level_2" = 240, "breath_cold_level_3" = 120, "cold_discomfort_level" = 280, "body_temperature" = 330)
|
||||
excludes = list(/datum/trait/coldadapt)
|
||||
excludes = list(/datum/trait/neutral/coldadapt)
|
||||
|
||||
/datum/trait/autohiss_unathi
|
||||
/datum/trait/neutral/autohiss_unathi
|
||||
name = "Autohiss (Unathi)"
|
||||
desc = "You roll your S's and x's"
|
||||
cost = 0
|
||||
@@ -49,9 +49,9 @@
|
||||
),
|
||||
autohiss_exempt = list("Sinta'unathi"))
|
||||
|
||||
excludes = list(/datum/trait/autohiss_tajaran)
|
||||
excludes = list(/datum/trait/neutral/autohiss_tajaran)
|
||||
|
||||
/datum/trait/autohiss_tajaran
|
||||
/datum/trait/neutral/autohiss_tajaran
|
||||
name = "Autohiss (Tajaran)"
|
||||
desc = "You roll your R's."
|
||||
cost = 0
|
||||
@@ -60,74 +60,74 @@
|
||||
"r" = list("rr", "rrr", "rrrr")
|
||||
),
|
||||
autohiss_exempt = list("Siik"))
|
||||
excludes = list(/datum/trait/autohiss_unathi)
|
||||
excludes = list(/datum/trait/neutral/autohiss_unathi)
|
||||
|
||||
/datum/trait/bloodsucker
|
||||
/datum/trait/neutral/bloodsucker
|
||||
name = "Bloodsucker"
|
||||
desc = "Makes you unable to gain nutrition from anything but blood. To compenstate, you get fangs that can be used to drain blood from prey."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("organic_food_coeff" = 0) //The verb is given in human.dm
|
||||
|
||||
/datum/trait/bloodsucker/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/neutral/bloodsucker/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/carbon/human/proc/bloodsuck
|
||||
|
||||
/datum/trait/succubus_drain
|
||||
/datum/trait/neutral/succubus_drain
|
||||
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)
|
||||
/datum/trait/neutral/succubus_drain/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/carbon/human/proc/succubus_drain
|
||||
H.verbs |= /mob/living/carbon/human/proc/succubus_drain_finalize
|
||||
H.verbs |= /mob/living/carbon/human/proc/succubus_drain_lethal
|
||||
|
||||
/datum/trait/feeder
|
||||
/datum/trait/neutral/feeder
|
||||
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)
|
||||
/datum/trait/neutral/feeder/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/carbon/human/proc/slime_feed
|
||||
|
||||
/datum/trait/hard_vore
|
||||
/datum/trait/neutral/hard_vore
|
||||
name = "Brutal Predation"
|
||||
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)
|
||||
/datum/trait/neutral/hard_vore/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/proc/shred_limb
|
||||
|
||||
/datum/trait/trashcan
|
||||
/datum/trait/neutral/trashcan
|
||||
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)
|
||||
/datum/trait/neutral/trashcan/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/proc/eat_trash
|
||||
|
||||
/datum/trait/gem_eater
|
||||
/datum/trait/neutral/gem_eater
|
||||
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("organic_food_coeff" = 0, "eat_minerals" = 1)
|
||||
|
||||
/datum/trait/gem_eater/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/neutral/gem_eater/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/proc/eat_minerals
|
||||
|
||||
/datum/trait/synth_chemfurnace
|
||||
|
||||
/datum/trait/neutral/synth_chemfurnace
|
||||
name = "Biofuel Processor"
|
||||
desc = "You are able to gain energy through consuming and processing normal food. Energy-dense foods such as protein bars and survival food will yield the best results."
|
||||
cost = 0
|
||||
@@ -135,101 +135,101 @@
|
||||
can_take = SYNTHETICS
|
||||
var_changes = list("organic_food_coeff" = 0, "synthetic_food_coeff" = 0.25)
|
||||
|
||||
/datum/trait/glowing_eyes
|
||||
/datum/trait/neutral/glowing_eyes
|
||||
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
|
||||
/datum/trait/neutral/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)
|
||||
/datum/trait/neutral/glowing_body/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/proc/glow_toggle
|
||||
H.verbs |= /mob/living/proc/glow_color
|
||||
|
||||
|
||||
//Allergen traits! Not available to any species with a base allergens var.
|
||||
/datum/trait/allergy
|
||||
/datum/trait/neutral/allergy
|
||||
name = "Allergy: Gluten"
|
||||
desc = "You're highly allergic to gluten proteins, which are found in most common grains."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var/allergen = GRAINS
|
||||
|
||||
/datum/trait/allergy/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/neutral/allergy/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
S.allergens |= allergen
|
||||
..(S,H)
|
||||
|
||||
/datum/trait/allergy/meat
|
||||
/datum/trait/neutral/allergy/meat
|
||||
name = "Allergy: Meat"
|
||||
desc = "You're highly allergic to just about any form of meat. You're probably better off just sticking to vegetables. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
allergen = MEAT
|
||||
|
||||
/datum/trait/allergy/fish
|
||||
/datum/trait/neutral/allergy/fish
|
||||
name = "Allergy: Fish"
|
||||
desc = "You're highly allergic to fish. It's probably best to avoid seafood in general. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
allergen = FISH
|
||||
|
||||
/datum/trait/allergy/fruit
|
||||
/datum/trait/neutral/allergy/fruit
|
||||
name = "Allergy: Fruit"
|
||||
desc = "You're highly allergic to fruit. Vegetables are fine, but you should probably read up on how to tell the difference. Remember, tomatoes are a fruit. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
allergen = FRUIT
|
||||
|
||||
/datum/trait/allergy/vegetable
|
||||
/datum/trait/neutral/allergy/vegetable
|
||||
name = "Allergy: Vegetable"
|
||||
desc = "You're highly allergic to vegetables. Fruit are fine, but you should probably read up on how to tell the difference. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
allergen = VEGETABLE
|
||||
|
||||
/datum/trait/allergy/nuts
|
||||
/datum/trait/neutral/allergy/nuts
|
||||
name = "Allergy: Nuts"
|
||||
desc = "You're highly allergic to hard-shell seeds, such as peanuts. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
allergen = SEEDS
|
||||
|
||||
/datum/trait/allergy/soy
|
||||
/datum/trait/neutral/allergy/soy
|
||||
name = "Allergy: Soy"
|
||||
desc = "You're highly allergic to soybeans, and some other kinds of bean. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
allergen = BEANS
|
||||
|
||||
/datum/trait/allergy/dairy
|
||||
/datum/trait/neutral/allergy/dairy
|
||||
name = "Allergy: Lactose"
|
||||
desc = "You're highly allergic to lactose, and consequently, just about all forms of dairy. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
allergen = DAIRY
|
||||
|
||||
/datum/trait/allergy/fungi
|
||||
/datum/trait/neutral/allergy/fungi
|
||||
name = "Allergy: Fungi"
|
||||
desc = "You're highly allergic to fungi such as mushrooms. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
allergen = FUNGI
|
||||
|
||||
/datum/trait/allergy/coffee
|
||||
/datum/trait/neutral/allergy/coffee
|
||||
name = "Allergy: Coffee"
|
||||
desc = "You're highly allergic to coffee in specific. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
allergen = COFFEE
|
||||
|
||||
/datum/trait/allergen_reduced_effect
|
||||
|
||||
/datum/trait/neutral/allergen_reduced_effect
|
||||
name = "Reduced Allergen Reaction"
|
||||
desc = "This trait halves the lethality of allergen reactions. If you don't have any allergens set, it does nothing. It does not apply to nonlethal reactions or special reactions (such as unathi drowsiness from sugars)."
|
||||
cost = 0
|
||||
@@ -237,42 +237,42 @@
|
||||
var_changes = list("allergen_damage_severity" = 0.6)
|
||||
|
||||
// Spicy Food Traits, from negative to positive.
|
||||
/datum/trait/spice_intolerance_extreme
|
||||
/datum/trait/neutral/spice_intolerance_extreme
|
||||
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
|
||||
/datum/trait/neutral/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
|
||||
/datum/trait/neutral/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
|
||||
/datum/trait/neutral/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
|
||||
/datum/trait/neutral/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
|
||||
/datum/trait/neutral/spice_immunity
|
||||
name = "Extreme Spice Tolerance"
|
||||
desc = "Spicy (and chilly) peppers are basically ineffective! (This does not affect pepperspray.)"
|
||||
cost = 0
|
||||
@@ -280,42 +280,42 @@
|
||||
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!
|
||||
|
||||
// Alcohol Traits Start Here, from negative to positive.
|
||||
/datum/trait/alcohol_intolerance_advanced
|
||||
/datum/trait/neutral/alcohol_intolerance_advanced
|
||||
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
|
||||
/datum/trait/neutral/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
|
||||
/datum/trait/neutral/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
|
||||
/datum/trait/neutral/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
|
||||
/datum/trait/neutral/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
|
||||
/datum/trait/neutral/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
|
||||
@@ -323,99 +323,126 @@
|
||||
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.
|
||||
|
||||
/datum/trait/neutral/colorblind/mono
|
||||
name = "Colorblindness (Monochromancy)"
|
||||
desc = "You simply can't see colors at all, period. You are 100% colorblind."
|
||||
cost = 0
|
||||
|
||||
/datum/trait/neutral/colorblind/mono/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.add_modifier(/datum/modifier/trait/colorblind_monochrome)
|
||||
|
||||
/datum/trait/neutral/colorblind/para_vulp
|
||||
name = "Colorblindness (Para Vulp)"
|
||||
desc = "You have a severe issue with green colors and have difficulty recognizing them from red colors."
|
||||
cost = 0
|
||||
|
||||
/datum/trait/neutral/colorblind/para_vulp/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.add_modifier(/datum/modifier/trait/colorblind_vulp)
|
||||
|
||||
/datum/trait/neutral/colorblind/para_taj
|
||||
name = "Colorblindness (Para Taj)"
|
||||
desc = "You have a minor issue with blue colors and have difficulty recognizing them from red colors."
|
||||
cost = 0
|
||||
|
||||
/datum/trait/neutral/colorblind/para_taj/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.add_modifier(/datum/modifier/trait/colorblind_taj)
|
||||
|
||||
// Body shape traits
|
||||
/datum/trait/taller
|
||||
/datum/trait/neutral/taller
|
||||
name = "Tall"
|
||||
desc = "Your body is taller than average."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("icon_scale_y" = 1.09)
|
||||
excludes = list(/datum/trait/tall, /datum/trait/short, /datum/trait/shorter)
|
||||
excludes = list(/datum/trait/neutral/tall, /datum/trait/neutral/short, /datum/trait/neutral/shorter)
|
||||
|
||||
/datum/trait/taller/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/neutral/taller/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.update_transform()
|
||||
|
||||
/datum/trait/tall
|
||||
/datum/trait/neutral/tall
|
||||
name = "Slightly Tall"
|
||||
desc = "Your body is a bit taller than average."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("icon_scale_y" = 1.05)
|
||||
excludes = list(/datum/trait/taller, /datum/trait/short, /datum/trait/shorter)
|
||||
excludes = list(/datum/trait/neutral/taller, /datum/trait/neutral/short, /datum/trait/neutral/shorter)
|
||||
|
||||
/datum/trait/tall/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/neutral/tall/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.update_transform()
|
||||
|
||||
/datum/trait/short
|
||||
/datum/trait/neutral/short
|
||||
name = "Slightly Short"
|
||||
desc = "Your body is a bit shorter than average."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("icon_scale_y" = 0.95)
|
||||
excludes = list(/datum/trait/taller, /datum/trait/tall, /datum/trait/shorter)
|
||||
excludes = list(/datum/trait/neutral/taller, /datum/trait/neutral/tall, /datum/trait/neutral/shorter)
|
||||
|
||||
/datum/trait/short/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/neutral/short/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.update_transform()
|
||||
|
||||
/datum/trait/shorter
|
||||
/datum/trait/neutral/shorter
|
||||
name = "Short"
|
||||
desc = "Your body is shorter than average."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("icon_scale_y" = 0.915)
|
||||
excludes = list(/datum/trait/taller, /datum/trait/tall, /datum/trait/short)
|
||||
excludes = list(/datum/trait/neutral/taller, /datum/trait/neutral/tall, /datum/trait/neutral/short)
|
||||
|
||||
/datum/trait/shorter/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/neutral/shorter/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.update_transform()
|
||||
|
||||
/datum/trait/obese
|
||||
/datum/trait/neutral/obese
|
||||
name = "Very Bulky"
|
||||
desc = "Your body is much wider than average."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("icon_scale_x" = 1.095)
|
||||
excludes = list(/datum/trait/fat, /datum/trait/thin, /datum/trait/thinner)
|
||||
excludes = list(/datum/trait/neutral/fat, /datum/trait/neutral/thin, /datum/trait/neutral/thinner)
|
||||
|
||||
/datum/trait/obese/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/neutral/obese/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.update_transform()
|
||||
|
||||
/datum/trait/fat
|
||||
/datum/trait/neutral/fat
|
||||
name = "Bulky"
|
||||
desc = "Your body is wider than average."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("icon_scale_x" = 1.054)
|
||||
excludes = list(/datum/trait/obese, /datum/trait/thin, /datum/trait/thinner)
|
||||
excludes = list(/datum/trait/neutral/obese, /datum/trait/neutral/thin, /datum/trait/neutral/thinner)
|
||||
|
||||
/datum/trait/fat/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/neutral/fat/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.update_transform()
|
||||
|
||||
/datum/trait/thin
|
||||
/datum/trait/neutral/thin
|
||||
name = "Thin"
|
||||
desc = "Your body is thinner than average."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("icon_scale_x" = 0.945)
|
||||
excludes = list(/datum/trait/fat, /datum/trait/obese, /datum/trait/thinner)
|
||||
excludes = list(/datum/trait/neutral/fat, /datum/trait/neutral/obese, /datum/trait/neutral/thinner)
|
||||
|
||||
/datum/trait/thin/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/neutral/thin/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.update_transform()
|
||||
|
||||
/datum/trait/thinner
|
||||
/datum/trait/neutral/thinner
|
||||
name = "Very Thin"
|
||||
desc = "Your body is much thinner than average."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("icon_scale_x" = 0.905)
|
||||
excludes = list(/datum/trait/fat, /datum/trait/obese, /datum/trait/thin)
|
||||
excludes = list(/datum/trait/neutral/fat, /datum/trait/neutral/obese, /datum/trait/neutral/thin)
|
||||
|
||||
/datum/trait/thinner/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/neutral/thinner/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.update_transform()
|
||||
|
||||
@@ -1,25 +1,28 @@
|
||||
#define ORGANICS 1
|
||||
#define SYNTHETICS 2
|
||||
|
||||
/datum/trait/speed_fast
|
||||
/datum/trait/positive
|
||||
category = 1
|
||||
|
||||
/datum/trait/positive/speed_fast
|
||||
name = "Haste"
|
||||
desc = "Allows you to move faster on average than baseline."
|
||||
cost = 4
|
||||
var_changes = list("slowdown" = -0.5)
|
||||
|
||||
/datum/trait/hardy
|
||||
/datum/trait/positive/hardy
|
||||
name = "Hardy"
|
||||
desc = "Allows you to carry heavy equipment with less slowdown."
|
||||
cost = 1
|
||||
var_changes = list("item_slowdown_mod" = 0.5)
|
||||
|
||||
/datum/trait/hardy_plus
|
||||
/datum/trait/positive/hardy_plus
|
||||
name = "Major Hardy"
|
||||
desc = "Allows you to carry heavy equipment with almost no slowdown."
|
||||
cost = 2
|
||||
var_changes = list("item_slowdown_mod" = 0.1)
|
||||
var_changes = list("item_slowdown_mod" = 0.25)
|
||||
|
||||
/datum/trait/endurance_high
|
||||
/datum/trait/positive/endurance_high
|
||||
name = "High Endurance"
|
||||
desc = "Increases your maximum total hitpoints to 125"
|
||||
cost = 4
|
||||
@@ -29,127 +32,127 @@
|
||||
..(S,H)
|
||||
H.setMaxHealth(S.total_health)
|
||||
|
||||
/datum/trait/nonconductive
|
||||
/datum/trait/positive/nonconductive
|
||||
name = "Non-Conductive"
|
||||
desc = "Decreases your susceptibility to electric shocks by a 10% amount."
|
||||
cost = 1 //This effects tasers!
|
||||
var_changes = list("siemens_coefficient" = 0.9)
|
||||
|
||||
/datum/trait/positive/nonconductive_plus
|
||||
name = "Major Non-Conductive"
|
||||
desc = "Decreases your susceptibility to electric shocks by a 25% amount."
|
||||
cost = 2 //This effects tasers!
|
||||
cost = 2 //Let us not forget this effects tasers!
|
||||
var_changes = list("siemens_coefficient" = 0.75)
|
||||
|
||||
/datum/trait/nonconductive_plus
|
||||
name = "Major Non-Conductive"
|
||||
desc = "Decreases your susceptibility to electric shocks by a 50% amount."
|
||||
cost = 3 //Let us not forget this effects tasers!
|
||||
var_changes = list("siemens_coefficient" = 0.5)
|
||||
|
||||
/datum/trait/darksight
|
||||
/datum/trait/positive/darksight
|
||||
name = "Darksight"
|
||||
desc = "Allows you to see a short distance in the dark."
|
||||
cost = 1
|
||||
var_changes = list("darksight" = 5, "flash_mod" = 2.0)
|
||||
var_changes = list("darksight" = 5, "flash_mod" = 1.1)
|
||||
|
||||
/datum/trait/darksight_plus
|
||||
/datum/trait/positive/darksight_plus
|
||||
name = "Darksight (Major)"
|
||||
desc = "Allows you to see in the dark for the whole screen."
|
||||
cost = 2
|
||||
var_changes = list("darksight" = 8, "flash_mod" = 3.0)
|
||||
var_changes = list("darksight" = 8, "flash_mod" = 1.2)
|
||||
|
||||
/datum/trait/melee_attack
|
||||
/datum/trait/positive/melee_attack
|
||||
name = "Sharp Melee"
|
||||
desc = "Provides sharp melee attacks that do slightly more damage."
|
||||
cost = 1
|
||||
var_changes = list("unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp))
|
||||
|
||||
/datum/trait/melee_attack_fangs
|
||||
/datum/trait/positive/melee_attack_fangs
|
||||
name = "Sharp Melee & Numbing Fangs"
|
||||
desc = "Provides sharp melee attacks that do slightly more damage, along with fangs that makes the person bit unable to feel their body or pain."
|
||||
cost = 2
|
||||
var_changes = list("unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp, /datum/unarmed_attack/bite/sharp/numbing))
|
||||
|
||||
/datum/trait/fangs
|
||||
/datum/trait/positive/fangs
|
||||
name = "Numbing Fangs"
|
||||
desc = "Provides fangs that makes the person bit unable to feel their body or pain."
|
||||
cost = 1
|
||||
var_changes = list("unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite/sharp/numbing))
|
||||
|
||||
/datum/trait/minor_brute_resist
|
||||
/datum/trait/positive/minor_brute_resist
|
||||
name = "Minor Brute Resist"
|
||||
desc = "Adds 15% resistance to brute damage sources."
|
||||
cost = 2
|
||||
var_changes = list("brute_mod" = 0.85)
|
||||
|
||||
/datum/trait/brute_resist
|
||||
/datum/trait/positive/brute_resist
|
||||
name = "Brute Resist"
|
||||
desc = "Adds 25% resistance to brute damage sources."
|
||||
cost = 3
|
||||
var_changes = list("brute_mod" = 0.75)
|
||||
excludes = list(/datum/trait/minor_burn_resist,/datum/trait/burn_resist)
|
||||
excludes = list(/datum/trait/positive/minor_burn_resist,/datum/trait/positive/burn_resist)
|
||||
|
||||
/datum/trait/minor_burn_resist
|
||||
/datum/trait/positive/minor_burn_resist
|
||||
name = "Minor Burn Resist"
|
||||
desc = "Adds 15% resistance to burn damage sources."
|
||||
cost = 2
|
||||
var_changes = list("burn_mod" = 0.85)
|
||||
|
||||
/datum/trait/burn_resist
|
||||
/datum/trait/positive/burn_resist
|
||||
name = "Burn Resist"
|
||||
desc = "Adds 25% resistance to burn damage sources."
|
||||
cost = 3
|
||||
var_changes = list("burn_mod" = 0.75)
|
||||
excludes = list(/datum/trait/minor_brute_resist,/datum/trait/brute_resist)
|
||||
excludes = list(/datum/trait/positive/minor_brute_resist,/datum/trait/positive/brute_resist)
|
||||
|
||||
/datum/trait/photoresistant
|
||||
/datum/trait/positive/photoresistant
|
||||
name = "Photoresistant"
|
||||
desc = "Decreases stun duration from flashes and other light-based stuns and disabilities by 50%"
|
||||
desc = "Decreases stun duration from flashes and other light-based stuns and disabilities by 20%"
|
||||
cost = 1
|
||||
var_changes = list("flash_mod" = 0.5)
|
||||
var_changes = list("flash_mod" = 0.8)
|
||||
|
||||
/datum/trait/winged_flight
|
||||
/datum/trait/positive/winged_flight
|
||||
name = "Winged Flight"
|
||||
desc = "Allows you to fly by using your wings. Don't forget to bring them!"
|
||||
cost = 1
|
||||
cost = 0
|
||||
|
||||
/datum/trait/winged_flight/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/positive/winged_flight/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/proc/flying_toggle
|
||||
H.verbs |= /mob/living/proc/start_wings_hovering
|
||||
|
||||
/datum/trait/hardfeet
|
||||
/datum/trait/positive/hardfeet
|
||||
name = "Hard Feet"
|
||||
desc = "Makes your nice clawed, scaled, hooved, armored, or otherwise just awfully calloused feet immune to glass shards."
|
||||
cost = 1
|
||||
cost = 0
|
||||
var_changes = list("flags" = NO_MINOR_CUT) //Checked the flag is only used by shard stepping.
|
||||
|
||||
/datum/trait/antiseptic_saliva
|
||||
/datum/trait/positive/antiseptic_saliva
|
||||
name = "Antiseptic Saliva"
|
||||
desc = "Your saliva has especially strong antiseptic properties that can be used to heal small wounds."
|
||||
cost = 1
|
||||
|
||||
/datum/trait/antiseptic_saliva/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/positive/antiseptic_saliva/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H.verbs |= /mob/living/carbon/human/proc/lick_wounds
|
||||
|
||||
/datum/trait/traceur
|
||||
/datum/trait/positive/traceur
|
||||
name = "Traceur"
|
||||
desc = "You're capable of parkour and can *flip over low objects (most of the time)."
|
||||
cost = 2
|
||||
var_changes = list("agility" = 90)
|
||||
|
||||
/datum/trait/snowwalker
|
||||
/datum/trait/positive/snowwalker
|
||||
name = "Snow Walker"
|
||||
desc = "You are able to move unhindered on snow."
|
||||
cost = 1
|
||||
var_changes = list("snow_movement" = -2)
|
||||
|
||||
/datum/trait/weaver
|
||||
/datum/trait/positive/weaver
|
||||
name = "Weaver"
|
||||
desc = "You can produce silk and create various articles of clothing and objects."
|
||||
cost = 2
|
||||
var_changes = list("is_weaver" = 1)
|
||||
|
||||
/datum/trait/weaver/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
/datum/trait/positive/weaver/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H.verbs |= /mob/living/carbon/human/proc/check_silk_amount
|
||||
H.verbs |= /mob/living/carbon/human/proc/toggle_silk_production
|
||||
H.verbs |= /mob/living/carbon/human/proc/weave_structure
|
||||
H.verbs |= /mob/living/carbon/human/proc/weave_item
|
||||
H.verbs |= /mob/living/carbon/human/proc/set_silk_color
|
||||
H.verbs |= /mob/living/carbon/human/proc/set_silk_color
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
var/name
|
||||
var/desc = "Contact a developer if you see this trait."
|
||||
|
||||
var/cost = 0 // 0 is neutral, negative cost means negative, positive cost means positive.
|
||||
var/cost = 0
|
||||
var/category = 0 // What category this trait is. -1 is Negative, 0 is Neutral, 1 is 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/can_take = ORGANICS|SYNTHETICS // Can freaking synths use those.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,8 +5,6 @@
|
||||
var/ooc_notes = null
|
||||
appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER
|
||||
var/hunger_rate = DEFAULT_HUNGER_FACTOR
|
||||
var/resizable = TRUE
|
||||
|
||||
//custom say verbs
|
||||
var/custom_say = null
|
||||
var/custom_ask = null
|
||||
|
||||
@@ -8,7 +8,7 @@ var/list/department_radio_keys = list(
|
||||
":n" = "Science", ".n" = "Science",
|
||||
":m" = "Medical", ".m" = "Medical",
|
||||
":e" = "Engineering", ".e" = "Engineering",
|
||||
":k" = "Response Team", ".k" = "Response Team", //TFF 11/3/20 - Add Response Team to channels usable rather than resorting to :H or such.,
|
||||
":k" = "Response Team", ".k" = "Response Team",
|
||||
":s" = "Security", ".s" = "Security",
|
||||
":w" = "whisper", ".w" = "whisper",
|
||||
":t" = "Mercenary", ".t" = "Mercenary",
|
||||
@@ -27,7 +27,7 @@ var/list/department_radio_keys = list(
|
||||
":N" = "Science", ".N" = "Science",
|
||||
":M" = "Medical", ".M" = "Medical",
|
||||
":E" = "Engineering", ".E" = "Engineering",
|
||||
":k" = "Response Team", ".k" = "Response Team", //TFF 11/3/20 - Add Response Team to channels usable rather than resorting to :H or such.,
|
||||
":k" = "Response Team", ".k" = "Response Team",
|
||||
":S" = "Security", ".S" = "Security",
|
||||
":W" = "whisper", ".W" = "whisper",
|
||||
":T" = "Mercenary", ".T" = "Mercenary",
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
"Chirp" = list("chirps","chirrups","cheeps"),
|
||||
"Feline" = list("purrs","yowls","meows"),
|
||||
"Canine" = list("yaps","barks","woofs"),
|
||||
"Rodent" = list("squeaks", "SQUEAKS", "sqiks") //VOREStation Edit - TFF 22/11/19 - CHOMPStation port of pAI additions,
|
||||
"Rodent" = list("squeaks", "SQUEAKS", "sqiks") //VOREStation Edit
|
||||
)
|
||||
|
||||
var/obj/item/weapon/pai_cable/cable // The cable we produce and use when door or camera jacking
|
||||
@@ -330,8 +330,7 @@
|
||||
|
||||
close_up()
|
||||
|
||||
//VOREStation Removal Start - TFF 22/11/19 - Refactored in pai_vr.dm
|
||||
/*
|
||||
/* //VOREStation Removal Start
|
||||
/mob/living/silicon/pai/proc/choose_chassis()
|
||||
set category = "pAI Commands"
|
||||
set name = "Choose Chassis"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/mob/living/silicon/pai
|
||||
var/people_eaten = 0
|
||||
icon = 'icons/mob/pai_vr.dmi'
|
||||
//TFF 22/11/19 - CHOMPStation port of pAI additions.
|
||||
var/global/list/wide_chassis = list(
|
||||
"rat",
|
||||
"panther"
|
||||
@@ -36,7 +35,6 @@
|
||||
else if(people_eaten && resting)
|
||||
icon_state = "[chassis]_rest_full"
|
||||
|
||||
//TFF 22/11/19 - CHOMPStation port of pAI additions.
|
||||
if(chassis in wide_chassis)
|
||||
icon = 'icons/mob/pai_vr64x64.dmi'
|
||||
pixel_x = -16
|
||||
@@ -58,7 +56,6 @@
|
||||
else if(people_eaten && resting)
|
||||
icon_state = "[chassis]_rest_full"
|
||||
|
||||
//TFF 22/11/19 - CHOMPStation port of pAI additions.
|
||||
if(chassis in wide_chassis)
|
||||
icon = 'icons/mob/pai_vr64x64.dmi'
|
||||
pixel_x = -16
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
|
||||
|
||||
// Close to mid-ranged shooter that arcs over other things, ideal if allies are in front of it.
|
||||
// Difference from siege hivebots is that siege hivebots have limited charges for their attacks, are very long range, and \
|
||||
// Difference from siege hivebots is that siege hivebots have limited charges for their attacks, are very long range, and
|
||||
// the projectiles have an AoE component, where as backline hivebots do not.
|
||||
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline
|
||||
name = "backline hivebot"
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
|
||||
else if(ismob(target))
|
||||
var/mob/living/M = target
|
||||
resize(M.size_multiplier)
|
||||
resize(M.size_multiplier, ignore_prefs = TRUE)
|
||||
|
||||
//Morphed is weaker
|
||||
melee_damage_lower = melee_damage_disguised
|
||||
@@ -165,7 +165,7 @@
|
||||
maptext = null
|
||||
|
||||
size_multiplier = our_size_multiplier
|
||||
resize(size_multiplier)
|
||||
resize(size_multiplier, ignore_prefs = TRUE)
|
||||
|
||||
//Baseline stats
|
||||
melee_damage_lower = initial(melee_damage_lower)
|
||||
@@ -183,7 +183,7 @@
|
||||
/mob/living/simple_mob/vore/hostile/morph/will_show_tooltip()
|
||||
return (!morphed)
|
||||
|
||||
/mob/living/simple_mob/vore/hostile/morph/resize(var/new_size, var/animate = TRUE)
|
||||
/mob/living/simple_mob/vore/hostile/morph/resize(var/new_size, var/animate = TRUE, var/uncapped = FALSE, var/ignore_prefs = FALSE)
|
||||
if(morphed && !ismob(form))
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
//TFF 5/8/19 - add randomised sensor setting for random button clicking
|
||||
/datum/preferences/randomize_appearance_and_body_for(var/mob/living/carbon/human/H)
|
||||
sensorpref = rand(1,5)
|
||||
@@ -728,3 +728,9 @@
|
||||
icon_state = "unathilongfrills"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_HEAD)
|
||||
|
||||
/datum/sprite_accessory/marking/vr/thunderthighs
|
||||
name = "Boosted Thighs"
|
||||
icon_state = "thunderthighs"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_L_LEG,BP_R_LEG)
|
||||
@@ -146,7 +146,6 @@
|
||||
suit_sprites = 'icons/mob/taursuits_wolf.dmi'
|
||||
icon_sprite_tag = "wolf"
|
||||
|
||||
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
|
||||
/datum/sprite_accessory/tail/taur/fatwolf
|
||||
name = "Fat Wolf (Taur)"
|
||||
icon_state = "fatwolf_s"
|
||||
@@ -158,7 +157,6 @@
|
||||
extra_overlay = "wolf_markings"
|
||||
//icon_sprite_tag = "wolf2c"
|
||||
|
||||
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
|
||||
/datum/sprite_accessory/tail/taur/wolf/fatwolf_2c
|
||||
name = "Fat Wolf dual-color (Taur)"
|
||||
icon_state = "fatwolf_s"
|
||||
@@ -245,7 +243,6 @@
|
||||
suit_sprites = 'icons/mob/taursuits_feline.dmi'
|
||||
icon_sprite_tag = "feline"
|
||||
|
||||
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
|
||||
/datum/sprite_accessory/tail/taur/fatfeline
|
||||
name = "Fat Feline (Taur)"
|
||||
icon_state = "fatfeline_s"
|
||||
@@ -262,7 +259,6 @@
|
||||
extra_overlay = "feline_markings"
|
||||
//icon_sprite_tag = "feline2c"
|
||||
|
||||
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
|
||||
/datum/sprite_accessory/tail/taur/feline/fatfeline_2c
|
||||
name = "Fat Feline dual-color (Taur)"
|
||||
icon_state = "fatfeline_s"
|
||||
|
||||
@@ -57,7 +57,6 @@
|
||||
suit_sprites = 'icons/mob/taursuits_wolf_vr.dmi'
|
||||
icon_sprite_tag = "wolf"
|
||||
|
||||
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
|
||||
/datum/sprite_accessory/tail/taur/fatwolf
|
||||
name = "Fat Wolf (Taur)"
|
||||
icon_state = "fatwolf_s"
|
||||
@@ -70,7 +69,6 @@
|
||||
extra_overlay2 = "wolf_markings_2"
|
||||
//icon_sprite_tag = "wolf2c"
|
||||
|
||||
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
|
||||
/datum/sprite_accessory/tail/taur/wolf/fatwolf_2c
|
||||
name = "Fat Wolf 3-color (Taur)"
|
||||
icon_state = "fatwolf_s"
|
||||
@@ -276,7 +274,6 @@
|
||||
suit_sprites = 'icons/mob/taursuits_feline_vr.dmi'
|
||||
icon_sprite_tag = "feline"
|
||||
|
||||
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
|
||||
/datum/sprite_accessory/tail/taur/fatfeline
|
||||
name = "Fat Feline (Taur)"
|
||||
icon_state = "fatfeline_s"
|
||||
@@ -294,7 +291,6 @@
|
||||
extra_overlay2 = "feline_markings_2"
|
||||
//icon_sprite_tag = "feline2c"
|
||||
|
||||
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
|
||||
/datum/sprite_accessory/tail/taur/feline/fatfeline_2c
|
||||
name = "Fat Feline 3-color (Taur)"
|
||||
icon_state = "fatfeline_s"
|
||||
|
||||
@@ -192,7 +192,7 @@
|
||||
var/datum/preferences/B = O.client.prefs
|
||||
for(var/language in B.alternate_languages)
|
||||
O.add_language(language)
|
||||
O.resize(B.size_multiplier, animate = TRUE) //VOREStation Addition: add size prefs to borgs
|
||||
O.resize(B.size_multiplier, animate = TRUE, ignore_prefs = TRUE) //VOREStation Addition: add size prefs to borgs
|
||||
O.fuzzy = B.fuzzy //VOREStation Addition: add size prefs to borgs
|
||||
|
||||
callHook("borgify", list(O))
|
||||
|
||||
@@ -9,17 +9,8 @@
|
||||
return
|
||||
|
||||
// Obsolete
|
||||
/mob/proc/update_icons_layers()
|
||||
return
|
||||
|
||||
/mob/proc/update_icons_huds()
|
||||
return
|
||||
|
||||
/mob/proc/update_icons_body()
|
||||
return
|
||||
|
||||
/mob/proc/update_icons_all()
|
||||
return
|
||||
// End obsolete
|
||||
|
||||
/mob/proc/update_hud()
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
illegal = TRUE
|
||||
wear = 3
|
||||
access = 999 //Prevents anyone from buying it without an emag.
|
||||
activates = FALSE //It's armor.
|
||||
combat_flags = (NIF_C_BRUTEARMOR) // Default on when installed, clear when uninstalled
|
||||
|
||||
/datum/nifsoft/burn_armor
|
||||
@@ -19,7 +18,6 @@
|
||||
illegal = TRUE
|
||||
wear = 3
|
||||
access = 999 //Prevents anyone from buying it without an emag.
|
||||
activates = FALSE //It's armor.
|
||||
combat_flags = (NIF_C_BURNARMOR) // Default on when installed, clear when uninstalled
|
||||
|
||||
/datum/nifsoft/painkillers
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
to_chat(nif.human,"<span class='notice'>The safety features of the NIF Program prevent you from choosing this size.</span>")
|
||||
return
|
||||
else
|
||||
if(nif.human.resize(new_size/100))
|
||||
if(nif.human.resize(new_size/100, uncapped=nif.human.has_large_resize_bounds(), ignore_prefs = TRUE))
|
||||
to_chat(nif.human,"<span class='notice'>You set the size to [new_size]%</span>")
|
||||
nif.human.visible_message("<span class='warning'>Swirling grey mist envelops [nif.human] as they change size!</span>","<span class='notice'>Swirling streams of nanites wrap around you as you change size!</span>")
|
||||
spawn(0)
|
||||
|
||||
@@ -73,7 +73,7 @@ proc/get_deepspace(x,y)
|
||||
/mob/lost_in_space()
|
||||
return isnull(client)
|
||||
|
||||
/mob/living/lost_in_space()
|
||||
/mob/living/carbon/human/lost_in_space()
|
||||
return FALSE
|
||||
// return isnull(client) && !key && stat == DEAD // Allows bodies that players have ghosted from to be deleted - Ater
|
||||
|
||||
|
||||
+30
-35
@@ -216,15 +216,17 @@ var/datum/planet/sif/planet_sif = null
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
|
||||
|
||||
/*
|
||||
/datum/weather/sif/snow/process_effects()
|
||||
..()
|
||||
for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
if(S.z in holder.our_planet.expected_z_levels)
|
||||
for(var/dir_checked in cardinal)
|
||||
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
||||
if(istype(T))
|
||||
if(istype(T, /turf/simulated/floor/outdoors) && prob(33))
|
||||
T.chill()
|
||||
*/
|
||||
|
||||
/datum/weather/sif/blizzard
|
||||
name = "blizzard"
|
||||
@@ -249,15 +251,17 @@ var/datum/planet/sif/planet_sif = null
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
|
||||
|
||||
/*
|
||||
/datum/weather/sif/blizzard/process_effects()
|
||||
..()
|
||||
for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
if(S.z in holder.our_planet.expected_z_levels)
|
||||
for(var/dir_checked in cardinal)
|
||||
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
||||
if(istype(T))
|
||||
if(istype(T, /turf/simulated/floor/outdoors) && prob(50))
|
||||
T.chill()
|
||||
*/
|
||||
|
||||
/datum/weather/sif/rain
|
||||
name = "rain"
|
||||
@@ -283,25 +287,21 @@ var/datum/planet/sif/planet_sif = null
|
||||
|
||||
/datum/weather/sif/rain/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L in living_mob_list)
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to rain on them.
|
||||
|
||||
// If they have an open umbrella, it'll guard from rain
|
||||
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = L.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
L.water_act(1)
|
||||
if(show_message)
|
||||
@@ -340,24 +340,21 @@ var/datum/planet/sif/planet_sif = null
|
||||
|
||||
/datum/weather/sif/storm/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L in living_mob_list)
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to rain on them.
|
||||
|
||||
// If they have an open umbrella, it'll guard from rain
|
||||
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||
continue
|
||||
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||
continue
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = L.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||
continue
|
||||
|
||||
|
||||
L.water_act(2)
|
||||
@@ -401,20 +398,18 @@ var/datum/planet/sif/planet_sif = null
|
||||
|
||||
/datum/weather/sif/hail/process_effects()
|
||||
..()
|
||||
for(var/humie in human_mob_list)
|
||||
var/mob/living/carbon/human/H = humie
|
||||
for(var/mob/living/carbon/H as anything in human_mob_list)
|
||||
if(H.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to pelt them with ice.
|
||||
|
||||
// If they have an open umbrella, it'll guard from hail
|
||||
var/obj/item/weapon/melee/umbrella/U
|
||||
if(istype(H.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
||||
U = H.get_active_hand()
|
||||
else if(istype(H.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = H.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = H.get_inactive_hand()
|
||||
if(U && U.open)
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(H, "<span class='notice'>Hail patters onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
@@ -0,0 +1,500 @@
|
||||
var/datum/planet/virgo3b_better/planet_virgo3b_better = null
|
||||
|
||||
/datum/time/virgo3b_better
|
||||
seconds_in_day = 6 HOURS
|
||||
|
||||
/datum/planet/virgo3b_better
|
||||
name = "Virgo-3BB"
|
||||
desc = "A surprising discovery! Aparently there were moons around Virgo-3B! Moreover, one of them seems to be a perfect habitable paradise, with vegetation, greenery, and \
|
||||
generally everything one could want out of the planet. So the station was simply plucked off the original spot and put on the moon's moon with minor alterations."
|
||||
current_time = new /datum/time/virgo3b_better()
|
||||
// expected_z_levels = list(1) // This is defined elsewhere.
|
||||
planetary_wall_type = /turf/unsimulated/wall/planetary/virgo3b_better
|
||||
|
||||
/datum/planet/virgo3b_better/New()
|
||||
..()
|
||||
planet_virgo3b_better = src
|
||||
weather_holder = new /datum/weather_holder/virgo3b_better(src)
|
||||
|
||||
/datum/planet/virgo3b_better/update_sun()
|
||||
..()
|
||||
var/datum/time/time = current_time
|
||||
var/length_of_day = time.seconds_in_day / 10 / 60 / 60
|
||||
var/noon = length_of_day / 2
|
||||
var/distance_from_noon = abs(text2num(time.show_time("hh")) - noon)
|
||||
sun_position = distance_from_noon / noon
|
||||
sun_position = abs(sun_position - 1)
|
||||
|
||||
var/new_brightness = null
|
||||
|
||||
var/new_color = null
|
||||
|
||||
switch(sun_position)
|
||||
if(0 to 0.10) // Night
|
||||
new_brightness = 0.8
|
||||
new_color = "#DDBB22"
|
||||
|
||||
if(0.10 to 0.15) // Twilight
|
||||
new_brightness = 1.5
|
||||
new_color = "#EEDD55"
|
||||
|
||||
if(0.15 to 0.20) // Sunrise/set
|
||||
new_brightness = 4
|
||||
new_color = "#FFFFBB"
|
||||
|
||||
if(0.20 to 1.00) // Noon
|
||||
new_brightness = 7
|
||||
new_color = "#FFFFFF"
|
||||
|
||||
var/weather_light_modifier = 1
|
||||
if(weather_holder && weather_holder.current_weather)
|
||||
weather_light_modifier = weather_holder.current_weather.light_modifier
|
||||
|
||||
new_brightness = new_brightness * weather_light_modifier
|
||||
|
||||
if(weather_holder && weather_holder.current_weather && weather_holder.current_weather.light_color)
|
||||
new_color = weather_holder.current_weather.light_color
|
||||
|
||||
spawn(1)
|
||||
update_sun_deferred(2, new_brightness, new_color)
|
||||
|
||||
|
||||
/datum/weather_holder/virgo3b_better
|
||||
temperature = T0C
|
||||
allowed_weather_types = list(
|
||||
WEATHER_CLEAR = new /datum/weather/virgo3b_better/clear(),
|
||||
WEATHER_OVERCAST = new /datum/weather/virgo3b_better/overcast(),
|
||||
WEATHER_LIGHT_SNOW = new /datum/weather/virgo3b_better/light_snow(),
|
||||
WEATHER_SNOW = new /datum/weather/virgo3b_better/snow(),
|
||||
WEATHER_BLIZZARD = new /datum/weather/virgo3b_better/blizzard(),
|
||||
WEATHER_RAIN = new /datum/weather/virgo3b_better/rain(),
|
||||
WEATHER_STORM = new /datum/weather/virgo3b_better/storm(),
|
||||
WEATHER_HAIL = new /datum/weather/virgo3b_better/hail(),
|
||||
WEATHER_BLOOD_MOON = new /datum/weather/virgo3b_better/blood_moon(),
|
||||
WEATHER_EMBERFALL = new /datum/weather/virgo3b_better/emberfall(),
|
||||
WEATHER_ASH_STORM = new /datum/weather/virgo3b_better/ash_storm(),
|
||||
WEATHER_FALLOUT = new /datum/weather/virgo3b_better/fallout(),
|
||||
WEATHER_PARTY = new /datum/weather/virgo3b_better/party()
|
||||
)
|
||||
roundstart_weather_chances = list(
|
||||
WEATHER_CLEAR = 30,
|
||||
WEATHER_OVERCAST = 5
|
||||
)
|
||||
|
||||
/datum/weather/virgo3b_better
|
||||
name = "virgo3bb base"
|
||||
temp_high = 295.15 // -20c
|
||||
temp_low = 291.15 // -30c
|
||||
|
||||
/datum/weather/virgo3b_better/clear
|
||||
name = "clear"
|
||||
transition_chances = list(
|
||||
WEATHER_CLEAR = 60,
|
||||
WEATHER_OVERCAST = 20
|
||||
)
|
||||
transition_messages = list(
|
||||
"The sky clears up.",
|
||||
"The sky is visible.",
|
||||
"The weather is calm."
|
||||
)
|
||||
sky_visible = TRUE
|
||||
observed_message = "The sky is clear."
|
||||
|
||||
/datum/weather/virgo3b_better/overcast
|
||||
name = "overcast"
|
||||
transition_chances = list(
|
||||
WEATHER_CLEAR = 25,
|
||||
WEATHER_OVERCAST = 50,
|
||||
WEATHER_RAIN = 10
|
||||
)
|
||||
observed_message = "It is overcast, all you can see are clouds."
|
||||
transition_messages = list(
|
||||
"All you can see above are clouds.",
|
||||
"Clouds cut off your view of the sky.",
|
||||
"It's very cloudy."
|
||||
)
|
||||
|
||||
/datum/weather/virgo3b_better/light_snow
|
||||
name = "light snow"
|
||||
icon_state = "snowfall_light"
|
||||
temp_high = 235.15
|
||||
temp_low = 225.15
|
||||
light_modifier = 0.7
|
||||
transition_chances = list(
|
||||
WEATHER_OVERCAST = 20,
|
||||
WEATHER_LIGHT_SNOW = 50,
|
||||
WEATHER_SNOW = 25,
|
||||
WEATHER_HAIL = 5
|
||||
)
|
||||
observed_message = "It is snowing lightly."
|
||||
transition_messages = list(
|
||||
"Small snowflakes begin to fall from above.",
|
||||
"It begins to snow lightly.",
|
||||
)
|
||||
|
||||
/datum/weather/virgo3b_better/snow
|
||||
name = "moderate snow"
|
||||
icon_state = "snowfall_med"
|
||||
temp_high = 230.15
|
||||
temp_low = 220.15
|
||||
wind_high = 2
|
||||
wind_low = 0
|
||||
light_modifier = 0.5
|
||||
flight_failure_modifier = 5
|
||||
transition_chances = list(
|
||||
WEATHER_LIGHT_SNOW = 20,
|
||||
WEATHER_SNOW = 50,
|
||||
WEATHER_BLIZZARD = 20,
|
||||
WEATHER_HAIL = 5,
|
||||
WEATHER_OVERCAST = 5
|
||||
)
|
||||
observed_message = "It is snowing."
|
||||
transition_messages = list(
|
||||
"It's starting to snow.",
|
||||
"The air feels much colder as snowflakes fall from above."
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
|
||||
|
||||
/*
|
||||
/datum/weather/virgo3b_better/snow/process_effects()
|
||||
..()
|
||||
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
if(S.z in holder.our_planet.expected_z_levels)
|
||||
for(var/dir_checked in cardinal)
|
||||
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
||||
if(istype(T))
|
||||
if(istype(T, /turf/simulated/floor/outdoors) && prob(33))
|
||||
T.chill()
|
||||
*/
|
||||
|
||||
/datum/weather/virgo3b_better/blizzard
|
||||
name = "blizzard"
|
||||
icon_state = "snowfall_heavy"
|
||||
temp_high = 215.15
|
||||
temp_low = 200.15
|
||||
wind_high = 4
|
||||
wind_low = 2
|
||||
light_modifier = 0.3
|
||||
flight_failure_modifier = 10
|
||||
transition_chances = list(
|
||||
WEATHER_SNOW = 45,
|
||||
WEATHER_BLIZZARD = 40,
|
||||
WEATHER_HAIL = 10,
|
||||
WEATHER_OVERCAST = 5
|
||||
)
|
||||
observed_message = "A blizzard blows snow everywhere."
|
||||
transition_messages = list(
|
||||
"Strong winds howl around you as a blizzard appears.",
|
||||
"It starts snowing heavily, and it feels extremly cold now."
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
|
||||
|
||||
/*
|
||||
/datum/weather/virgo3b_better/blizzard/process_effects()
|
||||
..()
|
||||
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
if(S.z in holder.our_planet.expected_z_levels)
|
||||
for(var/dir_checked in cardinal)
|
||||
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
||||
if(istype(T))
|
||||
if(istype(T, /turf/simulated/floor/outdoors) && prob(50))
|
||||
T.chill()
|
||||
*/
|
||||
|
||||
/datum/weather/virgo3b_better/rain
|
||||
name = "rain"
|
||||
icon_state = "rain"
|
||||
wind_high = 2
|
||||
wind_low = 1
|
||||
light_modifier = 0.5
|
||||
effect_message = "<span class='warning'>Rain falls on you.</span>"
|
||||
|
||||
transition_chances = list(
|
||||
WEATHER_OVERCAST = 25,
|
||||
WEATHER_CLEAR = 25
|
||||
)
|
||||
observed_message = "It is raining."
|
||||
transition_messages = list(
|
||||
"The sky is dark, and rain falls down upon you."
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/rain
|
||||
indoor_sounds_type = /datum/looping_sound/weather/rain/indoors
|
||||
|
||||
/datum/weather/virgo3b_better/rain/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to rain on them.
|
||||
|
||||
// If they have an open umbrella, it'll guard from rain
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = L.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
L.water_act(1)
|
||||
if(show_message)
|
||||
to_chat(L, effect_message)
|
||||
|
||||
/datum/weather/virgo3b_better/storm
|
||||
name = "storm"
|
||||
icon_state = "storm"
|
||||
wind_high = 4
|
||||
wind_low = 2
|
||||
light_modifier = 0.3
|
||||
flight_failure_modifier = 10
|
||||
effect_message = "<span class='warning'>Rain falls on you, drenching you in water.</span>"
|
||||
|
||||
var/next_lightning_strike = 0 // world.time when lightning will strike.
|
||||
var/min_lightning_cooldown = 5 SECONDS
|
||||
var/max_lightning_cooldown = 1 MINUTE
|
||||
observed_message = "An intense storm pours down over the region."
|
||||
transition_messages = list(
|
||||
"You feel intense winds hit you as the weather takes a turn for the worst.",
|
||||
"Loud thunder is heard in the distance.",
|
||||
"A bright flash heralds the approach of a storm."
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/rain
|
||||
indoor_sounds_type = /datum/looping_sound/weather/rain/indoors
|
||||
|
||||
|
||||
transition_chances = list(
|
||||
WEATHER_RAIN = 45,
|
||||
WEATHER_STORM = 40,
|
||||
WEATHER_HAIL = 10,
|
||||
WEATHER_OVERCAST = 5
|
||||
)
|
||||
|
||||
/datum/weather/virgo3b_better/storm/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to rain on them.
|
||||
|
||||
// If they have an open umbrella, it'll guard from rain
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = L.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||
continue
|
||||
|
||||
|
||||
L.water_act(2)
|
||||
if(show_message)
|
||||
to_chat(L, effect_message)
|
||||
|
||||
handle_lightning()
|
||||
|
||||
// This gets called to do lightning periodically.
|
||||
// There is a seperate function to do the actual lightning strike, so that badmins can play with it.
|
||||
/datum/weather/virgo3b_better/storm/proc/handle_lightning()
|
||||
if(world.time < next_lightning_strike)
|
||||
return // It's too soon to strike again.
|
||||
next_lightning_strike = world.time + rand(min_lightning_cooldown, max_lightning_cooldown)
|
||||
var/turf/T = pick(holder.our_planet.planet_floors) // This has the chance to 'strike' the sky, but that might be a good thing, to scare reckless pilots.
|
||||
lightning_strike(T)
|
||||
|
||||
/datum/weather/virgo3b_better/hail
|
||||
name = "hail"
|
||||
icon_state = "hail"
|
||||
light_modifier = 0.3
|
||||
flight_failure_modifier = 15
|
||||
timer_low_bound = 2
|
||||
timer_high_bound = 5
|
||||
effect_message = "<span class='warning'>The hail smacks into you!</span>"
|
||||
|
||||
transition_chances = list(
|
||||
WEATHER_RAIN = 45,
|
||||
WEATHER_STORM = 40,
|
||||
WEATHER_HAIL = 10,
|
||||
WEATHER_OVERCAST = 5
|
||||
)
|
||||
observed_message = "Ice is falling from the sky."
|
||||
transition_messages = list(
|
||||
"Ice begins to fall from the sky.",
|
||||
"It begins to hail.",
|
||||
"An intense chill is felt, and chunks of ice start to fall from the sky, towards you."
|
||||
)
|
||||
|
||||
/datum/weather/virgo3b_better/hail/process_effects()
|
||||
..()
|
||||
for(var/mob/living/carbon/H as anything in human_mob_list)
|
||||
if(H.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to pelt them with ice.
|
||||
|
||||
// If they have an open umbrella, it'll guard from hail
|
||||
var/obj/item/weapon/melee/umbrella/U = H.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = H.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(H, "<span class='notice'>Hail patters onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
var/target_zone = pick(BP_ALL)
|
||||
var/amount_blocked = H.run_armor_check(target_zone, "melee")
|
||||
var/amount_soaked = H.get_armor_soak(target_zone, "melee")
|
||||
|
||||
var/damage = rand(1,3)
|
||||
|
||||
if(amount_blocked >= 30)
|
||||
continue // No need to apply damage. Hardhats are 30. They should probably protect you from hail on your head.
|
||||
//Voidsuits are likewise 40, and riot, 80. Clothes are all less than 30.
|
||||
|
||||
if(amount_soaked >= damage)
|
||||
continue // No need to apply damage.
|
||||
|
||||
H.apply_damage(damage, BRUTE, target_zone, amount_blocked, amount_soaked, used_weapon = "hail")
|
||||
if(show_message)
|
||||
to_chat(H, effect_message)
|
||||
|
||||
/datum/weather/virgo3b_better/blood_moon
|
||||
name = "blood moon"
|
||||
light_modifier = 0.5
|
||||
light_color = "#FF0000"
|
||||
flight_failure_modifier = 25
|
||||
transition_chances = list(
|
||||
WEATHER_BLOODMOON = 100
|
||||
)
|
||||
observed_message = "Everything is red. Something really ominous is going on."
|
||||
transition_messages = list(
|
||||
"The sky turns blood red!"
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/wind
|
||||
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
|
||||
|
||||
// Ash and embers fall forever, such as from a volcano or something.
|
||||
/datum/weather/virgo3b_better/emberfall
|
||||
name = "emberfall"
|
||||
icon_state = "ashfall_light"
|
||||
light_modifier = 0.7
|
||||
light_color = "#880000"
|
||||
temp_high = 293.15 // 20c
|
||||
temp_low = 283.15 // 10c
|
||||
flight_failure_modifier = 20
|
||||
transition_chances = list(
|
||||
WEATHER_EMBERFALL = 100
|
||||
)
|
||||
observed_message = "Soot, ash, and embers float down from above."
|
||||
transition_messages = list(
|
||||
"Gentle embers waft down around you like grotesque snow."
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/wind
|
||||
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
|
||||
|
||||
// Like the above but a lot more harmful.
|
||||
/datum/weather/virgo3b_better/ash_storm
|
||||
name = "ash storm"
|
||||
icon_state = "ashfall_heavy"
|
||||
light_modifier = 0.1
|
||||
light_color = "#FF0000"
|
||||
temp_high = 323.15 // 50c
|
||||
temp_low = 313.15 // 40c
|
||||
wind_high = 6
|
||||
wind_low = 3
|
||||
flight_failure_modifier = 50
|
||||
transition_chances = list(
|
||||
WEATHER_ASH_STORM = 100
|
||||
)
|
||||
observed_message = "All that can be seen is black smoldering ash."
|
||||
transition_messages = list(
|
||||
"Smoldering clouds of scorching ash billow down around you!"
|
||||
)
|
||||
// Lets recycle.
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
|
||||
|
||||
/datum/weather/virgo3b_better/ash_storm/process_effects()
|
||||
..()
|
||||
for(var/thing in living_mob_list)
|
||||
var/mob/living/L = thing
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to burn them with ash.
|
||||
|
||||
L.inflict_heat_damage(rand(1, 3))
|
||||
|
||||
|
||||
// Totally radical.
|
||||
/datum/weather/virgo3b_better/fallout
|
||||
name = "fallout"
|
||||
icon_state = "fallout"
|
||||
light_modifier = 0.7
|
||||
light_color = "#CCFFCC"
|
||||
flight_failure_modifier = 30
|
||||
transition_chances = list(
|
||||
WEATHER_FALLOUT = 100
|
||||
)
|
||||
observed_message = "Radioactive soot and ash rains down from the heavens."
|
||||
transition_messages = list(
|
||||
"Radioactive soot and ash start to float down around you, contaminating whatever they touch."
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/wind
|
||||
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
|
||||
|
||||
// How much radiation a mob gets while on an outside tile.
|
||||
var/direct_rad_low = RAD_LEVEL_LOW
|
||||
var/direct_rad_high = RAD_LEVEL_MODERATE
|
||||
|
||||
// How much radiation is bursted onto a random tile near a mob.
|
||||
var/fallout_rad_low = RAD_LEVEL_HIGH
|
||||
var/fallout_rad_high = RAD_LEVEL_VERY_HIGH
|
||||
|
||||
/datum/weather/virgo3b_better/fallout/process_effects()
|
||||
..()
|
||||
for(var/thing in living_mob_list)
|
||||
var/mob/living/L = thing
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
irradiate_nearby_turf(L)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to irradiate them with fallout.
|
||||
|
||||
L.rad_act(rand(direct_rad_low, direct_rad_high))
|
||||
|
||||
// This makes random tiles near people radioactive for awhile.
|
||||
// Tiles far away from people are left alone, for performance.
|
||||
/datum/weather/virgo3b_better/fallout/proc/irradiate_nearby_turf(mob/living/L)
|
||||
if(!istype(L))
|
||||
return
|
||||
var/list/turfs = RANGE_TURFS(world.view, L)
|
||||
var/turf/T = pick(turfs) // We get one try per tick.
|
||||
if(!istype(T))
|
||||
return
|
||||
if(T.outdoors)
|
||||
SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high))
|
||||
|
||||
/datum/weather/virgo3b_better/party
|
||||
name = "party"
|
||||
icon = 'icons/effects/weather_vr.dmi'
|
||||
icon_state = "party"
|
||||
light_color = "#FFFFFF"
|
||||
light_modifier = 2
|
||||
flight_failure_modifier = 70
|
||||
transition_chances = list(
|
||||
WEATHER_CLEAR = 100
|
||||
)
|
||||
transition_messages = list(
|
||||
"IT'S PARTY TIME!",
|
||||
"LET'S GO! PARTY TIME!",
|
||||
"EVERYONE, IT'S TIME TO PARTY!"
|
||||
)
|
||||
sky_visible = TRUE
|
||||
observed_message = "THE PARTY IS ON!"
|
||||
@@ -203,15 +203,17 @@ var/datum/planet/virgo3b/planet_virgo3b = null
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
|
||||
|
||||
/*
|
||||
/datum/weather/virgo3b/snow/process_effects()
|
||||
..()
|
||||
for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
if(S.z in holder.our_planet.expected_z_levels)
|
||||
for(var/dir_checked in cardinal)
|
||||
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
||||
if(istype(T))
|
||||
if(istype(T, /turf/simulated/floor/outdoors) && prob(33))
|
||||
T.chill()
|
||||
*/
|
||||
|
||||
/datum/weather/virgo3b/blizzard
|
||||
name = "blizzard"
|
||||
@@ -236,15 +238,17 @@ var/datum/planet/virgo3b/planet_virgo3b = null
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
|
||||
|
||||
/*
|
||||
/datum/weather/virgo3b/blizzard/process_effects()
|
||||
..()
|
||||
for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
if(S.z in holder.our_planet.expected_z_levels)
|
||||
for(var/dir_checked in cardinal)
|
||||
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
||||
if(istype(T))
|
||||
if(istype(T, /turf/simulated/floor/outdoors) && prob(50))
|
||||
T.chill()
|
||||
*/
|
||||
|
||||
/datum/weather/virgo3b/rain
|
||||
name = "rain"
|
||||
@@ -270,25 +274,21 @@ var/datum/planet/virgo3b/planet_virgo3b = null
|
||||
|
||||
/datum/weather/virgo3b/rain/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L in living_mob_list)
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to rain on them.
|
||||
|
||||
// If they have an open umbrella, it'll guard from rain
|
||||
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = L.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
L.water_act(1)
|
||||
if(show_message)
|
||||
@@ -325,25 +325,21 @@ var/datum/planet/virgo3b/planet_virgo3b = null
|
||||
|
||||
/datum/weather/virgo3b/storm/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L in living_mob_list)
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to rain on them.
|
||||
|
||||
// If they have an open umbrella, it'll guard from rain
|
||||
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||
continue
|
||||
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||
continue
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = L.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
|
||||
L.water_act(2)
|
||||
@@ -385,20 +381,18 @@ var/datum/planet/virgo3b/planet_virgo3b = null
|
||||
|
||||
/datum/weather/virgo3b/hail/process_effects()
|
||||
..()
|
||||
for(var/humie in human_mob_list)
|
||||
var/mob/living/carbon/human/H = humie
|
||||
for(var/mob/living/carbon/H as anything in human_mob_list)
|
||||
if(H.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to pelt them with ice.
|
||||
|
||||
// If they have an open umbrella, it'll guard from hail
|
||||
var/obj/item/weapon/melee/umbrella/U
|
||||
if(istype(H.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
||||
U = H.get_active_hand()
|
||||
else if(istype(H.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = H.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = H.get_inactive_hand()
|
||||
if(U && U.open)
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(H, "<span class='notice'>Hail patters onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
@@ -32,35 +32,35 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
||||
var/min = 0
|
||||
|
||||
switch(sun_position)
|
||||
if(0 to 0.30) // Night
|
||||
low_brightness = 0.1
|
||||
if(0 to 0.20) // Night
|
||||
low_brightness = 0.3
|
||||
low_color = "#000066"
|
||||
|
||||
high_brightness = 0.2
|
||||
high_brightness = 0.5
|
||||
high_color = "#66004D"
|
||||
min = 0
|
||||
|
||||
if(0.30 to 0.40) // Twilight
|
||||
low_brightness = 0.4
|
||||
if(0.20 to 0.30) // Twilight
|
||||
low_brightness = 0.5
|
||||
low_color = "#66004D"
|
||||
|
||||
high_brightness = 0.6
|
||||
high_brightness = 0.9
|
||||
high_color = "#CC3300"
|
||||
min = 0.40
|
||||
|
||||
if(0.40 to 0.50) // Sunrise/set
|
||||
low_brightness = 0.7
|
||||
if(0.30 to 0.40) // Sunrise/set
|
||||
low_brightness = 0.9
|
||||
low_color = "#CC3300"
|
||||
|
||||
high_brightness = 0.9
|
||||
high_brightness = 3.0
|
||||
high_color = "#FF9933"
|
||||
min = 0.50
|
||||
|
||||
if(0.50 to 1.00) // Noon
|
||||
low_brightness = 1
|
||||
if(0.40 to 1.00) // Noon
|
||||
low_brightness = 3.0
|
||||
low_color = "#DDDDDD"
|
||||
|
||||
high_brightness = 2
|
||||
high_brightness = 10.0
|
||||
high_color = "#FFFFFF"
|
||||
min = 0.70
|
||||
|
||||
@@ -187,15 +187,17 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
|
||||
|
||||
/*
|
||||
/datum/weather/virgo4/snow/process_effects()
|
||||
..()
|
||||
for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
if(S.z in holder.our_planet.expected_z_levels)
|
||||
for(var/dir_checked in cardinal)
|
||||
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
||||
if(istype(T))
|
||||
if(istype(T, /turf/simulated/floor/outdoors) && prob(33))
|
||||
T.chill()
|
||||
*/
|
||||
|
||||
/datum/weather/virgo4/blizzard
|
||||
name = "blizzard"
|
||||
@@ -217,15 +219,17 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
|
||||
|
||||
/*
|
||||
/datum/weather/virgo4/blizzard/process_effects()
|
||||
..()
|
||||
for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||
if(S.z in holder.our_planet.expected_z_levels)
|
||||
for(var/dir_checked in cardinal)
|
||||
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
||||
if(istype(T))
|
||||
if(istype(T, /turf/simulated/floor/outdoors) && prob(50))
|
||||
T.chill()
|
||||
*/
|
||||
|
||||
/datum/weather/virgo4/rain
|
||||
name = "rain"
|
||||
@@ -248,25 +252,21 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
||||
|
||||
/datum/weather/virgo4/rain/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L in living_mob_list)
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to rain on them.
|
||||
|
||||
// If they have an open umbrella, it'll guard from rain
|
||||
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = L.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
L.water_act(1)
|
||||
if(show_message)
|
||||
@@ -298,25 +298,21 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
||||
|
||||
/datum/weather/virgo4/storm/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L in living_mob_list)
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to rain on them.
|
||||
|
||||
// If they have an open umbrella, it'll guard from rain
|
||||
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||
continue
|
||||
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
|
||||
if(U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||
continue
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = L.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||
continue
|
||||
|
||||
|
||||
L.water_act(2)
|
||||
@@ -355,20 +351,18 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
||||
|
||||
/datum/weather/virgo4/hail/process_effects()
|
||||
..()
|
||||
for(var/humie in human_mob_list)
|
||||
var/mob/living/carbon/human/H = humie
|
||||
for(var/mob/living/carbon/H as anything in human_mob_list)
|
||||
if(H.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to pelt them with ice.
|
||||
|
||||
// If they have an open umbrella, it'll guard from hail
|
||||
var/obj/item/weapon/melee/umbrella/U
|
||||
if(istype(H.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
||||
U = H.get_active_hand()
|
||||
else if(istype(H.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = H.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = H.get_inactive_hand()
|
||||
if(U && U.open)
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(H, "<span class='notice'>Hail patters onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
/datum/weather_holder/update_icon_effects()
|
||||
..()
|
||||
if(current_weather.icon)
|
||||
visuals.icon = current_weather.icon
|
||||
@@ -95,7 +95,6 @@
|
||||
playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5)
|
||||
tesla_zap(src, 10, power/(coeff/2))
|
||||
|
||||
//TFF 3/6/19 - Port Cit RP fix for infinite frames
|
||||
/obj/machinery/power/grounding_rod
|
||||
name = "grounding rod"
|
||||
desc = "Keep an area from being fried from Edison's Bane."
|
||||
|
||||
@@ -279,3 +279,22 @@
|
||||
/obj/item/projectile/beam/shock/weak
|
||||
damage = 5
|
||||
agony = 10
|
||||
|
||||
|
||||
//
|
||||
// Projectile Beam Definitions
|
||||
//
|
||||
|
||||
/obj/item/projectile/beam/pointdefense
|
||||
name = "point defense salvo"
|
||||
icon_state = "laser"
|
||||
damage = 15
|
||||
damage_type = ELECTROCUTE //You should be safe inside a voidsuit
|
||||
sharp = FALSE //"Wide" spectrum beam
|
||||
light_color = COLOR_GOLD
|
||||
|
||||
excavation_amount = 200 // Good at shooting rocks
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/pointdefense
|
||||
tracer_type = /obj/effect/projectile/tracer/pointdefense
|
||||
impact_type = /obj/effect/projectile/impact/pointdefense
|
||||
|
||||
@@ -313,7 +313,8 @@
|
||||
if(spill)
|
||||
splash(target.loc, spill, multiplier, copy, min_spill, max_spill)
|
||||
|
||||
trans_to(target, amount, multiplier, copy)
|
||||
if(!trans_to(target, amount, multiplier, copy))
|
||||
touch(target, amount)
|
||||
|
||||
/datum/reagents/proc/trans_type_to(var/target, var/rtype, var/amount = 1)
|
||||
if (!target)
|
||||
|
||||
@@ -1700,7 +1700,7 @@
|
||||
|
||||
glass_name = "Rewriter"
|
||||
glass_desc = "The secret of the sanctuary of the Libarian..."
|
||||
allergen_type = FRUIT|COFFEE //Made with space mountain wind (Fruit)
|
||||
allergen_type = FRUIT|COFFEE //Made with space mountain wind (Fruit)
|
||||
|
||||
/datum/reagent/drink/rewriter/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
..()
|
||||
@@ -2720,7 +2720,7 @@
|
||||
glass_name = "Banana Honk"
|
||||
glass_desc = "A drink from Banana Heaven."
|
||||
|
||||
allergen_type = FRUIT|DAIRY //Made from banana juice(fruit) and cream(dairy)
|
||||
allergen_type = FRUIT|DAIRY //Made from banana juice(fruit) and cream(dairy)
|
||||
|
||||
/datum/reagent/ethanol/barefoot
|
||||
name = "Barefoot"
|
||||
@@ -4156,3 +4156,28 @@
|
||||
reagent_state = LIQUID
|
||||
nutriment_factor = 40 //very filling
|
||||
color = "#d169b2"
|
||||
|
||||
//ADDITIONS BELOW THIS LINE MADE ON 04/03/2021
|
||||
|
||||
/datum/reagent/drink/soda/kompot
|
||||
name = "Kompot"
|
||||
id = "kompot"
|
||||
description = "A traditional Eastern European beverage once used to preserve fruit in the 1980s"
|
||||
taste_description = "refreshuingly sweet and fruity"
|
||||
color = "#ed9415" // rgb: 237, 148, 21
|
||||
adj_drowsy = -1
|
||||
adj_temp = -6
|
||||
glass_name = "kompot"
|
||||
glass_desc = "A glass of refreshing kompot."
|
||||
glass_special = list(DRINK_FIZZ)
|
||||
|
||||
/datum/reagent/ethanol/kvass
|
||||
name = "Kvass"
|
||||
id = "kvass"
|
||||
description = "A traditional fermented Slavic and Baltic beverage commonly made from rye bread."
|
||||
taste_description = "a warm summer day at babushka's cabin"
|
||||
color = "#b78315" // rgb: 183, 131, 21
|
||||
strength = 95 //It's just soda to Russians
|
||||
nutriment_factor = 2
|
||||
glass_name = "kvass"
|
||||
glass_desc = "A hearty glass of Slavic brew."
|
||||
|
||||
@@ -1450,7 +1450,7 @@
|
||||
|
||||
/datum/reagent/qerr_quem
|
||||
name = "Qerr-quem"
|
||||
id = "querr_quem"
|
||||
id = "qerr_quem"
|
||||
description = "A potent stimulant and anti-anxiety medication, made for the Qerr-Katish."
|
||||
taste_description = "mint"
|
||||
reagent_state = LIQUID
|
||||
|
||||
@@ -13,8 +13,7 @@
|
||||
mrate_static = TRUE
|
||||
|
||||
/datum/reagent/macrocillin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(M.size_range_check(M.size_multiplier))
|
||||
M.resize(M.size_multiplier+0.01)//Incrrease 1% per tick.
|
||||
M.resize(M.size_multiplier+0.01, uncapped = M.has_large_resize_bounds()) //Incrrease 1% per tick.
|
||||
return
|
||||
|
||||
/datum/reagent/microcillin
|
||||
@@ -27,8 +26,7 @@
|
||||
mrate_static = TRUE
|
||||
|
||||
/datum/reagent/microcillin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(M.size_range_check(M.size_multiplier))
|
||||
M.resize(M.size_multiplier-0.01) //Decrease 1% per tick.
|
||||
M.resize(M.size_multiplier-0.01, uncapped = M.has_large_resize_bounds()) //Decrease 1% per tick.
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
item_state = "cleaner"
|
||||
center_of_mass = list("x" = 16,"y" = 10)
|
||||
flags = OPENCONTAINER|NOBLUDGEON
|
||||
//TFF 24/12/19 - Let people print more spray bottles if needed.
|
||||
matter = list("glass" = 300, DEFAULT_WALL_MATERIAL = 300)
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
|
||||
@@ -662,6 +662,19 @@ CIRCUITS BELOW
|
||||
build_path = /obj/item/weapon/circuitboard/microwave/advanced
|
||||
sort_string = "HACAA"
|
||||
|
||||
/datum/design/circuit/pointdefense
|
||||
name = "point defense battery"
|
||||
id = "pointdefense"
|
||||
req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 3, TECH_COMBAT = 4)
|
||||
build_path = /obj/item/weapon/circuitboard/pointdefense
|
||||
sort_string = "OAABA"
|
||||
|
||||
/datum/design/circuit/pointdefense_control
|
||||
name = "point defense control"
|
||||
id = "pointdefense_control"
|
||||
req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_COMBAT = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/pointdefense_control
|
||||
sort_string = "OAABB"
|
||||
|
||||
/datum/design/circuit/shield_generator
|
||||
name = "shield generator"
|
||||
|
||||
@@ -466,20 +466,3 @@
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, damaging [target]'s [affected.name] with \the [tool]!</span>")
|
||||
affected.createwound(BRUISE, 20)
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// HEART SURGERY //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// To be finished after some tests.
|
||||
// /datum/surgery_step/ribcage/heart/cut
|
||||
// allowed_tools = list(
|
||||
// /obj/item/weapon/surgical/scalpel = 100, \
|
||||
// /obj/item/weapon/material/knife = 75, \
|
||||
// /obj/item/weapon/material/shard = 50, \
|
||||
// )
|
||||
|
||||
// min_duration = 30
|
||||
// max_duration = 40
|
||||
|
||||
// /datum/surgery_step/ribcage/heart/cut/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
// return ..() && target.op_stage.ribcage == 2
|
||||
@@ -11,7 +11,7 @@
|
||||
material = get_material_by_name("darkglass")
|
||||
verbs -= /obj/structure/table/verb/do_flip
|
||||
verbs -= /obj/structure/table/proc/do_put
|
||||
|
||||
|
||||
..()
|
||||
|
||||
/obj/structure/table/darkglass/dismantle(obj/item/weapon/wrench/W, mob/user)
|
||||
@@ -34,9 +34,17 @@
|
||||
material = get_material_by_name("fancyblack")
|
||||
verbs -= /obj/structure/table/verb/do_flip
|
||||
verbs -= /obj/structure/table/proc/do_put
|
||||
|
||||
|
||||
..()
|
||||
|
||||
/obj/structure/table/fancyblack/dismantle(obj/item/weapon/wrench/W, mob/user)
|
||||
to_chat(user, "<span class='warning'>You cannot dismantle \the [src].</span>")
|
||||
return
|
||||
return
|
||||
|
||||
/obj/structure/table/gold
|
||||
icon_state = "plain_preview"
|
||||
color = "#FFFF00"
|
||||
|
||||
/obj/structure/table/gold/New()
|
||||
material = get_material_by_name(MAT_GOLD)
|
||||
..()
|
||||
@@ -1,5 +1,3 @@
|
||||
// TFF 6/10/20 - Just a little thing to prevent the button
|
||||
// and console from being destroyed by explosions.
|
||||
/obj/structure/lift/button/ex_act()
|
||||
return
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
var/car_limit = 0 //how many cars an engine can pull before performance degrades. This should be 0 to prevent trailers from unhitching.
|
||||
active_engines = 1
|
||||
var/obj/item/weapon/key/key //TFF 19/1/20 - Bugfix for key being prevented from getting used again
|
||||
var/obj/item/weapon/key/key
|
||||
var/key_type = /obj/item/weapon/key/security
|
||||
var/siren = 0 //This is for eventually getting the siren sprite to work.
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
/obj/vehicle/train/security/engine/New()
|
||||
..()
|
||||
cell = new /obj/item/weapon/cell/high(src)
|
||||
key = new key_type(src) //TFF 19/1/20 - Bugfix for key being prevented from getting used again
|
||||
key = new key_type(src)
|
||||
var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs
|
||||
overlays += I
|
||||
turn_off() //so engine verbs are correctly set
|
||||
@@ -91,7 +91,7 @@
|
||||
..()
|
||||
|
||||
/obj/vehicle/train/security/engine/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, key_type)) //TFF 19/1/20 - Bugfix for key being prevented from getting used again
|
||||
if(istype(W, key_type))
|
||||
if(!key)
|
||||
user.drop_item()
|
||||
W.forceMove(src)
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
var/digestable = TRUE // Can the mob be digested inside a belly?
|
||||
var/devourable = TRUE // Can the mob be devoured at all?
|
||||
var/feeding = TRUE // Can the mob be vorishly force fed or fed to others?
|
||||
var/absorbable = TRUE // Are you allowed to absorb this person? TFF addition 14/12/19
|
||||
var/absorbable = TRUE // Are you allowed to absorb this person?
|
||||
var/resizable = TRUE // Can other people resize you? (Usually ignored for self-resizes)
|
||||
var/digest_leave_remains = FALSE // Will this mob leave bones/skull/etc after the melty demise?
|
||||
var/allowmobvore = TRUE // Will simplemobs attempt to eat the mob?
|
||||
var/showvoreprefs = TRUE // Determines if the mechanical vore preferences button will be displayed on the mob or not.
|
||||
@@ -41,6 +42,7 @@
|
||||
M.verbs += /mob/living/proc/lick
|
||||
M.verbs += /mob/living/proc/smell
|
||||
M.verbs += /mob/living/proc/switch_scaling
|
||||
M.verbs += /mob/living/proc/vorebelly_printout
|
||||
if(M.no_vore) //If the mob isn't supposed to have a stomach, let's not give it an insidepanel so it can make one for itself, or a stomach.
|
||||
return TRUE
|
||||
M.vorePanel = new(M)
|
||||
@@ -224,7 +226,8 @@
|
||||
P.digestable = src.digestable
|
||||
P.devourable = src.devourable
|
||||
P.feeding = src.feeding
|
||||
P.absorbable = src.absorbable //TFF 14/12/19 - choose whether allowing absorbing
|
||||
P.absorbable = src.absorbable
|
||||
P.resizable = src.resizable
|
||||
P.digest_leave_remains = src.digest_leave_remains
|
||||
P.allowmobvore = src.allowmobvore
|
||||
P.vore_taste = src.vore_taste
|
||||
@@ -258,7 +261,8 @@
|
||||
digestable = P.digestable
|
||||
devourable = P.devourable
|
||||
feeding = P.feeding
|
||||
absorbable = P.absorbable //TFF 14/12/19 - choose whether allowing absorbing
|
||||
absorbable = P.absorbable
|
||||
resizable = P.resizable
|
||||
digest_leave_remains = P.digest_leave_remains
|
||||
allowmobvore = P.allowmobvore
|
||||
vore_taste = P.vore_taste
|
||||
@@ -682,7 +686,6 @@
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of garbage and leftovers. Delicious?</span>")
|
||||
else
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of gluttonous waste of food.</span>")
|
||||
//TFF 10/7/19 - Add custom flavour for collars for trash can trait.
|
||||
else if (istype(I,/obj/item/clothing/accessory/collar))
|
||||
visible_message("<span class='warning'>[src] demonstrates their voracious capabilities by swallowing [I] whole!</span>")
|
||||
to_chat(src, "<span class='notice'>You can taste the submissiveness in the wearer of [I]!</span>")
|
||||
@@ -864,3 +867,35 @@
|
||||
/obj/screen/fullscreen/belly
|
||||
icon = 'icons/mob/screen_full_vore.dmi'
|
||||
icon_state = ""
|
||||
|
||||
/mob/living/proc/vorebelly_printout() //Spew the vorepanel belly messages into chat window for copypasting.
|
||||
set name = "Print Vorebelly Settings"
|
||||
set category = "Preferences"
|
||||
set desc = "Print out your vorebelly messages into chat for copypasting."
|
||||
|
||||
for(var/belly in vore_organs)
|
||||
if(isbelly(belly))
|
||||
var/obj/belly/B = belly
|
||||
to_chat(src, "<span class='notice'><b>Belly name:</b> [B.name]</span>")
|
||||
to_chat(src, "<span class='notice'><b>Belly desc:</b> [B.desc]</span>")
|
||||
to_chat(src, "<span class='notice'><b>Vore verb:</b> [B.vore_verb]</span>")
|
||||
to_chat(src, "<span class='notice'><b>Struggle messages (outside):</b></span>")
|
||||
for(var/msg in B.struggle_messages_outside)
|
||||
to_chat(src, "<span class='notice'>[msg]</span>")
|
||||
to_chat(src, "<span class='notice'><b>Struggle messages (inside):</b></span>")
|
||||
for(var/msg in B.struggle_messages_inside)
|
||||
to_chat(src, "<span class='notice'>[msg]</span>")
|
||||
to_chat(src, "<span class='notice'><b>Digest messages (owner):</b></span>")
|
||||
for(var/msg in B.digest_messages_owner)
|
||||
to_chat(src, "<span class='notice'>[msg]</span>")
|
||||
to_chat(src, "<span class='notice'><b>Digest messages (prey):</b></span>")
|
||||
for(var/msg in B.digest_messages_prey)
|
||||
to_chat(src, "<span class='notice'>[msg]</span>")
|
||||
to_chat(src, "<span class='notice'><b>Examine messages:</b></span>")
|
||||
for(var/msg in B.examine_messages)
|
||||
to_chat(src, "<span class='notice'>[msg]</span>")
|
||||
to_chat(src, "<span class='notice'><b>Emote lists:</b></span>")
|
||||
for(var/EL in B.emote_lists)
|
||||
to_chat(src, "<span class='notice'><b>[EL]:</b></span>")
|
||||
for(var/msg in B.emote_lists[EL])
|
||||
to_chat(src, "<span class='notice'>[msg]</span>")
|
||||
@@ -45,19 +45,22 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
//Actual preferences
|
||||
var/digestable = TRUE
|
||||
var/devourable = TRUE
|
||||
var/absorbable = TRUE
|
||||
var/feeding = TRUE
|
||||
var/absorbable = TRUE //TFF 14/12/19 - choose whether allowing absorbing
|
||||
var/can_be_drop_prey = FALSE
|
||||
var/can_be_drop_pred = FALSE
|
||||
var/digest_leave_remains = FALSE
|
||||
var/allowmobvore = TRUE
|
||||
var/permit_healbelly = TRUE
|
||||
|
||||
var/resizable = TRUE
|
||||
var/show_vore_fx = TRUE
|
||||
var/step_mechanics_pref = FALSE
|
||||
var/pickup_pref = TRUE
|
||||
|
||||
var/list/belly_prefs = list()
|
||||
var/vore_taste = "nothing in particular"
|
||||
var/vore_smell = "nothing in particular"
|
||||
var/permit_healbelly = TRUE
|
||||
var/show_vore_fx = TRUE
|
||||
var/can_be_drop_prey = FALSE
|
||||
var/can_be_drop_pred = FALSE
|
||||
var/step_mechanics_pref = FALSE
|
||||
var/pickup_pref = TRUE
|
||||
|
||||
//Mechanically required
|
||||
var/path
|
||||
@@ -122,8 +125,9 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
|
||||
digestable = json_from_file["digestable"]
|
||||
devourable = json_from_file["devourable"]
|
||||
resizable = json_from_file["resizable"]
|
||||
feeding = json_from_file["feeding"]
|
||||
absorbable = json_from_file["absorbable"] //TFF 14/12/19 - choose whether allowing absorbing
|
||||
absorbable = json_from_file["absorbable"]
|
||||
digest_leave_remains = json_from_file["digest_leave_remains"]
|
||||
allowmobvore = json_from_file["allowmobvore"]
|
||||
vore_taste = json_from_file["vore_taste"]
|
||||
@@ -141,6 +145,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
digestable = TRUE
|
||||
if(isnull(devourable))
|
||||
devourable = TRUE
|
||||
if(isnull(resizable))
|
||||
resizable = TRUE
|
||||
if(isnull(feeding))
|
||||
feeding = TRUE
|
||||
if(isnull(absorbable))
|
||||
@@ -175,6 +181,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
"version" = version,
|
||||
"digestable" = digestable,
|
||||
"devourable" = devourable,
|
||||
"resizable" = resizable,
|
||||
"absorbable" = absorbable,
|
||||
"feeding" = feeding,
|
||||
"digest_leave_remains" = digest_leave_remains,
|
||||
|
||||
@@ -208,6 +208,7 @@
|
||||
data["prefs"] = list(
|
||||
"digestable" = host.digestable,
|
||||
"devourable" = host.devourable,
|
||||
"resizable" = host.resizable,
|
||||
"feeding" = host.feeding,
|
||||
"absorbable" = host.absorbable,
|
||||
"digest_leave_remains" = host.digest_leave_remains,
|
||||
@@ -358,6 +359,12 @@
|
||||
host.client.prefs_vr.devourable = host.devourable
|
||||
unsaved_changes = TRUE
|
||||
return TRUE
|
||||
if("toggle_resize")
|
||||
host.resizable = !host.resizable
|
||||
if(host.client.prefs_vr)
|
||||
host.client.prefs_vr.resizable = host.resizable
|
||||
unsaved_changes = TRUE
|
||||
return TRUE
|
||||
if("toggle_feed")
|
||||
host.feeding = !host.feeding
|
||||
if(host.client.prefs_vr)
|
||||
|
||||
@@ -2287,4 +2287,47 @@ Departamental Swimsuits, for general use
|
||||
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|FEET|ARMS|HANDS
|
||||
|
||||
//PastelPrinceDan: Kiyoshi Maki
|
||||
/obj/item/clothing/accessory/poncho/fluff/cloakglowing
|
||||
name = "glowing cloak"
|
||||
desc = "A fancy cloak with a RGB LED color strip along the trim, cycling through the colors of the rainbow."
|
||||
icon = 'icons/vore/custom_clothes_vr.dmi'
|
||||
icon_state = "rgb"
|
||||
item_state = "rgb"
|
||||
overlay_state = "rgb"
|
||||
icon_override = 'icons/vore/custom_onmob_vr.dmi'
|
||||
var/is_dark = FALSE
|
||||
|
||||
/obj/item/clothing/accessory/poncho/fluff/cloakglowing/equipped()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(istype(H) && H.wear_suit == src)
|
||||
icon_override = 'icons/vore/custom_onmob_vr.dmi'
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/accessory/poncho/fluff/cloakglowing/dropped()
|
||||
icon_override = 'icons/vore/custom_onmob_vr.dmi'
|
||||
|
||||
/obj/item/clothing/accessory/poncho/fluff/cloakglowing/proc/colorswap(mob/user)
|
||||
if(user.canmove && !user.stat)
|
||||
src.is_dark = !src.is_dark
|
||||
if (src.is_dark)
|
||||
icon_state = "rgbd"
|
||||
item_state = "rgbd"
|
||||
overlay_state = "rgbd"
|
||||
to_chat(user, "The polychromic plates in your cloak activate, turning it black.")
|
||||
else
|
||||
icon_state = "rgb"
|
||||
item_state = "rgb"
|
||||
overlay_state = "rgb"
|
||||
to_chat(user, "The polychromic plates in your cloak activate, turning it white.")
|
||||
has_suit.update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/accessory/poncho/fluff/cloakglowing/verb/color_verb()
|
||||
set name = "Swap color"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
|
||||
colorswap(usr)
|
||||
@@ -337,7 +337,7 @@
|
||||
name = "Mouse Plushie"
|
||||
desc = "A plushie of a delightful mouse! What was once considered a vile rodent is now your very best friend."
|
||||
slot_flags = SLOT_HEAD
|
||||
icon_state = "mouse_brown" //TFF 12/11/19 - Change sprite to not look dead. Heck you for that choice! >:C
|
||||
icon_state = "mouse_brown"
|
||||
item_state = "mouse_brown_head"
|
||||
icon = 'icons/vore/custom_items_vr.dmi'
|
||||
icon_override = 'icons/vore/custom_items_vr.dmi'
|
||||
|
||||
@@ -1,17 +1,3 @@
|
||||
|
||||
//these aren't defines so they can stay in this file
|
||||
var/const/RESIZE_HUGE = 2
|
||||
var/const/RESIZE_BIG = 1.5
|
||||
var/const/RESIZE_NORMAL = 1
|
||||
var/const/RESIZE_SMALL = 0.5
|
||||
var/const/RESIZE_TINY = 0.25
|
||||
|
||||
//average
|
||||
var/const/RESIZE_A_HUGEBIG = (RESIZE_HUGE + RESIZE_BIG) / 2
|
||||
var/const/RESIZE_A_BIGNORMAL = (RESIZE_BIG + RESIZE_NORMAL) / 2
|
||||
var/const/RESIZE_A_NORMALSMALL = (RESIZE_NORMAL + RESIZE_SMALL) / 2
|
||||
var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
|
||||
// Adding needed defines to /mob/living
|
||||
// Note: Polaris had this on /mob/living/carbon/human We need it higher up for animals and stuff.
|
||||
/mob/living
|
||||
@@ -60,32 +46,45 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
/mob/living/get_effective_size()
|
||||
return size_multiplier
|
||||
|
||||
/atom/movable/proc/size_range_check(size_select) //both objects and mobs needs to have that
|
||||
var/area/A = get_area(src) //Get the atom's area to check for size limit.
|
||||
if((A.limit_mob_size && (size_select > 200 || size_select < 25)) || (size_select > 600 || size_select <1))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/atom/movable/proc/has_large_resize_bounds()
|
||||
var/area/A = get_area(src) //Get the atom's area to check for size limit.
|
||||
return !A.limit_mob_size
|
||||
|
||||
/proc/is_extreme_size(size)
|
||||
return (size < RESIZE_MINIMUM || size > RESIZE_MAXIMUM)
|
||||
|
||||
|
||||
/**
|
||||
* Resizes the mob immediately to the desired mod, animating it growing/shrinking.
|
||||
* It can be used by anything that calls it.
|
||||
*/
|
||||
/atom/movable/proc/in_dorms()
|
||||
var/area/A = get_area(src)
|
||||
return istype(A, /area/crew_quarters/sleep)
|
||||
|
||||
/atom/movable/proc/size_range_check(size_select) //both objects and mobs needs to have that
|
||||
if((!in_dorms() && (size_select > 200 || size_select < 25)) || (size_select > 600 || size_select <1))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/mob/living/proc/resize(var/new_size, var/animate = TRUE, var/mark_unnatural_size = TRUE)
|
||||
/mob/living/proc/resize(var/new_size, var/animate = TRUE, var/uncapped = FALSE, var/ignore_prefs = FALSE)
|
||||
if(!uncapped)
|
||||
new_size = clamp(new_size, RESIZE_MINIMUM, RESIZE_MAXIMUM)
|
||||
var/datum/component/resize_guard/guard = GetComponent(/datum/component/resize_guard)
|
||||
if(guard)
|
||||
qdel(guard)
|
||||
else if(has_large_resize_bounds())
|
||||
if(is_extreme_size(new_size))
|
||||
AddComponent(/datum/component/resize_guard)
|
||||
else
|
||||
var/datum/component/resize_guard/guard = GetComponent(/datum/component/resize_guard)
|
||||
if(guard)
|
||||
qdel(guard)
|
||||
|
||||
if(size_multiplier == new_size)
|
||||
return 1
|
||||
|
||||
size_multiplier = new_size //Change size_multiplier so that other items can interact with them
|
||||
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(new_size > 2 || new_size < 0.25)
|
||||
if(mark_unnatural_size) //Will target size be reverted to ordinary bounds when out of dorms or not?
|
||||
H.unnaturally_resized = TRUE
|
||||
else
|
||||
H.unnaturally_resized = FALSE
|
||||
if(animate)
|
||||
var/change = new_size - size_multiplier
|
||||
var/duration = (abs(change)+0.25) SECONDS
|
||||
@@ -111,8 +110,8 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
else
|
||||
update_transform() //Lame way
|
||||
|
||||
/mob/living/carbon/human/resize(var/new_size, var/animate = TRUE)
|
||||
if(!resizable)
|
||||
/mob/living/carbon/human/resize(var/new_size, var/animate = TRUE, var/uncapped = FALSE, var/ignore_prefs = FALSE)
|
||||
if(!resizable && !ignore_prefs)
|
||||
return 1
|
||||
if(species)
|
||||
vis_height = species.icon_height
|
||||
@@ -125,7 +124,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
apply_hud(index, HI)
|
||||
|
||||
// Optimize mannequins - never a point to animating or doing HUDs on these.
|
||||
/mob/living/carbon/human/dummy/mannequin/resize(var/new_size, var/animate = TRUE)
|
||||
/mob/living/carbon/human/dummy/mannequin/resize(var/new_size, var/animate = TRUE, var/uncapped = FALSE, var/ignore_prefs = FALSE)
|
||||
size_multiplier = new_size
|
||||
|
||||
/**
|
||||
@@ -175,10 +174,10 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
var/mob/living/simple_mob/SA = M
|
||||
if(!SA.has_hands)
|
||||
return 0
|
||||
if(buckled)
|
||||
to_chat(usr,"<span class='notice'>You have to unbuckle \the [M] before you pick them up.</span>")
|
||||
return 0
|
||||
if(size_diff >= 0.50 || mob_size < MOB_SMALL)
|
||||
if(buckled)
|
||||
to_chat(usr,"<span class='notice'>You have to unbuckle \the [src] before you pick them up.</span>")
|
||||
return 0
|
||||
holder_type = /obj/item/weapon/holder/micro
|
||||
var/obj/item/weapon/holder/m_holder = get_scooped(M, G)
|
||||
holder_type = holder_default
|
||||
|
||||
@@ -44,12 +44,15 @@
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
var/size_select = input("Put the desired size (25-200%), (1-600%) in dormitory areas.", "Set Size", size_set_to * 100) as num
|
||||
if(!size_range_check(size_select))
|
||||
to_chat(usr, "<span class='notice'>Invalid size.</span>")
|
||||
return
|
||||
size_set_to = (size_select/100)
|
||||
var/size_select = input("Put the desired size (25-200%), (1-600%) in dormitory areas.", "Set Size", size_set_to * 100) as num|null
|
||||
if(!size_select)
|
||||
return //cancelled
|
||||
//We do valid resize testing in actual firings because people move after setting these things.
|
||||
//Just a basic clamp here to the valid ranges.
|
||||
size_set_to = clamp((size_select/100), RESIZE_MINIMUM_DORMS, RESIZE_MAXIMUM_DORMS)
|
||||
to_chat(usr, "<span class='notice'>You set the size to [size_select]%</span>")
|
||||
if(size_set_to < RESIZE_MINIMUM || size_set_to > RESIZE_MAXIMUM)
|
||||
to_chat(usr, "<span class='notice'>Note: Resizing limited to 25-200% automatically while outside dormatory areas.</span>") //hint that we clamp it in resize
|
||||
|
||||
/obj/item/weapon/gun/energy/sizegun/examine(mob/user)
|
||||
. = ..()
|
||||
@@ -66,8 +69,10 @@
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
var/size_select = input("Put the desired size", "Set Size", size_set_to * 100) as num
|
||||
size_set_to = max(1,size_select/100) //No negative numbers
|
||||
var/size_select = input("Put the desired size (1-600%)", "Set Size", size_set_to * 100) as num|null
|
||||
if(!size_select)
|
||||
return //cancelled
|
||||
size_set_to = clamp((size_select/100), 0, 1000) //eheh
|
||||
to_chat(usr, "<span class='notice'>You set the size to [size_select]%</span>")
|
||||
|
||||
//
|
||||
@@ -88,21 +93,30 @@
|
||||
|
||||
/obj/item/projectile/beam/sizelaser/on_hit(var/atom/target)
|
||||
var/mob/living/M = target
|
||||
var/ignoring_prefs = (target == firer ? TRUE : FALSE) // Resizing yourself
|
||||
|
||||
if(istype(M))
|
||||
if(!M.in_dorms() || !istype(M, /mob/living/carbon/human))
|
||||
if(!M.resize(clamp(set_size,0.25,2)))
|
||||
to_chat(M, "<font color='blue'>The beam fires into your body, changing your size!</font>")
|
||||
else
|
||||
if(!M.resize(clamp(set_size,0.01,6)))
|
||||
to_chat(M, "<font color='blue'>The beam fires into your body, changing your size!</font>")
|
||||
if(!M.resize(set_size, uncapped = M.has_large_resize_bounds(), ignore_prefs = ignoring_prefs))
|
||||
to_chat(M, "<font color='blue'>The beam fires into your body, changing your size!</font>")
|
||||
M.updateicon()
|
||||
return
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/beam/sizelaser/admin/on_hit(var/atom/target)
|
||||
var/mob/living/M = target
|
||||
|
||||
if(istype(M))
|
||||
M.resize(set_size, TRUE, FALSE)
|
||||
|
||||
var/can_be_big = M.has_large_resize_bounds()
|
||||
var/very_big = is_extreme_size(set_size)
|
||||
|
||||
if(very_big && can_be_big) // made an extreme size in an area that allows it, don't assume adminbuse
|
||||
to_chat(firer, "<span class='warning'>[M] will lose this size upon moving into an area where this size is not allowed.</span>")
|
||||
else if(very_big) // made an extreme size in an area that doesn't allow it, assume adminbuse
|
||||
to_chat(firer, "<span class='warning'>[M] will retain this normally unallowed size outside this area.</span>")
|
||||
|
||||
M.resize(set_size, uncapped = TRUE, ignore_prefs = TRUE) // Always ignores prefs, caution is advisable
|
||||
|
||||
to_chat(M, "<font color='blue'>The beam fires into your body, changing your size!</font>")
|
||||
M.updateicon()
|
||||
return
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
icon_state = "strange"
|
||||
var/datum/geosample/geologic_data
|
||||
origin_tech = list(TECH_MATERIAL = 5)
|
||||
w_class = ITEMSIZE_SMALL //TFF 25/11/19 - fixes the strange rocks to be small size like before and not normal.
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
/obj/item/weapon/strangerock/New(loc, var/inside_item_type = 0)
|
||||
pixel_x = rand(0,16)-8
|
||||
|
||||
Reference in New Issue
Block a user