Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into auxtools-atmos
This commit is contained in:
@@ -24,4 +24,4 @@
|
||||
|
||||
/obj/effect/blessing/proc/block_cult_teleport(datum/source, channel, turf/origin, turf/destination)
|
||||
if(channel == TELEPORT_CHANNEL_CULT)
|
||||
return COMPONENT_BLOCK_TELEPORT
|
||||
return COMPONENT_BLOCK_TELEPORT
|
||||
|
||||
@@ -74,4 +74,4 @@
|
||||
|
||||
/obj/effect/decal/cleanable/blood/xtracks/Initialize()
|
||||
add_blood_DNA(list("UNKNOWN DNA" = "X*"))
|
||||
. = ..()
|
||||
. = ..()
|
||||
|
||||
@@ -235,4 +235,4 @@
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
return
|
||||
. = ..()
|
||||
|
||||
if(AM.movement_type & FLYING)
|
||||
if(AM.movement_type & FLYING || iseffect(AM))
|
||||
return
|
||||
|
||||
triggermine(AM)
|
||||
|
||||
@@ -7,4 +7,4 @@
|
||||
..()
|
||||
var/new_type = pick(subtypesof(/obj/structure/trap) - typesof(/obj/structure/trap/ctf))
|
||||
new new_type(get_turf(src))
|
||||
return INITIALIZE_HINT_QDEL
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
@@ -89,4 +89,4 @@
|
||||
|
||||
/obj/item/chromosome/reinforcer/apply(datum/mutation/human/HM)
|
||||
HM.mutadone_proof = TRUE
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -297,6 +297,10 @@
|
||||
name = "Mining Shuttle (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/mining
|
||||
|
||||
/obj/item/circuitboard/computer/mining_shuttle/common
|
||||
name = "Lavaland Shuttle (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/mining/common
|
||||
|
||||
/obj/item/circuitboard/computer/snow_taxi
|
||||
name = "Snow Taxi (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/snow_taxi
|
||||
|
||||
@@ -243,6 +243,12 @@
|
||||
/obj/item/stack/sheet/glass = 1)
|
||||
def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial)
|
||||
|
||||
/obj/item/circuitboard/machine/colormate
|
||||
name = "Colormate (Machine Board)"
|
||||
build_path = /obj/machinery/gear_painter
|
||||
req_components = list()
|
||||
def_components = list()
|
||||
|
||||
/obj/item/circuitboard/machine/vendor
|
||||
name = "Custom Vendor (Machine Board)"
|
||||
desc = "You can turn the \"brand selection\" dial using a screwdriver."
|
||||
|
||||
@@ -100,4 +100,4 @@
|
||||
|
||||
#undef WAND_OPEN
|
||||
#undef WAND_BOLT
|
||||
#undef WAND_EMERGENCY
|
||||
#undef WAND_EMERGENCY
|
||||
|
||||
@@ -80,6 +80,17 @@
|
||||
to_chat(user, "<span class='notice'>You insert the credits into [src].</span>")
|
||||
update_icon()
|
||||
qdel(H)
|
||||
if(istype(I, /obj/item/card/id))
|
||||
var/obj/item/card/id/ID = I
|
||||
if(!ID.registered_account)
|
||||
to_chat(user, "<span class='warning'>[ID] doesn't have a linked account to deposit into!</span>")
|
||||
return
|
||||
for(var/obj/item/holochip/money in src.loc.contents)
|
||||
ID.attackby(money, user)
|
||||
for(var/obj/item/stack/spacecash/money in src.loc.contents)
|
||||
ID.attackby(money, user)
|
||||
for(var/obj/item/coin/money in src.loc.contents)
|
||||
ID.attackby(money, user)
|
||||
|
||||
/obj/item/holochip/AltClick(mob/user)
|
||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||
|
||||
@@ -616,7 +616,7 @@
|
||||
if(defib.healdisk)
|
||||
H.heal_overall_damage(25, 25)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
|
||||
var/late = timelimit && (tplus > timelimit)
|
||||
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
|
||||
if(policy)
|
||||
|
||||
@@ -91,4 +91,4 @@
|
||||
return ..()
|
||||
|
||||
/obj/effect/abstract/sync_holder/AllowDrop()
|
||||
return TRUE //no dropping spaghetti out of your spacetime pocket
|
||||
return TRUE //no dropping spaghetti out of your spacetime pocket
|
||||
|
||||
@@ -29,4 +29,4 @@
|
||||
if(uses == 0)
|
||||
icon_state = "glue_used"
|
||||
name = "empty bottle of super glue"
|
||||
return
|
||||
return
|
||||
|
||||
@@ -62,4 +62,4 @@
|
||||
name = "clown's megaphone"
|
||||
desc = "Something that should not exist."
|
||||
icon_state = "megaphone-clown"
|
||||
voicespan = list(SPAN_CLOWN)
|
||||
voicespan = list(SPAN_CLOWN)
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
force = 5
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
tool_behaviour = TOOL_MULTITOOL
|
||||
item_flags = SURGICAL_TOOL
|
||||
throwforce = 0
|
||||
throw_range = 7
|
||||
throw_speed = 3
|
||||
custom_materials = list(/datum/material/iron=50, /datum/material/glass=20)
|
||||
var/obj/machinery/buffer // simple machine buffer for device linkage
|
||||
toolspeed = 1
|
||||
tool_behaviour = TOOL_MULTITOOL
|
||||
usesound = 'sound/weapons/empty.ogg'
|
||||
var/datum/integrated_io/selected_io = null //functional for integrated circuits.
|
||||
var/mode = 0
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
else
|
||||
if(zero_amount())
|
||||
return
|
||||
chosen_circuit = input("What type of circuit would you like to remove?", "Choose a Circuit Type", chosen_circuit) in list("airlock","firelock","fire alarm","air alarm","APC")
|
||||
if(zero_amount())
|
||||
chosen_circuit = input("What type of circuit would you like to remove?", "Choose a Circuit Type", chosen_circuit) as null|anything in list("airlock","firelock","fire alarm","air alarm","APC")
|
||||
if(zero_amount() || !chosen_circuit || !in_range(src,user))
|
||||
return
|
||||
switch(chosen_circuit)
|
||||
if("airlock")
|
||||
|
||||
@@ -16,9 +16,9 @@ GLOBAL_LIST_EMPTY(power_sinks)
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
custom_materials = list(/datum/material/iron=750)
|
||||
var/drain_rate = 1600000 // amount of power to drain per tick
|
||||
var/drain_rate = 2000000 // amount of power to drain per tick. Currently 2MJ.
|
||||
var/power_drained = 0 // has drained this much power
|
||||
var/max_power = 1e10 // maximum power that can be drained before exploding
|
||||
var/max_power = 2000000000 // maximum power that can be drained before exploding. Currently 2GJ. About 17 minutes to explode at the max rate.
|
||||
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
|
||||
var/admins_warned = FALSE // stop spam, only warn the admins once that we are about to boom
|
||||
|
||||
@@ -155,5 +155,5 @@ GLOBAL_LIST_EMPTY(power_sinks)
|
||||
|
||||
if(power_drained >= max_power)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
explosion(src.loc, 4,8,16,32)
|
||||
explosion(src.loc, 3,7,14,28)
|
||||
qdel(src)
|
||||
|
||||
@@ -155,7 +155,7 @@ GENETICS SCANNER
|
||||
if(oxy_loss > 10)
|
||||
msg += "\n\t<span class='info'><span class='alert'>[oxy_loss > 50 ? "Severe" : "Minor"] oxygen deprivation detected.</span>"
|
||||
if(tox_loss > 10)
|
||||
msg += "\n\t<span class='alert'>[tox_loss > 50 ? "Severe" : "Minor"] amount of toxin damage detected.</span>"
|
||||
msg += "\n\t<span class='alert'>[tox_loss > 50 ? "Severe" : "Minor"] amount of [HAS_TRAIT(M, TRAIT_ROBOTIC_ORGANISM) ? "system corruption" : "toxin damage"] detected.</span>"
|
||||
if(M.getStaminaLoss())
|
||||
msg += "\n\t<span class='alert'>Subject appears to be suffering from fatigue.</span>"
|
||||
if(advanced)
|
||||
@@ -182,7 +182,7 @@ GENETICS SCANNER
|
||||
<td style='width: 90px;'><font color='#0000CC'>Damage:</font></td>\
|
||||
<td style='width: 55px;'><font color='red'><b>Brute</b></font></td>\
|
||||
<td style='width: 45px;'><font color='orange'><b>Burn</b></font></td>\
|
||||
<td style='width: 45px;'><font color='green'><b>Toxin</b></font></td>\
|
||||
<td style='width: 45px;'><font color='green'><b>[HAS_TRAIT(C, TRAIT_ROBOTIC_ORGANISM) ? "Corruption" :"Toxin"]</b></font></td>\
|
||||
<td style='width: 90px;'><font color='purple'><b>Suffocation</b></font></td></tr>\
|
||||
<tr><td><font color='#0000CC'>Overall:</font></td>\
|
||||
<td><font color='red'>[brute_loss]</font></td>\
|
||||
@@ -628,9 +628,9 @@ GENETICS SCANNER
|
||||
var/turf/location = get_turf(user)
|
||||
if(!istype(location))
|
||||
return
|
||||
|
||||
|
||||
scan_turf(user, location)
|
||||
|
||||
|
||||
/obj/item/analyzer/AltClick(mob/user) //Barometer output for measuring when the next storm happens
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -8,6 +8,15 @@
|
||||
* Gifts
|
||||
*/
|
||||
|
||||
GLOBAL_LIST_INIT(gift_item_blacklist, typecacheof(list(
|
||||
/obj/effect,
|
||||
/obj/belly,
|
||||
/obj/mafia_game_board,
|
||||
/obj/docking_port,
|
||||
/obj/shapeshift_holder,
|
||||
/obj/screen
|
||||
)))
|
||||
|
||||
GLOBAL_LIST_EMPTY(possible_gifts)
|
||||
|
||||
/obj/item/a_gift
|
||||
@@ -95,7 +104,7 @@ GLOBAL_LIST_EMPTY(possible_gifts)
|
||||
var/list/gift_types_list = subtypesof(/obj/item)
|
||||
for(var/V in gift_types_list)
|
||||
var/obj/item/I = V
|
||||
if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.item_flags) & ABSTRACT))
|
||||
if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.item_flags) & ABSTRACT) || (is_type_in_typecache(I, GLOB.gift_item_blacklist)))
|
||||
gift_types_list -= V
|
||||
GLOB.possible_gifts = gift_types_list
|
||||
var/gift_type = pick(GLOB.possible_gifts)
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
var/boom_sizes = list(0, 0, 3)
|
||||
var/can_attach_mob = FALSE
|
||||
var/full_damage_on_mobs = FALSE
|
||||
var/can_gib_mobs = FALSE
|
||||
|
||||
/obj/item/grenade/plastic/Initialize()
|
||||
. = ..()
|
||||
@@ -72,7 +73,7 @@
|
||||
explosion(get_step(T, aim_dir), boom_sizes[1], boom_sizes[2], boom_sizes[3])
|
||||
else
|
||||
explosion(location, boom_sizes[1], boom_sizes[2], boom_sizes[3])
|
||||
if(ismob(target))
|
||||
if(ismob(target) && can_gib_mobs)
|
||||
var/mob/M = target
|
||||
M.gib()
|
||||
qdel(src)
|
||||
|
||||
@@ -377,10 +377,3 @@
|
||||
hitsound = 'sound/weapons/taserhit.ogg'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
breakouttime = 60
|
||||
|
||||
/obj/item/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
|
||||
if(iscarbon(hit_atom))
|
||||
var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom))
|
||||
B.Crossed(hit_atom)
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
@@ -492,7 +492,7 @@
|
||||
var/possessed = FALSE
|
||||
|
||||
/obj/item/nullrod/scythe/talking/process()
|
||||
for(var/mob/living/simple_animal/shade/S in contents)
|
||||
for(var/mob/living/simple_animal/hostile/construct/shade/S in contents)
|
||||
if(S.mind)
|
||||
return
|
||||
else
|
||||
@@ -516,7 +516,7 @@
|
||||
|
||||
if(LAZYLEN(candidates))
|
||||
var/mob/C = pick(candidates)
|
||||
var/mob/living/simple_animal/shade/S = new(src)
|
||||
var/mob/living/simple_animal/hostile/construct/shade/S = new(src)
|
||||
S.real_name = name
|
||||
S.name = name
|
||||
S.ckey = C.ckey
|
||||
@@ -537,7 +537,7 @@
|
||||
possessed = FALSE
|
||||
|
||||
/obj/item/nullrod/scythe/talking/Destroy()
|
||||
for(var/mob/living/simple_animal/shade/S in contents)
|
||||
for(var/mob/living/simple_animal/hostile/construct/shade/S in contents)
|
||||
to_chat(S, "You were destroyed!")
|
||||
qdel(S)
|
||||
return ..()
|
||||
|
||||
@@ -96,4 +96,4 @@
|
||||
if(implant?.imp_in)
|
||||
qdel(implant)
|
||||
else
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
@@ -92,10 +92,17 @@
|
||||
/obj/item/implant/hijack/proc/hijack_remotely(obj/machinery/power/apc/apc)
|
||||
if (apc.hijacker || hijacking)
|
||||
return FALSE //can't remotely hijack an already hijacked APC
|
||||
|
||||
if(apc.being_hijacked)
|
||||
to_chat(imp_in, "<span class='warning'>This APC is already being hijacked!</span>")
|
||||
return FALSE
|
||||
|
||||
apc.being_hijacked = TRUE
|
||||
hijacking = TRUE
|
||||
to_chat(imp_in, "<span class='notice'>Establishing remote connection with APC.</span>")
|
||||
if (!do_after(imp_in, 4 SECONDS,target=apc))
|
||||
to_chat(imp_in, "<span class='warning'>Aborting.</span>")
|
||||
apc.being_hijacked = FALSE
|
||||
hijacking = FALSE
|
||||
return TRUE
|
||||
if (LAZYLEN(imp_in.siliconaccessareas) >= HIJACK_APC_MAX_AMOUNT)
|
||||
@@ -118,6 +125,7 @@
|
||||
toggle_eyes()
|
||||
else
|
||||
to_chat(imp_in, "<span class='warning'>Aborting.</span>")
|
||||
apc.being_hijacked = FALSE
|
||||
hijacking = FALSE
|
||||
imp_in.light_power = 0
|
||||
imp_in.light_range = 0
|
||||
|
||||
@@ -66,4 +66,4 @@
|
||||
|
||||
/obj/item/implanter/radio/syndicate
|
||||
name = "implanter (internal syndicate radio)"
|
||||
imp_type = /obj/item/implant/radio/syndicate
|
||||
imp_type = /obj/item/implant/radio/syndicate
|
||||
|
||||
@@ -73,4 +73,4 @@
|
||||
/obj/item/implantcase/track
|
||||
name = "implant case - 'Tracking'"
|
||||
desc = "A glass case containing a tracking implant."
|
||||
imp_type = /obj/item/implant/tracking
|
||||
imp_type = /obj/item/implant/tracking
|
||||
|
||||
@@ -77,4 +77,4 @@
|
||||
|
||||
/obj/item/implanter/hijack
|
||||
name = "implanter (hijack)"
|
||||
imp_type = /obj/item/implant/hijack
|
||||
imp_type = /obj/item/implant/hijack
|
||||
|
||||
@@ -150,8 +150,8 @@
|
||||
item_state = "knife"
|
||||
desc = "A military combat utility survival knife."
|
||||
embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE)
|
||||
force = 20
|
||||
throwforce = 20
|
||||
force = 16
|
||||
throwforce = 16
|
||||
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut")
|
||||
bayonet = TRUE
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
|
||||
/obj/item/kitchen/knife/combat/survival/knuckledagger/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/butchering, 50, 120, 5) // it's good for butchering stuff
|
||||
AddComponent(/datum/component/butchering, 30, 130, 20) // it's good for butchering stuff
|
||||
|
||||
/obj/item/kitchen/knife/combat/survival/knuckledagger/ui_action_click(mob/user, actiontype)
|
||||
light_on = !light_on
|
||||
@@ -189,6 +189,11 @@
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
/obj/item/kitchen/knife/combat/survival/knuckledagger/update_overlays()
|
||||
. = ..()
|
||||
if(light_on)
|
||||
. += "[icon_state]_lit"
|
||||
|
||||
/obj/item/kitchen/knife/combat/bone
|
||||
name = "bone dagger"
|
||||
item_state = "bone_dagger"
|
||||
|
||||
@@ -52,7 +52,8 @@
|
||||
|
||||
/obj/item/choice_beacon/proc/spawn_option(atom/choice,mob/living/M)
|
||||
var/obj/new_item = create_choice_atom(choice, M)
|
||||
var/obj/structure/closet/supplypod/bluespacepod/pod = new()
|
||||
var/area/pod_storage_area = locate(/area/centcom/supplypod/podStorage) in GLOB.sortedAreas
|
||||
var/obj/structure/closet/supplypod/bluespacepod/pod = new(pick(get_area_turfs(pod_storage_area))) //Lets just have it in the pod storage zone for a really short time because we don't want it in nullspace
|
||||
pod.explosionSize = list(0,0,0,0)
|
||||
new_item.forceMove(pod)
|
||||
var/msg = "<span class='danger'>After making your selection, you notice a strange target on the ground. It might be best to step back!</span>"
|
||||
|
||||
@@ -24,13 +24,17 @@
|
||||
create_reagents(mopcap, NONE, NO_REAGENTS_VALUE)
|
||||
|
||||
|
||||
/obj/item/mop/proc/clean(turf/A)
|
||||
/obj/item/mop/proc/clean(turf/A, mob/user)
|
||||
if(reagents.has_reagent(/datum/reagent/water, 1) || reagents.has_reagent(/datum/reagent/water/holywater, 1) || reagents.has_reagent(/datum/reagent/consumable/ethanol/vodka, 1) || reagents.has_reagent(/datum/reagent/space_cleaner, 1))
|
||||
SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
|
||||
A.clean_blood()
|
||||
var/cleaned_something = FALSE
|
||||
for(var/obj/effect/O in A)
|
||||
if(is_cleanable(O))
|
||||
cleaned_something = TRUE
|
||||
qdel(O)
|
||||
if(cleaned_something && user && user.client)
|
||||
user.client.increment_progress("janitor", 1)
|
||||
reagents.reaction(A, TOUCH, 10) //Needed for proper floor wetting.
|
||||
reagents.remove_any(1) //reaction() doesn't use up the reagents
|
||||
|
||||
@@ -59,7 +63,7 @@
|
||||
if(!L.UseStaminaBuffer(stamusage, warn = TRUE))
|
||||
return
|
||||
user.visible_message("[user] cleans \the [T] with [src].", "<span class='notice'>You clean \the [T] with [src].</span>")
|
||||
clean(T)
|
||||
clean(T, user)
|
||||
user.DelayNextAction(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(T, used_item = src)
|
||||
playsound(T, "slosh", 50, 1)
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
//--end of love :'(--
|
||||
|
||||
var/snowflake_id //if we set from a config snowflake plushie.
|
||||
/// wrapper, do not use, read only
|
||||
var/__ADMIN_SET_TO_ID
|
||||
var/can_random_spawn = TRUE //if this is FALSE, don't spawn this for random plushies.
|
||||
|
||||
/obj/item/toy/plush/random_snowflake/Initialize(mapload, set_snowflake_id)
|
||||
@@ -112,10 +114,21 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plush/vv_get_var(var_name)
|
||||
if(var_name == NAMEOF(src, __ADMIN_SET_TO_ID))
|
||||
return debug_variable("__ADMIN: SET SNOWFLAKE ID", snowflake_id, 0, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plush/vv_edit_var(var_name, var_value)
|
||||
if(var_name == NAMEOF(src, __ADMIN_SET_TO_ID))
|
||||
return set_snowflake_from_config(var_value)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plush/proc/set_snowflake_from_config(id)
|
||||
var/list/configlist = CONFIG_GET(keyed_list/snowflake_plushies)
|
||||
var/list/jsonlist = configlist[id]
|
||||
ASSERT(jsonlist)
|
||||
if(!jsonlist)
|
||||
return FALSE
|
||||
jsonlist = json_decode(jsonlist)
|
||||
if(jsonlist["inherit_from"])
|
||||
var/path = text2path(jsonlist["inherit_from"])
|
||||
@@ -151,6 +164,7 @@
|
||||
var/datum/component/squeak/S = GetComponent(/datum/component/squeak)
|
||||
S?.override_squeak_sounds = squeak_override
|
||||
snowflake_id = id
|
||||
return TRUE
|
||||
|
||||
/obj/item/toy/plush/handle_atom_del(atom/A)
|
||||
if(A == grenade)
|
||||
|
||||
@@ -137,8 +137,7 @@
|
||||
AM.anchored = TRUE
|
||||
flick("laserbox_burn", AM)
|
||||
trigger()
|
||||
sleep(15)
|
||||
qdel(AM)
|
||||
QDEL_IN(src, 15)
|
||||
|
||||
// snowflake code until undertile elements
|
||||
/obj/item/pressure_plate/hologrid/hide()
|
||||
|
||||
@@ -321,4 +321,4 @@
|
||||
desc = "A rusted claymore, once at the heart of a powerful scottish clan struck down and oppressed by tyrants, it has been passed down the ages as a symbol of defiance."
|
||||
force = 15
|
||||
block_chance = 30
|
||||
armour_penetration = 5
|
||||
armour_penetration = 5
|
||||
|
||||
@@ -392,6 +392,7 @@
|
||||
created_name = new_name
|
||||
else
|
||||
created_name = ""
|
||||
log_game("[key_name(usr)] renamed [src] ([REF(src)]) to [created_name].")
|
||||
|
||||
else if(href_list["Master"])
|
||||
forced_ai = select_active_ai(usr)
|
||||
|
||||
@@ -80,6 +80,7 @@ as performing this in action() will cause the upgrade to end up in the borg inst
|
||||
desc = "Used to kick in a cyborg's VTEC systems, increasing their speed."
|
||||
icon_state = "cyborg_upgrade2"
|
||||
require_module = 1
|
||||
var/obj/effect/proc_holder/silicon/cyborg/vtecControl/VC
|
||||
|
||||
/obj/item/borg/upgrade/vtec/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -91,12 +92,14 @@ as performing this in action() will cause the upgrade to end up in the borg inst
|
||||
|
||||
//R.speed = -2 // Gotta go fast.
|
||||
//Citadel change - makes vtecs give an ability rather than reducing the borg's speed instantly
|
||||
R.AddAbility(new/obj/effect/proc_holder/silicon/cyborg/vtecControl)
|
||||
VC = new /obj/effect/proc_holder/silicon/cyborg/vtecControl
|
||||
R.AddAbility(VC)
|
||||
R.cansprint = 0
|
||||
|
||||
/obj/item/borg/upgrade/vtec/deactivate(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if (.)
|
||||
R.RemoveAbility(VC)
|
||||
R.speed = initial(R.speed)
|
||||
R.cansprint = 1
|
||||
|
||||
|
||||
@@ -33,6 +33,20 @@
|
||||
. = ..()
|
||||
update_desc()
|
||||
|
||||
/obj/item/stack/spacecash/attackby(obj/item/W, mob/user, params)
|
||||
. = ..()
|
||||
if(istype(W, /obj/item/card/id))
|
||||
var/obj/item/card/id/ID = W
|
||||
if(!ID.registered_account)
|
||||
to_chat(user, "<span class='warning'>[ID] doesn't have a linked account to deposit into!</span>")
|
||||
return
|
||||
for(var/obj/item/holochip/money in src.loc.contents)
|
||||
ID.attackby(money, user)
|
||||
for(var/obj/item/stack/spacecash/money in src.loc.contents)
|
||||
ID.attackby(money, user)
|
||||
for(var/obj/item/coin/money in src.loc.contents)
|
||||
ID.attackby(money, user)
|
||||
|
||||
/obj/item/stack/spacecash/c1
|
||||
icon_state = "spacecash"
|
||||
singular_name = "one credit bill"
|
||||
|
||||
@@ -388,4 +388,4 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
|
||||
/obj/item/shard/plasma/alien
|
||||
name = "alien shard"
|
||||
desc = "A nasty looking shard of advanced alloy glass."
|
||||
desc = "A nasty looking shard of advanced alloy glass."
|
||||
|
||||
@@ -253,7 +253,6 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
|
||||
new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 10),\
|
||||
new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \
|
||||
new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15),\
|
||||
new/datum/stack_recipe("training bokken", /obj/item/melee/bokken, 10, time = 15),\
|
||||
null, \
|
||||
new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
@@ -388,6 +387,8 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
|
||||
new/datum/stack_recipe("mining satchel", /obj/item/storage/bag/ore, 4), \
|
||||
new/datum/stack_recipe("chemistry bag", /obj/item/storage/bag/chemistry, 4), \
|
||||
new/datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4), \
|
||||
new/datum/stack_recipe("material bag", /obj/item/storage/bag/material, 4), \
|
||||
new/datum/stack_recipe("construction bag", /obj/item/storage/bag/construction, 4), \
|
||||
null, \
|
||||
new/datum/stack_recipe("string", /obj/item/weaponcrafting/string, 1, time = 10), \
|
||||
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6), \
|
||||
|
||||
@@ -457,6 +457,9 @@
|
||||
STR.display_numerical_stacking = FALSE
|
||||
STR.can_hold = typecacheof(list(/obj/item/ammo_box/magazine, /obj/item/ammo_casing))
|
||||
|
||||
/*
|
||||
Bag for holding materials
|
||||
*/
|
||||
/obj/item/storage/bag/material
|
||||
name = "material pouch"
|
||||
desc = "A pouch for sheets and RCD ammunition that manages to hang where you would normally put things in your pocket."
|
||||
@@ -474,3 +477,24 @@
|
||||
STR.max_items = 2
|
||||
STR.display_numerical_stacking = TRUE
|
||||
STR.can_hold = typecacheof(list(/obj/item/rcd_ammo, /obj/item/stack/sheet))
|
||||
|
||||
/*
|
||||
* Construction bag (for engineering, holds stock parts and electronics)
|
||||
*/
|
||||
|
||||
/obj/item/storage/bag/construction
|
||||
name = "construction bag"
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "construction_bag"
|
||||
desc = "A bag for storing small construction components."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/storage/bag/construction/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_combined_w_class = 100
|
||||
STR.max_items = 50
|
||||
STR.max_w_class = WEIGHT_CLASS_SMALL
|
||||
STR.insert_preposition = "in"
|
||||
STR.can_hold = typecacheof(list(/obj/item/stack/ore/bluespace_crystal, /obj/item/assembly, /obj/item/stock_parts, /obj/item/reagent_containers/glass/beaker, /obj/item/stack/cable_coil, /obj/item/circuitboard, /obj/item/electronics,/obj/item/wallframe/camera))
|
||||
|
||||
@@ -802,7 +802,8 @@
|
||||
. += "<span class='notice'>Alt-click it to quickly draw the blade.</span>"
|
||||
|
||||
/obj/item/storage/belt/sabre/PopulateContents()
|
||||
new starting_sword(src)
|
||||
if(starting_sword)
|
||||
new starting_sword(src)
|
||||
|
||||
/obj/item/storage/belt/sabre/rapier
|
||||
name = "rapier sheath"
|
||||
@@ -853,8 +854,8 @@
|
||||
/obj/item/storage/belt/sabre/twin
|
||||
name = "twin sheath"
|
||||
desc = "Two sheaths. One is capable of holding a katana (or bokken) and the other a wakizashi. You could put two wakizashis in if you really wanted to. Now you can really roleplay as a samurai."
|
||||
icon_state = "twinsheath"
|
||||
item_state = "quiver" //this'll do.
|
||||
icon_state = "2sheath"
|
||||
item_state = "katana" //this'll do.
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
fitting_swords = list(/obj/item/melee/smith/wakizashi, /obj/item/melee/smith/twohand/katana, /obj/item/melee/bokken)
|
||||
starting_sword = null
|
||||
@@ -864,6 +865,43 @@
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 2
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY + WEIGHT_CLASS_NORMAL //katana and waki.
|
||||
STR.max_combined_w_class = 7
|
||||
|
||||
/obj/item/melee/smith/twohand/katana/on_exit_storage(datum/component/storage/S)
|
||||
var/obj/item/storage/belt/sabre/twin/B = S.parent
|
||||
if(istype(B))
|
||||
playsound(B, 'sound/items/unsheath.ogg', 25, 1)
|
||||
. = ..()
|
||||
|
||||
/obj/item/melee/smith/twohand/katana/on_enter_storage(datum/component/storage/S)
|
||||
var/obj/item/storage/belt/sabre/twin/B = S.parent
|
||||
if(istype(B))
|
||||
playsound(B, 'sound/items/sheath.ogg', 25, 1)
|
||||
. = ..()
|
||||
|
||||
/obj/item/melee/smith/wakizashi/on_exit_storage(datum/component/storage/S)
|
||||
var/obj/item/storage/belt/sabre/twin/B = S.parent
|
||||
if(istype(B))
|
||||
playsound(B, 'sound/items/unsheath.ogg', 25, 1)
|
||||
. = ..()
|
||||
|
||||
/obj/item/melee/smith/wakizashi/on_enter_storage(datum/component/storage/S)
|
||||
var/obj/item/storage/belt/sabre/twin/B = S.parent
|
||||
if(istype(B))
|
||||
playsound(B, 'sound/items/sheath.ogg', 25, 1)
|
||||
. = ..()
|
||||
|
||||
/obj/item/melee/bokken/on_exit_storage(datum/component/storage/S)
|
||||
var/obj/item/storage/belt/sabre/twin/B = S.parent
|
||||
if(istype(B))
|
||||
playsound(B, 'sound/items/unsheath.ogg', 25, 1)
|
||||
. = ..()
|
||||
|
||||
/obj/item/melee/bokken/on_enter_storage(datum/component/storage/S)
|
||||
var/obj/item/storage/belt/sabre/twin/B = S.parent
|
||||
if(istype(B))
|
||||
playsound(B, 'sound/items/sheath.ogg', 25, 1)
|
||||
. = ..()
|
||||
|
||||
/obj/item/storage/belt/plant
|
||||
name = "botanical belt"
|
||||
|
||||
@@ -198,7 +198,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
|
||||
if(istype(A, /obj/item/cult_bastard))
|
||||
for(var/obj/item/soulstone/SS in A.contents)
|
||||
SS.usability = TRUE
|
||||
for(var/mob/living/simple_animal/shade/EX in SS)
|
||||
for(var/mob/living/simple_animal/hostile/construct/shade/EX in SS)
|
||||
SSticker.mode.remove_cultist(EX.mind, 1, 0)
|
||||
EX.icon_state = "ghost1"
|
||||
EX.name = "Purified [EX.name]"
|
||||
@@ -217,7 +217,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
|
||||
if(do_after(user, 40, target = SS))
|
||||
playsound(src,'sound/effects/pray_chaplain.ogg',60,1)
|
||||
SS.usability = TRUE
|
||||
for(var/mob/living/simple_animal/shade/EX in SS)
|
||||
for(var/mob/living/simple_animal/hostile/construct/shade/EX in SS)
|
||||
SSticker.mode.remove_cultist(EX.mind, 1, 0)
|
||||
EX.icon_state = "ghost1"
|
||||
EX.name = "Purified [EX.name]"
|
||||
|
||||
@@ -17,9 +17,6 @@
|
||||
|
||||
/obj/item/storage/fancy
|
||||
icon = 'icons/obj/food/containers.dmi'
|
||||
icon_state = "donutbox6"
|
||||
name = "donut box"
|
||||
desc = "Mmm. Donuts."
|
||||
resistance_flags = FLAMMABLE
|
||||
var/icon_type = "donut"
|
||||
var/spawn_type = null
|
||||
@@ -59,18 +56,22 @@
|
||||
fancy_open = TRUE
|
||||
update_icon()
|
||||
|
||||
#define DONUT_INBOX_SPRITE_WIDTH 3
|
||||
|
||||
/*
|
||||
* Donut Box
|
||||
*/
|
||||
|
||||
/obj/item/storage/fancy/donut_box
|
||||
icon = 'icons/obj/food/containers.dmi'
|
||||
icon_state = "donutbox6"
|
||||
icon_type = "donut"
|
||||
name = "donut box"
|
||||
desc = "Mmm. Donuts."
|
||||
icon = 'icons/obj/food/donut.dmi'
|
||||
icon_state = "donutbox_inner"
|
||||
icon_type = "donut"
|
||||
spawn_type = /obj/item/reagent_containers/food/snacks/donut
|
||||
fancy_open = TRUE
|
||||
custom_price = PRICE_NORMAL
|
||||
appearance_flags = KEEP_TOGETHER
|
||||
|
||||
/obj/item/storage/fancy/donut_box/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -78,6 +79,36 @@
|
||||
STR.max_items = 6
|
||||
STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/donut))
|
||||
|
||||
/obj/item/storage/fancy/donut_box/PopulateContents()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/storage/fancy/donut_box/update_icon_state()
|
||||
if(fancy_open)
|
||||
icon_state = "donutbox_inner"
|
||||
else
|
||||
icon_state = "donutbox"
|
||||
|
||||
/obj/item/storage/fancy/donut_box/update_overlays()
|
||||
. = ..()
|
||||
|
||||
if (!fancy_open)
|
||||
return
|
||||
|
||||
var/donuts = 0
|
||||
|
||||
for (var/_donut in contents)
|
||||
var/obj/item/reagent_containers/food/snacks/donut/donut = _donut
|
||||
if (!istype(donut))
|
||||
continue
|
||||
|
||||
. += image(icon = initial(icon), icon_state = donut.in_box_sprite(), pixel_x = donuts * DONUT_INBOX_SPRITE_WIDTH)
|
||||
donuts += 1
|
||||
|
||||
. += image(icon = initial(icon), icon_state = "donutbox_top")
|
||||
|
||||
#undef DONUT_INBOX_SPRITE_WIDTH
|
||||
|
||||
/*
|
||||
* Egg Box
|
||||
*/
|
||||
|
||||
@@ -103,6 +103,39 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
|
||||
/obj/item/storage/toolbox/mechanical/old/heirloom/PopulateContents()
|
||||
return
|
||||
|
||||
/obj/item/storage/toolbox/mechanical/old/clean // the assistant traitor toolbox, damage scales with TC inside
|
||||
name = "toolbox"
|
||||
desc = "An old, blue toolbox. It menaces with a sickening miasma of robust energies. You sure about this, Brain?"
|
||||
icon_state = "toolbox_blue_clean"
|
||||
force = 19
|
||||
throwforce = 22
|
||||
wound_bonus = 0
|
||||
bare_wound_bonus = 10
|
||||
|
||||
/obj/item/storage/toolbox/mechanical/old/clean/proc/calc_damage()
|
||||
var/power = 0
|
||||
for (var/obj/item/stack/telecrystal/TC in GetAllContents())
|
||||
power += TC.amount
|
||||
force = 19 + power
|
||||
throwforce = 22 + power
|
||||
|
||||
/obj/item/storage/toolbox/mechanical/old/clean/attack(mob/target, mob/living/user)
|
||||
calc_damage() // one damage for one telecrystal equals about thirty seven(?) damage if you pour ALL your tc
|
||||
..()
|
||||
|
||||
/obj/item/storage/toolbox/mechanical/old/clean/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
|
||||
calc_damage()
|
||||
..()
|
||||
|
||||
/obj/item/storage/toolbox/mechanical/old/clean/PopulateContents()
|
||||
new /obj/item/screwdriver(src)
|
||||
new /obj/item/wrench(src)
|
||||
new /obj/item/weldingtool(src)
|
||||
new /obj/item/crowbar(src)
|
||||
new /obj/item/wirecutters(src)
|
||||
new /obj/item/multitool(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
|
||||
/obj/item/storage/toolbox/electrical
|
||||
name = "electrical toolbox"
|
||||
icon_state = "yellow"
|
||||
|
||||
@@ -520,3 +520,9 @@
|
||||
new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src)
|
||||
new /obj/item/lighter(src)
|
||||
|
||||
/obj/item/storage/box/syndie_kit/scarp
|
||||
|
||||
/obj/item/storage/box/syndie_kit/scarp/PopulateContents()
|
||||
new /obj/item/book/granter/martial/carp(src)
|
||||
new /obj/item/clothing/suit/hooded/carp_costume(src)
|
||||
new /obj/item/staff/bostaff(src)
|
||||
|
||||
@@ -198,4 +198,4 @@
|
||||
|
||||
/obj/item/tank/internals/methyl_bromide/populate_gas()
|
||||
air_contents.set_moles(/datum/gas/methyl_bromide, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
|
||||
return
|
||||
return
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
usesound = 'sound/items/crowbar.ogg'
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
item_flags = SURGICAL_TOOL
|
||||
force = 5
|
||||
throwforce = 7
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -107,4 +108,4 @@
|
||||
icon = 'icons/obj/advancedtools.dmi'
|
||||
usesound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
icon_state = "crowbar"
|
||||
toolspeed = 0.2
|
||||
toolspeed = 0.2
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
item_flags = SURGICAL_TOOL
|
||||
force = 5
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throwforce = 5
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
item_flags = SURGICAL_TOOL
|
||||
force = 3
|
||||
throwforce = 5
|
||||
hitsound = "swing_hit"
|
||||
@@ -21,12 +22,16 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
var/self_fueling = FALSE //Do we refill ourselves or not
|
||||
var/nextrefueltick = 0 //When is the next tick we refuel?
|
||||
var/refueling_interval = 10 //Every how many processing ticks does this refuel? (1 = every processing tick)
|
||||
|
||||
custom_materials = list(/datum/material/iron=70, /datum/material/glass=30)
|
||||
var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
|
||||
var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
|
||||
var/max_fuel = 20 //The max amount of fuel the welder can hold
|
||||
var/change_icons = 1
|
||||
var/can_off_process = 0
|
||||
var/can_off_process = FALSE
|
||||
var/light_intensity = 2 //how powerful the emitted light is when used.
|
||||
var/progress_flash_divisor = 10
|
||||
var/burned_fuel_for = 0 //when fuel was last removed
|
||||
@@ -62,6 +67,14 @@
|
||||
. += "[initial(icon_state)]-on"
|
||||
|
||||
/obj/item/weldingtool/process()
|
||||
//This handles refueling. Its looking at how much fuel the tool has and comparing that to how much it holds
|
||||
//This then looks if the refuel tick has come based on world time.
|
||||
//Then looks if we refuel ourselves or not.
|
||||
|
||||
if(self_fueling && get_fuel() < max_fuel && nextrefueltick <= world.time)
|
||||
nextrefueltick = world.time + refueling_interval
|
||||
reagents.add_reagent(/datum/reagent/fuel, 1)
|
||||
|
||||
switch(welding)
|
||||
if(0)
|
||||
force = 3
|
||||
@@ -82,12 +95,10 @@
|
||||
//This is to start fires. process() is only called if the welder is on.
|
||||
open_flame()
|
||||
|
||||
|
||||
/obj/item/weldingtool/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (FIRELOSS)
|
||||
|
||||
|
||||
/obj/item/weldingtool/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
flamethrower_screwdriver(I, user)
|
||||
@@ -318,7 +329,6 @@
|
||||
/obj/item/weldingtool/largetank/flamethrower_screwdriver()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weldingtool/mini
|
||||
name = "emergency welding tool"
|
||||
desc = "A miniature welder used during emergencies."
|
||||
@@ -331,20 +341,6 @@
|
||||
/obj/item/weldingtool/mini/flamethrower_screwdriver()
|
||||
return
|
||||
|
||||
/obj/item/weldingtool/abductor
|
||||
name = "alien welding tool"
|
||||
desc = "An alien welding tool. Whatever fuel it uses, it never runs out."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "welder"
|
||||
toolspeed = 0.1
|
||||
light_intensity = 0
|
||||
change_icons = 0
|
||||
|
||||
/obj/item/weldingtool/abductor/process()
|
||||
if(get_fuel() <= max_fuel)
|
||||
reagents.add_reagent(/datum/reagent/fuel, 1)
|
||||
..()
|
||||
|
||||
/obj/item/weldingtool/hugetank
|
||||
name = "upgraded industrial welding tool"
|
||||
desc = "An upgraded welder based of the industrial welder."
|
||||
@@ -353,27 +349,6 @@
|
||||
max_fuel = 80
|
||||
custom_materials = list(/datum/material/iron=70, /datum/material/glass=120)
|
||||
|
||||
/obj/item/weldingtool/experimental
|
||||
name = "experimental welding tool"
|
||||
desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes."
|
||||
icon_state = "exwelder"
|
||||
item_state = "exwelder"
|
||||
max_fuel = 40
|
||||
custom_materials = list(/datum/material/iron=70, /datum/material/glass=120)
|
||||
var/last_gen = 0
|
||||
change_icons = 0
|
||||
can_off_process = 1
|
||||
light_intensity = 1
|
||||
toolspeed = 0.5
|
||||
var/nextrefueltick = 0
|
||||
|
||||
/obj/item/weldingtool/experimental/brass
|
||||
name = "brass welding tool"
|
||||
desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "clockwelder"
|
||||
item_state = "brasswelder"
|
||||
|
||||
/obj/item/weldingtool/bronze
|
||||
name = "bronze plated welding tool"
|
||||
desc = "A bronze plated welder."
|
||||
@@ -382,24 +357,51 @@
|
||||
icon_state = "brasswelder"
|
||||
item_state = "brasswelder"
|
||||
|
||||
/obj/item/weldingtool/experimental/process()
|
||||
..()
|
||||
if(get_fuel() < max_fuel && nextrefueltick < world.time)
|
||||
nextrefueltick = world.time + 10
|
||||
reagents.add_reagent(/datum/reagent/fuel, 1)
|
||||
//Self filling welders below
|
||||
|
||||
/obj/item/weldingtool/experimental
|
||||
name = "experimental welding tool"
|
||||
desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes."
|
||||
icon_state = "exwelder"
|
||||
item_state = "exwelder"
|
||||
max_fuel = 40
|
||||
custom_materials = list(/datum/material/iron=70, /datum/material/glass=120)
|
||||
change_icons = 0
|
||||
self_fueling = TRUE
|
||||
can_off_process = TRUE
|
||||
light_intensity = 1
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weldingtool/experimental/brass
|
||||
name = "brass welding tool"
|
||||
desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
refueling_interval = 5
|
||||
icon_state = "clockwelder"
|
||||
item_state = "brasswelder"
|
||||
|
||||
/obj/item/weldingtool/abductor
|
||||
name = "alien welding tool"
|
||||
desc = "An alien welding tool. Whatever fuel it uses, it never runs out."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "welder"
|
||||
self_fueling = TRUE
|
||||
can_off_process = TRUE
|
||||
refueling_interval = 1
|
||||
toolspeed = 0.1
|
||||
light_intensity = 0
|
||||
change_icons = 0
|
||||
|
||||
/obj/item/weldingtool/advanced
|
||||
name = "advanced welding tool"
|
||||
desc = "A modern welding tool combined with an alien welding tool, it never runs out of fuel and works almost as fast."
|
||||
desc = "A modern welding tool combined with an alien welding tool, it almost never runs out of fuel and works nearly as fast."
|
||||
icon = 'icons/obj/advancedtools.dmi'
|
||||
icon_state = "welder"
|
||||
self_fueling = TRUE
|
||||
can_off_process = TRUE
|
||||
refueling_interval = 2
|
||||
toolspeed = 0.2
|
||||
light_intensity = 0
|
||||
change_icons = 0
|
||||
|
||||
/obj/item/weldingtool/advanced/process()
|
||||
if(get_fuel() <= max_fuel)
|
||||
reagents.add_reagent(/datum/reagent/fuel, 1)
|
||||
..()
|
||||
|
||||
#undef WELDER_FUEL_BURN_INTERVAL
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
item_flags = SURGICAL_TOOL
|
||||
force = 6
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
@@ -148,4 +149,4 @@
|
||||
icon = 'icons/obj/advancedtools.dmi'
|
||||
icon_state = "cutters"
|
||||
toolspeed = 0.2
|
||||
random_color = FALSE
|
||||
random_color = FALSE
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
item_flags = SURGICAL_TOOL
|
||||
force = 5
|
||||
throwforce = 7
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -128,4 +129,4 @@
|
||||
icon = 'icons/obj/advancedtools.dmi'
|
||||
icon_state = "wrench"
|
||||
usesound = 'sound/effects/empulse.ogg'
|
||||
toolspeed = 0.2
|
||||
toolspeed = 0.2
|
||||
|
||||
@@ -296,8 +296,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force = 7 //how much harm mode damage we do
|
||||
var/stamina_damage_increment = 4 //how much extra damage do we do when in non-harm mode
|
||||
force = 10 //how much harm mode damage we do
|
||||
var/stamina_damage_increment = 5 //how much extra damage do we do when in non-harm mode
|
||||
throwforce = 10
|
||||
damtype = STAMINA
|
||||
attack_verb = list("whacked", "smacked", "struck")
|
||||
@@ -310,11 +310,13 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
var/quick_parry = FALSE // false = default parry, true = really small parry window
|
||||
item_flags = ITEM_CAN_PARRY
|
||||
block_parry_data = /datum/block_parry_data/bokken
|
||||
var/default_parry_data = /datum/block_parry_data/bokken
|
||||
var/quick_parry_data = /datum/block_parry_data/bokken/quick_parry
|
||||
bare_wound_bonus = 0
|
||||
wound_bonus = 0
|
||||
|
||||
/datum/block_parry_data/bokken // fucked up parry data, emphasizing quicker, shorter parries
|
||||
parry_stamina_cost = 8 // be wise about when you parry, though, else you won't be able to fight enough to make it count
|
||||
parry_stamina_cost = 10 // be wise about when you parry, though, else you won't be able to fight enough to make it count
|
||||
parry_time_windup = 0
|
||||
parry_time_active = 10 // small parry window
|
||||
parry_time_spindown = 0
|
||||
@@ -330,11 +332,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
)
|
||||
parry_failed_stagger_duration = 3 SECONDS
|
||||
parry_data = list(
|
||||
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
|
||||
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
|
||||
)
|
||||
|
||||
/datum/block_parry_data/bokken/quick_parry // emphasizing REALLY SHORT PARRIES
|
||||
parry_stamina_cost = 6 // still more costly than most parries, but less than a full bokken parry
|
||||
parry_stamina_cost = 8 // still more costly than most parries, but less than a full bokken parry
|
||||
parry_time_active = 5 // REALLY small parry window
|
||||
parry_time_perfect = 2.5 // however...
|
||||
parry_time_perfect_leeway = 2 // the entire time, the parry is perfect
|
||||
@@ -371,9 +373,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
. = ..()
|
||||
quick_parry = !quick_parry
|
||||
if(quick_parry)
|
||||
block_parry_data = /datum/block_parry_data/bokken/quick_parry
|
||||
block_parry_data = quick_parry_data
|
||||
else
|
||||
block_parry_data = /datum/block_parry_data/bokken
|
||||
block_parry_data = default_parry_data
|
||||
to_chat(user, "<span class='notice'>[src] is now [quick_parry ? "emphasizing shorter parries, forcing you to riposte or be staggered" : "emphasizing longer parries, with a shorter window to riposte but more forgiving parries"].</span>")
|
||||
|
||||
/obj/item/melee/bokken/attackby(obj/item/I, mob/living/user, params)
|
||||
@@ -410,23 +412,76 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
if(burnt)
|
||||
. += " Burned into the \"blade\" is [burned_in]."
|
||||
|
||||
/obj/item/melee/bokken/steelwood
|
||||
name = "steelwood bokken"
|
||||
desc = "A misnomer of sorts, this is effectively a blunt katana made from steelwood, a dense organic wood derived from steelcaps. Why steelwood? Druids can use it. Duh."
|
||||
icon_state = "bokken_steel"
|
||||
item_state = "bokken_steel"
|
||||
force = 12
|
||||
stamina_damage_increment = 3
|
||||
|
||||
/obj/item/melee/bokken/waki
|
||||
name = "wakizashi bokken"
|
||||
desc = "A space-Japanese training sword made of wood and shaped like a wakizashi."
|
||||
icon_state = "wakibokken"
|
||||
item_state = "wakibokken"
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
force = 6
|
||||
stamina_damage_increment = 4
|
||||
block_parry_data = /datum/block_parry_data/bokken/waki
|
||||
default_parry_data = /datum/block_parry_data/bokken/waki
|
||||
quick_parry_data = /datum/block_parry_data/bokken/waki/quick_parry
|
||||
|
||||
/datum/block_parry_data/bokken/waki // weaker parries than the bigger variant, but cheaper and faster recovery, like quick parry
|
||||
parry_stamina_cost = 4
|
||||
parry_time_windup = 0
|
||||
parry_time_active = 6
|
||||
parry_time_spindown = 0
|
||||
parry_time_perfect = 1.5
|
||||
parry_time_perfect_leeway = 1
|
||||
parry_imperfect_falloff_percent = 7.5
|
||||
parry_efficiency_to_counterattack = 120
|
||||
parry_efficiency_considered_successful = 65
|
||||
parry_efficiency_perfect = 120
|
||||
parry_efficiency_perfect_override = list(
|
||||
TEXT_ATTACK_TYPE_PROJECTILE = 30,
|
||||
)
|
||||
parry_failed_stagger_duration = 2 SECONDS
|
||||
parry_data = list(
|
||||
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 1.5, // 6*1.5 = 9, 7*1.5 = 10.5, 8*1.5 = 12, 9*1.5 = 13.5
|
||||
)
|
||||
|
||||
/datum/block_parry_data/bokken/waki/quick_parry //For the parry spammer in you
|
||||
parry_stamina_cost = 2 // Slam that parry button
|
||||
parry_time_active = 2.5
|
||||
parry_time_perfect = 1
|
||||
parry_time_perfect_leeway = 1
|
||||
parry_failed_stagger_duration = 1 SECONDS
|
||||
parry_failed_clickcd_duration = 1 SECONDS
|
||||
|
||||
/datum/block_parry_data/bokken/waki/quick_parry/proj
|
||||
parry_efficiency_perfect_override = list()
|
||||
|
||||
/obj/item/melee/bokken/waki/steelwood
|
||||
name = "wakizashi steelwood bokken"
|
||||
desc = "A misnomer of sorts, this is effectively a blunt wakizashi made from steelwood, a dense organic wood derived from steelcaps. Why steelwood? Druids can use it. Duh."
|
||||
icon_state = "wakibokken_steel"
|
||||
item_state = "wakibokken_steel"
|
||||
force = 8
|
||||
stamina_damage_increment = 2
|
||||
|
||||
/obj/item/melee/bokken/debug
|
||||
name = "funny debug parrying stick"
|
||||
desc = "if you see this you've fucked up somewhere my good man"
|
||||
block_parry_data = /datum/block_parry_data/bokken/debug
|
||||
|
||||
/obj/item/melee/bokken/debug/AltClick(mob/user)
|
||||
quick_parry = !quick_parry
|
||||
if(quick_parry)
|
||||
block_parry_data = /datum/block_parry_data/bokken/quick_parry/debug
|
||||
else
|
||||
block_parry_data = /datum/block_parry_data/bokken/debug
|
||||
to_chat(user, "<span class='notice'>[src] is now [quick_parry ? "emphasizing shorter parries, forcing you to riposte or be staggered" : "emphasizing longer parries, with a shorter window to riposte but more forgiving parries"].</span>")
|
||||
default_parry_data = /datum/block_parry_data/bokken/debug
|
||||
quick_parry_data = /datum/block_parry_data/bokken/quick_parry/debug
|
||||
|
||||
/datum/block_parry_data/bokken/debug
|
||||
parry_efficiency_perfect_override = list()
|
||||
parry_data = list(
|
||||
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
|
||||
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
|
||||
PARRY_DISARM_ATTACKER = TRUE,
|
||||
PARRY_KNOCKDOWN_ATTACKER = 10,
|
||||
PARRY_STAGGER_ATTACKER = 10,
|
||||
@@ -436,13 +491,63 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
/datum/block_parry_data/bokken/quick_parry/debug
|
||||
parry_efficiency_perfect_override = list()
|
||||
parry_data = list(
|
||||
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
|
||||
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
|
||||
PARRY_DISARM_ATTACKER = TRUE,
|
||||
PARRY_KNOCKDOWN_ATTACKER = 10,
|
||||
PARRY_STAGGER_ATTACKER = 10,
|
||||
PARRY_DAZE_ATTACKER = 10,
|
||||
)
|
||||
|
||||
/// BOKKEN CRAFTNG PIECES
|
||||
|
||||
/obj/item/bokken_blade
|
||||
name = "training bokken wooden blade"
|
||||
desc = "The blade piece of a bokken katana."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "bokken"
|
||||
item_state = "bone_dagger"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/bokken_steelblade
|
||||
name = "training bokken steelwood blade"
|
||||
desc = "The blade piece of a steelwood bokken katana."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "bokken_steel"
|
||||
item_state = "switchblade_ext"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/wakibokken_blade
|
||||
name = "training bokken wooden wakizashi blade"
|
||||
desc = "The blade piece of a bokken wakizashi."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "wakibokken"
|
||||
item_state = "bone_dagger"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/wakibokken_steelblade
|
||||
name = "training bokken steelwood wakizashi blade"
|
||||
desc = "The blade piece of a steelwood bokken katana."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "wakibokken_steel"
|
||||
item_state = "switchblade_ext"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/bokken_hilt
|
||||
name = "training bokken hilt"
|
||||
desc = "The hilt piece of a bokken. This hilt is appropriate for any potential blade length or material."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "bokken_hilt"
|
||||
item_state = "bone_dagger"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
|
||||
/obj/item/wirerod
|
||||
name = "wired rod"
|
||||
|
||||
@@ -271,6 +271,11 @@
|
||||
icon = "the_lightbulb"
|
||||
desc = "A cafe popular among moths and moffs. Once shut down for a week after the bartender used mothballs to protect her spare uniforms."
|
||||
|
||||
/datum/barsign/goose
|
||||
name = "The Loose Goose"
|
||||
icon = "goose"
|
||||
desc = "Drink till you puke and/or break the laws of reality!"
|
||||
|
||||
/datum/barsign/cybersylph
|
||||
name = "Cyber Sylph's"
|
||||
icon = "cybersylph"
|
||||
|
||||
@@ -243,7 +243,7 @@ LINEN BINS
|
||||
|
||||
/obj/item/bedsheet/random/Initialize()
|
||||
..()
|
||||
var/type = pick(typesof(/obj/item/bedsheet) - list(/obj/item/bedsheet/random, /obj/item/bedsheet/chameleon))
|
||||
var/type = pick(typesof(/obj/item/bedsheet) - (list(/obj/item/bedsheet/random, /obj/item/bedsheet/chameleon) + typesof(/obj/item/bedsheet/unlockable)))
|
||||
new type(loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
@@ -257,9 +257,32 @@ LINEN BINS
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/bedsheet
|
||||
chameleon_action.chameleon_name = "Bedsheet"
|
||||
chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/bedsheet/chameleon, /obj/item/bedsheet/random), only_root_path = TRUE)
|
||||
chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/bedsheet/chameleon, /obj/item/bedsheet/random, /obj/item/bedsheet/unlockable), only_root_path = FALSE)
|
||||
chameleon_action.initialize_disguises()
|
||||
|
||||
//unlockable bedsheets
|
||||
/obj/item/bedsheet/unlockable
|
||||
name = "unlockable bedsheet"
|
||||
desc = "this shouldn't be here!"
|
||||
|
||||
//janitor: clean 100 messes with mop as janitor
|
||||
/obj/item/bedsheet/unlockable/janitor
|
||||
name = "janitor bedsheet"
|
||||
desc = "A white bedsheet, with a warning sign on the front."
|
||||
icon_state = "sheetjanitor"
|
||||
|
||||
//cook: use microwave 100 times properly (contents must make one good item) as cook
|
||||
/obj/item/bedsheet/unlockable/cook
|
||||
name = "cook bedsheet"
|
||||
desc = "A grey bedsheet, with a microwave on the front."
|
||||
icon_state = "sheetcook"
|
||||
|
||||
//miner: redeem 100,000 mining points
|
||||
/obj/item/bedsheet/unlockable/miner
|
||||
name = "miner bedsheet"
|
||||
desc = "A red and black bedsheet. It seems to be made with goliath hide."
|
||||
icon_state = "sheetminer"
|
||||
|
||||
//bedsheet bin
|
||||
/obj/structure/bedsheetbin
|
||||
name = "linen bin"
|
||||
|
||||
@@ -73,4 +73,4 @@
|
||||
/obj/structure/chess/blackking
|
||||
name = "\improper Black King"
|
||||
desc = "A black king chess piece. It can move one tile in any direction."
|
||||
icon_state = "black_king"
|
||||
icon_state = "black_king"
|
||||
|
||||
@@ -446,8 +446,11 @@
|
||||
var/mob/living/L = O
|
||||
if(!issilicon(L))
|
||||
L.DefaultCombatKnockdown(40)
|
||||
O.forceMove(T)
|
||||
close()
|
||||
if(istype(src, /obj/structure/closet/supplypod/extractionpod))
|
||||
O.forceMove(src)
|
||||
else
|
||||
O.forceMove(T)
|
||||
close()
|
||||
else
|
||||
O.forceMove(T)
|
||||
return 1
|
||||
|
||||
@@ -108,4 +108,4 @@
|
||||
icon_state = "radbodybag"
|
||||
mob_storage_capacity = 1
|
||||
foldedbag_path = /obj/item/bodybag/containment
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
new /obj/item/construction/rcd/loaded/upgraded(src)
|
||||
new /obj/item/clothing/suit/hooded/wintercoat/ce(src)
|
||||
new /obj/item/clothing/head/beret/ce/white(src)
|
||||
new /obj/item/storage/bag/construction(src)
|
||||
new /obj/item/storage/bag/material(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/engineering_electrical
|
||||
name = "electrical supplies locker"
|
||||
@@ -78,6 +80,8 @@
|
||||
new /obj/item/clothing/glasses/meson/engine(src)
|
||||
new /obj/item/storage/box/emptysandbags(src)
|
||||
new /obj/item/cartridge/engineering(src)
|
||||
new /obj/item/storage/bag/construction(src)
|
||||
new /obj/item/storage/bag/material(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/atmospherics
|
||||
name = "\proper atmospheric technician's locker"
|
||||
@@ -99,6 +103,8 @@
|
||||
new /obj/item/clothing/glasses/meson/engine/tray(src)
|
||||
new /obj/item/extinguisher/advanced(src)
|
||||
new /obj/item/cartridge/atmos(src)
|
||||
new /obj/item/storage/bag/construction(src)
|
||||
new /obj/item/storage/bag/material(src)
|
||||
|
||||
/*
|
||||
* Empty lockers
|
||||
|
||||
@@ -10,4 +10,4 @@
|
||||
new /obj/item/radio/headset/headset_srv(src)
|
||||
new /obj/item/cultivator(src)
|
||||
new /obj/item/hatchet(src)
|
||||
new /obj/item/storage/box/disks_plantgene(src)
|
||||
new /obj/item/storage/box/disks_plantgene(src)
|
||||
|
||||
@@ -47,6 +47,25 @@
|
||||
new /obj/item/clothing/glasses/hud/health(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/paramedic
|
||||
name = "paramedic's locker"
|
||||
req_access = list(ACCESS_MEDICAL)
|
||||
icon_state = "paramed_secure"
|
||||
|
||||
/obj/structure/closet/secure_closet/paramedic/PopulateContents()
|
||||
..()
|
||||
new /obj/item/clothing/suit/toggle/labcoat/paramedic(src)
|
||||
new /obj/item/clothing/under/rank/medical/paramedic(src)
|
||||
new /obj/item/clothing/under/rank/medical/paramedic/skirt(src)
|
||||
new /obj/item/radio/headset/headset_med(src)
|
||||
new /obj/item/defibrillator/loaded(src)
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||
new /obj/item/storage/belt/medical(src)
|
||||
new /obj/item/clothing/glasses/hud/health(src)
|
||||
new /obj/item/pinpointer/crew(src)
|
||||
new /obj/item/sensor_device(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/CMO
|
||||
name = "\proper chief medical officer's locker"
|
||||
req_access = list(ACCESS_CMO)
|
||||
|
||||
@@ -15,4 +15,4 @@
|
||||
new /obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter(src)
|
||||
new /obj/item/pneumatic_cannon/pie(src)
|
||||
new /obj/item/reagent_containers/food/snacks/pie/cream(src)
|
||||
new /obj/item/storage/crayons(src)
|
||||
new /obj/item/storage/crayons(src)
|
||||
|
||||
@@ -553,4 +553,4 @@
|
||||
/obj/structure/displaycase/forsale/kitchen
|
||||
desc = "A display case with an ID-card swiper. Use your ID to purchase the contents. Meant for the bartender and chef."
|
||||
req_one_access = list(ACCESS_KITCHEN, ACCESS_BAR)
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -38,4 +38,4 @@
|
||||
user.show_message("<span class='notice'>You weave \the [W.name] into a workable fabric.</span>", MSG_VISUAL)
|
||||
return TRUE
|
||||
|
||||
#undef FABRIC_PER_SHEET
|
||||
#undef FABRIC_PER_SHEET
|
||||
|
||||
@@ -18,4 +18,4 @@ This memorial has been designed for him and any future coders to perish.
|
||||
icon = 'icons/obj/tomb.dmi'
|
||||
icon_state = "memorial"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
anchored = TRUE
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
name = "magic mirror"
|
||||
desc = "Turn and face the strange... face."
|
||||
icon_state = "magic_mirror"
|
||||
var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth", "memezombies", "clockwork golem servant", "android", "synth", "mush", "zombie", "memezombie")
|
||||
var/list/races_blacklist = list("skeleton", "agent", "military_synth", "memezombies", "clockwork golem servant", "android", "synth", "mush", "zombie", "memezombie")
|
||||
var/list/choosable_races = list()
|
||||
|
||||
/obj/structure/mirror/magic/New()
|
||||
|
||||
@@ -26,4 +26,4 @@
|
||||
/obj/structure/mopbucket/update_overlays()
|
||||
. = ..()
|
||||
if(reagents.total_volume > 0)
|
||||
. += "mopbucket_water"
|
||||
. += "mopbucket_water"
|
||||
|
||||
@@ -72,4 +72,4 @@
|
||||
/obj/structure/spawner/mining/wumborian
|
||||
name = "wumborian fugu den"
|
||||
desc = "A den housing a nest of wumborian fugus, how do they all even fit in there?"
|
||||
mob_types = list(/mob/living/simple_animal/hostile/asteroid/fugu)
|
||||
mob_types = list(/mob/living/simple_animal/hostile/asteroid/fugu)
|
||||
|
||||
Reference in New Issue
Block a user