Merge branch 'pr/12'
This commit is contained in:
@@ -150,6 +150,42 @@
|
||||
message_admins("[key_name_admin(src)] set the round end sound to [S]")
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Set Round End Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/play_web_sound_manual()
|
||||
set category = "Fun"
|
||||
set name = "Manual Play Internet Sound"
|
||||
if(!check_rights(R_SOUNDS))
|
||||
return
|
||||
|
||||
var/web_sound_input = input("Enter youtube-dl fetched content URL (supported sites only, leave blank to stop playing)", "Send youtube-dl media link") as text|null
|
||||
if(!istext(web_sound_input))
|
||||
return
|
||||
web_sound_input = trim(web_sound_input)
|
||||
if(!length(web_sound_input))
|
||||
log_admin("[key_name(src)] stopped web sound")
|
||||
message_admins("[key_name(src)] stopped web sound")
|
||||
for(var/m in GLOB.player_list)
|
||||
var/mob/M = m
|
||||
var/client/C = M.client
|
||||
if((C.prefs.toggles & SOUND_MIDI) && C.chatOutput && !C.chatOutput.broken && C.chatOutput.loaded)
|
||||
C.chatOutput.stopMusic()
|
||||
return
|
||||
var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num
|
||||
if(!freq)
|
||||
return
|
||||
if(web_sound_input && !findtext(web_sound_input, GLOB.is_http_protocol))
|
||||
to_chat(src, "<span class='boldwarning'>BLOCKED: Content URL not using http(s) protocol</span>")
|
||||
to_chat(src, "<span class='warning'>The media provider returned a content URL that isn't using the HTTP or HTTPS protocol</span>")
|
||||
return
|
||||
|
||||
SSblackbox.record_feedback("nested tally", "played_url_manual", 1, list("[ckey]", "[web_sound_input]"))
|
||||
log_admin("[key_name(src)] manually played web sound: [web_sound_input]")
|
||||
message_admins("[key_name(src)] manually played web sound: <a href='web_sound_input'>HREF</a>")
|
||||
for(var/m in GLOB.player_list)
|
||||
var/mob/M = m
|
||||
var/client/C = M.client
|
||||
if((C.prefs.toggles & SOUND_MIDI) && C.chatOutput && !C.chatOutput.broken && C.chatOutput.loaded)
|
||||
C.chatOutput.sendMusic(web_sound_input, freq)
|
||||
|
||||
/client/proc/stop_sounds()
|
||||
set category = "Debug"
|
||||
set name = "Stop All Playing Sounds"
|
||||
|
||||
@@ -1249,7 +1249,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
|
||||
if(!check_rights(R_ADMIN) || !check_rights(R_FUN))
|
||||
return
|
||||
|
||||
var/list/punishment_list = list(ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_FIREBALL, ADMIN_PUNISHMENT_ROD, ADMIN_PUNISHMENT_SUPPLYPOD, ADMIN_PUNISHMENT_MAZING)
|
||||
var/list/punishment_list = list(ADMIN_PUNISHMENT_PIE, ADMIN_PUNISHMENT_FIREBALL, ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_SUPPLYPOD, ADMIN_PUNISHMENT_MAZING, ADMIN_PUNISHMENT_ROD)
|
||||
|
||||
var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list
|
||||
|
||||
@@ -1294,6 +1294,9 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
|
||||
if(!puzzle_imprison(target))
|
||||
to_chat(usr,"<span class='warning'>Imprisonment failed!</span>")
|
||||
return
|
||||
if(ADMIN_PUNISHMENT_PIE)
|
||||
var/obj/item/reagent_containers/food/snacks/pie/cream/nostun/creamy = new(get_turf(target))
|
||||
creamy.splat(target)
|
||||
|
||||
var/msg = "[key_name_admin(usr)] punished [key_name_admin(target)] with [punishment]."
|
||||
message_admins(msg)
|
||||
|
||||
@@ -108,10 +108,20 @@
|
||||
to_chat(loc, "<span class='warning'>Combat injection is still recharging.</span>")
|
||||
return
|
||||
var/mob/living/carbon/human/M = loc
|
||||
M.adjustStaminaLoss(-75)
|
||||
M.SetSleeping(0)
|
||||
M.SetUnconscious(0)
|
||||
M.SetStun(0)
|
||||
M.SetKnockdown(0)
|
||||
M.reagents.add_reagent("inaprovaline", 3)
|
||||
M.reagents.add_reagent("synaptizine", 10)
|
||||
M.reagents.add_reagent("stimulants", 10)
|
||||
M.adjustStaminaLoss(-150)
|
||||
M.stuttering = 0
|
||||
M.updatehealth()
|
||||
M.update_stamina()
|
||||
M.resting = 0
|
||||
M.lying = 0
|
||||
M.update_canmove()
|
||||
combat_cooldown = 0
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
@@ -503,6 +513,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
|
||||
L.lastattacker = user.real_name
|
||||
L.lastattackerckey = user.ckey
|
||||
|
||||
L.adjustStaminaLoss(35) //because previously it took 5-6 hits to actually "incapacitate" someone for the purposes of the sleep inducement
|
||||
L.Knockdown(140)
|
||||
L.apply_effect(EFFECT_STUTTER, 7)
|
||||
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
point_return = 4
|
||||
atmosblock = TRUE
|
||||
armor = list("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
var/weakened
|
||||
|
||||
/obj/structure/blob/shield/scannerreport()
|
||||
if(atmosblock)
|
||||
@@ -25,10 +26,15 @@
|
||||
name = "weakened strong blob"
|
||||
desc = "A wall of twitching tendrils."
|
||||
atmosblock = FALSE
|
||||
armor = list("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
if(!weakened)
|
||||
armor = armor.setRating("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
weakened = TRUE
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
atmosblock = TRUE
|
||||
air_update_turf(1)
|
||||
if(weakened)
|
||||
armor = armor.setRating("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
weakened = FALSE
|
||||
air_update_turf(1)
|
||||
@@ -19,6 +19,14 @@
|
||||
user.SetKnockdown(0)
|
||||
user.reagents.add_reagent("changelingadrenaline", 10)
|
||||
user.reagents.add_reagent("changelinghaste", 2) //For a really quick burst of speed
|
||||
user.adjustStaminaLoss(-75)
|
||||
user.reagents.add_reagent("inaprovaline", 3) //let's give another chance to dumb fucks who forget to breathe
|
||||
user.adjustStaminaLoss(-150)
|
||||
user.stuttering = 0
|
||||
user.updatehealth()
|
||||
user.update_stamina()
|
||||
user.resting = 0
|
||||
user.lying = 0
|
||||
user.update_canmove()
|
||||
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
if (user.has_trait(CHANGELING_HIVEMIND_MUTE))
|
||||
to_chat(user, "<span class='warning'>The poison in the air hinders our ability to interact with the hivemind.</span>")
|
||||
return
|
||||
var/input = stripped_input(usr, "Please choose a message to transmit.", "Changeling Hivemind", "")
|
||||
var/input = html_decode(stripped_input(usr, "Please choose a message to transmit.", "Changeling Hivemind", ""))
|
||||
user.say(".g[input]")
|
||||
|
||||
/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(mob/user, is_respec)
|
||||
|
||||
@@ -44,12 +44,13 @@
|
||||
|
||||
/obj/item/clockwork/slab/cyborg //three scriptures, plus a spear and fabricator
|
||||
clockwork_desc = "A divine link to the Celestial Derelict, allowing for limited recital of scripture."
|
||||
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/ranged_ability/judicial_marker, /datum/clockwork_scripture/ranged_ability/linked_vanguard)
|
||||
quickbound = list(/datum/clockwork_scripture/ranged_ability/judicial_marker, /datum/clockwork_scripture/ranged_ability/linked_vanguard, \
|
||||
/datum/clockwork_scripture/create_object/stargazer)
|
||||
maximum_quickbound = 6 //we usually have one or two unique scriptures, so if ratvar is up let us bind one more
|
||||
actions_types = list()
|
||||
|
||||
/obj/item/clockwork/slab/cyborg/engineer //two scriptures, plus a fabricator
|
||||
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transmission)
|
||||
/obj/item/clockwork/slab/cyborg/engineer //three scriptures, plus a fabricator
|
||||
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transmission, /datum/clockwork_scripture/create_object/stargazer)
|
||||
|
||||
/obj/item/clockwork/slab/cyborg/medical //five scriptures, plus a spear
|
||||
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/ranged_ability/linked_vanguard, /datum/clockwork_scripture/ranged_ability/sentinels_compromise, \
|
||||
@@ -61,12 +62,12 @@
|
||||
/obj/item/clockwork/slab/cyborg/peacekeeper //two scriptures, plus a spear
|
||||
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/ranged_ability/hateful_manacles, /datum/clockwork_scripture/ranged_ability/judicial_marker)
|
||||
|
||||
/obj/item/clockwork/slab/cyborg/janitor //five scriptures, plus a fabricator
|
||||
/obj/item/clockwork/slab/cyborg/janitor //six scriptures, plus a fabricator
|
||||
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transgression, \
|
||||
/datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/mania_motor)
|
||||
/datum/clockwork_scripture/create_object/stargazer, /datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/mania_motor)
|
||||
|
||||
/obj/item/clockwork/slab/cyborg/service //five scriptures, plus xray vision
|
||||
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, \
|
||||
/obj/item/clockwork/slab/cyborg/service //six scriptures, plus xray vision
|
||||
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant,/datum/clockwork_scripture/create_object/stargazer, \
|
||||
/datum/clockwork_scripture/spatial_gateway, /datum/clockwork_scripture/create_object/clockwork_obelisk)
|
||||
|
||||
/obj/item/clockwork/slab/cyborg/miner //two scriptures, plus a spear and xray vision
|
||||
|
||||
@@ -2,6 +2,32 @@
|
||||
// DRIVERS //
|
||||
/////////////
|
||||
|
||||
//Stargazer: Creates a stargazer, a cheap power generator that utilizes starlight.
|
||||
/datum/clockwork_scripture/create_object/stargazer
|
||||
descname = "Generates Power From Starlight"
|
||||
name = "Stargazer"
|
||||
desc = "Forms a weak structure that generates power every second while within three tiles of starlight."
|
||||
invocations = list("Capture their inferior light for us!")
|
||||
channel_time = 50
|
||||
power_cost = 200
|
||||
object_path = /obj/structure/destructible/clockwork/stargazer
|
||||
creator_message = "<span class='brass'>You form a stargazer, which will generate power near starlight.</span>"
|
||||
observer_message = "<span class='warning'>A large lantern-shaped machine forms!</span>"
|
||||
usage_tip = "For obvious reasons, make sure to place this near a window or somewhere else that can see space!"
|
||||
tier = SCRIPTURE_DRIVER
|
||||
one_per_tile = TRUE
|
||||
primary_component = HIEROPHANT_ANSIBLE
|
||||
sort_priority = 1
|
||||
quickbind = TRUE
|
||||
quickbind_desc = "Creates a stargazer, which generates power when near starlight."
|
||||
|
||||
/datum/clockwork_scripture/create_object/stargazer/check_special_requirements()
|
||||
var/area/A = get_area(invoker)
|
||||
if(A.outdoors || A.map_name == "Space" || !A.blob_allowed)
|
||||
to_chat(invoker, "<span class='danger'>Stargazers can't be built off-station.</span>")
|
||||
return
|
||||
return ..()
|
||||
|
||||
|
||||
//Integration Cog: Creates an integration cog that can be inserted into APCs to passively siphon power.
|
||||
/datum/clockwork_scripture/create_object/integration_cog
|
||||
@@ -18,7 +44,7 @@
|
||||
tier = SCRIPTURE_DRIVER
|
||||
space_allowed = TRUE
|
||||
primary_component = HIEROPHANT_ANSIBLE
|
||||
sort_priority = 1
|
||||
sort_priority = 2
|
||||
important = TRUE
|
||||
quickbind = TRUE
|
||||
quickbind_desc = "Creates an integration cog, which can be used to siphon power from an open APC."
|
||||
@@ -39,7 +65,7 @@
|
||||
tier = SCRIPTURE_DRIVER
|
||||
one_per_tile = TRUE
|
||||
primary_component = HIEROPHANT_ANSIBLE
|
||||
sort_priority = 2
|
||||
sort_priority = 3
|
||||
quickbind = TRUE
|
||||
quickbind_desc = "Creates a Sigil of Transgression, which will briefly stun and slow the next non-Servant to cross it."
|
||||
|
||||
@@ -59,7 +85,7 @@
|
||||
tier = SCRIPTURE_DRIVER
|
||||
one_per_tile = TRUE
|
||||
primary_component = HIEROPHANT_ANSIBLE
|
||||
sort_priority = 3
|
||||
sort_priority = 4
|
||||
quickbind = TRUE
|
||||
quickbind_desc = "Creates a Sigil of Submission, which will convert non-Servants that remain on it."
|
||||
|
||||
@@ -76,7 +102,7 @@
|
||||
usage_tip = "The light can be used from up to two tiles away. Damage taken will GREATLY REDUCE the stun's duration."
|
||||
tier = SCRIPTURE_DRIVER
|
||||
primary_component = BELLIGERENT_EYE
|
||||
sort_priority = 4
|
||||
sort_priority = 5
|
||||
slab_overlay = "volt"
|
||||
ranged_type = /obj/effect/proc_holder/slab/kindle
|
||||
ranged_message = "<span class='brass'><i>You charge the clockwork slab with divine energy.</i>\n\
|
||||
@@ -100,7 +126,7 @@
|
||||
usage_tip = "The manacles are about as strong as zipties, and break when removed."
|
||||
tier = SCRIPTURE_DRIVER
|
||||
primary_component = BELLIGERENT_EYE
|
||||
sort_priority = 5
|
||||
sort_priority = 6
|
||||
ranged_type = /obj/effect/proc_holder/slab/hateful_manacles
|
||||
slab_overlay = "hateful_manacles"
|
||||
ranged_message = "<span class='neovgre_small'><i>You charge the clockwork slab with divine energy.</i>\n\
|
||||
@@ -124,7 +150,7 @@
|
||||
usage_tip = "You cannot reactivate Vanguard while still shielded by it."
|
||||
tier = SCRIPTURE_DRIVER
|
||||
primary_component = VANGUARD_COGWHEEL
|
||||
sort_priority = 6
|
||||
sort_priority = 7
|
||||
quickbind = TRUE
|
||||
quickbind_desc = "Allows you to temporarily have quickly regenerating stamina and absorb stuns. All stuns absorbed will affect you when disabled."
|
||||
|
||||
@@ -156,7 +182,7 @@
|
||||
usage_tip = "The Compromise is very fast to invoke, and will remove holy water from the target Servant."
|
||||
tier = SCRIPTURE_DRIVER
|
||||
primary_component = VANGUARD_COGWHEEL
|
||||
sort_priority = 7
|
||||
sort_priority = 8
|
||||
quickbind = TRUE
|
||||
quickbind_desc = "Allows you to convert a Servant's brute, burn, and oxygen damage to half toxin damage.<br><b>Click your slab to disable.</b>"
|
||||
slab_overlay = "compromise"
|
||||
@@ -180,7 +206,7 @@
|
||||
usage_tip = "This can't be used while on Reebe, for obvious reasons."
|
||||
tier = SCRIPTURE_DRIVER
|
||||
primary_component = GEIS_CAPACITOR
|
||||
sort_priority = 8
|
||||
sort_priority = 9
|
||||
important = TRUE
|
||||
quickbind = TRUE
|
||||
quickbind_desc = "Returns you to Reebe."
|
||||
@@ -238,7 +264,7 @@
|
||||
tier = SCRIPTURE_DRIVER
|
||||
space_allowed = TRUE
|
||||
primary_component = GEIS_CAPACITOR
|
||||
sort_priority = 9
|
||||
sort_priority = 10
|
||||
important = TRUE
|
||||
quickbind = TRUE
|
||||
quickbind_desc = "Creates a new Clockwork Slab."
|
||||
@@ -259,6 +285,6 @@
|
||||
tier = SCRIPTURE_DRIVER
|
||||
space_allowed = TRUE
|
||||
primary_component = GEIS_CAPACITOR
|
||||
sort_priority = 10
|
||||
sort_priority = 11
|
||||
quickbind = TRUE
|
||||
quickbind_desc = "Creates a pair of Wraith Spectacles, which grant true sight but cause gradual vision loss."
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
#define STARGAZER_RANGE 3 //How many tiles the stargazer can see out to
|
||||
#define STARGAZER_POWER 7 //How many watts will be produced per second when the stargazer sees starlight
|
||||
|
||||
//Stargazer: A very fragile but cheap generator that creates power from starlight.
|
||||
/obj/structure/destructible/clockwork/stargazer
|
||||
name = "stargazer"
|
||||
desc = "A large lantern-shaped machine made of thin brass. It looks fragile."
|
||||
clockwork_desc = "A lantern-shaped generator that produces power when near starlight."
|
||||
icon_state = "stargazer"
|
||||
unanchored_icon = "stargazer_unwrenched"
|
||||
max_integrity = 40
|
||||
construction_value = 5
|
||||
layer = WALL_OBJ_LAYER
|
||||
break_message = "<span class='warning'>The stargazer's fragile body shatters into pieces!</span>"
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
light_color = "#DAAA18"
|
||||
var/star_light_star_bright = FALSE //If this stargazer can see starlight
|
||||
|
||||
/obj/structure/destructible/clockwork/stargazer/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
|
||||
/obj/structure/destructible/clockwork/stargazer/Destroy()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
. = ..()
|
||||
|
||||
/obj/structure/destructible/clockwork/stargazer/examine(mob/user)
|
||||
..()
|
||||
if(is_servant_of_ratvar(user))
|
||||
to_chat(user, "<span class='nzcrentr_small'>Generates <b>[DisplayPower(STARGAZER_POWER)]</b> per second while viewing starlight within [STARGAZER_RANGE] tiles.</span>")
|
||||
if(star_light_star_bright)
|
||||
to_chat(user, "[is_servant_of_ratvar(user) ? "<span class='nzcrentr_small'>It can see starlight!</span>" : "It's shining brilliantly!"]")
|
||||
|
||||
/obj/structure/destructible/clockwork/stargazer/process()
|
||||
star_light_star_bright = check_starlight()
|
||||
if(star_light_star_bright)
|
||||
adjust_clockwork_power(STARGAZER_POWER)
|
||||
|
||||
/obj/structure/destructible/clockwork/stargazer/update_anchored(mob/living/user, damage)
|
||||
. = ..()
|
||||
star_light_star_bright = check_starlight()
|
||||
|
||||
/obj/structure/destructible/clockwork/stargazer/proc/check_starlight()
|
||||
var/old_status = star_light_star_bright
|
||||
var/has_starlight
|
||||
if(!anchored)
|
||||
has_starlight = FALSE
|
||||
else
|
||||
for(var/turf/T in view(3, src))
|
||||
if(isspaceturf(T))
|
||||
has_starlight = TRUE
|
||||
break
|
||||
if(has_starlight && anchored)
|
||||
var/area/A = get_area(src)
|
||||
if(A.outdoors || A.map_name == "Space" || !A.blob_allowed)
|
||||
has_starlight = FALSE
|
||||
if(old_status != has_starlight)
|
||||
if(has_starlight)
|
||||
visible_message("<span class='nzcrentr_small'>[src] hums and shines brilliantly!</span>")
|
||||
playsound(src, 'sound/machines/clockcult/stargazer_activate.ogg', 50, TRUE)
|
||||
add_overlay("stargazer_light")
|
||||
set_light(1.5, 5)
|
||||
else
|
||||
if(anchored) //We lost visibility somehow
|
||||
visible_message("<span class='danger'>[src] flickers, and falls dark.</span>")
|
||||
else
|
||||
visible_message("<span class='danger'>[src] whooshes quietly as it slides into a less bulky form.</span>")
|
||||
cut_overlays()
|
||||
set_light(0)
|
||||
return has_starlight
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
//Mech sensor: Activates when stepped on by a mech
|
||||
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech
|
||||
name = "mech sensor"
|
||||
desc = "A thin plate of brass, barely visible but clearly distinct."
|
||||
clockwork_desc = "A trigger that will activate when a mech controlled by a non-servant runs across it."
|
||||
max_integrity = 5
|
||||
icon_state = "pressure_sensor"
|
||||
alpha = 75
|
||||
|
||||
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech/Crossed(atom/movable/AM)
|
||||
|
||||
if(!istype(AM,/obj/mecha/))
|
||||
return
|
||||
|
||||
var/obj/mecha/M = AM
|
||||
if(M.occupant && is_servant_of_ratvar(M.occupant))
|
||||
return
|
||||
audible_message("<i>*click*</i>")
|
||||
playsound(src, 'sound/items/screwdriver2.ogg', 50, TRUE)
|
||||
activate()
|
||||
@@ -68,7 +68,14 @@
|
||||
mouse_opacity = MOUSE_OPACITY_OPAQUE //So players can interact with the tile it's on to pull them off
|
||||
buckle_mob(squirrel, TRUE)
|
||||
else
|
||||
visible_message("<span class='danger'>A massive brass spike erupts from the ground!</span>")
|
||||
var/obj/mecha/M = locate() in get_turf(src)
|
||||
if(M)
|
||||
M.take_damage(50,BRUTE,"melee")
|
||||
M.visible_message("<span class='danger'>A massive brass spike erupts from the ground, penetrating \the [M] and shattering the trap into pieces!</span>")
|
||||
addtimer(CALLBACK(src, .proc/take_damage, max_integrity), 1)
|
||||
else
|
||||
visible_message("<span class='danger'>A massive brass spike erupts from the ground!</span>")
|
||||
|
||||
playsound(src, 'sound/machines/clockcult/brass_skewer.ogg', 75, FALSE)
|
||||
icon_state = "[initial(icon_state)]_extended"
|
||||
density = TRUE //Skewers are one-use only
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/obj/structure/destructible/clockwork/trap/power_nullifier
|
||||
name = "power nullifier"
|
||||
desc = "A well hidden set of wires and connections."
|
||||
clockwork_desc = "When triggered, it sets off a 3x3 emp pulse with the center suffering a stronger pulse."
|
||||
icon_state = "electric_trap"
|
||||
break_message = "<span class='warning'>The power nullifier sparks, then slowly crumbles to debris!</span>"
|
||||
max_integrity = 40
|
||||
density = FALSE
|
||||
var/activated = FALSE
|
||||
|
||||
/obj/structure/destructible/clockwork/trap/power_nullifier/activate()
|
||||
if(!activated)
|
||||
activated = TRUE
|
||||
empulse(get_turf(src),1,1,TRUE)
|
||||
|
||||
/obj/structure/destructible/clockwork/trap/power_nullifier/emp_act(var/strength=1)
|
||||
activate()
|
||||
@@ -211,8 +211,6 @@
|
||||
else
|
||||
return FALSE
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/cult/spin2win
|
||||
name = "Geometer's Fury"
|
||||
desc = "You draw on the power of the sword's ancient runes, spinning it wildly around you as you become immune to most attacks."
|
||||
@@ -267,7 +265,6 @@
|
||||
return
|
||||
. = ..()
|
||||
|
||||
|
||||
/obj/item/clothing/head/culthood
|
||||
name = "ancient cultist hood"
|
||||
icon_state = "culthood"
|
||||
@@ -294,7 +291,6 @@
|
||||
heat_protection = CHEST|GROIN|LEGS|ARMS
|
||||
max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
|
||||
|
||||
|
||||
/obj/item/clothing/head/culthood/alt
|
||||
name = "cultist hood"
|
||||
desc = "An armored hood worn by the followers of Nar'Sie."
|
||||
@@ -313,7 +309,6 @@
|
||||
/obj/item/clothing/suit/cultrobes/alt/ghost
|
||||
item_flags = NODROP | DROPDEL
|
||||
|
||||
|
||||
/obj/item/clothing/head/magus
|
||||
name = "magus helm"
|
||||
icon_state = "magus"
|
||||
@@ -529,7 +524,12 @@
|
||||
"The shuttle's custodian was found washing the windows with their own blood.",
|
||||
"A shuttle engineer began screaming 'DEATH IS NOT THE END' and ripped out wires until an arc flash seared off her flesh.",
|
||||
"A shuttle inspector started laughing madly over the radio and then threw herself into an engine turbine.",
|
||||
"An assistant was found on the shuttle.",
|
||||
"A medical officer was found pouring out several blood bags onto the shuttle's instrument panels, before slitting both wrists open and screaming 'DEATH IS NOT THE END'.",
|
||||
"A fuel technician was found replacing the fuel with his blood.",
|
||||
"All the lights aboard the shuttle turned a crimson red before blowing out..",
|
||||
"The shuttle dispatcher was found dead with bloody symbols carved into their flesh.",
|
||||
"An engine turbine began leaking blood when it was powered on.",
|
||||
"The shuttle's transponder is emitting the encoded message 'FEAR THE OLD BLOOD' in lieu of its assigned identification signal.")
|
||||
var/message = pick_n_take(curses)
|
||||
message += " The shuttle will be delayed by three minutes."
|
||||
|
||||
@@ -58,18 +58,12 @@
|
||||
<A href='byond://?src=[REF(src)];send=1'>Send Signal</A><BR>
|
||||
<B>Frequency/Code</B> for signaler:<BR>
|
||||
Frequency:
|
||||
<A href='byond://?src=[REF(src)];freq=-10'>-</A>
|
||||
<A href='byond://?src=[REF(src)];freq=-2'>-</A>
|
||||
[format_frequency(src.frequency)]
|
||||
<A href='byond://?src=[REF(src)];freq=2'>+</A>
|
||||
<A href='byond://?src=[REF(src)];freq=10'>+</A><BR>
|
||||
<A href='byond://?src=[REF(src)];set=freq'>Set</A><BR>
|
||||
|
||||
Code:
|
||||
<A href='byond://?src=[REF(src)];code=-5'>-</A>
|
||||
<A href='byond://?src=[REF(src)];code=-1'>-</A>
|
||||
[src.code]
|
||||
<A href='byond://?src=[REF(src)];code=1'>+</A>
|
||||
<A href='byond://?src=[REF(src)];code=5'>+</A><BR>
|
||||
<A href='byond://?src=[REF(src)];set=code'>Set</A><BR>
|
||||
[t1]
|
||||
</TT>"}
|
||||
user << browse(dat, "window=radio")
|
||||
@@ -85,17 +79,23 @@ Code:
|
||||
onclose(usr, "radio")
|
||||
return
|
||||
|
||||
if (href_list["freq"])
|
||||
var/new_frequency = (frequency + text2num(href_list["freq"]))
|
||||
if(new_frequency < MIN_FREE_FREQ || new_frequency > MAX_FREE_FREQ)
|
||||
new_frequency = sanitize_frequency(new_frequency)
|
||||
set_frequency(new_frequency)
|
||||
if (href_list["set"])
|
||||
|
||||
if(href_list["code"])
|
||||
src.code += text2num(href_list["code"])
|
||||
src.code = round(src.code)
|
||||
src.code = min(100, src.code)
|
||||
src.code = max(1, src.code)
|
||||
if(href_list["set"] == "freq")
|
||||
var/new_freq = input(usr, "Input a new signalling frequency", "Remote Signaller Frequency", format_frequency(frequency)) as num|null
|
||||
if(!usr.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
new_freq = unformat_frequency(new_freq)
|
||||
new_freq = sanitize_frequency(new_freq, TRUE)
|
||||
set_frequency(new_freq)
|
||||
|
||||
if(href_list["set"] == "code")
|
||||
var/new_code = input(usr, "Input a new signalling code", "Remote Signaller Code", code) as num|null
|
||||
if(!usr.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
new_code = round(new_code)
|
||||
new_code = CLAMP(new_code, 1, 100)
|
||||
code = new_code
|
||||
|
||||
if(href_list["send"])
|
||||
spawn( 0 )
|
||||
@@ -206,4 +206,4 @@ Code:
|
||||
/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params)
|
||||
return
|
||||
/obj/item/assembly/signaler/cyborg/screwdriver_act(mob/living/user, obj/item/I)
|
||||
return
|
||||
return
|
||||
@@ -21,6 +21,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/last_ip
|
||||
var/last_id
|
||||
|
||||
//Cooldowns for saving/loading. These are four are all separate due to loading code calling these one after another
|
||||
var/saveprefcooldown
|
||||
var/loadprefcooldown
|
||||
var/savecharcooldown
|
||||
var/loadcharcooldown
|
||||
|
||||
//game-preferences
|
||||
var/lastchangelog = "" //Saved changlog filesize to detect if there was a change
|
||||
var/ooccolor = null
|
||||
|
||||
@@ -58,6 +58,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
/datum/preferences/proc/load_preferences()
|
||||
if(!path)
|
||||
return 0
|
||||
if(world.time < loadprefcooldown)
|
||||
if(istype(parent))
|
||||
to_chat(parent, "<span class='warning'>You're attempting to load your preferences a little too fast. Wait half a second, then try again.</span>")
|
||||
return 0
|
||||
loadprefcooldown = world.time + PREF_SAVELOAD_COOLDOWN
|
||||
if(!fexists(path))
|
||||
return 0
|
||||
|
||||
@@ -152,6 +157,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
/datum/preferences/proc/save_preferences()
|
||||
if(!path)
|
||||
return 0
|
||||
if(world.time < saveprefcooldown)
|
||||
if(istype(parent))
|
||||
to_chat(parent, "<span class='warning'>You're attempting to save your preferences a little too fast. Wait half a second, then try again.</span>")
|
||||
return 0
|
||||
saveprefcooldown = world.time + PREF_SAVELOAD_COOLDOWN
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S)
|
||||
return 0
|
||||
@@ -204,6 +214,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
/datum/preferences/proc/load_character(slot)
|
||||
if(!path)
|
||||
return 0
|
||||
if(world.time < loadcharcooldown) //This is before the check to see if the filepath exists to ensure that BYOND can't get hung up on read attempts when the hard drive is a little slow
|
||||
if(istype(parent))
|
||||
to_chat(parent, "<span class='warning'>You're attempting to load your character a little too fast. Wait half a second, then try again.</span>")
|
||||
return "SLOW THE FUCK DOWN" //the reason this isn't null is to make sure that people don't have their character slots overridden by random chars if they accidentally double-click a slot
|
||||
loadcharcooldown = world.time + PREF_SAVELOAD_COOLDOWN
|
||||
if(!fexists(path))
|
||||
return 0
|
||||
var/savefile/S = new /savefile(path)
|
||||
@@ -418,6 +433,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
/datum/preferences/proc/save_character()
|
||||
if(!path)
|
||||
return 0
|
||||
if(world.time < savecharcooldown)
|
||||
if(istype(parent))
|
||||
to_chat(parent, "<span class='warning'>You're attempting to save your character a little too fast. Wait half a second, then try again.</span>")
|
||||
return 0
|
||||
savecharcooldown = world.time + PREF_SAVELOAD_COOLDOWN
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S)
|
||||
return 0
|
||||
|
||||
@@ -177,9 +177,12 @@
|
||||
|
||||
/obj/item/clothing/neck/petcollar
|
||||
name = "pet collar"
|
||||
desc = "It's for pets. Though you probably could wear it yourself, you'd doubtless be the subject of ridicule."
|
||||
desc = "It's for pets. Though you probably could wear it yourself, you'd doubtless be the subject of ridicule. It seems to be made out of a polychromic material."
|
||||
icon_state = "petcollar"
|
||||
item_color = "petcollar"
|
||||
alternate_worn_icon = 'icons/mob/neck.dmi' //Because, as it appears, the item itself is normally not directly aware of its worn overlays, so this is about the easiest way, without adding a new var.
|
||||
hasprimary = TRUE
|
||||
primary_color = "#00BBBB"
|
||||
pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar
|
||||
var/tagname = null
|
||||
|
||||
@@ -187,21 +190,56 @@
|
||||
tagname = copytext(sanitize(input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot") as null|text),1,MAX_NAME_LEN)
|
||||
name = "[initial(name)] - [tagname]"
|
||||
|
||||
/obj/item/clothing/neck/petcollar/worn_overlays(isinhands, icon_file)
|
||||
. = ..()
|
||||
if(hasprimary | hassecondary | hastertiary)
|
||||
if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
|
||||
if(hasprimary) //checks if overlays are enabled
|
||||
var/mutable_appearance/primary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-primary") //automagical sprite selection
|
||||
primary_worn.color = primary_color //colors the overlay
|
||||
. += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite
|
||||
if(hassecondary)
|
||||
var/mutable_appearance/secondary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-secondary")
|
||||
secondary_worn.color = secondary_color
|
||||
. += secondary_worn
|
||||
if(hastertiary)
|
||||
var/mutable_appearance/tertiary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-tertiary")
|
||||
tertiary_worn.color = tertiary_color
|
||||
. += tertiary_worn
|
||||
|
||||
/obj/item/clothing/neck/petcollar/leather
|
||||
name = "leather pet collar"
|
||||
icon_state = "leathercollar"
|
||||
item_color = "leathercollar"
|
||||
|
||||
hasprimary = TRUE
|
||||
hassecondary = TRUE
|
||||
primary_color = "#222222"
|
||||
secondary_color = "#888888"
|
||||
|
||||
/obj/item/clothing/neck/petcollar/choker
|
||||
desc = "Quite fashionable... if you're somebody who's just read their first BDSM-themed erotica novel."
|
||||
name = "choker"
|
||||
icon_state = "choker"
|
||||
item_color = "choker"
|
||||
|
||||
hasprimary = TRUE
|
||||
primary_color = "#222222"
|
||||
|
||||
/obj/item/clothing/neck/petcollar/locked
|
||||
name = "locked collar"
|
||||
desc = "A collar that has a small lock on it to keep it from being removed."
|
||||
pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar/locked
|
||||
var/lock = FALSE
|
||||
|
||||
/obj/item/clothing/neck/petcollar/locked/attackby(obj/item/key/collar, mob/user, params)
|
||||
if(lock != FALSE)
|
||||
to_chat(user, "<span class='warning'>With a click the collar unlocks!</span>")
|
||||
lock = FALSE
|
||||
item_flags = NONE
|
||||
else
|
||||
to_chat(user, "<span class='warning'>With a click the collar locks!</span>")
|
||||
lock = TRUE
|
||||
item_flags = NODROP
|
||||
/obj/item/clothing/neck/petcollar/locked/attackby(obj/item/K, mob/user, params)
|
||||
if(istype(K, /obj/item/key/collar))
|
||||
if(lock != FALSE)
|
||||
to_chat(user, "<span class='warning'>With a click the collar unlocks!</span>")
|
||||
lock = FALSE
|
||||
else
|
||||
to_chat(user, "<span class='warning'>With a click the collar locks!</span>")
|
||||
lock = TRUE
|
||||
return
|
||||
|
||||
/obj/item/clothing/neck/petcollar/locked/attack_hand(mob/user)
|
||||
@@ -210,6 +248,25 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/clothing/neck/petcollar/locked/leather
|
||||
name = "leather pet collar"
|
||||
icon_state = "leathercollar"
|
||||
item_color = "leathercollar"
|
||||
|
||||
hasprimary = TRUE
|
||||
hassecondary = TRUE
|
||||
primary_color = "#222222"
|
||||
secondary_color = "#888888"
|
||||
|
||||
/obj/item/clothing/neck/petcollar/locked/choker
|
||||
name = "choker"
|
||||
desc = "Quite fashionable... if you're somebody who's just read their first BDSM-themed erotica novel."
|
||||
icon_state = "choker"
|
||||
item_color = "choker"
|
||||
|
||||
hasprimary = TRUE
|
||||
primary_color = "#222222"
|
||||
|
||||
/obj/item/key/collar
|
||||
name = "Collar Key"
|
||||
desc = "A key for a tiny lock on a collar or bag."
|
||||
|
||||
@@ -41,12 +41,6 @@
|
||||
if(tauric == TRUE)
|
||||
center = TRUE
|
||||
dimension_x = 64
|
||||
/*
|
||||
else if(H.dna.features["taur"] == "Horse" || "Cow")
|
||||
taurmode = HOOF_TAURIC //tweak this for when the exotics get their own suits, if ever.
|
||||
center = TRUE
|
||||
dimension_x = 64
|
||||
*/
|
||||
else
|
||||
taurmode = NOT_TAURIC
|
||||
if(tauric == TRUE)
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
item_state = "armoralt"
|
||||
blood_overlay_type = "armor"
|
||||
dog_fashion = /datum/dog_fashion/back
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/alt
|
||||
desc = "A Type I armored vest that provides decent protection against most types of damage."
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
CAT_PIZZA,
|
||||
CAT_SALAD,
|
||||
CAT_SANDWICH,
|
||||
CAT_SUSHI,
|
||||
CAT_SOUP,
|
||||
CAT_SPAGHETTI),
|
||||
CAT_CLOTHING) //Clothing subcategories
|
||||
|
||||
@@ -189,6 +189,16 @@
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/Firebot
|
||||
name = "Firebot"
|
||||
result = /mob/living/simple_animal/bot/firebot
|
||||
reqs = list(/obj/item/extinguisher = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/clothing/head/hardhat/red = 1)
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
|
||||
name = "Pneumatic Cannon"
|
||||
result = /obj/item/pneumatic_cannon/ghetto
|
||||
@@ -435,6 +445,15 @@
|
||||
result = /obj/item/extendohand
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bluespacehonker
|
||||
name = "Bluespace Bike horn"
|
||||
result = /obj/item/bikehorn/bluespacehonker
|
||||
time = 10
|
||||
reqs = list(/obj/item/stack/ore/bluespace_crystal = 1,
|
||||
/obj/item/toy/crayon/blue = 1,
|
||||
/obj/item/bikehorn = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/chemical_payload
|
||||
name = "Chemical Payload (C4)"
|
||||
result = /obj/item/bombcore/chemical
|
||||
@@ -686,6 +705,16 @@
|
||||
reqs = list(/obj/item/bedsheet = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/briefcase
|
||||
name = "Hand made Briefcase"
|
||||
result = /obj/item/storage/briefcase/crafted
|
||||
time = 35
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/stack/sheet/cardboard = 1,
|
||||
/obj/item/stack/sheet/cloth = 2,
|
||||
/obj/item/stack/sheet/leather = 5)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/aitater
|
||||
name = "intelliTater"
|
||||
result = /obj/item/aicard/aitater
|
||||
@@ -706,6 +735,17 @@
|
||||
name = "Improvised Jetpack"
|
||||
result = /obj/item/tank/jetpack/improvised
|
||||
time = 30
|
||||
reqs = list(/obj/item/tank/internals/oxygen/red = 2, /obj/item/extinguisher = 1, /obj/item/pipe = 3, /obj/item/stack/cable_coil = 30)//red oxygen tank so it looks right
|
||||
reqs = list(/obj/item/tank/internals/oxygen = 2, /obj/item/extinguisher = 1, /obj/item/pipe = 3, /obj/item/stack/cable_coil = 30)//red oxygen tank so it looks right
|
||||
category = CAT_MISC
|
||||
tools = list(TOOL_WRENCH, TOOL_WELDER, TOOL_WIRECUTTER)
|
||||
|
||||
/datum/crafting_recipe/goldenbox
|
||||
name = "Gold Plated Toolbox"
|
||||
result = /obj/item/storage/toolbox/gold_fake
|
||||
reqs = list(/obj/item/stack/sheet/cardboard = 1, //so we dont null items in crafting
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/sheet/mineral/gold = 1,
|
||||
/obj/item/stock_parts/cell = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
@@ -48,8 +48,6 @@
|
||||
if(!shuttle_spawned)
|
||||
spawn_shuttle()
|
||||
|
||||
|
||||
|
||||
/datum/round_event/pirates/start()
|
||||
if(!paid_off && !shuttle_spawned)
|
||||
spawn_shuttle()
|
||||
@@ -150,7 +148,6 @@
|
||||
to_chat(user,"<span class='notice'>You retrieve the siphoned credits!</span>")
|
||||
credits_stored = 0
|
||||
|
||||
|
||||
/obj/machinery/shuttle_scrambler/proc/send_notification()
|
||||
priority_announce("Data theft signal detected, source registered on local gps units.")
|
||||
|
||||
@@ -222,8 +219,7 @@
|
||||
suit_type = /obj/item/clothing/suit/space
|
||||
helmet_type = /obj/item/clothing/head/helmet/space
|
||||
mask_type = /obj/item/clothing/mask/breath
|
||||
storage_type = /obj/item/tank/internals/oxygen
|
||||
|
||||
storage_type = /obj/item/tank/jetpack/void
|
||||
|
||||
/obj/machinery/loot_locator
|
||||
name = "Booty Locator"
|
||||
@@ -454,4 +450,4 @@
|
||||
|
||||
/datum/export/pirate/cash/get_amount(obj/O)
|
||||
var/obj/item/stack/spacecash/C = O
|
||||
return ..() * C.amount * C.value
|
||||
return ..() * C.amount * C.value
|
||||
|
||||
@@ -47,7 +47,16 @@
|
||||
"hair_dye",
|
||||
"sugar",
|
||||
"white_glitter",
|
||||
"growthserum"
|
||||
"growthserum",
|
||||
"cornoil",
|
||||
"uranium",
|
||||
"carpet",
|
||||
"firefighting_foam",
|
||||
"semen",
|
||||
"femcum",
|
||||
"tearjuice",
|
||||
"strange_reagent"
|
||||
|
||||
)
|
||||
//needs to be chemid unit checked at some point
|
||||
|
||||
@@ -58,8 +67,10 @@
|
||||
endWhen = rand(120, 180)
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines)
|
||||
var/turf/T = get_turf(temp_vent)
|
||||
if(T && is_station_level(T.z) && !temp_vent.welded)
|
||||
var/area/A = T.loc
|
||||
if(T && is_station_level(T.z) && !temp_vent.welded && !A.safe)
|
||||
vents += temp_vent
|
||||
|
||||
if(!vents.len)
|
||||
return kill()
|
||||
|
||||
@@ -87,8 +98,8 @@
|
||||
else
|
||||
R.add_reagent(pick(saferChems), reagentsAmount)
|
||||
|
||||
var/datum/effect_system/smoke_spread/chem/C = new
|
||||
C.set_up(R,16,T,TRUE)
|
||||
var/datum/effect_system/smoke_spread/chem/smoke_machine/C = new
|
||||
C.set_up(R,16,1,T)
|
||||
C.start()
|
||||
playsound(T, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
|
||||
|
||||
@@ -316,7 +316,9 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.unconscious {color: #0000ff; font-weight: bold;}
|
||||
.suicide {color: #ff5050; font-style: italic;}
|
||||
.green {color: #03ff39;}
|
||||
.nicegreen {color: #14a833;}
|
||||
.nicegreen {color: #14a833;}
|
||||
.userlove {color: #FF1493; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #ff6dbc;}
|
||||
.love {color: #ff006a; font-style: italic; text-shadow: 0 0 6px #ff6d6d;}
|
||||
.shadowling {color: #3b2769;}
|
||||
.cult {color: #960000;}
|
||||
|
||||
|
||||
@@ -643,6 +643,11 @@
|
||||
icon_state = "setup_small_pda"
|
||||
desc = "It's a case, for building small electronics with. This one resembles a PDA."
|
||||
|
||||
/obj/item/electronic_assembly/dildo
|
||||
name = "type-g electronic assembly"
|
||||
icon_state = "setup_dildo_medium"
|
||||
desc = "It's a case, for building small electronics with. This one has a phallic design."
|
||||
|
||||
/obj/item/electronic_assembly/small
|
||||
name = "electronic device"
|
||||
icon_state = "setup_device"
|
||||
@@ -674,6 +679,11 @@
|
||||
icon_state = "setup_device_box"
|
||||
desc = "It's a case, for building tiny-sized electronics with. This one has a boxy design."
|
||||
|
||||
/obj/item/electronic_assembly/small/dildo
|
||||
name = "type-f electronic device"
|
||||
icon_state = "setup_dildo_small"
|
||||
desc = "It's a case, for building tiny-sized electronics with. This one has a phallic design."
|
||||
|
||||
/obj/item/electronic_assembly/medium
|
||||
name = "electronic mechanism"
|
||||
icon_state = "setup_medium"
|
||||
@@ -714,6 +724,12 @@
|
||||
icon_state = "setup_medium_radio"
|
||||
desc = "It's a case, for building medium-sized electronics with. This one resembles an old radio."
|
||||
|
||||
/obj/item/electronic_assembly/medium/dildo
|
||||
name = "type-g electronic mechanism"
|
||||
icon_state = "setup_dildo_large"
|
||||
desc = "It's a case, for building medium-sized electronics with. This one has a phallic design."
|
||||
|
||||
|
||||
/obj/item/electronic_assembly/large
|
||||
name = "electronic machine"
|
||||
icon_state = "setup_large"
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
"green" = COLOR_ASSEMBLY_GREEN,
|
||||
"light blue" = COLOR_ASSEMBLY_LBLUE,
|
||||
"blue" = COLOR_ASSEMBLY_BLUE,
|
||||
"purple" = COLOR_ASSEMBLY_PURPLE
|
||||
"purple" = COLOR_ASSEMBLY_PURPLE,
|
||||
"pink" = COLOR_ASSEMBLY_PINK,
|
||||
"custom" = COLOR_ASSEMBLY_WHITE
|
||||
)
|
||||
|
||||
/obj/item/integrated_electronics/detailer/Initialize()
|
||||
@@ -43,6 +45,9 @@
|
||||
if(!color_list[color_choice])
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
detail_color = color_list[color_choice]
|
||||
return
|
||||
if(color_choice == "custom")
|
||||
detail_color = input(user,"","Choose Color",detail_color) as color|null
|
||||
else
|
||||
detail_color = color_list[color_choice]
|
||||
update_icon()
|
||||
|
||||
@@ -142,13 +142,14 @@
|
||||
|
||||
/obj/item/integrated_circuit/converter/concatenator
|
||||
name = "concatenator"
|
||||
desc = "This can join up to 8 strings together to get one big string."
|
||||
desc = "This can join up to 8 strings together to get a string with a maximum of 512 characters."
|
||||
complexity = 4
|
||||
inputs = list()
|
||||
outputs = list("result" = IC_PINTYPE_STRING)
|
||||
activators = list("concatenate" = IC_PINTYPE_PULSE_IN, "on concatenated" = IC_PINTYPE_PULSE_OUT)
|
||||
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
|
||||
var/number_of_pins = 8
|
||||
var/max_string_length = 512
|
||||
|
||||
/obj/item/integrated_circuit/converter/concatenator/Initialize()
|
||||
for(var/i = 1 to number_of_pins)
|
||||
@@ -157,26 +158,46 @@
|
||||
|
||||
/obj/item/integrated_circuit/converter/concatenator/do_work()
|
||||
var/result = null
|
||||
var/spamprotection
|
||||
for(var/k in 1 to inputs.len)
|
||||
var/I = get_pin_data(IC_INPUT, k)
|
||||
if(!isnull(I))
|
||||
if((result ? length(result) : 0) + length(I) > max_string_length)
|
||||
spamprotection = (result ? length(result) : 0) + length(I)
|
||||
break
|
||||
result = result + I
|
||||
|
||||
if(spamprotection >= max_string_length*1.75 && assembly)
|
||||
if(assembly.fingerprintslast)
|
||||
var/mob/M = get_mob_by_key(assembly.fingerprintslast)
|
||||
var/more = ""
|
||||
if(M)
|
||||
more = "[ADMIN_LOOKUPFLW(M)] "
|
||||
message_admins("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. Assembly last touched by [more ? more : assembly.fingerprintslast].")
|
||||
investigate_log("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. Assembly last touched by [assembly.fingerprintslast].", INVESTIGATE_CIRCUIT)
|
||||
else
|
||||
message_admins("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. No associated key.")
|
||||
investigate_log("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. No associated key.", INVESTIGATE_CIRCUIT)
|
||||
qdel(assembly)
|
||||
return
|
||||
|
||||
set_pin_data(IC_OUTPUT, 1, result)
|
||||
push_data()
|
||||
activate_pin(2)
|
||||
|
||||
/obj/item/integrated_circuit/converter/concatenator/small
|
||||
name = "small concatenator"
|
||||
desc = "This can join up to 4 strings together to get one big string."
|
||||
desc = "This can join up to 4 strings together to get a string with a maximum of 256 characters."
|
||||
complexity = 2
|
||||
number_of_pins = 4
|
||||
max_string_length = 256
|
||||
|
||||
/obj/item/integrated_circuit/converter/concatenator/large
|
||||
name = "large concatenator"
|
||||
desc = "This can join up to 16 strings together to get one very big string."
|
||||
desc = "This can join up to 16 strings together to get a string with a maximum of 1024 characters."
|
||||
complexity = 6
|
||||
number_of_pins = 16
|
||||
max_string_length = 1024
|
||||
|
||||
/obj/item/integrated_circuit/converter/separator
|
||||
name = "separator"
|
||||
|
||||
@@ -1,139 +1,6 @@
|
||||
/obj/item/integrated_circuit/manipulation
|
||||
category_text = "Manipulation"
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/weapon_firing
|
||||
name = "weapon firing mechanism"
|
||||
desc = "This somewhat complicated system allows one to slot in a gun, direct it towards a position, and remotely fire it."
|
||||
extended_desc = "The firing mechanism can slot in any energy weapon. \
|
||||
The first and second inputs need to be numbers which correspond to coordinates for the gun to fire at relative to the machine itself. \
|
||||
The 'fire' activator will cause the mechanism to attempt to fire the weapon at the coordinates, if possible. Mode will switch between \
|
||||
lethal (TRUE) or stun (FALSE) modes. It uses the internal battery of the weapon itself, not the assembly. If you wish to fire the gun while the circuit is in \
|
||||
hand, you will need to use an assembly that is a gun."
|
||||
complexity = 20
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
size = 3
|
||||
inputs = list(
|
||||
"target X rel" = IC_PINTYPE_NUMBER,
|
||||
"target Y rel" = IC_PINTYPE_NUMBER,
|
||||
"mode" = IC_PINTYPE_BOOLEAN
|
||||
)
|
||||
outputs = list("reference to gun" = IC_PINTYPE_REF)
|
||||
activators = list(
|
||||
"fire" = IC_PINTYPE_PULSE_IN
|
||||
|
||||
)
|
||||
var/obj/item/gun/energy/installed_gun = null
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
action_flags = IC_ACTION_COMBAT
|
||||
power_draw_per_use = 0
|
||||
ext_cooldown = 1
|
||||
var/mode = FALSE
|
||||
|
||||
var/stun_projectile = null //stun mode projectile type
|
||||
var/stun_projectile_sound
|
||||
var/lethal_projectile = null //lethal mode projectile type
|
||||
var/lethal_projectile_sound
|
||||
|
||||
demands_object_input = TRUE // You can put stuff in once the circuit is in assembly,passed down from additem and handled by attackby()
|
||||
|
||||
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/weapon_firing/Destroy()
|
||||
qdel(installed_gun)
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/weapon_firing/attackby(var/obj/O, var/mob/user)
|
||||
if(istype(O, /obj/item/gun/energy))
|
||||
var/obj/item/gun/gun = O
|
||||
if(installed_gun)
|
||||
to_chat(user, "<span class='warning'>There's already a weapon installed.</span>")
|
||||
return
|
||||
user.transferItemToLoc(gun,src)
|
||||
installed_gun = gun
|
||||
var/list/gun_properties = gun.get_turret_properties()
|
||||
to_chat(user, "<span class='notice'>You slide \the [gun] into the firing mechanism.</span>")
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
stun_projectile = gun_properties["stun_projectile"]
|
||||
stun_projectile_sound = gun_properties["stun_projectile_sound"]
|
||||
lethal_projectile = gun_properties["lethal_projectile"]
|
||||
lethal_projectile_sound = gun_properties["lethal_projectile_sound"]
|
||||
if(gun_properties["shot_delay"])
|
||||
cooldown_per_use = gun_properties["shot_delay"]*10
|
||||
if(cooldown_per_use<30)
|
||||
cooldown_per_use = 30
|
||||
if(gun_properties["reqpower"])
|
||||
power_draw_per_use = gun_properties["reqpower"]
|
||||
set_pin_data(IC_OUTPUT, 1, WEAKREF(installed_gun))
|
||||
push_data()
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/weapon_firing/attack_self(var/mob/user)
|
||||
if(installed_gun)
|
||||
installed_gun.forceMove(drop_location())
|
||||
to_chat(user, "<span class='notice'>You slide \the [installed_gun] out of the firing mechanism.</span>")
|
||||
size = initial(size)
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
installed_gun = null
|
||||
set_pin_data(IC_OUTPUT, 1, WEAKREF(null))
|
||||
push_data()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>There's no weapon to remove from the mechanism.</span>")
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/weapon_firing/do_work()
|
||||
if(!installed_gun || !installed_gun.handle_pins())
|
||||
return
|
||||
if(!isturf(assembly.loc) && !(assembly.can_fire_equipped && ishuman(assembly.loc)))
|
||||
return
|
||||
set_pin_data(IC_OUTPUT, 1, WEAKREF(installed_gun))
|
||||
push_data()
|
||||
var/datum/integrated_io/xo = inputs[1]
|
||||
var/datum/integrated_io/yo = inputs[2]
|
||||
var/datum/integrated_io/mode1 = inputs[3]
|
||||
|
||||
mode = mode1.data
|
||||
if(assembly)
|
||||
if(isnum(xo.data))
|
||||
xo.data = round(xo.data, 1)
|
||||
if(isnum(yo.data))
|
||||
yo.data = round(yo.data, 1)
|
||||
|
||||
var/turf/T = get_turf(assembly)
|
||||
var/target_x = CLAMP(T.x + xo.data, 0, world.maxx)
|
||||
var/target_y = CLAMP(T.y + yo.data, 0, world.maxy)
|
||||
|
||||
assembly.visible_message("<span class='danger'>[assembly] fires [installed_gun]!</span>")
|
||||
shootAt(locate(target_x, target_y, T.z))
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/weapon_firing/proc/shootAt(turf/target)
|
||||
var/turf/T = get_turf(src)
|
||||
var/turf/U = target
|
||||
if(!istype(T) || !istype(U))
|
||||
return
|
||||
if(!installed_gun.cell)
|
||||
return
|
||||
if(!installed_gun.cell.charge)
|
||||
return
|
||||
var/obj/item/ammo_casing/energy/shot = installed_gun.ammo_type[mode?2:1]
|
||||
if(installed_gun.cell.charge < shot.e_cost)
|
||||
return
|
||||
if(!shot)
|
||||
return
|
||||
update_icon()
|
||||
var/obj/item/projectile/A
|
||||
if(!mode)
|
||||
A = new stun_projectile(T)
|
||||
playsound(loc, stun_projectile_sound, 75, 1)
|
||||
else
|
||||
A = new lethal_projectile(T)
|
||||
playsound(loc, lethal_projectile_sound, 75, 1)
|
||||
installed_gun.cell.use(shot.e_cost)
|
||||
//Shooting Code:
|
||||
A.preparePixelProjectile(target, src)
|
||||
A.fire()
|
||||
log_attack("[assembly] [REF(assembly)] has fired [installed_gun].")
|
||||
return A
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/locomotion
|
||||
name = "locomotion circuit"
|
||||
desc = "This allows a machine to move in a given direction."
|
||||
@@ -171,80 +38,6 @@
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/grenade
|
||||
name = "grenade primer"
|
||||
desc = "This circuit comes with the ability to attach most types of grenades and prime them at will."
|
||||
extended_desc = "The time between priming and detonation is limited to between 1 to 12 seconds, but is optional. \
|
||||
If the input is not set, not a number, or a number less than 1, the grenade's built-in timing will be used. \
|
||||
Beware: Once primed, there is no aborting the process!"
|
||||
icon_state = "grenade"
|
||||
complexity = 30
|
||||
cooldown_per_use = 10
|
||||
inputs = list("detonation time" = IC_PINTYPE_NUMBER)
|
||||
outputs = list()
|
||||
activators = list("prime grenade" = IC_PINTYPE_PULSE_IN)
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
action_flags = IC_ACTION_COMBAT
|
||||
var/obj/item/grenade/attached_grenade
|
||||
var/pre_attached_grenade_type
|
||||
demands_object_input = TRUE // You can put stuff in once the circuit is in assembly,passed down from additem and handled by attackby()
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/grenade/Initialize()
|
||||
. = ..()
|
||||
if(pre_attached_grenade_type)
|
||||
var/grenade = new pre_attached_grenade_type(src)
|
||||
attach_grenade(grenade)
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/grenade/Destroy()
|
||||
if(attached_grenade && !attached_grenade.active)
|
||||
attached_grenade.forceMove(loc)
|
||||
detach_grenade()
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/grenade/attackby(var/obj/item/grenade/G, var/mob/user)
|
||||
if(istype(G))
|
||||
if(attached_grenade)
|
||||
to_chat(user, "<span class='warning'>There is already a grenade attached!</span>")
|
||||
else if(user.transferItemToLoc(G,src))
|
||||
user.visible_message("<span class='warning'>\The [user] attaches \a [G] to \the [src]!</span>", "<span class='notice'>You attach \the [G] to \the [src].</span>")
|
||||
attach_grenade(G)
|
||||
G.forceMove(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/grenade/attack_self(var/mob/user)
|
||||
if(attached_grenade)
|
||||
user.visible_message("<span class='warning'>\The [user] removes \an [attached_grenade] from \the [src]!</span>", "<span class='notice'>You remove \the [attached_grenade] from \the [src].</span>")
|
||||
user.put_in_hands(attached_grenade)
|
||||
detach_grenade()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/grenade/do_work()
|
||||
if(attached_grenade && !attached_grenade.active)
|
||||
var/datum/integrated_io/detonation_time = inputs[1]
|
||||
var/dt
|
||||
if(isnum(detonation_time.data) && detonation_time.data > 0)
|
||||
dt = CLAMP(detonation_time.data, 1, 12)*10
|
||||
else
|
||||
dt = 15
|
||||
addtimer(CALLBACK(attached_grenade, /obj/item/grenade.proc/prime), dt)
|
||||
var/atom/holder = loc
|
||||
message_admins("activated a grenade assembly. Last touches: Assembly: [holder.fingerprintslast] Circuit: [fingerprintslast] Grenade: [attached_grenade.fingerprintslast]")
|
||||
|
||||
// These procs do not relocate the grenade, that's the callers responsibility
|
||||
/obj/item/integrated_circuit/manipulation/grenade/proc/attach_grenade(var/obj/item/grenade/G)
|
||||
attached_grenade = G
|
||||
G.forceMove(src)
|
||||
desc += " \An [attached_grenade] is attached to it!"
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/grenade/proc/detach_grenade()
|
||||
if(!attached_grenade)
|
||||
return
|
||||
attached_grenade.forceMove(drop_location())
|
||||
attached_grenade = null
|
||||
desc = initial(desc)
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/plant_module
|
||||
name = "plant manipulation module"
|
||||
desc = "Used to uproot weeds and harvest/plant trays."
|
||||
@@ -478,7 +271,7 @@
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/thrower
|
||||
name = "thrower"
|
||||
desc = "A compact launcher to throw things from inside or nearby tiles."
|
||||
desc = "A compact launcher to throw things from inside or nearby tiles at a low enough velocity not to harm someone."
|
||||
extended_desc = "The first and second inputs need to be numbers which correspond to the coordinates to throw objects at relative to the machine itself. \
|
||||
The 'fire' activator will cause the mechanism to attempt to throw objects at the coordinates, if possible. Note that the \
|
||||
projectile needs to be inside the machine, or on an adjacent tile, and must be medium sized or smaller. The assembly \
|
||||
@@ -544,7 +337,7 @@
|
||||
A.embedding = list("embed_chance" = 0)
|
||||
//throw it
|
||||
assembly.visible_message("<span class='danger'>[assembly] has thrown [A]!</span>")
|
||||
log_attack("[assembly] [REF(assembly)] has thrown [A].")
|
||||
log_attack("[assembly] [REF(assembly)] has thrown [A] with non-lethal force.")
|
||||
A.forceMove(drop_location())
|
||||
A.throw_at(locate(x_abs, y_abs, T.z), range, 3, , , , CALLBACK(src, .proc/post_throw, A))
|
||||
|
||||
@@ -813,4 +606,7 @@
|
||||
set_pin_data(IC_OUTPUT, 1, assembly.detail_color)
|
||||
push_data()
|
||||
|
||||
activate_pin(3)
|
||||
activate_pin(3)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -548,9 +548,12 @@
|
||||
desc = "Unlike most electronics, creating smoke is completely intentional."
|
||||
icon_state = "smoke"
|
||||
extended_desc = "This smoke generator creates clouds of smoke on command. It can also hold liquids inside, which will go \
|
||||
into the smoke clouds when activated. The reagents are consumed when the smoke is made."
|
||||
into the smoke clouds when activated. The reagents are consumed when the smoke is made. Requires at least 10 units of reagents to generate smoke."
|
||||
ext_cooldown = 1
|
||||
|
||||
volume = 100
|
||||
container_type = OPENCONTAINER
|
||||
|
||||
complexity = 20
|
||||
cooldown_per_use = 1 SECONDS
|
||||
inputs = list()
|
||||
@@ -573,6 +576,7 @@
|
||||
if(changetype == ADD_REAGENT)
|
||||
notified = FALSE
|
||||
push_vol()
|
||||
|
||||
/obj/item/integrated_circuit/reagent/smoke/do_work(ord)
|
||||
switch(ord)
|
||||
if(1)
|
||||
@@ -598,9 +602,10 @@
|
||||
name = "integrated extinguisher"
|
||||
desc = "This circuit sprays any of its contents out like an extinguisher."
|
||||
icon_state = "injector"
|
||||
extended_desc = "This circuit can hold up to 30 units of any given chemicals. On each use, it sprays these reagents like a fire extinguisher."
|
||||
extended_desc = "This circuit can hold up to 30 units of any given chemicals. On each use, it sprays these reagents like a fire extinguisher. Requires at least 10 units of reagents to work."
|
||||
|
||||
volume = 30
|
||||
container_type = OPENCONTAINER
|
||||
|
||||
complexity = 20
|
||||
cooldown_per_use = 6 SECONDS
|
||||
@@ -631,7 +636,7 @@
|
||||
/obj/item/integrated_circuit/reagent/extinguisher/do_work()
|
||||
//Check if enough volume
|
||||
set_pin_data(IC_OUTPUT, 1, reagents.total_volume)
|
||||
if(!reagents || reagents.total_volume < 5 || busy)
|
||||
if(!reagents || reagents.total_volume < IC_SMOKE_REAGENTS_MINIMUM_UNITS || busy)
|
||||
push_data()
|
||||
activate_pin(3)
|
||||
return
|
||||
|
||||
@@ -0,0 +1,343 @@
|
||||
/obj/item/integrated_circuit/weaponized
|
||||
category_text = "Weaponized"
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/weapon_firing
|
||||
name = "weapon firing mechanism"
|
||||
desc = "This somewhat complicated system allows one to slot in a gun, direct it towards a position, and remotely fire it."
|
||||
extended_desc = "The firing mechanism can slot in any energy weapon. \
|
||||
The first and second inputs need to be numbers which correspond to coordinates for the gun to fire at relative to the machine itself. \
|
||||
The 'fire' activator will cause the mechanism to attempt to fire the weapon at the coordinates, if possible. Mode will switch between \
|
||||
lethal (TRUE) or stun (FALSE) modes. It uses the internal battery of the weapon itself, not the assembly. If you wish to fire the gun while the circuit is in \
|
||||
hand, you will need to use an assembly that is a gun."
|
||||
complexity = 20
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
size = 3
|
||||
inputs = list(
|
||||
"target X rel" = IC_PINTYPE_NUMBER,
|
||||
"target Y rel" = IC_PINTYPE_NUMBER,
|
||||
"mode" = IC_PINTYPE_BOOLEAN
|
||||
)
|
||||
outputs = list("reference to gun" = IC_PINTYPE_REF)
|
||||
activators = list(
|
||||
"fire" = IC_PINTYPE_PULSE_IN
|
||||
|
||||
)
|
||||
var/obj/item/gun/energy/installed_gun = null
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
action_flags = IC_ACTION_COMBAT
|
||||
power_draw_per_use = 0
|
||||
ext_cooldown = 1
|
||||
var/mode = FALSE
|
||||
|
||||
var/stun_projectile = null //stun mode projectile type
|
||||
var/stun_projectile_sound
|
||||
var/lethal_projectile = null //lethal mode projectile type
|
||||
var/lethal_projectile_sound
|
||||
|
||||
demands_object_input = TRUE // You can put stuff in once the circuit is in assembly,passed down from additem and handled by attackby()
|
||||
|
||||
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/weapon_firing/Destroy()
|
||||
qdel(installed_gun)
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/weapon_firing/attackby(var/obj/O, var/mob/user)
|
||||
if(istype(O, /obj/item/gun/energy))
|
||||
var/obj/item/gun/gun = O
|
||||
if(installed_gun)
|
||||
to_chat(user, "<span class='warning'>There's already a weapon installed.</span>")
|
||||
return
|
||||
user.transferItemToLoc(gun,src)
|
||||
installed_gun = gun
|
||||
var/list/gun_properties = gun.get_turret_properties()
|
||||
to_chat(user, "<span class='notice'>You slide \the [gun] into the firing mechanism.</span>")
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
stun_projectile = gun_properties["stun_projectile"]
|
||||
stun_projectile_sound = gun_properties["stun_projectile_sound"]
|
||||
lethal_projectile = gun_properties["lethal_projectile"]
|
||||
lethal_projectile_sound = gun_properties["lethal_projectile_sound"]
|
||||
if(gun_properties["shot_delay"])
|
||||
cooldown_per_use = gun_properties["shot_delay"]*10
|
||||
if(cooldown_per_use<30)
|
||||
cooldown_per_use = 30
|
||||
if(gun_properties["reqpower"])
|
||||
power_draw_per_use = gun_properties["reqpower"]
|
||||
set_pin_data(IC_OUTPUT, 1, WEAKREF(installed_gun))
|
||||
push_data()
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/weapon_firing/attack_self(var/mob/user)
|
||||
if(installed_gun)
|
||||
installed_gun.forceMove(drop_location())
|
||||
to_chat(user, "<span class='notice'>You slide \the [installed_gun] out of the firing mechanism.</span>")
|
||||
size = initial(size)
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
installed_gun = null
|
||||
set_pin_data(IC_OUTPUT, 1, WEAKREF(null))
|
||||
push_data()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>There's no weapon to remove from the mechanism.</span>")
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/weapon_firing/do_work()
|
||||
if(!installed_gun || !installed_gun.handle_pins())
|
||||
return
|
||||
if(!isturf(assembly.loc) && !(assembly.can_fire_equipped && ishuman(assembly.loc)))
|
||||
return
|
||||
set_pin_data(IC_OUTPUT, 1, WEAKREF(installed_gun))
|
||||
push_data()
|
||||
var/datum/integrated_io/xo = inputs[1]
|
||||
var/datum/integrated_io/yo = inputs[2]
|
||||
var/datum/integrated_io/mode1 = inputs[3]
|
||||
|
||||
mode = mode1.data
|
||||
if(assembly)
|
||||
if(isnum(xo.data))
|
||||
xo.data = round(xo.data, 1)
|
||||
if(isnum(yo.data))
|
||||
yo.data = round(yo.data, 1)
|
||||
|
||||
var/turf/T = get_turf(assembly)
|
||||
var/target_x = CLAMP(T.x + xo.data, 0, world.maxx)
|
||||
var/target_y = CLAMP(T.y + yo.data, 0, world.maxy)
|
||||
|
||||
assembly.visible_message("<span class='danger'>[assembly] fires [installed_gun]!</span>")
|
||||
shootAt(locate(target_x, target_y, T.z))
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/weapon_firing/proc/shootAt(turf/target)
|
||||
var/turf/T = get_turf(src)
|
||||
var/turf/U = target
|
||||
if(!istype(T) || !istype(U))
|
||||
return
|
||||
if(!installed_gun.cell)
|
||||
return
|
||||
if(!installed_gun.cell.charge)
|
||||
return
|
||||
var/obj/item/ammo_casing/energy/shot = installed_gun.ammo_type[mode?2:1]
|
||||
if(installed_gun.cell.charge < shot.e_cost)
|
||||
return
|
||||
if(!shot)
|
||||
return
|
||||
update_icon()
|
||||
var/obj/item/projectile/A
|
||||
if(!mode)
|
||||
A = new stun_projectile(T)
|
||||
playsound(loc, stun_projectile_sound, 75, 1)
|
||||
else
|
||||
A = new lethal_projectile(T)
|
||||
playsound(loc, lethal_projectile_sound, 75, 1)
|
||||
installed_gun.cell.use(shot.e_cost)
|
||||
//Shooting Code:
|
||||
A.preparePixelProjectile(target, src)
|
||||
A.fire()
|
||||
log_attack("[assembly] [REF(assembly)] has fired [installed_gun].")
|
||||
return A
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/grenade
|
||||
name = "grenade primer"
|
||||
desc = "This circuit comes with the ability to attach most types of grenades and prime them at will."
|
||||
extended_desc = "The time between priming and detonation is limited to between 1 to 12 seconds, but is optional. \
|
||||
If the input is not set, not a number, or a number less than 1, the grenade's built-in timing will be used. \
|
||||
Beware: Once primed, there is no aborting the process!"
|
||||
icon_state = "grenade"
|
||||
complexity = 30
|
||||
cooldown_per_use = 10
|
||||
inputs = list("detonation time" = IC_PINTYPE_NUMBER)
|
||||
outputs = list()
|
||||
activators = list("prime grenade" = IC_PINTYPE_PULSE_IN)
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
action_flags = IC_ACTION_COMBAT
|
||||
var/obj/item/grenade/attached_grenade
|
||||
var/pre_attached_grenade_type
|
||||
demands_object_input = TRUE // You can put stuff in once the circuit is in assembly,passed down from additem and handled by attackby()
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/grenade/Initialize()
|
||||
. = ..()
|
||||
if(pre_attached_grenade_type)
|
||||
var/grenade = new pre_attached_grenade_type(src)
|
||||
attach_grenade(grenade)
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/grenade/Destroy()
|
||||
if(attached_grenade && !attached_grenade.active)
|
||||
attached_grenade.forceMove(loc)
|
||||
detach_grenade()
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/grenade/attackby(var/obj/item/grenade/G, var/mob/user)
|
||||
if(istype(G))
|
||||
if(attached_grenade)
|
||||
to_chat(user, "<span class='warning'>There is already a grenade attached!</span>")
|
||||
else if(user.transferItemToLoc(G,src))
|
||||
user.visible_message("<span class='warning'>\The [user] attaches \a [G] to \the [src]!</span>", "<span class='notice'>You attach \the [G] to \the [src].</span>")
|
||||
attach_grenade(G)
|
||||
G.forceMove(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/grenade/attack_self(var/mob/user)
|
||||
if(attached_grenade)
|
||||
user.visible_message("<span class='warning'>\The [user] removes \an [attached_grenade] from \the [src]!</span>", "<span class='notice'>You remove \the [attached_grenade] from \the [src].</span>")
|
||||
user.put_in_hands(attached_grenade)
|
||||
detach_grenade()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/grenade/do_work()
|
||||
if(attached_grenade && !attached_grenade.active)
|
||||
var/datum/integrated_io/detonation_time = inputs[1]
|
||||
var/dt
|
||||
if(isnum(detonation_time.data) && detonation_time.data > 0)
|
||||
dt = CLAMP(detonation_time.data, 1, 12)*10
|
||||
else
|
||||
dt = 15
|
||||
addtimer(CALLBACK(attached_grenade, /obj/item/grenade.proc/prime), dt)
|
||||
var/atom/holder = loc
|
||||
message_admins("activated a grenade assembly. Last touches: Assembly: [holder.fingerprintslast] Circuit: [fingerprintslast] Grenade: [attached_grenade.fingerprintslast]")
|
||||
|
||||
// These procs do not relocate the grenade, that's the callers responsibility
|
||||
/obj/item/integrated_circuit/weaponized/grenade/proc/attach_grenade(var/obj/item/grenade/G)
|
||||
attached_grenade = G
|
||||
G.forceMove(src)
|
||||
desc += " \An [attached_grenade] is attached to it!"
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/grenade/proc/detach_grenade()
|
||||
if(!attached_grenade)
|
||||
return
|
||||
attached_grenade.forceMove(drop_location())
|
||||
attached_grenade = null
|
||||
desc = initial(desc)
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/air_cannon
|
||||
name = "pneumatic cannon"
|
||||
desc = "A compact pneumatic cannon to throw things from inside or nearby tiles at a high enough velocity to cause damage. Requires air from a canister to fire."
|
||||
extended_desc = "The first and second inputs need to be numbers which correspond to the coordinates to throw objects at relative to the machine itself. \
|
||||
The 'fire' activator will cause the mechanism to attempt to launch objects at the coordinates, if possible. Note that the \
|
||||
projectile needs to be inside the machine, or on an adjacent tile, and must be medium sized or smaller. The assembly \
|
||||
must also be a gun if you wish to launch something while the assembly is in hand."
|
||||
complexity = 75
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
size = 4
|
||||
cooldown_per_use = 30
|
||||
ext_cooldown = 15
|
||||
inputs = list(
|
||||
"target X rel" = IC_PINTYPE_NUMBER,
|
||||
"target Y rel" = IC_PINTYPE_NUMBER,
|
||||
"projectile" = IC_PINTYPE_REF,
|
||||
"canister" = IC_PINTYPE_REF
|
||||
)
|
||||
outputs = list()
|
||||
activators = list(
|
||||
"fire" = IC_PINTYPE_PULSE_IN
|
||||
)
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
action_flags = IC_ACTION_COMBAT
|
||||
power_draw_per_use = 50
|
||||
var/gas_per_throw = 6
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/air_cannon/do_work()
|
||||
|
||||
var/max_w_class = assembly.w_class
|
||||
var/target_x_rel = round(get_pin_data(IC_INPUT, 1))
|
||||
var/target_y_rel = round(get_pin_data(IC_INPUT, 2))
|
||||
var/obj/item/A = get_pin_data_as_type(IC_INPUT, 3, /obj/item)
|
||||
var/obj/item/integrated_circuit/atmospherics/AT = get_pin_data_as_type(IC_INPUT, 4, /obj/item/integrated_circuit/atmospherics)
|
||||
|
||||
if(!A || A.anchored || A.throwing || A == assembly || istype(A, /obj/item/twohanded) || istype(A, /obj/item/transfer_valve))
|
||||
return
|
||||
|
||||
if(!AT || !AT.air_contents)
|
||||
return
|
||||
|
||||
if (istype(assembly.loc, /obj/item/implant/storage)) //Prevents the more abusive form of chestgun.
|
||||
return
|
||||
|
||||
if(max_w_class && (A.w_class > max_w_class))
|
||||
return
|
||||
|
||||
if(!assembly.can_fire_equipped && ishuman(assembly.loc))
|
||||
return
|
||||
|
||||
// Is the target inside the assembly or close to it?
|
||||
if(!check_target(A, exclude_components = TRUE))
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(get_object())
|
||||
if(!T)
|
||||
return
|
||||
|
||||
// If the item is in mob's inventory, try to remove it from there.
|
||||
if(ismob(A.loc))
|
||||
var/mob/living/M = A.loc
|
||||
if(!M.temporarilyRemoveItemFromInventory(A))
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/source_air = AT.return_air()
|
||||
var/datum/gas_mixture/target_air = T.return_air()
|
||||
|
||||
if(!source_air || !target_air)
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/removed = source_air.remove(gas_per_throw)
|
||||
if(!removed)
|
||||
return
|
||||
target_air.merge(removed)
|
||||
|
||||
// If the item is in a grabber circuit we'll update the grabber's outputs after we've thrown it.
|
||||
var/obj/item/integrated_circuit/manipulation/grabber/G = A.loc
|
||||
|
||||
var/x_abs = CLAMP(T.x + target_x_rel, 0, world.maxx)
|
||||
var/y_abs = CLAMP(T.y + target_y_rel, 0, world.maxy)
|
||||
var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1)
|
||||
assembly.visible_message("<span class='danger'>\The [assembly] has thrown [A]!</span>")
|
||||
log_attack("[assembly] [REF(assembly)] has thrown [A] with lethal force.")
|
||||
A.forceMove(drop_location())
|
||||
A.throw_at(locate(x_abs, y_abs, T.z), range, 3)
|
||||
|
||||
air_update_turf()
|
||||
|
||||
// If the item came from a grabber now we can update the outputs since we've thrown it.
|
||||
if(istype(G))
|
||||
G.update_outputs()
|
||||
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/stun
|
||||
name = "electronic stun module"
|
||||
desc = "Used to stun a target holding the device via electricity."
|
||||
icon_state = "power_relay"
|
||||
extended_desc = "Attempts to stun the holder of this device, with the strength input being the strength of the stun, from 1 to 70."
|
||||
complexity = 60
|
||||
size = 4
|
||||
inputs = list("strength" = IC_PINTYPE_NUMBER)
|
||||
activators = list("stun" = IC_PINTYPE_PULSE_IN, "on success" = IC_PINTYPE_PULSE_OUT, "on fail" = IC_PINTYPE_PULSE_OUT)
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
power_draw_per_use = 2000
|
||||
cooldown_per_use = 50
|
||||
ext_cooldown = 25
|
||||
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/stun/do_work()
|
||||
var/stunforce = CLAMP(get_pin_data(IC_INPUT, 1),1,70)
|
||||
var/mob/living/L = assembly.loc
|
||||
if(attempt_stun(L,stunforce))
|
||||
activate_pin(2)
|
||||
else
|
||||
activate_pin(3)
|
||||
|
||||
/obj/item/integrated_circuit/weaponized/proc/attempt_stun(var/mob/living/L,var/stunforce = 70) //Copied from stunbaton code.
|
||||
|
||||
if(!L || !isliving(L))
|
||||
return 0
|
||||
|
||||
L.Knockdown(stunforce)
|
||||
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
|
||||
|
||||
message_admins("stunned someone with an assembly. Last touches: Assembly: [assembly.fingerprintslast] Circuit: [fingerprintslast]")
|
||||
|
||||
L.visible_message("<span class='danger'>\The [assembly] has stunned \the [L] with \the [src]!</span>", "<span class='userdanger'>\The [assembly] has stunned you with \the [src]!</span>")
|
||||
playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
H.forcesay(GLOB.hit_appends)
|
||||
|
||||
return 1
|
||||
@@ -230,7 +230,7 @@
|
||||
desc = "A wing ripped from a watcher. Suitable as a trophy for a kinetic crusher."
|
||||
icon_state = "watcher_wing"
|
||||
denied_type = /obj/item/crusher_trophy/watcher_wing
|
||||
bonus_value = 5
|
||||
bonus_value = 10
|
||||
|
||||
/obj/item/crusher_trophy/watcher_wing/effect_desc()
|
||||
return "mark detonation to prevent certain creatures from using certain attacks for <b>[bonus_value*0.1]</b> second\s"
|
||||
|
||||
@@ -300,6 +300,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
else
|
||||
if(C.client)
|
||||
C.canbearoused = C.client.prefs.arousable
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(NOGENITALS in H.dna.species.species_traits)
|
||||
H.give_genitals(TRUE) //call the clean up proc to delete anything on the mob then return.
|
||||
|
||||
// EDIT ENDS
|
||||
|
||||
/datum/species/proc/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
|
||||
@@ -756,7 +761,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(!forced_colour)
|
||||
switch(S.color_src)
|
||||
if(SKINTONE)
|
||||
accessory_overlay.color = skintone2hex(H.skin_tone)
|
||||
accessory_overlay.color = "#[skintone2hex(H.skin_tone)]"
|
||||
if(MUTCOLORS)
|
||||
if(fixed_mut_color)
|
||||
accessory_overlay.color = "#[fixed_mut_color]"
|
||||
@@ -1451,25 +1456,52 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
target.forcesay(GLOB.hit_appends)
|
||||
|
||||
/datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
|
||||
// CITADEL EDIT slap mouthy gits
|
||||
var/aim_for_mouth = user.zone_selected == "mouth"
|
||||
var/target_on_help_and_unarmed = target.a_intent == INTENT_HELP && !target.get_active_held_item()
|
||||
// CITADEL EDIT slap mouthy gits and booty
|
||||
var/aim_for_mouth = user.zone_selected == "mouth"
|
||||
var/target_on_help = target.a_intent == INTENT_HELP
|
||||
var/target_aiming_for_mouth = target.zone_selected == "mouth"
|
||||
var/target_restrained = target.restrained()
|
||||
if(aim_for_mouth && ( target_on_help_and_unarmed || target_restrained || target_aiming_for_mouth))
|
||||
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
|
||||
user.visible_message("<span class='danger'>[user] slaps [target] in the face!</span>",
|
||||
"<span class='notice'>You slap [target] in the face! </span>",\
|
||||
"You hear a slap.")
|
||||
stop_wagging_tail(target)
|
||||
return FALSE
|
||||
else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(user, "<span class='warning'>You're too exhausted.</span>")
|
||||
return FALSE
|
||||
else if(target.check_block()) //END EDIT
|
||||
var/same_dir = (target.dir & user.dir)
|
||||
var/aim_for_groin = user.zone_selected == "groin"
|
||||
var/target_aiming_for_groin = target.zone_selected == "groin"
|
||||
|
||||
if(target.check_block()) //END EDIT
|
||||
target.visible_message("<span class='warning'>[target] blocks [user]'s disarm attempt!</span>")
|
||||
return 0
|
||||
if(attacker_style && attacker_style.disarm_act(user,target))
|
||||
else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(user, "<span class='warning'>You're too exhausted!</span>")
|
||||
return FALSE
|
||||
|
||||
else if(aim_for_mouth && ( target_on_help || target_restrained || target_aiming_for_mouth))
|
||||
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
|
||||
|
||||
user.visible_message(
|
||||
"<span class='danger'>[user] slaps [target] in the face!</span>",
|
||||
"<span class='notice'>You slap [user == target ? "yourself" : target] in the face! </span>",\
|
||||
"You hear a slap."
|
||||
)
|
||||
if (!target.has_trait(TRAIT_NYMPHO))
|
||||
stop_wagging_tail(target)
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_FACE_SLAP)
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
return FALSE
|
||||
else if(aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin))
|
||||
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
|
||||
user.visible_message(
|
||||
"<span class='danger'>[user] slaps [target]'s ass!</span>",
|
||||
"<span class='notice'>You slap [user == target ? "your" : target + "'s"] ass! </span>",\
|
||||
"You hear a slap."
|
||||
)
|
||||
if (target.canbearoused)
|
||||
target.adjustArousalLoss(5)
|
||||
if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_NYMPHO) && target.has_dna())
|
||||
target.mob_climax(forced_climax=TRUE)
|
||||
if (!target.has_trait(TRAIT_NYMPHO))
|
||||
stop_wagging_tail(target)
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_ASS_SLAP)
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
return FALSE
|
||||
else if(attacker_style && attacker_style.disarm_act(user,target))
|
||||
return 1
|
||||
else
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
id = "abductor"
|
||||
say_mod = "gibbers"
|
||||
sexes = FALSE
|
||||
species_traits = list(NOBLOOD,NOEYES)
|
||||
species_traits = list(NOBLOOD,NOEYES,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NOGUNS,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
mutanttongue = /obj/item/organ/tongue/abductor
|
||||
var/scientist = FALSE // vars to not pollute spieces list with castes
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Android"
|
||||
id = "android"
|
||||
say_mod = "states"
|
||||
species_traits = list(NOBLOOD)
|
||||
species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT)
|
||||
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
|
||||
meat = null
|
||||
|
||||
@@ -15,6 +15,6 @@
|
||||
attack_sound = 'sound/weapons/resonator_blast.ogg'
|
||||
blacklisted = 1
|
||||
use_skintones = 0
|
||||
species_traits = list(NOBLOOD,EYECOLOR)
|
||||
species_traits = list(NOBLOOD,EYECOLOR,NOGENITALS)
|
||||
inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
|
||||
sexes = 0
|
||||
@@ -2,7 +2,7 @@
|
||||
// Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck.
|
||||
name = "Golem"
|
||||
id = "iron golem"
|
||||
species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR)
|
||||
species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
|
||||
mutant_organs = list(/obj/item/organ/adamantine_resonator)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
nojumpsuit = TRUE
|
||||
|
||||
say_mod = "poofs" //what does a mushroom sound like
|
||||
species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR)
|
||||
species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_NOBREATH)
|
||||
speedmod = 1.5 //faster than golems but not by much
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
say_mod = "rattles"
|
||||
sexes = 0
|
||||
meat = /obj/item/stack/sheet/mineral/plasma
|
||||
species_traits = list(NOBLOOD,NOTRANSSTING)
|
||||
species_traits = list(NOBLOOD,NOTRANSSTING,NOGENITALS)
|
||||
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_NOHUNGER)
|
||||
inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
|
||||
mutantlungs = /obj/item/organ/lungs/plasmaman
|
||||
|
||||
@@ -12,6 +12,11 @@
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant
|
||||
disliked_food = MEAT | DAIRY
|
||||
liked_food = VEGETABLES | FRUIT | GRAIN
|
||||
var/light_nutrition_gain_factor = 10
|
||||
var/light_toxheal = 1
|
||||
var/light_oxyheal = 1
|
||||
var/light_burnheal = 1
|
||||
var/light_bruteheal = 1
|
||||
|
||||
/datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
@@ -30,13 +35,13 @@
|
||||
if(isturf(H.loc)) //else, there's considered to be no light
|
||||
var/turf/T = H.loc
|
||||
light_amount = min(1,T.get_lumcount()) - 0.5
|
||||
H.nutrition += light_amount * 10
|
||||
H.nutrition += light_amount * light_nutrition_gain_factor
|
||||
if(H.nutrition > NUTRITION_LEVEL_FULL)
|
||||
H.nutrition = NUTRITION_LEVEL_FULL
|
||||
if(light_amount > 0.2) //if there's enough light, heal
|
||||
H.heal_overall_damage(1,1)
|
||||
H.adjustToxLoss(-1)
|
||||
H.adjustOxyLoss(-1)
|
||||
H.heal_overall_damage(light_bruteheal, light_burnheal)
|
||||
H.adjustToxLoss(-light_toxheal)
|
||||
H.adjustOxyLoss(-light_oxyheal)
|
||||
|
||||
if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
|
||||
H.take_overall_damage(2,0)
|
||||
@@ -64,3 +69,11 @@
|
||||
H.show_message("<span class='userdanger'>The radiation beam singes you!</span>")
|
||||
if(/obj/item/projectile/energy/florayield)
|
||||
H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL)
|
||||
|
||||
/datum/species/pod/pseudo_weak
|
||||
id = "podweak"
|
||||
limbs_id = "pod"
|
||||
light_nutrition_gain_factor = 7.5
|
||||
light_bruteheal = 0.2
|
||||
light_burnheal = 0.2
|
||||
light_toxheal = 0.7
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
burnmod = 1.5
|
||||
blacklisted = TRUE
|
||||
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES)
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision/nightmare
|
||||
mutant_organs = list(/obj/item/organ/heart/nightmare)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
blacklisted = 1
|
||||
sexes = 0
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
|
||||
species_traits = list(NOBLOOD)
|
||||
species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH)
|
||||
inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
|
||||
mutanttongue = /obj/item/organ/tongue/bone
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
id = "synth"
|
||||
say_mod = "beep boops" //inherited from a user's real species
|
||||
sexes = 0
|
||||
species_traits = list(NOTRANSSTING) //all of these + whatever we inherit from the real species
|
||||
species_traits = list(NOTRANSSTING,NOGENITALS,NOAROUSAL) //all of these + whatever we inherit from the real species
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
|
||||
dangerous_existence = 1
|
||||
|
||||
@@ -505,3 +505,33 @@
|
||||
to_chat(user, "<span class='notice'>You unbolt [src]'s energy swords</span>")
|
||||
for(var/IS in 1 to swordamt)
|
||||
new /obj/item/melee/transforming/energy/sword/saber(Tsec)
|
||||
|
||||
//Firebot Assembly
|
||||
/obj/item/bot_assembly/firebot
|
||||
name = "incomplete firebot assembly"
|
||||
desc = "A fire extinguisher with an arm attached to it."
|
||||
icon_state = "firebot_arm"
|
||||
created_name = "Firebot"
|
||||
|
||||
/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, params)
|
||||
..()
|
||||
switch(build_step)
|
||||
if(ASSEMBLY_FIRST_STEP)
|
||||
if(istype(I, /obj/item/clothing/head/hardhat/red))
|
||||
if(!user.temporarilyRemoveItemFromInventory(I))
|
||||
return
|
||||
to_chat(user,"<span class='notice'>You add the [I] to [src]!</span>")
|
||||
icon_state = "firebot_helmet"
|
||||
desc = "An incomplete firebot assembly with a fire helmet."
|
||||
qdel(I)
|
||||
build_step++
|
||||
|
||||
if(ASSEMBLY_SECOND_STEP)
|
||||
if(isprox(I))
|
||||
if(!can_finish_build(I, user))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You add the [I] to [src]! Beep Boop!</span>")
|
||||
var/mob/living/simple_animal/bot/firebot/F = new(drop_location())
|
||||
F.name = created_name
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
|
||||
@@ -0,0 +1,325 @@
|
||||
//Firebot
|
||||
|
||||
#define SPEECH_INTERVAL 300 // Time between idle speeches
|
||||
#define DETECTED_VOICE_INTERVAL 300 // Time between fire detected callouts
|
||||
#define FOAM_INTERVAL 50 // Time between deployment of fire fighting foam
|
||||
|
||||
/mob/living/simple_animal/bot/firebot
|
||||
name = "\improper Firebot"
|
||||
desc = "A little fire extinguishing bot. He looks rather anxious."
|
||||
icon = 'icons/mob/aibots.dmi'
|
||||
icon_state = "firebot"
|
||||
density = FALSE
|
||||
anchored = FALSE
|
||||
health = 25
|
||||
maxHealth = 25
|
||||
spacewalk = TRUE
|
||||
|
||||
radio_key = /obj/item/encryptionkey/headset_eng
|
||||
radio_channel = "Engineering"
|
||||
bot_type = FIRE_BOT
|
||||
model = "Firebot"
|
||||
bot_core = /obj/machinery/bot_core/firebot
|
||||
window_id = "autoextinguisher"
|
||||
window_name = "Mobile Fire Extinguisher v1.0"
|
||||
path_image_color = "#FFA500"
|
||||
|
||||
var/atom/target_fire
|
||||
var/atom/old_target_fire
|
||||
|
||||
var/obj/item/extinguisher/internal_ext
|
||||
|
||||
var/last_found = 0
|
||||
|
||||
var/speech_cooldown = 0
|
||||
var/detected_cooldown = 0
|
||||
var/foam_cooldown = 0
|
||||
|
||||
var/extinguish_people = TRUE
|
||||
var/extinguish_fires = TRUE
|
||||
var/stationary_mode = FALSE
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
var/datum/job/engineer/J = new/datum/job/engineer
|
||||
access_card.access += J.get_access()
|
||||
prev_access = access_card.access
|
||||
|
||||
create_extinguisher()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/bot_reset()
|
||||
create_extinguisher()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/proc/create_extinguisher()
|
||||
internal_ext = new /obj/item/extinguisher(src)
|
||||
internal_ext.safety = FALSE
|
||||
internal_ext.precision = TRUE
|
||||
internal_ext.max_water = INFINITY
|
||||
internal_ext.refill()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/UnarmedAttack(atom/A)
|
||||
if(!on)
|
||||
return
|
||||
if(internal_ext)
|
||||
internal_ext.afterattack(A, src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/RangedAttack(atom/A)
|
||||
if(!on)
|
||||
return
|
||||
if(internal_ext)
|
||||
internal_ext.afterattack(A, src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/turn_on()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/turn_off()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/bot_reset()
|
||||
..()
|
||||
target_fire = null
|
||||
old_target_fire = null
|
||||
ignore_list = list()
|
||||
anchored = FALSE
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/proc/soft_reset()
|
||||
path = list()
|
||||
target_fire = null
|
||||
mode = BOT_IDLE
|
||||
last_found = world.time
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/set_custom_texts()
|
||||
text_hack = "You corrupt [name]'s safety protocols."
|
||||
text_dehack = "You detect errors in [name] and reset his programming."
|
||||
text_dehack_fail = "[name] is not responding to reset commands!"
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/get_controls(mob/user)
|
||||
var/dat
|
||||
dat += hack(user)
|
||||
dat += showpai(user)
|
||||
dat += "<TT><B>Mobile Fire Extinguisher v1.0</B></TT><BR><BR>"
|
||||
dat += "Status: <A href='?src=[REF(src)];power=1'>[on ? "On" : "Off"]</A><BR>"
|
||||
dat += "Maintenance panel panel is [open ? "opened" : "closed"]<BR>"
|
||||
|
||||
dat += "Behaviour controls are [locked ? "locked" : "unlocked"]<BR>"
|
||||
if(!locked || issilicon(user) || IsAdminGhost(user))
|
||||
dat += "Extinguish Fires: <A href='?src=[REF(src)];operation=extinguish_fires'>[extinguish_fires ? "Yes" : "No"]</A><BR>"
|
||||
dat += "Extinguish People: <A href='?src=[REF(src)];operation=extinguish_people'>[extinguish_people ? "Yes" : "No"]</A><BR>"
|
||||
dat += "Patrol Station: <A href='?src=[REF(src)];operation=patrol'>[auto_patrol ? "Yes" : "No"]</A><BR>"
|
||||
dat += "Stationary Mode: <a href='?src=[REF(src)];operation=stationary_mode'>[stationary_mode ? "Yes" : "No"]</a><br>"
|
||||
|
||||
return dat
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/emag_act(mob/user)
|
||||
..()
|
||||
if(emagged == 1)
|
||||
if(user)
|
||||
to_chat(user, "<span class='danger'>[src] buzzes and beeps.</span>")
|
||||
audible_message("<span class='danger'>[src] buzzes oddly!</span>")
|
||||
playsound(src, "sparks", 75, TRUE)
|
||||
if(user)
|
||||
old_target_fire = user
|
||||
extinguish_fires = FALSE
|
||||
extinguish_people = TRUE
|
||||
|
||||
internal_ext.chem = "clf3" //Refill the internal extinguisher with liquid fire
|
||||
internal_ext.power = 3
|
||||
internal_ext.safety = FALSE
|
||||
internal_ext.precision = FALSE
|
||||
internal_ext.max_water = INFINITY
|
||||
internal_ext.refill()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/Topic(href, href_list)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
switch(href_list["operation"])
|
||||
if("extinguish_fires")
|
||||
extinguish_fires = !extinguish_fires
|
||||
if("extinguish_people")
|
||||
extinguish_people = !extinguish_people
|
||||
if("stationary_mode")
|
||||
stationary_mode = !stationary_mode
|
||||
|
||||
update_controls()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/proc/is_burning(atom/target)
|
||||
if(ismob(target))
|
||||
var/mob/living/M = target
|
||||
if(M.on_fire || (emagged == 1 && !M.on_fire))
|
||||
return TRUE
|
||||
|
||||
else if(isturf(target))
|
||||
var/turf/open/T = target
|
||||
if(T.active_hotspot)
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/handle_automated_action()
|
||||
if(!..())
|
||||
return
|
||||
|
||||
if(IsStun())
|
||||
old_target_fire = target_fire
|
||||
target_fire = null
|
||||
mode = BOT_IDLE
|
||||
return
|
||||
|
||||
if(prob(1) && target_fire == null)
|
||||
var/list/messagevoice = list("No fires detected." = 'sound/voice/firebot/nofires.ogg',
|
||||
"Only you can prevent station fires." = 'sound/voice/firebot/onlyyou.ogg',
|
||||
"Temperature nominal." = 'sound/voice/firebot/tempnominal.ogg',
|
||||
"Keep it cool." = 'sound/voice/firebot/keepitcool.ogg')
|
||||
var/message = pick(messagevoice)
|
||||
speak(message)
|
||||
playsound(src, messagevoice[message], 50)
|
||||
|
||||
// Couldn't reach the target, reset and try again ignoring the old one
|
||||
if(frustration > 8)
|
||||
old_target_fire = target_fire
|
||||
soft_reset()
|
||||
|
||||
// We extinguished our target or it was deleted
|
||||
if(QDELETED(target_fire) || !is_burning(target_fire) || isdead(target_fire))
|
||||
target_fire = null
|
||||
var/scan_range = (stationary_mode ? 1 : DEFAULT_SCAN_RANGE)
|
||||
|
||||
if(extinguish_people)
|
||||
target_fire = scan(/mob/living, old_target_fire, scan_range) // Scan for burning humans first
|
||||
|
||||
if(target_fire == null && extinguish_fires)
|
||||
target_fire = scan(/turf/open, old_target_fire, scan_range) // Scan for burning turfs second
|
||||
|
||||
old_target_fire = target_fire
|
||||
|
||||
// Target reached ENGAGE WATER CANNON
|
||||
if(target_fire && (get_dist(src, target_fire) <= (emagged == 1 ? 1 : 2))) // Make the bot spray water from afar when not emagged
|
||||
if((speech_cooldown + SPEECH_INTERVAL) < world.time)
|
||||
if(ishuman(target_fire))
|
||||
speak("Stop, drop and roll!")
|
||||
playsound(src, "sound/voice/firebot/stopdropnroll.ogg", 50, 0)
|
||||
else
|
||||
speak("Extinguishing!")
|
||||
playsound(src, "sound/voice/firebot/extinguishing.ogg", 50, 0)
|
||||
speech_cooldown = world.time
|
||||
|
||||
flick("firebot1_use", src)
|
||||
spray_water(target_fire, src)
|
||||
|
||||
soft_reset()
|
||||
|
||||
// Target ran away
|
||||
else if(target_fire && path.len && (get_dist(target_fire,path[path.len]) > 2))
|
||||
path = list()
|
||||
mode = BOT_IDLE
|
||||
last_found = world.time
|
||||
|
||||
else if(target_fire && stationary_mode)
|
||||
soft_reset()
|
||||
return
|
||||
|
||||
if(target_fire && (get_dist(src, target_fire) > 2))
|
||||
|
||||
path = get_path_to(src, get_turf(target_fire), /turf/proc/Distance_cardinal, 0, 30, 1, id=access_card)
|
||||
mode = BOT_MOVING
|
||||
if(!path.len)
|
||||
soft_reset()
|
||||
|
||||
if(path.len > 0 && target_fire)
|
||||
if(!bot_move(path[path.len]))
|
||||
old_target_fire = target_fire
|
||||
soft_reset()
|
||||
return
|
||||
|
||||
// We got a target but it's too far away from us
|
||||
if(path.len > 8 && target_fire)
|
||||
frustration++
|
||||
|
||||
if(auto_patrol && !target_fire && !stationary_mode)
|
||||
if(mode == BOT_IDLE || mode == BOT_START_PATROL)
|
||||
start_patrol()
|
||||
|
||||
if(mode == BOT_PATROL)
|
||||
bot_patrol()
|
||||
|
||||
|
||||
//Look for burning people or turfs around the bot
|
||||
/mob/living/simple_animal/bot/firebot/process_scan(atom/scan_target)
|
||||
var/result
|
||||
|
||||
if(scan_target == src)
|
||||
return result
|
||||
|
||||
if(is_burning(scan_target))
|
||||
if((detected_cooldown + DETECTED_VOICE_INTERVAL) < world.time)
|
||||
speak("Fire detected!")
|
||||
playsound(src, "sound/voice/firebot/detected.ogg", 50, 0)
|
||||
detected_cooldown = world.time
|
||||
result = scan_target
|
||||
|
||||
return result
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/temperature_expose(datum/gas_mixture/air, temperature, volume)
|
||||
if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && foam_cooldown + FOAM_INTERVAL < world.time)
|
||||
new /obj/effect/particle_effect/foam/firefighting(loc)
|
||||
foam_cooldown = world.time
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/proc/spray_water(atom/target, mob/user)
|
||||
if(stationary_mode)
|
||||
flick("firebots_use", user)
|
||||
else
|
||||
flick("firebot1_use", user)
|
||||
internal_ext.afterattack(target, user, null)
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/update_icon()
|
||||
if(!on)
|
||||
icon_state = "firebot0"
|
||||
return
|
||||
if(IsStun())
|
||||
icon_state = "firebots1"
|
||||
else if(stationary_mode) //Bot has yellow light to indicate stationary mode.
|
||||
icon_state = "firebots1"
|
||||
else
|
||||
icon_state = "firebot1"
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/explode()
|
||||
on = FALSE
|
||||
visible_message("<span class='boldannounce'>[src] blows apart!</span>")
|
||||
|
||||
var/atom/Tsec = drop_location()
|
||||
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/clothing/head/hardhat/red(Tsec)
|
||||
|
||||
var/turf/T = get_turf(Tsec)
|
||||
|
||||
if(isopenturf(T))
|
||||
var/turf/open/theturf = T
|
||||
theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS)
|
||||
|
||||
if(prob(50))
|
||||
drop_part(robot_arm, Tsec)
|
||||
|
||||
do_sparks(3, TRUE, src)
|
||||
..()
|
||||
|
||||
/obj/machinery/bot_core/firebot
|
||||
req_one_access = list(ACCESS_CONSTRUCTION, ACCESS_ROBOTICS)
|
||||
|
||||
#undef SPEECH_INTERVAL
|
||||
#undef DETECTED_VOICE_INTERVAL
|
||||
#undef FOAM_INTERVAL
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/item/projectile/Proj)
|
||||
if(!Proj)
|
||||
return
|
||||
if(prob(50))
|
||||
if(prob(25))
|
||||
return ..()
|
||||
else
|
||||
visible_message("<span class='danger'>[src] blocks [Proj] with its shield!</span>")
|
||||
|
||||
@@ -102,20 +102,19 @@
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
var/datum/belly/B = vore_organs[vore_selected]
|
||||
if(faction != usr.faction)
|
||||
to_chat(usr,"<span class='warning'>This predator isn't friendly, and doesn't give a shit about your opinions of it digesting you.</span>")
|
||||
return
|
||||
if(B.digest_mode == "Hold")
|
||||
var/mob/living/carbon/human/user = usr
|
||||
if(!istype(user) || user.stat) return
|
||||
|
||||
if(vore_selected.digest_mode == DM_HOLD)
|
||||
var/confirm = alert(usr, "Enabling digestion on [name] will cause it to digest all stomach contents. Using this to break OOC prefs is against the rules. Digestion will disable itself after 20 minutes.", "Enabling [name]'s Digestion", "Enable", "Cancel")
|
||||
if(confirm == "Enable")
|
||||
B.digest_mode = "Digest"
|
||||
sleep(20 MINUTES) //12000=20 minutes
|
||||
B.digest_mode = "Hold"
|
||||
vore_selected.digest_mode = DM_DIGEST
|
||||
sleep(20 MINUTES)
|
||||
vore_selected.digest_mode = vore_default_mode
|
||||
else
|
||||
var/confirm = alert(usr, "This mob is currently set to digest all stomach contents. Do you want to disable this?", "Disabling [name]'s Digestion", "Disable", "Cancel")
|
||||
if(confirm == "Disable")
|
||||
B.digest_mode = "Hold"
|
||||
vore_selected.digest_mode = DM_HOLD
|
||||
|
||||
//
|
||||
// Simple nom proc for if you get ckey'd into a simple_animal mob! Avoids grabs.
|
||||
|
||||
@@ -61,6 +61,8 @@
|
||||
var/mood = "" // To show its face
|
||||
var/mutator_used = FALSE //So you can't shove a dozen mutators into a single slime
|
||||
var/force_stasis = FALSE
|
||||
|
||||
do_footstep = TRUE
|
||||
|
||||
var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)")
|
||||
///////////TIME FOR SUBSPECIES
|
||||
|
||||
@@ -4,12 +4,25 @@
|
||||
|
||||
if(!ninjacost(0,N_ADRENALINE))
|
||||
var/mob/living/carbon/human/H = affecting
|
||||
H.SetUnconscious(0)
|
||||
H.SetSleeping(0)
|
||||
H.SetStun(0)
|
||||
H.SetKnockdown(0)
|
||||
H.adjustStaminaLoss(-75)
|
||||
H.SetUnconscious(0)
|
||||
H.adjustStaminaLoss(-150)
|
||||
H.stuttering = 0
|
||||
H.updatehealth()
|
||||
H.update_stamina()
|
||||
H.resting = 0
|
||||
H.lying = 0
|
||||
H.update_canmove()
|
||||
|
||||
H.reagents.add_reagent("inaprovaline", 3) //let's give another chance to dumb fucks who forget to breathe
|
||||
H.reagents.add_reagent("synaptizine", 10)
|
||||
H.reagents.add_reagent("omnizine", 10)
|
||||
H.reagents.add_reagent("stimulants", 10)
|
||||
|
||||
H.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!"), forced = "ninjaboost")
|
||||
|
||||
a_boost--
|
||||
to_chat(H, "<span class='notice'>There are <B>[a_boost]</B> adrenaline boosts remaining.</span>")
|
||||
s_coold = 3
|
||||
|
||||
@@ -299,4 +299,8 @@
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/gravity/repulse, /obj/item/ammo_casing/energy/gravity/attract, /obj/item/ammo_casing/energy/gravity/chaos)
|
||||
item_state = "gravity_gun"
|
||||
icon_state = "gravity_gun"
|
||||
pin = null
|
||||
var/power = 4
|
||||
|
||||
/obj/item/gun/energy/gravity_gun/security
|
||||
pin = /obj/item/firing_pin
|
||||
|
||||
@@ -280,11 +280,11 @@ im
|
||||
if(C.reagent_check(R) != 1)
|
||||
if(can_overdose)
|
||||
if(R.overdose_threshold)
|
||||
if(R.volume >= R.overdose_threshold && !R.overdosed)
|
||||
if(R.volume > R.overdose_threshold && !R.overdosed)
|
||||
R.overdosed = 1
|
||||
need_mob_update += R.overdose_start(C)
|
||||
if(R.addiction_threshold)
|
||||
if(R.volume >= R.addiction_threshold && !is_type_in_list(R, cached_addictions))
|
||||
if(R.volume > R.addiction_threshold && !is_type_in_list(R, cached_addictions))
|
||||
var/datum/reagent/new_reagent = new R.type()
|
||||
cached_addictions.Add(new_reagent)
|
||||
if(R.overdosed)
|
||||
|
||||
@@ -320,13 +320,14 @@
|
||||
reagent_state = SOLID
|
||||
color = "#000067" // rgb: 0, 0, 103
|
||||
toxpwr = 0
|
||||
metabolization_rate = 1.5 * REAGENTS_METABOLISM
|
||||
metabolization_rate = 1 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/toxin/chloralhydratedelayed/on_mob_life(mob/living/carbon/M)
|
||||
switch(current_cycle)
|
||||
if(10 to 20)
|
||||
M.confused += 1
|
||||
M.drowsyness += 1
|
||||
M.adjustStaminaLoss(7.5)
|
||||
if(20 to INFINITY)
|
||||
M.Sleeping(40, 0)
|
||||
..()
|
||||
|
||||
@@ -1,872 +0,0 @@
|
||||
///////////////////////////////////
|
||||
//////////Autolathe Designs ///////
|
||||
///////////////////////////////////
|
||||
|
||||
/datum/design/bucket
|
||||
name = "Bucket"
|
||||
id = "bucket"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 200)
|
||||
build_path = /obj/item/reagent_containers/glass/bucket
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/crowbar
|
||||
name = "Pocket Crowbar"
|
||||
id = "crowbar"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50)
|
||||
build_path = /obj/item/crowbar
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/flashlight
|
||||
name = "Flashlight"
|
||||
id = "flashlight"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 20)
|
||||
build_path = /obj/item/flashlight
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/extinguisher
|
||||
name = "Fire Extinguisher"
|
||||
id = "extinguisher"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 90)
|
||||
build_path = /obj/item/extinguisher
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/pocketfireextinguisher
|
||||
name = "Pocket Fire Extinguisher"
|
||||
id = "pocketfireextinguisher"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 40)
|
||||
build_path = /obj/item/extinguisher/mini
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/multitool
|
||||
name = "Multitool"
|
||||
id = "multitool"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 20)
|
||||
build_path = /obj/item/multitool
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/analyzer
|
||||
name = "Analyzer"
|
||||
id = "analyzer"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30, MAT_GLASS = 20)
|
||||
build_path = /obj/item/analyzer
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/tscanner
|
||||
name = "T-Ray Scanner"
|
||||
id = "tscanner"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 150)
|
||||
build_path = /obj/item/t_scanner
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/weldingtool
|
||||
name = "Welding Tool"
|
||||
id = "welding_tool"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 70, MAT_GLASS = 20)
|
||||
build_path = /obj/item/weldingtool
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/mini_weldingtool
|
||||
name = "Emergency Welding Tool"
|
||||
id = "mini_welding_tool"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30, MAT_GLASS = 10)
|
||||
build_path = /obj/item/weldingtool/mini
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/screwdriver
|
||||
name = "Screwdriver"
|
||||
id = "screwdriver"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 75)
|
||||
build_path = /obj/item/screwdriver
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/wirecutters
|
||||
name = "Wirecutters"
|
||||
id = "wirecutters"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 80)
|
||||
build_path = /obj/item/wirecutters
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/wrench
|
||||
name = "Wrench"
|
||||
id = "wrench"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 150)
|
||||
build_path = /obj/item/wrench
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/welding_helmet
|
||||
name = "Welding Helmet"
|
||||
id = "welding_helmet"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1750, MAT_GLASS = 400)
|
||||
build_path = /obj/item/clothing/head/welding
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/cable_coil
|
||||
name = "Cable Coil"
|
||||
id = "cable_coil"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10, MAT_GLASS = 5)
|
||||
build_path = /obj/item/stack/cable_coil/random
|
||||
category = list("initial","Tools")
|
||||
maxstack = 30
|
||||
|
||||
/datum/design/toolbox
|
||||
name = "Toolbox"
|
||||
id = "tool_box"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500)
|
||||
build_path = /obj/item/storage/toolbox
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/apc_board
|
||||
name = "APC Module"
|
||||
id = "power control"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
|
||||
build_path = /obj/item/electronics/apc
|
||||
category = list("initial", "Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/airlock_board
|
||||
name = "Airlock Electronics"
|
||||
id = "airlock_board"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/electronics/airlock
|
||||
category = list("initial", "Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/firelock_board
|
||||
name = "Firelock Circuitry"
|
||||
id = "firelock_board"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/electronics/firelock
|
||||
category = list("initial", "Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/airalarm_electronics
|
||||
name = "Air Alarm Electronics"
|
||||
id = "airalarm_electronics"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/electronics/airalarm
|
||||
category = list("initial", "Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/firealarm_electronics
|
||||
name = "Fire Alarm Electronics"
|
||||
id = "firealarm_electronics"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/electronics/firealarm
|
||||
category = list("initial", "Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/camera
|
||||
name = "Camera"
|
||||
id = "camera"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 100)
|
||||
build_path = /obj/item/camera
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/camera_film
|
||||
name = "Camera Film Cartridge"
|
||||
id = "camera_film"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10, MAT_GLASS = 10)
|
||||
build_path = /obj/item/camera_film
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/earmuffs
|
||||
name = "Earmuffs"
|
||||
id = "earmuffs"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/clothing/ears/earmuffs
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/pipe_painter
|
||||
name = "Pipe Painter"
|
||||
id = "pipe_painter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 2000)
|
||||
build_path = /obj/item/pipe_painter
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/airlock_painter
|
||||
name = "Airlock Painter"
|
||||
id = "airlock_painter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/airlock_painter
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/metal
|
||||
name = "Metal"
|
||||
id = "metal"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/metal
|
||||
category = list("initial","Construction")
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/glass
|
||||
name = "Glass"
|
||||
id = "glass"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/glass
|
||||
category = list("initial","Construction")
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/rglass
|
||||
name = "Reinforced Glass"
|
||||
id = "rglass"
|
||||
build_type = AUTOLATHE | SMELTER | PROTOLATHE
|
||||
materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/rglass
|
||||
category = list("initial","Construction","Stock Parts")
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/rods
|
||||
name = "Metal Rod"
|
||||
id = "rods"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1000)
|
||||
build_path = /obj/item/stack/rods
|
||||
category = list("initial","Construction")
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/rcd_ammo
|
||||
name = "Compressed Matter Cartridge"
|
||||
id = "rcd_ammo"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 12000, MAT_GLASS=8000)
|
||||
build_path = /obj/item/rcd_ammo
|
||||
category = list("initial","Construction")
|
||||
|
||||
/datum/design/kitchen_knife
|
||||
name = "Kitchen Knife"
|
||||
id = "kitchen_knife"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 12000)
|
||||
build_path = /obj/item/kitchen/knife
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/fork
|
||||
name = "Fork"
|
||||
id = "fork"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 80)
|
||||
build_path = /obj/item/kitchen/fork
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/tray
|
||||
name = "Tray"
|
||||
id = "tray"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 3000)
|
||||
build_path = /obj/item/storage/bag/tray
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/bowl
|
||||
name = "Bowl"
|
||||
id = "bowl"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 500)
|
||||
build_path = /obj/item/reagent_containers/glass/bowl
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/drinking_glass
|
||||
name = "Drinking Glass"
|
||||
id = "drinking_glass"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 500)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/drinkingglass
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/shot_glass
|
||||
name = "Shot Glass"
|
||||
id = "shot_glass"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 100)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/shaker
|
||||
name = "Shaker"
|
||||
id = "shaker"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1500)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/shaker
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/cultivator
|
||||
name = "Cultivator"
|
||||
id = "cultivator"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL=50)
|
||||
build_path = /obj/item/cultivator
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/plant_analyzer
|
||||
name = "Plant Analyzer"
|
||||
id = "plant_analyzer"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30, MAT_GLASS = 20)
|
||||
build_path = /obj/item/plant_analyzer
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/shovel
|
||||
name = "Shovel"
|
||||
id = "shovel"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50)
|
||||
build_path = /obj/item/shovel
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/spade
|
||||
name = "Spade"
|
||||
id = "spade"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50)
|
||||
build_path = /obj/item/shovel/spade
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/hatchet
|
||||
name = "Hatchet"
|
||||
id = "hatchet"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 15000)
|
||||
build_path = /obj/item/hatchet
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/foilhat
|
||||
name = "Tinfoil Hat"
|
||||
id = "tinfoil_hat"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 5500)
|
||||
build_path = /obj/item/clothing/head/foilhat
|
||||
category = list("hacked", "Misc")
|
||||
|
||||
/datum/design/scalpel
|
||||
name = "Scalpel"
|
||||
id = "scalpel"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/scalpel
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/circular_saw
|
||||
name = "Circular Saw"
|
||||
id = "circular_saw"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
|
||||
build_path = /obj/item/circular_saw
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/surgicaldrill
|
||||
name = "Surgical Drill"
|
||||
id = "surgicaldrill"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
|
||||
build_path = /obj/item/surgicaldrill
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/retractor
|
||||
name = "Retractor"
|
||||
id = "retractor"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 6000, MAT_GLASS = 3000)
|
||||
build_path = /obj/item/retractor
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/cautery
|
||||
name = "Cautery"
|
||||
id = "cautery"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 2500, MAT_GLASS = 750)
|
||||
build_path = /obj/item/cautery
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/hemostat
|
||||
name = "Hemostat"
|
||||
id = "hemostat"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 2500)
|
||||
build_path = /obj/item/hemostat
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/beaker
|
||||
name = "Beaker"
|
||||
id = "beaker"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 500)
|
||||
build_path = /obj/item/reagent_containers/glass/beaker
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/large_beaker
|
||||
name = "Large Beaker"
|
||||
id = "large_beaker"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 2500)
|
||||
build_path = /obj/item/reagent_containers/glass/beaker/large
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/healthanalyzer
|
||||
name = "Health Analyzer"
|
||||
id = "healthanalyzer"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
|
||||
build_path = /obj/item/healthanalyzer
|
||||
category = list("initial", "Medical")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/pillbottle
|
||||
name = "Pill Bottle"
|
||||
id = "pillbottle"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 20, MAT_GLASS = 100)
|
||||
build_path = /obj/item/storage/pill_bottle
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/beanbag_slug
|
||||
name = "Beanbag Slug"
|
||||
id = "beanbag_slug"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 250)
|
||||
build_path = /obj/item/ammo_casing/shotgun/beanbag
|
||||
category = list("initial", "Security")
|
||||
|
||||
/datum/design/rubbershot
|
||||
name = "Rubber Shot"
|
||||
id = "rubber_shot"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000)
|
||||
build_path = /obj/item/ammo_casing/shotgun/rubbershot
|
||||
category = list("initial", "Security")
|
||||
|
||||
/datum/design/c38
|
||||
name = "Speed Loader (.38 rubber)"
|
||||
id = "c38"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 20000)
|
||||
build_path = /obj/item/ammo_box/c38
|
||||
category = list("initial", "Security")
|
||||
|
||||
/datum/design/recorder
|
||||
name = "Universal Recorder"
|
||||
id = "recorder"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 60, MAT_GLASS = 30)
|
||||
build_path = /obj/item/taperecorder/empty
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/tape
|
||||
name = "Tape"
|
||||
id = "tape"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 20, MAT_GLASS = 5)
|
||||
build_path = /obj/item/tape/random
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/igniter
|
||||
name = "Igniter"
|
||||
id = "igniter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
|
||||
build_path = /obj/item/assembly/igniter
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/signaler
|
||||
name = "Remote Signaling Device"
|
||||
id = "signaler"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 400, MAT_GLASS = 120)
|
||||
build_path = /obj/item/assembly/signaler
|
||||
category = list("initial", "T-Comm")
|
||||
|
||||
/datum/design/radio_headset
|
||||
name = "Radio Headset"
|
||||
id = "radio_headset"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 75)
|
||||
build_path = /obj/item/radio/headset
|
||||
category = list("initial", "T-Comm")
|
||||
|
||||
/datum/design/bounced_radio
|
||||
name = "Station Bounced Radio"
|
||||
id = "bounced_radio"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 75, MAT_GLASS = 25)
|
||||
build_path = /obj/item/radio/off
|
||||
category = list("initial", "T-Comm")
|
||||
|
||||
/datum/design/intercom_frame
|
||||
name = "Intercom Frame"
|
||||
id = "intercom_frame"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 75, MAT_GLASS = 25)
|
||||
build_path = /obj/item/wallframe/intercom
|
||||
category = list("initial", "T-Comm")
|
||||
|
||||
/datum/design/infrared_emitter
|
||||
name = "Infrared Emitter"
|
||||
id = "infrared_emitter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1000, MAT_GLASS = 500)
|
||||
build_path = /obj/item/assembly/infra
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/health_sensor
|
||||
name = "Health Sensor"
|
||||
id = "health_sensor"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 800, MAT_GLASS = 200)
|
||||
build_path = /obj/item/assembly/health
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/timer
|
||||
name = "Timer"
|
||||
id = "timer"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
|
||||
build_path = /obj/item/assembly/timer
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/voice_analyser
|
||||
name = "Voice Analyser"
|
||||
id = "voice_analyser"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
|
||||
build_path = /obj/item/assembly/voice
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/light_tube
|
||||
name = "Light Tube"
|
||||
id = "light_tube"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 100)
|
||||
build_path = /obj/item/light/tube
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/light_bulb
|
||||
name = "Light Bulb"
|
||||
id = "light_bulb"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 100)
|
||||
build_path = /obj/item/light/bulb
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/camera_assembly
|
||||
name = "Camera Assembly"
|
||||
id = "camera_assembly"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 400, MAT_GLASS = 250)
|
||||
build_path = /obj/item/wallframe/camera
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/newscaster_frame
|
||||
name = "Newscaster Frame"
|
||||
id = "newscaster_frame"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 14000, MAT_GLASS = 8000)
|
||||
build_path = /obj/item/wallframe/newscaster
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/syringe
|
||||
name = "Syringe"
|
||||
id = "syringe"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10, MAT_GLASS = 20)
|
||||
build_path = /obj/item/reagent_containers/syringe
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/prox_sensor
|
||||
name = "Proximity Sensor"
|
||||
id = "prox_sensor"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 800, MAT_GLASS = 200)
|
||||
build_path = /obj/item/assembly/prox_sensor
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_dart
|
||||
name = "Box of Foam Darts"
|
||||
id = "foam_dart"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500)
|
||||
build_path = /obj/item/ammo_box/foambox
|
||||
category = list("initial", "Misc")
|
||||
|
||||
//hacked autolathe recipes
|
||||
/datum/design/flamethrower
|
||||
name = "Flamethrower"
|
||||
id = "flamethrower"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500)
|
||||
build_path = /obj/item/flamethrower/full
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/rcd
|
||||
name = "Rapid Construction Device (RCD)"
|
||||
id = "rcd"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/construction/rcd
|
||||
category = list("hacked", "Construction")
|
||||
|
||||
/datum/design/rpd
|
||||
name = "Rapid Pipe Dispenser (RPD)"
|
||||
id = "rpd"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 75000, MAT_GLASS = 37500)
|
||||
build_path = /obj/item/pipe_dispenser
|
||||
category = list("hacked", "Construction")
|
||||
|
||||
/datum/design/electropack
|
||||
name = "Electropack"
|
||||
id = "electropack"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_GLASS = 2500)
|
||||
build_path = /obj/item/electropack
|
||||
category = list("hacked", "Tools")
|
||||
|
||||
/datum/design/large_welding_tool
|
||||
name = "Industrial Welding Tool"
|
||||
id = "large_welding_tool"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 70, MAT_GLASS = 60)
|
||||
build_path = /obj/item/weldingtool/largetank
|
||||
category = list("hacked", "Tools")
|
||||
|
||||
/datum/design/handcuffs
|
||||
name = "Handcuffs"
|
||||
id = "handcuffs"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500)
|
||||
build_path = /obj/item/restraints/handcuffs
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/receiver
|
||||
name = "Modular Receiver"
|
||||
id = "receiver"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 15000)
|
||||
build_path = /obj/item/weaponcrafting/receiver
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/shotgun_slug
|
||||
name = "Shotgun Slug"
|
||||
id = "shotgun_slug"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000)
|
||||
build_path = /obj/item/ammo_casing/shotgun
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/buckshot_shell
|
||||
name = "Buckshot Shell"
|
||||
id = "buckshot_shell"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000)
|
||||
build_path = /obj/item/ammo_casing/shotgun/buckshot
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/shotgun_dart
|
||||
name = "Shotgun Dart"
|
||||
id = "shotgun_dart"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000)
|
||||
build_path = /obj/item/ammo_casing/shotgun/dart
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/incendiary_slug
|
||||
name = "Incendiary Slug"
|
||||
id = "incendiary_slug"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000)
|
||||
build_path = /obj/item/ammo_casing/shotgun/incendiary
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/riot_dart
|
||||
name = "Foam Riot Dart"
|
||||
id = "riot_dart"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1000) //Discount for making individually - no box = less metal!
|
||||
build_path = /obj/item/ammo_casing/caseless/foam_dart/riot
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/riot_darts
|
||||
name = "Foam Riot Dart Box"
|
||||
id = "riot_darts"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50000) //Comes with 40 darts
|
||||
build_path = /obj/item/ammo_box/foambox/riot
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/a357
|
||||
name = "Speed Loader (.357)"
|
||||
id = "a357"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/ammo_box/a357
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/c10mm
|
||||
name = "Ammo Box (10mm)"
|
||||
id = "c10mm"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/ammo_box/c10mm
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/c45
|
||||
name = "Ammo Box (.45)"
|
||||
id = "c45"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/ammo_box/c45
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/c9mm
|
||||
name = "Ammo Box (9mm)"
|
||||
id = "c9mm"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/ammo_box/c9mm
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/cleaver
|
||||
name = "Butcher's Cleaver"
|
||||
id = "cleaver"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 18000)
|
||||
build_path = /obj/item/kitchen/knife/butcher
|
||||
category = list("hacked", "Dinnerware")
|
||||
|
||||
/datum/design/spraycan
|
||||
name = "Spraycan"
|
||||
id = "spraycan"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
|
||||
build_path = /obj/item/toy/crayon/spraycan
|
||||
category = list("initial", "Tools")
|
||||
|
||||
/datum/design/desttagger
|
||||
name = "Destination Tagger"
|
||||
id = "desttagger"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 250, MAT_GLASS = 125)
|
||||
build_path = /obj/item/destTagger
|
||||
category = list("initial", "Electronics")
|
||||
|
||||
/datum/design/handlabeler
|
||||
name = "Hand Labeler"
|
||||
id = "handlabel"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 150, MAT_GLASS = 125)
|
||||
build_path = /obj/item/hand_labeler
|
||||
category = list("initial", "Electronics")
|
||||
|
||||
/datum/design/geiger
|
||||
name = "Geiger Counter"
|
||||
id = "geigercounter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 150, MAT_GLASS = 150)
|
||||
build_path = /obj/item/geiger_counter
|
||||
category = list("initial", "Tools")
|
||||
|
||||
/datum/design/turret_control_frame
|
||||
name = "Turret Control Frame"
|
||||
id = "turret_control"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 12000)
|
||||
build_path = /obj/item/wallframe/turret_control
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/conveyor_belt
|
||||
name = "Conveyor Belt"
|
||||
id = "conveyor_belt"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 5000)
|
||||
build_path = /obj/item/conveyor_construct
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/conveyor_switch
|
||||
name = "Conveyor Belt Switch"
|
||||
id = "conveyor_switch"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 450, MAT_GLASS = 190)
|
||||
build_path = /obj/item/conveyor_switch_construct
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/laptop
|
||||
name = "Laptop Frame"
|
||||
id = "laptop"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/modular_computer/laptop/buildable
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/tablet
|
||||
name = "Tablet Frame"
|
||||
id = "tablet"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/modular_computer/tablet
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/slime_scanner
|
||||
name = "Slime Scanner"
|
||||
id = "slime_scanner"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 200)
|
||||
build_path = /obj/item/slime_scanner
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/pet_carrier
|
||||
name = "Pet Carrier"
|
||||
id = "pet_carrier"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 7500, MAT_GLASS = 100)
|
||||
build_path = /obj/item/pet_carrier
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/miniature_power_cell
|
||||
name = "Light Fixture Battery"
|
||||
id = "miniature_power_cell"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 20)
|
||||
build_path = /obj/item/stock_parts/cell/emergency_light
|
||||
category = list("initial", "Electronics")
|
||||
|
||||
/datum/design/packageWrap
|
||||
name = "Package Wrapping"
|
||||
id = "packagewrap"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 200)
|
||||
build_path = /obj/item/stack/packageWrap
|
||||
category = list("initial", "Misc")
|
||||
maxstack = 30
|
||||
|
||||
/datum/design/holodisk
|
||||
name = "Holodisk"
|
||||
id = "holodisk"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/holodisk
|
||||
category = list("initial", "Misc")
|
||||
@@ -0,0 +1,108 @@
|
||||
///////////////////////////////////
|
||||
//////////Autolathe Designs ///////
|
||||
///////////////////////////////////
|
||||
|
||||
|
||||
////////////////
|
||||
///Construction//
|
||||
////////////////
|
||||
|
||||
/datum/design/rods
|
||||
name = "Metal Rod"
|
||||
id = "rods"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1000)
|
||||
build_path = /obj/item/stack/rods
|
||||
category = list("initial","Construction")
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/metal
|
||||
name = "Metal"
|
||||
id = "metal"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/metal
|
||||
category = list("initial","Construction")
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/glass
|
||||
name = "Glass"
|
||||
id = "glass"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/glass
|
||||
category = list("initial","Construction")
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/rglass
|
||||
name = "Reinforced Glass"
|
||||
id = "rglass"
|
||||
build_type = AUTOLATHE | SMELTER | PROTOLATHE
|
||||
materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/rglass
|
||||
category = list("initial","Construction","Stock Parts")
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/light_tube
|
||||
name = "Light Tube"
|
||||
id = "light_tube"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 100)
|
||||
build_path = /obj/item/light/tube
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/light_bulb
|
||||
name = "Light Bulb"
|
||||
id = "light_bulb"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 100)
|
||||
build_path = /obj/item/light/bulb
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/camera_assembly
|
||||
name = "Camera Assembly"
|
||||
id = "camera_assembly"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 400, MAT_GLASS = 250)
|
||||
build_path = /obj/item/wallframe/camera
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/newscaster_frame
|
||||
name = "Newscaster Frame"
|
||||
id = "newscaster_frame"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 14000, MAT_GLASS = 8000)
|
||||
build_path = /obj/item/wallframe/newscaster
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/turret_control_frame
|
||||
name = "Turret Control Frame"
|
||||
id = "turret_control"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 12000)
|
||||
build_path = /obj/item/wallframe/turret_control
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/conveyor_belt
|
||||
name = "Conveyor Belt"
|
||||
id = "conveyor_belt"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 5000)
|
||||
build_path = /obj/item/conveyor_construct
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/conveyor_switch
|
||||
name = "Conveyor Belt Switch"
|
||||
id = "conveyor_switch"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 450, MAT_GLASS = 190)
|
||||
build_path = /obj/item/conveyor_switch_construct
|
||||
category = list("initial", "Construction")
|
||||
|
||||
/datum/design/rcd_ammo
|
||||
name = "Compressed Matter Cartridge"
|
||||
id = "rcd_ammo"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 12000, MAT_GLASS=8000)
|
||||
build_path = /obj/item/rcd_ammo
|
||||
category = list("initial","Construction")
|
||||
@@ -0,0 +1,76 @@
|
||||
///////////////////////////////////
|
||||
//////////Autolathe Designs ///////
|
||||
///////////////////////////////////
|
||||
|
||||
////////////////
|
||||
///Electronics//
|
||||
////////////////
|
||||
|
||||
/datum/design/apc_board
|
||||
name = "APC Module"
|
||||
id = "power control"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
|
||||
build_path = /obj/item/electronics/apc
|
||||
category = list("initial", "Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/airlock_board
|
||||
name = "Airlock Electronics"
|
||||
id = "airlock_board"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/electronics/airlock
|
||||
category = list("initial", "Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/firelock_board
|
||||
name = "Firelock Circuitry"
|
||||
id = "firelock_board"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/electronics/firelock
|
||||
category = list("initial", "Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/airalarm_electronics
|
||||
name = "Air Alarm Electronics"
|
||||
id = "airalarm_electronics"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/electronics/airalarm
|
||||
category = list("initial", "Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/firealarm_electronics
|
||||
name = "Fire Alarm Electronics"
|
||||
id = "firealarm_electronics"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/electronics/firealarm
|
||||
category = list("initial", "Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/desttagger
|
||||
name = "Destination Tagger"
|
||||
id = "desttagger"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 250, MAT_GLASS = 125)
|
||||
build_path = /obj/item/destTagger
|
||||
category = list("initial", "Electronics")
|
||||
|
||||
/datum/design/handlabeler
|
||||
name = "Hand Labeler"
|
||||
id = "handlabel"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 150, MAT_GLASS = 125)
|
||||
build_path = /obj/item/hand_labeler
|
||||
category = list("initial", "Electronics")
|
||||
|
||||
/datum/design/miniature_power_cell
|
||||
name = "Light Fixture Battery"
|
||||
id = "miniature_power_cell"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 20)
|
||||
build_path = /obj/item/stock_parts/cell/emergency_light
|
||||
category = list("initial", "Electronics")
|
||||
+179
@@ -0,0 +1,179 @@
|
||||
///////////////////////////////////
|
||||
//////////Autolathe Designs ///////
|
||||
///////////////////////////////////
|
||||
////////////////
|
||||
////Dinnerware//
|
||||
////////////////
|
||||
|
||||
/datum/design/kitchen_knife
|
||||
name = "Kitchen Knife"
|
||||
id = "kitchen_knife"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 12000)
|
||||
build_path = /obj/item/kitchen/knife
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/fork
|
||||
name = "Fork"
|
||||
id = "fork"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 80)
|
||||
build_path = /obj/item/kitchen/fork
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/tray
|
||||
name = "Tray"
|
||||
id = "tray"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 3000)
|
||||
build_path = /obj/item/storage/bag/tray
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/bowl
|
||||
name = "Bowl"
|
||||
id = "bowl"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 500)
|
||||
build_path = /obj/item/reagent_containers/glass/bowl
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/drinking_glass
|
||||
name = "Drinking Glass"
|
||||
id = "drinking_glass"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 500)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/drinkingglass
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/shot_glass
|
||||
name = "Shot Glass"
|
||||
id = "shot_glass"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 100)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/shaker
|
||||
name = "Shaker"
|
||||
id = "shaker"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1500)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/shaker
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
////////////
|
||||
///Medical//
|
||||
////////////
|
||||
|
||||
/datum/design/scalpel
|
||||
name = "Scalpel"
|
||||
id = "scalpel"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/scalpel
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/circular_saw
|
||||
name = "Circular Saw"
|
||||
id = "circular_saw"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
|
||||
build_path = /obj/item/circular_saw
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/surgicaldrill
|
||||
name = "Surgical Drill"
|
||||
id = "surgicaldrill"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
|
||||
build_path = /obj/item/surgicaldrill
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/retractor
|
||||
name = "Retractor"
|
||||
id = "retractor"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 6000, MAT_GLASS = 3000)
|
||||
build_path = /obj/item/retractor
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/cautery
|
||||
name = "Cautery"
|
||||
id = "cautery"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 2500, MAT_GLASS = 750)
|
||||
build_path = /obj/item/cautery
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/hemostat
|
||||
name = "Hemostat"
|
||||
id = "hemostat"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 2500)
|
||||
build_path = /obj/item/hemostat
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/beaker
|
||||
name = "Beaker"
|
||||
id = "beaker"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 500)
|
||||
build_path = /obj/item/reagent_containers/glass/beaker
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/large_beaker
|
||||
name = "Large Beaker"
|
||||
id = "large_beaker"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_GLASS = 2500)
|
||||
build_path = /obj/item/reagent_containers/glass/beaker/large
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/healthanalyzer
|
||||
name = "Health Analyzer"
|
||||
id = "healthanalyzer"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
|
||||
build_path = /obj/item/healthanalyzer
|
||||
category = list("initial", "Medical")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/pillbottle
|
||||
name = "Pill Bottle"
|
||||
id = "pillbottle"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 20, MAT_GLASS = 100)
|
||||
build_path = /obj/item/storage/pill_bottle
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/syringe
|
||||
name = "Syringe"
|
||||
id = "syringe"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10, MAT_GLASS = 20)
|
||||
build_path = /obj/item/reagent_containers/syringe
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/health_sensor
|
||||
name = "Health Sensor"
|
||||
id = "health_sensor"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 800, MAT_GLASS = 200)
|
||||
build_path = /obj/item/assembly/health
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/hypovialsmall
|
||||
name = "Hypovial"
|
||||
id = "hypovial"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500)
|
||||
build_path = /obj/item/reagent_containers/glass/bottle/vial/small
|
||||
category = list("initial","Medical")
|
||||
|
||||
/datum/design/hypoviallarge
|
||||
name = "Large Hypovial"
|
||||
id = "large_hypovial"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 2500)
|
||||
build_path = /obj/item/reagent_containers/glass/bottle/vial/large
|
||||
category = list("initial","Medical")
|
||||
@@ -0,0 +1,186 @@
|
||||
///////////////////////////////////
|
||||
//////////Autolathe Designs ///////
|
||||
///////////////////////////////////
|
||||
/////////////
|
||||
////Secgear//
|
||||
/////////////
|
||||
|
||||
/datum/design/beanbag_slug
|
||||
name = "Beanbag Slug"
|
||||
id = "beanbag_slug"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 250)
|
||||
build_path = /obj/item/ammo_casing/shotgun/beanbag
|
||||
category = list("initial", "Security")
|
||||
|
||||
/datum/design/rubbershot
|
||||
name = "Rubber Shot"
|
||||
id = "rubber_shot"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000)
|
||||
build_path = /obj/item/ammo_casing/shotgun/rubbershot
|
||||
category = list("initial", "Security")
|
||||
|
||||
/datum/design/c38
|
||||
name = "Speed Loader (.38 rubber)"
|
||||
id = "c38"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 20000)
|
||||
build_path = /obj/item/ammo_box/c38
|
||||
category = list("initial", "Security")
|
||||
|
||||
/////////////////
|
||||
///Hacked Gear //
|
||||
/////////////////
|
||||
|
||||
/datum/design/large_welding_tool
|
||||
name = "Industrial Welding Tool"
|
||||
id = "large_welding_tool"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 70, MAT_GLASS = 60)
|
||||
build_path = /obj/item/weldingtool/largetank
|
||||
category = list("hacked", "Tools")
|
||||
|
||||
/datum/design/flamethrower
|
||||
name = "Flamethrower"
|
||||
id = "flamethrower"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500)
|
||||
build_path = /obj/item/flamethrower/full
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/rcd
|
||||
name = "Rapid Construction Device (RCD)"
|
||||
id = "rcd"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/construction/rcd
|
||||
category = list("hacked", "Construction")
|
||||
|
||||
/datum/design/rpd
|
||||
name = "Rapid Pipe Dispenser (RPD)"
|
||||
id = "rpd"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 75000, MAT_GLASS = 37500)
|
||||
build_path = /obj/item/pipe_dispenser
|
||||
category = list("hacked", "Construction")
|
||||
|
||||
/datum/design/handcuffs
|
||||
name = "Handcuffs"
|
||||
id = "handcuffs"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500)
|
||||
build_path = /obj/item/restraints/handcuffs
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/receiver
|
||||
name = "Modular Receiver"
|
||||
id = "receiver"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 15000)
|
||||
build_path = /obj/item/weaponcrafting/receiver
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/shotgun_slug
|
||||
name = "Shotgun Slug"
|
||||
id = "shotgun_slug"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000)
|
||||
build_path = /obj/item/ammo_casing/shotgun
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/buckshot_shell
|
||||
name = "Buckshot Shell"
|
||||
id = "buckshot_shell"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000)
|
||||
build_path = /obj/item/ammo_casing/shotgun/buckshot
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/shotgun_dart
|
||||
name = "Shotgun Dart"
|
||||
id = "shotgun_dart"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000)
|
||||
build_path = /obj/item/ammo_casing/shotgun/dart
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/incendiary_slug
|
||||
name = "Incendiary Slug"
|
||||
id = "incendiary_slug"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 4000)
|
||||
build_path = /obj/item/ammo_casing/shotgun/incendiary
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/riot_dart
|
||||
name = "Foam Riot Dart"
|
||||
id = "riot_dart"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1000) //Discount for making individually - no box = less metal!
|
||||
build_path = /obj/item/ammo_casing/caseless/foam_dart/riot
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/riot_darts
|
||||
name = "Foam Riot Dart Box"
|
||||
id = "riot_darts"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50000) //Comes with 40 darts
|
||||
build_path = /obj/item/ammo_box/foambox/riot
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/a357
|
||||
name = "Speed Loader (.357)"
|
||||
id = "a357"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/ammo_box/a357
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/c10mm
|
||||
name = "Ammo Box (10mm)"
|
||||
id = "c10mm"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/ammo_box/c10mm
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/c45
|
||||
name = "Ammo Box (.45)"
|
||||
id = "c45"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/ammo_box/c45
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/c9mm
|
||||
name = "Ammo Box (9mm)"
|
||||
id = "c9mm"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/ammo_box/c9mm
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/electropack
|
||||
name = "Electropack"
|
||||
id = "electropack"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_GLASS = 2500)
|
||||
build_path = /obj/item/electropack
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/cleaver
|
||||
name = "Butcher's Cleaver"
|
||||
id = "cleaver"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 18000)
|
||||
build_path = /obj/item/kitchen/knife/butcher
|
||||
category = list("hacked", "Dinnerware")
|
||||
|
||||
/datum/design/foilhat
|
||||
name = "Tinfoil Hat"
|
||||
id = "tinfoil_hat"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 5500)
|
||||
build_path = /obj/item/clothing/head/foilhat
|
||||
category = list("hacked", "Misc")
|
||||
@@ -0,0 +1,251 @@
|
||||
///////////////////////////////////
|
||||
//////////Autolathe Designs ///////
|
||||
///////////////////////////////////
|
||||
/////////////
|
||||
////T-Comms//
|
||||
/////////////
|
||||
|
||||
/datum/design/signaler
|
||||
name = "Remote Signaling Device"
|
||||
id = "signaler"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 400, MAT_GLASS = 120)
|
||||
build_path = /obj/item/assembly/signaler
|
||||
category = list("initial", "T-Comm")
|
||||
|
||||
/datum/design/radio_headset
|
||||
name = "Radio Headset"
|
||||
id = "radio_headset"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 75)
|
||||
build_path = /obj/item/radio/headset
|
||||
category = list("initial", "T-Comm")
|
||||
|
||||
/datum/design/bounced_radio
|
||||
name = "Station Bounced Radio"
|
||||
id = "bounced_radio"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 75, MAT_GLASS = 25)
|
||||
build_path = /obj/item/radio/off
|
||||
category = list("initial", "T-Comm")
|
||||
|
||||
/datum/design/intercom_frame
|
||||
name = "Intercom Frame"
|
||||
id = "intercom_frame"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 75, MAT_GLASS = 25)
|
||||
build_path = /obj/item/wallframe/intercom
|
||||
category = list("initial", "T-Comm")
|
||||
|
||||
/////////////
|
||||
////MISC/////
|
||||
/////////////
|
||||
|
||||
/datum/design/camera
|
||||
name = "Camera"
|
||||
id = "camera"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 100)
|
||||
build_path = /obj/item/camera
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/camera_film
|
||||
name = "Camera Film Cartridge"
|
||||
id = "camera_film"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10, MAT_GLASS = 10)
|
||||
build_path = /obj/item/camera_film
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/earmuffs
|
||||
name = "Earmuffs"
|
||||
id = "earmuffs"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/clothing/ears/earmuffs
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/pipe_painter
|
||||
name = "Pipe Painter"
|
||||
id = "pipe_painter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 2000)
|
||||
build_path = /obj/item/pipe_painter
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/airlock_painter
|
||||
name = "Airlock Painter"
|
||||
id = "airlock_painter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/airlock_painter
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/cultivator
|
||||
name = "Cultivator"
|
||||
id = "cultivator"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL=50)
|
||||
build_path = /obj/item/cultivator
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/plant_analyzer
|
||||
name = "Plant Analyzer"
|
||||
id = "plant_analyzer"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30, MAT_GLASS = 20)
|
||||
build_path = /obj/item/plant_analyzer
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/shovel
|
||||
name = "Shovel"
|
||||
id = "shovel"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50)
|
||||
build_path = /obj/item/shovel
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/spade
|
||||
name = "Spade"
|
||||
id = "spade"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50)
|
||||
build_path = /obj/item/shovel/spade
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/hatchet
|
||||
name = "Hatchet"
|
||||
id = "hatchet"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 15000)
|
||||
build_path = /obj/item/hatchet
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/recorder
|
||||
name = "Universal Recorder"
|
||||
id = "recorder"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 60, MAT_GLASS = 30)
|
||||
build_path = /obj/item/taperecorder/empty
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/tape
|
||||
name = "Tape"
|
||||
id = "tape"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 20, MAT_GLASS = 5)
|
||||
build_path = /obj/item/tape/random
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/igniter
|
||||
name = "Igniter"
|
||||
id = "igniter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
|
||||
build_path = /obj/item/assembly/igniter
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/infrared_emitter
|
||||
name = "Infrared Emitter"
|
||||
id = "infrared_emitter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1000, MAT_GLASS = 500)
|
||||
build_path = /obj/item/assembly/infra
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/timer
|
||||
name = "Timer"
|
||||
id = "timer"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
|
||||
build_path = /obj/item/assembly/timer
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/voice_analyser
|
||||
name = "Voice Analyser"
|
||||
id = "voice_analyser"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
|
||||
build_path = /obj/item/assembly/voice
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/prox_sensor
|
||||
name = "Proximity Sensor"
|
||||
id = "prox_sensor"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 800, MAT_GLASS = 200)
|
||||
build_path = /obj/item/assembly/prox_sensor
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_dart
|
||||
name = "Box of Foam Darts"
|
||||
id = "foam_dart"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500)
|
||||
build_path = /obj/item/ammo_box/foambox
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/laptop
|
||||
name = "Laptop Frame"
|
||||
id = "laptop"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/modular_computer/laptop/buildable
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/tablet
|
||||
name = "Tablet Frame"
|
||||
id = "tablet"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/modular_computer/tablet
|
||||
category = list("initial","Misc")
|
||||
|
||||
/datum/design/slime_scanner
|
||||
name = "Slime Scanner"
|
||||
id = "slime_scanner"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 200)
|
||||
build_path = /obj/item/slime_scanner
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/pet_carrier
|
||||
name = "Pet Carrier"
|
||||
id = "pet_carrier"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 7500, MAT_GLASS = 100)
|
||||
build_path = /obj/item/pet_carrier
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/packageWrap
|
||||
name = "Package Wrapping"
|
||||
id = "packagewrap"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 200)
|
||||
build_path = /obj/item/stack/packageWrap
|
||||
category = list("initial", "Misc")
|
||||
maxstack = 30
|
||||
|
||||
/datum/design/holodisk
|
||||
name = "Holodisk"
|
||||
id = "holodisk"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/holodisk
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/lock_collar
|
||||
name = "Lockable Collar"
|
||||
id = "lock_collar"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1200, MAT_GLASS = 100)
|
||||
build_path = /obj/item/clothing/neck/petcollar/locked
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/collar_key
|
||||
name = "Collar Key"
|
||||
id = "collar_key"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 150)
|
||||
build_path = /obj/item/key/collar
|
||||
category = list("initial", "Misc")
|
||||
@@ -0,0 +1,150 @@
|
||||
///////////////////////////////////
|
||||
//////////Autolathe Designs ///////
|
||||
///////////////////////////////////
|
||||
///////////
|
||||
///Tools //
|
||||
///////////
|
||||
/datum/design/bucket
|
||||
name = "Bucket"
|
||||
id = "bucket"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 200)
|
||||
build_path = /obj/item/reagent_containers/glass/bucket
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/crowbar
|
||||
name = "Pocket Crowbar"
|
||||
id = "crowbar"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50)
|
||||
build_path = /obj/item/crowbar
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/flashlight
|
||||
name = "Flashlight"
|
||||
id = "flashlight"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 20)
|
||||
build_path = /obj/item/flashlight
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/extinguisher
|
||||
name = "Fire Extinguisher"
|
||||
id = "extinguisher"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 90)
|
||||
build_path = /obj/item/extinguisher
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/pocketfireextinguisher
|
||||
name = "Pocket Fire Extinguisher"
|
||||
id = "pocketfireextinguisher"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 40)
|
||||
build_path = /obj/item/extinguisher/mini
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/multitool
|
||||
name = "Multitool"
|
||||
id = "multitool"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 20)
|
||||
build_path = /obj/item/multitool
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/analyzer
|
||||
name = "Analyzer"
|
||||
id = "analyzer"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30, MAT_GLASS = 20)
|
||||
build_path = /obj/item/analyzer
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/tscanner
|
||||
name = "T-Ray Scanner"
|
||||
id = "tscanner"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 150)
|
||||
build_path = /obj/item/t_scanner
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/weldingtool
|
||||
name = "Welding Tool"
|
||||
id = "welding_tool"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 70, MAT_GLASS = 20)
|
||||
build_path = /obj/item/weldingtool
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/mini_weldingtool
|
||||
name = "Emergency Welding Tool"
|
||||
id = "mini_welding_tool"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30, MAT_GLASS = 10)
|
||||
build_path = /obj/item/weldingtool/mini
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/screwdriver
|
||||
name = "Screwdriver"
|
||||
id = "screwdriver"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 75)
|
||||
build_path = /obj/item/screwdriver
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/wirecutters
|
||||
name = "Wirecutters"
|
||||
id = "wirecutters"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 80)
|
||||
build_path = /obj/item/wirecutters
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/wrench
|
||||
name = "Wrench"
|
||||
id = "wrench"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 150)
|
||||
build_path = /obj/item/wrench
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/welding_helmet
|
||||
name = "Welding Helmet"
|
||||
id = "welding_helmet"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1750, MAT_GLASS = 400)
|
||||
build_path = /obj/item/clothing/head/welding
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/cable_coil
|
||||
name = "Cable Coil"
|
||||
id = "cable_coil"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 10, MAT_GLASS = 5)
|
||||
build_path = /obj/item/stack/cable_coil/random
|
||||
category = list("initial","Tools")
|
||||
maxstack = 30
|
||||
|
||||
/datum/design/toolbox
|
||||
name = "Toolbox"
|
||||
id = "tool_box"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500)
|
||||
build_path = /obj/item/storage/toolbox
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/spraycan
|
||||
name = "Spraycan"
|
||||
id = "spraycan"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
|
||||
build_path = /obj/item/toy/crayon/spraycan
|
||||
category = list("initial", "Tools")
|
||||
|
||||
/datum/design/geiger
|
||||
name = "Geiger Counter"
|
||||
id = "geigercounter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 150, MAT_GLASS = 150)
|
||||
build_path = /obj/item/geiger_counter
|
||||
category = list("initial", "Tools")
|
||||
@@ -24,6 +24,17 @@
|
||||
dangerous_construction = TRUE
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/satchel_holding
|
||||
name = "Satchel of Holding"
|
||||
desc = "A satchel that opens into a localized pocket of bluespace."
|
||||
id = "satchel_holding"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GOLD = 3000, MAT_DIAMOND = 1500, MAT_URANIUM = 250, MAT_BLUESPACE = 2000)
|
||||
build_path = /obj/item/storage/backpack/holding/satchel
|
||||
category = list("Bluespace Designs")
|
||||
dangerous_construction = TRUE
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/biobag_holding
|
||||
name = "Bio Bag of Holding"
|
||||
desc = "A chemical holding thingy. Mostly used for xenobiology."
|
||||
|
||||
@@ -196,8 +196,8 @@
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defib_heal
|
||||
name = "Defibrillartor Healing disk"
|
||||
desc = "A disk allowing for greater amounts of healing"
|
||||
name = "Defibrillator Healing disk"
|
||||
desc = "An upgrade which increases the healing power of the defibrillator"
|
||||
id = "defib_heal"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000)
|
||||
@@ -207,8 +207,8 @@
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defib_shock
|
||||
name = "Defibrillartor Anit-Shock Disk"
|
||||
desc = "A disk that helps agains shocking anyone, other then the intented target"
|
||||
name = "Defibrillator Anti-Shock Disk"
|
||||
desc = "A safety upgrade that guarantees only the patient will get shocked"
|
||||
id = "defib_shock"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000)
|
||||
@@ -218,8 +218,8 @@
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defib_decay
|
||||
name = "Defibrillartor Body-Decay extender Disk"
|
||||
desc = "A disk that helps defibrillator revive the longer decayed dead"
|
||||
name = "Defibrillator Body-Decay Extender Disk"
|
||||
desc = "An upgrade allowing the defibrillator to work on more decayed bodies"
|
||||
id = "defib_decay"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 16000, MAT_SILVER = 6000, MAT_TITANIUM = 2000)
|
||||
@@ -229,8 +229,8 @@
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defib_speed
|
||||
name = "Defibrllartor Pre-Primer Disk"
|
||||
desc = "A disk that cuts the time charg time in half for defibrillator use"
|
||||
name = "Defibrillator Fast Charge Disk"
|
||||
desc = "An upgrade to the defibrillator capacitors, which let it charge faster"
|
||||
id = "defib_speed"
|
||||
build_type = PROTOLATHE
|
||||
build_path = /obj/item/disk/medical/defib_speed
|
||||
|
||||
@@ -102,8 +102,8 @@
|
||||
|
||||
/datum/techweb_node/adv_defibrillator_tec
|
||||
id = "adv_defibrillator_tec"
|
||||
display_name = "Adv Defibrillator tec"
|
||||
description = "More ways to bring back the freshly dead."
|
||||
display_name = "Defibrillator Upgrades"
|
||||
description = "More ways to bring back the newly dead."
|
||||
prereq_ids = list("adv_biotech", "exp_surgery", "adv_engi", "adv_power")
|
||||
design_ids = list("defib_decay", "defib_shock", "defib_heal", "defib_speed")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
@@ -246,7 +246,7 @@
|
||||
display_name = "Bluespace Pockets"
|
||||
description = "Studies into the mysterious alternate dimension known as bluespace and how to place items in the threads of reality."
|
||||
prereq_ids = list("adv_power", "adv_bluespace", "adv_biotech", "adv_plasma")
|
||||
design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash")
|
||||
design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5500)
|
||||
export_price = 5000
|
||||
/////////////////////////plasma tech/////////////////////////
|
||||
|
||||
@@ -45,7 +45,8 @@
|
||||
var/species_color = ""
|
||||
var/mutation_color = ""
|
||||
var/no_update = 0
|
||||
var/body_markings //for bodypart markings
|
||||
var/body_markings = "" //for bodypart markings
|
||||
var/body_markings_icon = 'modular_citadel/icons/mob/mam_markings.dmi'
|
||||
var/list/markings_color = list()
|
||||
var/auxmarking
|
||||
var/list/auxmarking_color = list()
|
||||
@@ -260,6 +261,7 @@
|
||||
icon = DEFAULT_BODYPART_ICON_ORGANIC
|
||||
else if(status == BODYPART_ROBOTIC)
|
||||
icon = DEFAULT_BODYPART_ICON_ROBOTIC
|
||||
body_markings = null
|
||||
|
||||
if(owner)
|
||||
owner.updatehealth()
|
||||
@@ -332,14 +334,18 @@
|
||||
species_color = ""
|
||||
|
||||
if("mam_body_markings" in S.default_features)
|
||||
var/datum/sprite_accessory/Smark
|
||||
Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]]
|
||||
if(H.dna.features.["mam_body_markings"] != "None")
|
||||
body_markings_icon = Smark.icon
|
||||
body_markings = lowertext(H.dna.features.["mam_body_markings"])
|
||||
if(MATRIXED)
|
||||
markings_color = list(colorlist)
|
||||
else
|
||||
body_markings = "plain"
|
||||
markings_color = (H.dna.features.["mcolor"])
|
||||
else
|
||||
body_markings = "None"
|
||||
body_markings = null
|
||||
markings_color = ""
|
||||
|
||||
if(!dropping_limb && H.dna.check_mutation(HULK))
|
||||
@@ -354,6 +360,7 @@
|
||||
|
||||
if(status == BODYPART_ROBOTIC)
|
||||
dmg_overlay_type = "robotic"
|
||||
body_markings = null
|
||||
|
||||
if(dropping_limb)
|
||||
no_update = TRUE //when attached, the limb won't be affected by the appearance changes of its mob owner.
|
||||
@@ -378,6 +385,8 @@
|
||||
. = list()
|
||||
|
||||
var/image_dir = 0
|
||||
var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable
|
||||
|
||||
if(dropped)
|
||||
image_dir = SOUTH
|
||||
if(dmg_overlay_type)
|
||||
@@ -385,11 +394,14 @@
|
||||
. += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_[brutestate]0", -DAMAGE_LAYER, image_dir)
|
||||
if(burnstate)
|
||||
. += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir)
|
||||
if(body_markings)
|
||||
if(use_digitigrade == NOT_DIGITIGRADE)
|
||||
. += image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
if(body_markings && status != BODYPART_ROBOTIC)
|
||||
if(!use_digitigrade)
|
||||
if(BODY_ZONE_CHEST)
|
||||
. += image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
|
||||
else
|
||||
. += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
else
|
||||
. += image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
. += image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
|
||||
var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir)
|
||||
var/image/aux
|
||||
@@ -410,8 +422,6 @@
|
||||
limb.icon_state = "[animal_origin]_[body_zone]"
|
||||
return
|
||||
|
||||
var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable
|
||||
|
||||
if((body_zone != BODY_ZONE_HEAD && body_zone != BODY_ZONE_CHEST))
|
||||
should_draw_gender = FALSE
|
||||
|
||||
@@ -447,9 +457,12 @@
|
||||
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
|
||||
else if(!use_digitigrade)
|
||||
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
if(body_zone == BODY_ZONE_CHEST)
|
||||
marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
|
||||
else
|
||||
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
else
|
||||
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
. += marking
|
||||
|
||||
// Citadel End
|
||||
@@ -461,7 +474,7 @@
|
||||
if(species_id == "husk")
|
||||
auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir)
|
||||
else
|
||||
auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[aux_zone]", -aux_layer, image_dir)
|
||||
auxmarking = image(body_markings_icon, "[body_markings]_[aux_zone]", -aux_layer, image_dir)
|
||||
. += auxmarking
|
||||
|
||||
else
|
||||
@@ -475,21 +488,24 @@
|
||||
. += aux
|
||||
if(body_markings)
|
||||
if(species_id == "husk")
|
||||
auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_[aux_zone]", -aux_layer, image_dir)
|
||||
auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir)
|
||||
else
|
||||
auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[aux_zone]", -aux_layer, image_dir)
|
||||
auxmarking = image(body_markings_icon, "[body_markings]_[aux_zone]", -aux_layer, image_dir)
|
||||
. += auxmarking
|
||||
|
||||
if(body_markings)
|
||||
if(species_id == "husk")
|
||||
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
else if(species_id == "husk" && use_digitigrade)
|
||||
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
|
||||
else if(!use_digitigrade)
|
||||
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
if(body_zone == BODY_ZONE_CHEST)
|
||||
marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
|
||||
else
|
||||
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
else
|
||||
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
|
||||
. += marking
|
||||
return
|
||||
|
||||
|
||||
@@ -178,6 +178,7 @@
|
||||
L.update_limb(fixed_icon, src)
|
||||
if(robotic)
|
||||
L.change_bodypart_status(BODYPART_ROBOTIC)
|
||||
L.body_markings = null
|
||||
. = L
|
||||
|
||||
/mob/living/carbon/monkey/newBodyPart(zone, robotic, fixed_icon)
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/obj/item/nutcracker
|
||||
name = "nutcracker"
|
||||
desc = "It seems quite oversized. You could probably even crush a watermelon with it."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "nutcracker"
|
||||
force = 10
|
||||
flags_1 = CONDUCT_1
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("smashed", "beaten", "crushed")
|
||||
|
||||
/obj/item/nutcracker/proc/gib_head(mob/living/carbon/M)
|
||||
var/obj/item/bodypart/head = M.get_bodypart("head")
|
||||
if(!head)
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(M)
|
||||
var/list/organs = M.getorganszone("head") + M.getorganszone("eyes") + M.getorganszone("mouth")
|
||||
for(var/internal_organ in organs)
|
||||
var/obj/item/organ/I = internal_organ
|
||||
I.Remove(M)
|
||||
I.forceMove(T)
|
||||
head.drop_limb()
|
||||
qdel(head)
|
||||
new M.gib_type(T,1,M.get_static_viruses())
|
||||
M.add_splatter_floor(T)
|
||||
playsound(M, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
//It's a bit of a clusterfuck, but if someone wants, it can be easily repurposed to work on other limbs too.
|
||||
/obj/item/nutcracker/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
. = ..()
|
||||
var/target_zone = "head"
|
||||
var/obj/item/bodypart/target_limb = M.get_bodypart(target_zone)
|
||||
|
||||
if(!get_turf(M))
|
||||
return
|
||||
if(!istype(M))
|
||||
return
|
||||
if(M == user) //just use the suicide verb instead
|
||||
return
|
||||
if(user.zone_selected != "head")
|
||||
return
|
||||
if(!target_limb)
|
||||
to_chat(user, "<span class='notice'>[M] has no [parse_zone(target_zone)]!</span>")
|
||||
return
|
||||
if(!get_location_accessible(M, target_zone))
|
||||
to_chat(user, "<span class='notice'>Expose [M]\s head before trying to crush it!</span>")
|
||||
return
|
||||
|
||||
M.visible_message("<span class='warning'>[user] is trying to crush [M]\s head with \the [src]!</span>")
|
||||
|
||||
var/crush_time = max(0, 400 - target_limb.brute_dam*2)
|
||||
if(do_mob(user, M, crush_time))
|
||||
if(get_location_accessible(M, target_zone)) //Yes, two checks, before and after the timer. What if someone puts a helmet on the guy while you're crushing his head?
|
||||
if(target_limb)//If he still has the head. In case you queue up a lot of these up at once or the guy loses the head while you're removing it.
|
||||
M.visible_message("<span class='warning'>[M]\s head cracks like a watermelon, spilling everything inside, as it becomes an unrecognizable mess!</span>")
|
||||
gib_head(M)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Expose [M]\s head before trying to crush it!</span>")
|
||||
|
||||
|
||||
/obj/item/nutcracker/suicide_act(mob/living/carbon/user)
|
||||
var/obj/item/bodypart/target_limb = user.get_bodypart("head")
|
||||
if(target_limb) //I mean like... for example lings can be still alive without heads.
|
||||
user.visible_message("<span class='suicide'>[user] is crushing [user.p_their()] own head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
if(do_after(user, 30))
|
||||
gib_head(user)
|
||||
else
|
||||
return
|
||||
return (BRUTELOSS)
|
||||
@@ -113,6 +113,10 @@
|
||||
if(owner)
|
||||
to_chat(owner, "<span class ='userdanger'>Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!</span>")
|
||||
|
||||
/obj/item/organ/heart/cursed/Remove(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
M.remove_client_colour(/datum/client_colour/cursed_heart_blood)
|
||||
|
||||
/datum/action/item_action/organ_action/cursed_heart
|
||||
name = "Pump your blood"
|
||||
|
||||
|
||||
@@ -988,6 +988,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
item = /obj/item/storage/backpack/duffelbag/syndie/surgery
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/device_tools/nutcracker
|
||||
name = "Nutcracker"
|
||||
desc = "An oversized version of what you'd initially expect here. Big enough to crush skulls."
|
||||
item = /obj/item/nutcracker
|
||||
cost = 1
|
||||
|
||||
/datum/uplink_item/device_tools/surgerybag_adv
|
||||
name = "Syndicate Surgery Duffel Bag"
|
||||
desc = "The Syndicate surgery duffel bag is a toolkit containing all newest surgery tools, surgical drapes, \
|
||||
@@ -1438,6 +1444,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
cost = 20
|
||||
restricted_roles = list("Assistant")
|
||||
|
||||
/datum/uplink_item/role_restricted/goldenbox
|
||||
name = "Gold Toolbox"
|
||||
desc = "A gold planted plastitanium toolbox loaded with tools. Comes with a set of AI detection multi-tool and a pare of combat gloves."
|
||||
item = /obj/item/storage/toolbox/gold_real
|
||||
cost = 5 // Has synda tools + gloves + a robust weapon
|
||||
restricted_roles = list("Assistant", "Curator") //Curator do to being made of gold - It fits the theme
|
||||
|
||||
/datum/uplink_item/role_restricted/brainwash_disk
|
||||
name = "Brainwashing Surgery Program"
|
||||
desc = "A disk containing the procedure to perform a brainwashing surgery, allowing you to implant an objective onto a target. \
|
||||
|
||||
+107
-107
@@ -6,114 +6,114 @@
|
||||
icon_deny = "clothes-deny"
|
||||
product_slogans = "Dress for success!;Prepare to look swagalicious!;Look at all this free swag!;Why leave style up to fate? Use the ClothesMate!"
|
||||
vend_reply = "Thank you for using the ClothesMate!"
|
||||
products = list(/obj/item/clothing/head/that = 2,
|
||||
/obj/item/clothing/head/fedora = 1,
|
||||
/obj/item/clothing/glasses/monocle = 1,
|
||||
/obj/item/clothing/suit/jacket = 2,
|
||||
/obj/item/clothing/suit/jacket/puffer/vest = 2,
|
||||
/obj/item/clothing/suit/jacket/puffer = 2,
|
||||
/obj/item/clothing/under/suit_jacket/navy = 1,
|
||||
/obj/item/clothing/under/suit_jacket/really_black = 1,
|
||||
/obj/item/clothing/under/suit_jacket/burgundy = 1,
|
||||
/obj/item/clothing/under/suit_jacket/charcoal = 1,
|
||||
/obj/item/clothing/under/suit_jacket/white = 1,
|
||||
/obj/item/clothing/under/kilt = 1,
|
||||
/obj/item/clothing/under/overalls = 1,
|
||||
/obj/item/clothing/under/sl_suit = 1,
|
||||
/obj/item/clothing/under/pants/jeans = 3,
|
||||
/obj/item/clothing/under/pants/classicjeans = 2,
|
||||
/obj/item/clothing/under/pants/camo = 1,
|
||||
/obj/item/clothing/under/pants/blackjeans = 2,
|
||||
/obj/item/clothing/under/pants/khaki = 2,
|
||||
/obj/item/clothing/under/pants/white = 2,
|
||||
/obj/item/clothing/under/pants/red = 1,
|
||||
/obj/item/clothing/under/pants/black = 2,
|
||||
/obj/item/clothing/under/pants/tan = 2,
|
||||
/obj/item/clothing/under/pants/track = 1,
|
||||
/obj/item/clothing/suit/jacket/miljacket = 1,
|
||||
/obj/item/clothing/neck/tie/blue = 1,
|
||||
/obj/item/clothing/neck/tie/red = 1,
|
||||
/obj/item/clothing/neck/tie/black = 1,
|
||||
/obj/item/clothing/neck/tie/horrible = 1,
|
||||
/obj/item/clothing/neck/scarf/pink = 1,
|
||||
/obj/item/clothing/neck/scarf/red = 1,
|
||||
/obj/item/clothing/neck/scarf/green = 1,
|
||||
/obj/item/clothing/neck/scarf/darkblue = 1,
|
||||
/obj/item/clothing/neck/scarf/purple = 1,
|
||||
/obj/item/clothing/neck/scarf/yellow = 1,
|
||||
/obj/item/clothing/neck/scarf/orange = 1,
|
||||
/obj/item/clothing/neck/scarf/cyan = 1,
|
||||
/obj/item/clothing/neck/scarf = 1,
|
||||
/obj/item/clothing/neck/scarf/black = 1,
|
||||
/obj/item/clothing/neck/scarf/zebra = 1,
|
||||
/obj/item/clothing/neck/scarf/christmas = 1,
|
||||
/obj/item/clothing/neck/stripedredscarf = 1,
|
||||
/obj/item/clothing/neck/stripedbluescarf = 1,
|
||||
/obj/item/clothing/neck/stripedgreenscarf = 1,
|
||||
/obj/item/clothing/accessory/waistcoat = 1,
|
||||
/obj/item/clothing/under/skirt/black = 1,
|
||||
/obj/item/clothing/under/skirt/blue = 1,
|
||||
/obj/item/clothing/under/skirt/red = 1,
|
||||
/obj/item/clothing/under/skirt/purple = 1,
|
||||
/obj/item/clothing/under/sundress = 2,
|
||||
/obj/item/clothing/under/stripeddress = 1,
|
||||
/obj/item/clothing/under/sailordress = 1,
|
||||
/obj/item/clothing/under/redeveninggown = 1,
|
||||
/obj/item/clothing/under/blacktango = 1,
|
||||
/obj/item/clothing/under/plaid_skirt = 1,
|
||||
/obj/item/clothing/under/plaid_skirt/blue = 1,
|
||||
/obj/item/clothing/under/plaid_skirt/purple = 1,
|
||||
/obj/item/clothing/under/plaid_skirt/green = 1,
|
||||
/obj/item/clothing/glasses/regular = 1,
|
||||
/obj/item/clothing/glasses/regular/jamjar = 1,
|
||||
/obj/item/clothing/head/sombrero = 1,
|
||||
/obj/item/clothing/suit/poncho = 1,
|
||||
/obj/item/clothing/suit/ianshirt = 1,
|
||||
/obj/item/clothing/shoes/laceup = 2,
|
||||
/obj/item/clothing/shoes/sneakers/black = 4,
|
||||
/obj/item/clothing/shoes/sandal = 1,
|
||||
/obj/item/clothing/gloves/fingerless = 2,
|
||||
/obj/item/clothing/glasses/orange = 1,
|
||||
/obj/item/clothing/glasses/red = 1,
|
||||
/obj/item/storage/belt/fannypack = 1,
|
||||
/obj/item/storage/belt/fannypack/blue = 1,
|
||||
/obj/item/storage/belt/fannypack/red = 1,
|
||||
/obj/item/clothing/suit/jacket/letterman = 2,
|
||||
/obj/item/clothing/head/beanie = 1,
|
||||
/obj/item/clothing/head/beanie/black = 1,
|
||||
/obj/item/clothing/head/beanie/red = 1,
|
||||
/obj/item/clothing/head/beanie/green = 1,
|
||||
/obj/item/clothing/head/beanie/darkblue = 1,
|
||||
/obj/item/clothing/head/beanie/purple = 1,
|
||||
/obj/item/clothing/head/beanie/yellow = 1,
|
||||
/obj/item/clothing/head/beanie/orange = 1,
|
||||
/obj/item/clothing/head/beanie/cyan = 1,
|
||||
/obj/item/clothing/head/beanie/christmas = 1,
|
||||
/obj/item/clothing/head/beanie/striped = 1,
|
||||
/obj/item/clothing/head/beanie/stripedred = 1,
|
||||
/obj/item/clothing/head/beanie/stripedblue = 1,
|
||||
/obj/item/clothing/head/beanie/stripedgreen = 1,
|
||||
/obj/item/clothing/suit/jacket/letterman_red = 1,
|
||||
products = list(/obj/item/clothing/head/that = 4,
|
||||
/obj/item/clothing/head/fedora = 3,
|
||||
/obj/item/clothing/glasses/monocle = 3,
|
||||
/obj/item/clothing/suit/jacket = 4,
|
||||
/obj/item/clothing/suit/jacket/puffer/vest = 4,
|
||||
/obj/item/clothing/suit/jacket/puffer = 4,
|
||||
/obj/item/clothing/under/suit_jacket/navy = 3,
|
||||
/obj/item/clothing/under/suit_jacket/really_black = 3,
|
||||
/obj/item/clothing/under/suit_jacket/burgundy = 3,
|
||||
/obj/item/clothing/under/suit_jacket/charcoal = 3,
|
||||
/obj/item/clothing/under/suit_jacket/white = 3,
|
||||
/obj/item/clothing/under/kilt = 3,
|
||||
/obj/item/clothing/under/overalls = 3,
|
||||
/obj/item/clothing/under/sl_suit = 3,
|
||||
/obj/item/clothing/under/pants/jeans = 5,
|
||||
/obj/item/clothing/under/pants/classicjeans = 5,
|
||||
/obj/item/clothing/under/pants/camo = 3,
|
||||
/obj/item/clothing/under/pants/blackjeans = 5,
|
||||
/obj/item/clothing/under/pants/khaki = 5,
|
||||
/obj/item/clothing/under/pants/white = 5,
|
||||
/obj/item/clothing/under/pants/red = 3,
|
||||
/obj/item/clothing/under/pants/black = 4,
|
||||
/obj/item/clothing/under/pants/tan = 4,
|
||||
/obj/item/clothing/under/pants/track = 3,
|
||||
/obj/item/clothing/suit/jacket/miljacket = 5,
|
||||
/obj/item/clothing/neck/tie/blue = 3,
|
||||
/obj/item/clothing/neck/tie/red = 3,
|
||||
/obj/item/clothing/neck/tie/black = 3,
|
||||
/obj/item/clothing/neck/tie/horrible = 5,
|
||||
/obj/item/clothing/neck/scarf/pink = 3,
|
||||
/obj/item/clothing/neck/scarf/red = 3,
|
||||
/obj/item/clothing/neck/scarf/green = 3,
|
||||
/obj/item/clothing/neck/scarf/darkblue = 3,
|
||||
/obj/item/clothing/neck/scarf/purple = 3,
|
||||
/obj/item/clothing/neck/scarf/yellow = 3,
|
||||
/obj/item/clothing/neck/scarf/orange = 3,
|
||||
/obj/item/clothing/neck/scarf/cyan = 3,
|
||||
/obj/item/clothing/neck/scarf = 3,
|
||||
/obj/item/clothing/neck/scarf/black = 3,
|
||||
/obj/item/clothing/neck/scarf/zebra = 3,
|
||||
/obj/item/clothing/neck/scarf/christmas = 3,
|
||||
/obj/item/clothing/neck/stripedredscarf = 3,
|
||||
/obj/item/clothing/neck/stripedbluescarf = 3,
|
||||
/obj/item/clothing/neck/stripedgreenscarf = 3,
|
||||
/obj/item/clothing/accessory/waistcoat = 2,
|
||||
/obj/item/clothing/under/skirt/black = 3,
|
||||
/obj/item/clothing/under/skirt/blue = 3,
|
||||
/obj/item/clothing/under/skirt/red = 3,
|
||||
/obj/item/clothing/under/skirt/purple = 3,
|
||||
/obj/item/clothing/under/sundress = 4,
|
||||
/obj/item/clothing/under/stripeddress = 3,
|
||||
/obj/item/clothing/under/sailordress = 3,
|
||||
/obj/item/clothing/under/redeveninggown = 3,
|
||||
/obj/item/clothing/under/blacktango = 3,
|
||||
/obj/item/clothing/under/plaid_skirt = 3,
|
||||
/obj/item/clothing/under/plaid_skirt/blue = 3,
|
||||
/obj/item/clothing/under/plaid_skirt/purple = 3,
|
||||
/obj/item/clothing/under/plaid_skirt/green = 3,
|
||||
/obj/item/clothing/glasses/regular = 2,
|
||||
/obj/item/clothing/glasses/regular/jamjar = 2,
|
||||
/obj/item/clothing/head/sombrero = 3,
|
||||
/obj/item/clothing/suit/poncho = 3,
|
||||
/obj/item/clothing/suit/ianshirt = 3,
|
||||
/obj/item/clothing/shoes/laceup = 5,
|
||||
/obj/item/clothing/shoes/sneakers/black = 6,
|
||||
/obj/item/clothing/shoes/sandal = 3,
|
||||
/obj/item/clothing/gloves/fingerless = 3,
|
||||
/obj/item/clothing/glasses/orange = 5,
|
||||
/obj/item/clothing/glasses/red = 5,
|
||||
/obj/item/storage/belt/fannypack = 3,
|
||||
/obj/item/storage/belt/fannypack/blue = 3,
|
||||
/obj/item/storage/belt/fannypack/red = 3,
|
||||
/obj/item/clothing/suit/jacket/letterman = 5,
|
||||
/obj/item/clothing/head/beanie = 3,
|
||||
/obj/item/clothing/head/beanie/black = 3,
|
||||
/obj/item/clothing/head/beanie/red = 3,
|
||||
/obj/item/clothing/head/beanie/green = 3,
|
||||
/obj/item/clothing/head/beanie/darkblue = 3,
|
||||
/obj/item/clothing/head/beanie/purple = 3,
|
||||
/obj/item/clothing/head/beanie/yellow = 3,
|
||||
/obj/item/clothing/head/beanie/orange = 3,
|
||||
/obj/item/clothing/head/beanie/cyan = 3,
|
||||
/obj/item/clothing/head/beanie/christmas = 3,
|
||||
/obj/item/clothing/head/beanie/striped = 3,
|
||||
/obj/item/clothing/head/beanie/stripedred = 3,
|
||||
/obj/item/clothing/head/beanie/stripedblue = 3,
|
||||
/obj/item/clothing/head/beanie/stripedgreen = 3,
|
||||
/obj/item/clothing/suit/jacket/letterman_red = 3,
|
||||
/obj/item/clothing/ears/headphones = 10,
|
||||
/obj/item/clothing/suit/apron/purple_bartender = 2,
|
||||
/obj/item/clothing/under/rank/bartender/purple = 2)
|
||||
contraband = list(/obj/item/clothing/under/syndicate/tacticool = 1,
|
||||
/obj/item/clothing/mask/balaclava = 1,
|
||||
/obj/item/clothing/head/ushanka = 1,
|
||||
/obj/item/clothing/under/soviet = 1,
|
||||
/obj/item/storage/belt/fannypack/black = 2,
|
||||
/obj/item/clothing/suit/jacket/letterman_syndie = 1,
|
||||
/obj/item/clothing/under/jabroni = 1,
|
||||
/obj/item/clothing/suit/vapeshirt = 1,
|
||||
/obj/item/clothing/under/geisha = 1)
|
||||
premium = list(/obj/item/clothing/under/suit_jacket/checkered = 1,
|
||||
/obj/item/clothing/head/mailman = 1,
|
||||
/obj/item/clothing/under/rank/mailman = 1,
|
||||
/obj/item/clothing/suit/jacket/leather = 1,
|
||||
/obj/item/clothing/suit/jacket/leather/overcoat = 1,
|
||||
/obj/item/clothing/under/pants/mustangjeans = 1,
|
||||
/obj/item/clothing/neck/necklace/dope = 3,
|
||||
/obj/item/clothing/suit/jacket/letterman_nanotrasen = 1)
|
||||
/obj/item/clothing/suit/apron/purple_bartender = 4,
|
||||
/obj/item/clothing/under/rank/bartender/purple = 4)
|
||||
contraband = list(/obj/item/clothing/under/syndicate/tacticool = 3,
|
||||
/obj/item/clothing/mask/balaclava = 3,
|
||||
/obj/item/clothing/head/ushanka = 3,
|
||||
/obj/item/clothing/under/soviet = 3,
|
||||
/obj/item/storage/belt/fannypack/black = 3,
|
||||
/obj/item/clothing/suit/jacket/letterman_syndie = 5,
|
||||
/obj/item/clothing/under/jabroni = 2,
|
||||
/obj/item/clothing/suit/vapeshirt = 2,
|
||||
/obj/item/clothing/under/geisha = 4)
|
||||
premium = list(/obj/item/clothing/under/suit_jacket/checkered = 4,
|
||||
/obj/item/clothing/head/mailman = 2,
|
||||
/obj/item/clothing/under/rank/mailman = 2,
|
||||
/obj/item/clothing/suit/jacket/leather = 4,
|
||||
/obj/item/clothing/suit/jacket/leather/overcoat = 4,
|
||||
/obj/item/clothing/under/pants/mustangjeans = 3,
|
||||
/obj/item/clothing/neck/necklace/dope = 5,
|
||||
/obj/item/clothing/suit/jacket/letterman_nanotrasen = 5)
|
||||
refill_canister = /obj/item/vending_refill/clothing
|
||||
|
||||
/obj/item/vending_refill/clothing
|
||||
|
||||
+146
-146
@@ -7,21 +7,21 @@
|
||||
icon_state = "secdrobe"
|
||||
product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
|
||||
vend_reply = "Thank you for using the SecDrobe!"
|
||||
products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 1,
|
||||
/obj/item/storage/backpack/security = 1,
|
||||
/obj/item/storage/backpack/satchel/sec = 1,
|
||||
/obj/item/storage/backpack/duffelbag/sec = 2,
|
||||
/obj/item/clothing/under/rank/security = 3,
|
||||
/obj/item/clothing/shoes/jackboots = 3,
|
||||
/obj/item/clothing/head/beret/sec = 3,
|
||||
/obj/item/clothing/head/soft/sec = 3,
|
||||
/obj/item/clothing/mask/bandana/red = 3,
|
||||
/obj/item/clothing/under/rank/security/skirt = 3,
|
||||
/obj/item/clothing/under/rank/security/grey = 3,
|
||||
/obj/item/clothing/under/pants/khaki = 3)
|
||||
premium = list(/obj/item/clothing/under/rank/security/navyblue = 3,
|
||||
/obj/item/clothing/suit/security/officer = 3,
|
||||
/obj/item/clothing/head/beret/sec/navyofficer = 3)
|
||||
products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 2,
|
||||
/obj/item/storage/backpack/security = 2,
|
||||
/obj/item/storage/backpack/satchel/sec = 2,
|
||||
/obj/item/storage/backpack/duffelbag/sec = 3,
|
||||
/obj/item/clothing/under/rank/security = 5,
|
||||
/obj/item/clothing/shoes/jackboots = 5,
|
||||
/obj/item/clothing/head/beret/sec =5,
|
||||
/obj/item/clothing/head/soft/sec = 5,
|
||||
/obj/item/clothing/mask/bandana/red = 5,
|
||||
/obj/item/clothing/under/rank/security/skirt = 5,
|
||||
/obj/item/clothing/under/rank/security/grey = 5,
|
||||
/obj/item/clothing/under/pants/khaki = 5)
|
||||
premium = list(/obj/item/clothing/under/rank/security/navyblue = 5,
|
||||
/obj/item/clothing/suit/security/officer = 5,
|
||||
/obj/item/clothing/head/beret/sec/navyofficer = 5)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/sec_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/sec_wardrobe
|
||||
@@ -33,23 +33,23 @@
|
||||
icon_state = "medidrobe"
|
||||
product_ads = "Make those blood stains look fashionable!!"
|
||||
vend_reply = "Thank you for using the MediDrobe!"
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 1,
|
||||
/obj/item/storage/backpack/duffelbag/med = 1,
|
||||
/obj/item/storage/backpack/medic = 1,
|
||||
/obj/item/storage/backpack/satchel/med = 1,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/medical = 1,
|
||||
/obj/item/clothing/under/rank/nursesuit = 1,
|
||||
/obj/item/clothing/head/nursehat = 1,
|
||||
/obj/item/clothing/under/rank/medical/blue = 1,
|
||||
/obj/item/clothing/under/rank/medical/green = 1,
|
||||
/obj/item/clothing/under/rank/medical/purple = 1,
|
||||
/obj/item/clothing/under/rank/medical = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat/emt = 3,
|
||||
/obj/item/clothing/shoes/sneakers/white = 3,
|
||||
/obj/item/clothing/head/soft/emt = 3,
|
||||
/obj/item/clothing/suit/apron/surgical = 1,
|
||||
/obj/item/clothing/mask/surgical = 1)
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 3,
|
||||
/obj/item/storage/backpack/duffelbag/med = 3,
|
||||
/obj/item/storage/backpack/medic = 3,
|
||||
/obj/item/storage/backpack/satchel/med = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/medical = 3,
|
||||
/obj/item/clothing/under/rank/nursesuit = 3,
|
||||
/obj/item/clothing/head/nursehat = 3,
|
||||
/obj/item/clothing/under/rank/medical/blue = 2,
|
||||
/obj/item/clothing/under/rank/medical/green = 2,
|
||||
/obj/item/clothing/under/rank/medical/purple = 2,
|
||||
/obj/item/clothing/under/rank/medical = 5,
|
||||
/obj/item/clothing/suit/toggle/labcoat = 5,
|
||||
/obj/item/clothing/suit/toggle/labcoat/emt = 5,
|
||||
/obj/item/clothing/shoes/sneakers/white = 5,
|
||||
/obj/item/clothing/head/soft/emt = 5,
|
||||
/obj/item/clothing/suit/apron/surgical = 3,
|
||||
/obj/item/clothing/mask/surgical = 5)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/medi_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/medi_wardrobe
|
||||
@@ -61,15 +61,15 @@
|
||||
icon_state = "engidrobe"
|
||||
product_ads = "Guaranteed to protect your feet from industrial accidents!;Afraid of radiation? Then wear yellow!"
|
||||
vend_reply = "Thank you for using the EngiDrobe!"
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 1,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 1,
|
||||
/obj/item/storage/backpack/industrial = 1,
|
||||
/obj/item/storage/backpack/satchel/eng = 1,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/engineering = 1,
|
||||
/obj/item/clothing/under/rank/engineer = 3,
|
||||
/obj/item/clothing/suit/hazardvest = 3,
|
||||
/obj/item/clothing/shoes/workboots = 3,
|
||||
/obj/item/clothing/head/hardhat = 3)
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 5,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 2,
|
||||
/obj/item/storage/backpack/industrial = 3,
|
||||
/obj/item/storage/backpack/satchel/eng = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/engineering = 3,
|
||||
/obj/item/clothing/under/rank/engineer = 5,
|
||||
/obj/item/clothing/suit/hazardvest = 5,
|
||||
/obj/item/clothing/shoes/workboots = 5,
|
||||
/obj/item/clothing/head/hardhat = 5)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/engi_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/engi_wardrobe
|
||||
@@ -81,13 +81,13 @@
|
||||
icon_state = "atmosdrobe"
|
||||
product_ads = "Get your inflammable clothing right here!!!"
|
||||
vend_reply = "Thank you for using the AtmosDrobe!"
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 1,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 1,
|
||||
/obj/item/storage/backpack/satchel/eng = 1,
|
||||
/obj/item/storage/backpack/industrial = 1,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 3,
|
||||
/obj/item/clothing/under/rank/atmospheric_technician = 3,
|
||||
/obj/item/clothing/shoes/sneakers/black = 3)
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 3,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 3,
|
||||
/obj/item/storage/backpack/satchel/eng = 3,
|
||||
/obj/item/storage/backpack/industrial = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 5,
|
||||
/obj/item/clothing/under/rank/atmospheric_technician = 5,
|
||||
/obj/item/clothing/shoes/sneakers/black = 5)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/atmos_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/atmos_wardrobe
|
||||
@@ -99,12 +99,12 @@
|
||||
icon_state = "cargodrobe"
|
||||
product_ads = "Upgraded Assistant Style! Pick yours today!;These shorts are comfy and easy to wear, get yours now!"
|
||||
vend_reply = "Thank you for using the CargoDrobe!"
|
||||
products = list(/obj/item/clothing/suit/hooded/wintercoat/cargo = 1,
|
||||
/obj/item/clothing/under/rank/cargotech = 3,
|
||||
/obj/item/clothing/shoes/sneakers/black = 3,
|
||||
/obj/item/clothing/gloves/fingerless = 3,
|
||||
/obj/item/clothing/head/soft = 3,
|
||||
/obj/item/radio/headset/headset_cargo = 1)
|
||||
products = list(/obj/item/clothing/suit/hooded/wintercoat/cargo = 3,
|
||||
/obj/item/clothing/under/rank/cargotech = 5,
|
||||
/obj/item/clothing/shoes/sneakers/black = 5,
|
||||
/obj/item/clothing/gloves/fingerless = 5,
|
||||
/obj/item/clothing/head/soft = 5,
|
||||
/obj/item/radio/headset/headset_cargo = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/cargo_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/cargo_wardrobe
|
||||
@@ -116,13 +116,13 @@
|
||||
icon_state = "robodrobe"
|
||||
product_ads = "You turn me TRUE, use defines!;0110001101101100011011110111010001101000011001010111001101101000011001010111001001100101"
|
||||
vend_reply = "Thank you for using the RoboDrobe!"
|
||||
products = list(/obj/item/clothing/glasses/hud/diagnostic = 2,
|
||||
/obj/item/clothing/under/rank/roboticist = 2,
|
||||
/obj/item/clothing/suit/toggle/labcoat = 2,
|
||||
/obj/item/clothing/shoes/sneakers/black = 2,
|
||||
/obj/item/clothing/gloves/fingerless = 2,
|
||||
/obj/item/clothing/head/soft/black = 2,
|
||||
/obj/item/clothing/mask/bandana/skull = 1)
|
||||
products = list(/obj/item/clothing/glasses/hud/diagnostic = 3,
|
||||
/obj/item/clothing/under/rank/roboticist = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat = 3,
|
||||
/obj/item/clothing/shoes/sneakers/black = 3,
|
||||
/obj/item/clothing/gloves/fingerless = 3,
|
||||
/obj/item/clothing/head/soft/black = 3,
|
||||
/obj/item/clothing/mask/bandana/skull = 2)
|
||||
premium = list(/obj/item/radio/headset/headset_rob = 2) //Cit change
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/robo_wardrobe
|
||||
|
||||
@@ -135,15 +135,15 @@
|
||||
icon_state = "scidrobe"
|
||||
product_ads = "Longing for the smell of flesh plasma? Buy your science clothing now!;Made with 10% Auxetics, so you don't have to worry losing your arm!"
|
||||
vend_reply = "Thank you for using the SciDrobe!"
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 1,
|
||||
/obj/item/storage/backpack/science = 2,
|
||||
/obj/item/storage/backpack/satchel/tox = 2,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/science = 1,
|
||||
/obj/item/clothing/under/rank/scientist = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat/science = 3,
|
||||
/obj/item/clothing/shoes/sneakers/white = 3,
|
||||
/obj/item/radio/headset/headset_sci = 2,
|
||||
/obj/item/clothing/mask/gas = 3)
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 5,
|
||||
/obj/item/storage/backpack/science = 3,
|
||||
/obj/item/storage/backpack/satchel/tox = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/science = 3,
|
||||
/obj/item/clothing/under/rank/scientist = 4,
|
||||
/obj/item/clothing/suit/toggle/labcoat/science = 4,
|
||||
/obj/item/clothing/shoes/sneakers/white = 4,
|
||||
/obj/item/radio/headset/headset_sci = 4,
|
||||
/obj/item/clothing/mask/gas = 5)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/science_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/science_wardrobe
|
||||
@@ -155,13 +155,13 @@
|
||||
icon_state = "hydrobe"
|
||||
product_ads = "Do you love soil? Then buy our clothes!;Get outfits to match your green thumb here!"
|
||||
vend_reply = "Thank you for using the Hydrobe!"
|
||||
products = list(/obj/item/storage/backpack/botany = 2,
|
||||
/obj/item/storage/backpack/satchel/hyd = 2,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/hydro = 1,
|
||||
/obj/item/clothing/suit/apron = 2,
|
||||
/obj/item/clothing/suit/apron/overalls = 3,
|
||||
/obj/item/clothing/under/rank/hydroponics = 3,
|
||||
/obj/item/clothing/mask/bandana = 3)
|
||||
products = list(/obj/item/storage/backpack/botany = 3,
|
||||
/obj/item/storage/backpack/satchel/hyd = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/hydro = 2,
|
||||
/obj/item/clothing/suit/apron = 3,
|
||||
/obj/item/clothing/suit/apron/overalls = 5,
|
||||
/obj/item/clothing/under/rank/hydroponics = 5,
|
||||
/obj/item/clothing/mask/bandana = 4)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/hydro_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/hydro_wardrobe
|
||||
@@ -173,12 +173,12 @@
|
||||
icon_state = "curadrobe"
|
||||
product_ads = "Our clothes are endorsed by treasure hunters everywhere!"
|
||||
vend_reply = "Thank you for using the CuraDrobe!"
|
||||
products = list(/obj/item/clothing/head/fedora/curator = 1,
|
||||
/obj/item/clothing/suit/curator = 1,
|
||||
/obj/item/clothing/under/rank/curator/treasure_hunter = 1,
|
||||
/obj/item/clothing/shoes/workboots/mining = 1,
|
||||
/obj/item/storage/backpack/satchel/explorer = 1,
|
||||
/obj/item/storage/bag/books = 1)
|
||||
products = list(/obj/item/clothing/head/fedora/curator = 2,
|
||||
/obj/item/clothing/suit/curator = 2,
|
||||
/obj/item/clothing/under/rank/curator/treasure_hunter = 2,
|
||||
/obj/item/clothing/shoes/workboots/mining = 2,
|
||||
/obj/item/storage/backpack/satchel/explorer = 2,
|
||||
/obj/item/storage/bag/books = 2)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/curator_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/curator_wardrobe
|
||||
@@ -190,21 +190,21 @@
|
||||
icon_state = "bardrobe"
|
||||
product_ads = "Guaranteed to prevent stains from spilled drinks!"
|
||||
vend_reply = "Thank you for using the BarDrobe!"
|
||||
products = list(/obj/item/clothing/head/that = 2,
|
||||
/obj/item/radio/headset/headset_srv = 2,
|
||||
/obj/item/clothing/under/sl_suit = 2,
|
||||
/obj/item/clothing/under/rank/bartender = 2,
|
||||
/obj/item/clothing/under/rank/bartender/purple = 1,
|
||||
/obj/item/clothing/accessory/waistcoat = 2,
|
||||
/obj/item/clothing/suit/apron/purple_bartender = 1,
|
||||
/obj/item/clothing/head/soft/black = 2,
|
||||
/obj/item/clothing/shoes/sneakers/black = 2,
|
||||
/obj/item/reagent_containers/glass/rag = 2,
|
||||
products = list(/obj/item/clothing/head/that = 3,
|
||||
/obj/item/radio/headset/headset_srv = 3,
|
||||
/obj/item/clothing/under/sl_suit = 3,
|
||||
/obj/item/clothing/under/rank/bartender = 3,
|
||||
/obj/item/clothing/under/rank/bartender/purple = 2,
|
||||
/obj/item/clothing/accessory/waistcoat = 3,
|
||||
/obj/item/clothing/suit/apron/purple_bartender = 2,
|
||||
/obj/item/clothing/head/soft/black = 4,
|
||||
/obj/item/clothing/shoes/sneakers/black = 4,
|
||||
/obj/item/reagent_containers/glass/rag = 4,
|
||||
/obj/item/storage/box/beanbag = 1,
|
||||
/obj/item/clothing/suit/armor/vest/alt = 1,
|
||||
/obj/item/circuitboard/machine/dish_drive = 1,
|
||||
/obj/item/clothing/glasses/sunglasses/reagent = 1,
|
||||
/obj/item/clothing/neck/petcollar = 1,
|
||||
/obj/item/clothing/neck/petcollar = 3,
|
||||
/obj/item/storage/belt/bandolier = 1)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/bar_wardrobe
|
||||
|
||||
@@ -217,17 +217,17 @@
|
||||
icon_state = "chefdrobe"
|
||||
product_ads = "Our clothes are guaranteed to protect you from food splatters!"
|
||||
vend_reply = "Thank you for using the ChefDrobe!"
|
||||
products = list(/obj/item/clothing/under/waiter = 2,
|
||||
/obj/item/radio/headset/headset_srv = 2,
|
||||
/obj/item/clothing/accessory/waistcoat = 2,
|
||||
products = list(/obj/item/clothing/under/waiter = 3,
|
||||
/obj/item/radio/headset/headset_srv = 4,
|
||||
/obj/item/clothing/accessory/waistcoat = 3,
|
||||
/obj/item/clothing/suit/apron/chef = 3,
|
||||
/obj/item/clothing/head/soft/mime = 2,
|
||||
/obj/item/storage/box/mousetraps = 2,
|
||||
/obj/item/circuitboard/machine/dish_drive = 1,
|
||||
/obj/item/clothing/suit/toggle/chef = 1,
|
||||
/obj/item/clothing/under/rank/chef = 1,
|
||||
/obj/item/clothing/head/chefhat = 1,
|
||||
/obj/item/reagent_containers/glass/rag = 1)
|
||||
/obj/item/clothing/suit/toggle/chef = 2,
|
||||
/obj/item/clothing/under/rank/chef = 2,
|
||||
/obj/item/clothing/head/chefhat = 2,
|
||||
/obj/item/reagent_containers/glass/rag = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/chef_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/chef_wardrobe
|
||||
@@ -239,21 +239,21 @@
|
||||
icon_state = "janidrobe"
|
||||
product_ads = "Come and get your janitorial clothing, now endorsed by lizard janitors everywhere!"
|
||||
vend_reply = "Thank you for using the JaniDrobe!"
|
||||
products = list(/obj/item/clothing/under/rank/janitor = 1,
|
||||
/obj/item/cartridge/janitor = 1,
|
||||
/obj/item/clothing/gloves/color/black = 1,
|
||||
/obj/item/clothing/head/soft/purple = 1,
|
||||
/obj/item/paint/paint_remover = 1,
|
||||
products = list(/obj/item/clothing/under/rank/janitor = 2,
|
||||
/obj/item/cartridge/janitor = 3,
|
||||
/obj/item/clothing/gloves/color/black = 2,
|
||||
/obj/item/clothing/head/soft/purple = 2,
|
||||
/obj/item/paint/paint_remover = 2,
|
||||
/obj/item/melee/flyswatter = 1,
|
||||
/obj/item/flashlight = 1,
|
||||
/obj/item/caution = 6,
|
||||
/obj/item/flashlight = 2,
|
||||
/obj/item/caution = 8,
|
||||
/obj/item/holosign_creator = 1,
|
||||
/obj/item/lightreplacer = 1,
|
||||
/obj/item/soap = 1,
|
||||
/obj/item/storage/bag/trash = 1,
|
||||
/obj/item/clothing/shoes/galoshes = 1,
|
||||
/obj/item/watertank/janitor = 1,
|
||||
/obj/item/storage/belt/janitor = 1)
|
||||
/obj/item/storage/belt/janitor = 2)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/jani_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/jani_wardrobe
|
||||
@@ -265,17 +265,17 @@
|
||||
icon_state = "lawdrobe"
|
||||
product_ads = "OBJECTION! Get the rule of law for yourself!"
|
||||
vend_reply = "Thank you for using the LawDrobe!"
|
||||
products = list(/obj/item/clothing/under/lawyer/female = 1,
|
||||
/obj/item/clothing/under/lawyer/black = 1,
|
||||
/obj/item/clothing/under/lawyer/red = 1,
|
||||
/obj/item/clothing/under/lawyer/bluesuit = 1,
|
||||
/obj/item/clothing/suit/toggle/lawyer = 1,
|
||||
/obj/item/clothing/under/lawyer/purpsuit = 1,
|
||||
/obj/item/clothing/suit/toggle/lawyer/purple = 1,
|
||||
/obj/item/clothing/under/lawyer/blacksuit = 1,
|
||||
/obj/item/clothing/suit/toggle/lawyer/black = 1,
|
||||
/obj/item/clothing/shoes/laceup = 2,
|
||||
/obj/item/clothing/accessory/lawyers_badge = 2)
|
||||
products = list(/obj/item/clothing/under/lawyer/female = 3,
|
||||
/obj/item/clothing/under/lawyer/black = 3,
|
||||
/obj/item/clothing/under/lawyer/red = 3,
|
||||
/obj/item/clothing/under/lawyer/bluesuit = 3,
|
||||
/obj/item/clothing/suit/toggle/lawyer = 3,
|
||||
/obj/item/clothing/under/lawyer/purpsuit = 3,
|
||||
/obj/item/clothing/suit/toggle/lawyer/purple = 3,
|
||||
/obj/item/clothing/under/lawyer/blacksuit = 3,
|
||||
/obj/item/clothing/suit/toggle/lawyer/black = 3,
|
||||
/obj/item/clothing/shoes/laceup = 3,
|
||||
/obj/item/clothing/accessory/lawyers_badge = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/law_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/law_wardrobe
|
||||
@@ -288,14 +288,14 @@
|
||||
product_ads = "Are you being bothered by cultists or pesky revenants? Then come and dress like the holy man!;Clothes for men of the cloth!"
|
||||
vend_reply = "Thank you for using the ChapDrobe!"
|
||||
products = list(/obj/item/holybeacon = 1,
|
||||
/obj/item/storage/backpack/cultpack = 1,
|
||||
/obj/item/clothing/accessory/pocketprotector/cosmetology = 1,
|
||||
/obj/item/clothing/under/rank/chaplain = 1,
|
||||
/obj/item/clothing/shoes/sneakers/black = 1,
|
||||
/obj/item/clothing/suit/nun = 1,
|
||||
/obj/item/clothing/head/nun_hood = 1,
|
||||
/obj/item/clothing/suit/holidaypriest = 1,
|
||||
/obj/item/storage/fancy/candle_box = 2)
|
||||
/obj/item/storage/backpack/cultpack = 2,
|
||||
/obj/item/clothing/accessory/pocketprotector/cosmetology = 2,
|
||||
/obj/item/clothing/under/rank/chaplain = 2,
|
||||
/obj/item/clothing/shoes/sneakers/black = 2,
|
||||
/obj/item/clothing/suit/nun = 2,
|
||||
/obj/item/clothing/head/nun_hood = 2,
|
||||
/obj/item/clothing/suit/holidaypriest = 2,
|
||||
/obj/item/storage/fancy/candle_box = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/chap_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/chap_wardrobe
|
||||
@@ -307,13 +307,13 @@
|
||||
icon_state = "chemdrobe"
|
||||
product_ads = "Our clothes are 0.5% more resistant to acid spills! Get yours now!"
|
||||
vend_reply = "Thank you for using the ChemDrobe!"
|
||||
products = list(/obj/item/clothing/under/rank/chemist = 2,
|
||||
/obj/item/clothing/shoes/sneakers/white = 2,
|
||||
/obj/item/clothing/suit/toggle/labcoat/chemist = 2,
|
||||
/obj/item/storage/backpack/chemistry = 2,
|
||||
/obj/item/storage/backpack/satchel/chem = 2,
|
||||
/obj/item/storage/bag/chemistry = 2,
|
||||
/obj/item/pHbooklet = 2)//pH indicator)
|
||||
products = list(/obj/item/clothing/under/rank/chemist = 3,
|
||||
/obj/item/clothing/shoes/sneakers/white = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat/chemist = 3,
|
||||
/obj/item/storage/backpack/chemistry = 3,
|
||||
/obj/item/storage/backpack/satchel/chem = 3,
|
||||
/obj/item/storage/bag/chemistry = 3,
|
||||
/obj/item/pHbooklet = 3)//pH indicator)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/chem_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/chem_wardrobe
|
||||
@@ -325,11 +325,11 @@
|
||||
icon_state = "genedrobe"
|
||||
product_ads = "Perfect for the mad scientist in you!"
|
||||
vend_reply = "Thank you for using the GeneDrobe!"
|
||||
products = list(/obj/item/clothing/under/rank/geneticist = 2,
|
||||
/obj/item/clothing/shoes/sneakers/white = 2,
|
||||
/obj/item/clothing/suit/toggle/labcoat/genetics = 2,
|
||||
/obj/item/storage/backpack/genetics = 2,
|
||||
/obj/item/storage/backpack/satchel/gen = 2)
|
||||
products = list(/obj/item/clothing/under/rank/geneticist = 3,
|
||||
/obj/item/clothing/shoes/sneakers/white = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat/genetics = 3,
|
||||
/obj/item/storage/backpack/genetics = 3,
|
||||
/obj/item/storage/backpack/satchel/gen = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/gene_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/gene_wardrobe
|
||||
@@ -341,12 +341,12 @@
|
||||
icon_state = "virodrobe"
|
||||
product_ads = " Viruses getting you down? Then upgrade to sterilized clothing today!"
|
||||
vend_reply = "Thank you for using the ViroDrobe"
|
||||
products = list(/obj/item/clothing/under/rank/virologist = 2,
|
||||
/obj/item/clothing/shoes/sneakers/white = 2,
|
||||
/obj/item/clothing/suit/toggle/labcoat/virologist = 2,
|
||||
/obj/item/clothing/mask/surgical = 2,
|
||||
/obj/item/storage/backpack/virology = 2,
|
||||
/obj/item/storage/backpack/satchel/vir = 2)
|
||||
products = list(/obj/item/clothing/under/rank/virologist = 3,
|
||||
/obj/item/clothing/shoes/sneakers/white = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat/virologist = 3,
|
||||
/obj/item/clothing/mask/surgical = 3,
|
||||
/obj/item/storage/backpack/virology = 3,
|
||||
/obj/item/storage/backpack/satchel/vir = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/viro_wardrobe
|
||||
|
||||
/obj/item/vending_refill/wardrobe/viro_wardrobe
|
||||
|
||||
Reference in New Issue
Block a user