Merge branch 'master' into seperate-job-files

This commit is contained in:
Jack Edge
2019-02-01 08:37:19 +00:00
82 changed files with 1108 additions and 1630 deletions
+14 -17
View File
@@ -52,25 +52,22 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null
if(!procname)
return
//hascall() doesn't support proc paths (eg: /proc/gib(), it only supports "gib")
var/testname = procname
if(targetselected)
//Find one of the 3 possible ways they could have written /proc/PROCNAME
if(findtext(procname, "/proc/"))
testname = replacetext(procname, "/proc/", "")
else if(findtext(procname, "/proc"))
testname = replacetext(procname, "/proc", "")
else if(findtext(procname, "proc/"))
testname = replacetext(procname, "proc/", "")
//Clear out any parenthesis if they're a dummy
testname = replacetext(testname, "()", "")
if(targetselected && !hascall(target,testname))
to_chat(usr, "<font color='red'>Error: callproc(): type [target.type] has no proc named [procname].</font>")
//strip away everything but the proc name
var/list/proclist = splittext(procname, "/")
if (!length(proclist))
return
procname = proclist[proclist.len]
var/proctype = "proc"
if ("verb" in proclist)
proctype = "verb"
if(targetselected && !hascall(target, procname))
to_chat(usr, "<font color='red'>Error: callproc(): type [target.type] has no [proctype] named [procname].</font>")
return
else
var/procpath = text2path(procname)
var/procpath = text2path("[proctype]/[procname]")
if (!procpath)
to_chat(usr, "<font color='red'>Error: callproc(): proc [procname] does not exist. (Did you forget the /proc/ part?)</font>")
return
+17 -13
View File
@@ -176,7 +176,7 @@
/datum/action/innate/cult/blood_spell/construction
name = "Twisted Construction"
desc = "<u>A sinister spell used to convert:</u><br>Plasteel into runed metal<br>25 metal into a construct shell<br>Cyborgs directly into constructs<br>Cyborg shells into construct shells<br>Airlocks into runed airlocks (harm intent)"
desc = "<u>A sinister spell used to convert:</u><br>Plasteel into runed metal<br>50 metal into a construct shell<br>Cyborgs directly into constructs<br>Cyborg shells into construct shells<br>Airlocks into runed airlocks (harm intent)"
button_icon_state = "transmute"
magic_path = "/obj/item/melee/blood_magic/construction"
health_cost = 12
@@ -549,7 +549,7 @@
. = ..()
//Construction: Creates a construct shell out of 50 metal sheets, or converts plasteel into runed metal
//Construction: Converts 50 metal to a construct shell, plasteel to runed metal, airlock to brittle runed airlock, a borg to a construct, or borg shell to a construct shell
/obj/item/melee/blood_magic/construction
name = "Corrupting Aura"
desc = "Corrupts metal and plasteel into more sinister forms."
@@ -561,13 +561,14 @@
var/turf/T = get_turf(target)
if(istype(target, /obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/candidate = target
if(candidate.use(50))
if(candidate.use(METAL_TO_CONSTRUCT_SHELL_CONVERSION))
uses--
to_chat(user, "<span class='warning'>A dark cloud emanates from your hand and swirls around the metal, twisting it into a construct shell!</span>")
new /obj/structure/constructshell(T)
SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
else
to_chat(user, "<span class='warning'>You need 50 metal to produce a construct shell!</span>")
to_chat(user, "<span class='warning'>You need [METAL_TO_CONSTRUCT_SHELL_CONVERSION] metal to produce a construct shell!</span>")
return
else if(istype(target, /obj/item/stack/sheet/plasteel))
var/obj/item/stack/sheet/plasteel/candidate = target
var/quantity = candidate.amount
@@ -600,6 +601,7 @@
qdel(candidate)
else
candidate.color = prev_color
return
else
uses--
to_chat(user, "<span class='warning'>A dark cloud emanates from you hand and swirls around [candidate] - twisting it into a construct shell!</span>")
@@ -613,6 +615,8 @@
uses--
user.visible_message("<span class='warning'>Black ribbons suddenly emanate from [user]'s hand and cling to the airlock - twisting and corrupting it!</span>")
SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
else
return
else
to_chat(user, "<span class='warning'>The spell will not work on [target]!</span>")
return
@@ -762,10 +766,10 @@
return
switch(choice)
if("Blood Spear (150)")
if(uses < 150)
to_chat(user, "<span class='cultitalic'>You need 150 charges to perform this rite.</span>")
if(uses < BLOOD_SPEAR_COST)
to_chat(user, "<span class='cultitalic'>You need [BLOOD_SPEAR_COST] charges to perform this rite.</span>")
else
uses -= 150
uses -= BLOOD_SPEAR_COST
var/turf/T = get_turf(user)
qdel(src)
var/datum/action/innate/cult/spear/S = new(user)
@@ -778,11 +782,11 @@
user.visible_message("<span class='warning'>A [rite.name] appears at [user]'s feet!</span>", \
"<span class='cultitalic'>A [rite.name] materializes at your feet.</span>")
if("Blood Bolt Barrage (300)")
if(uses < 300)
to_chat(user, "<span class='cultitalic'>You need 300 charges to perform this rite.</span>")
if(uses < BLOOD_BARRAGE_COST)
to_chat(user, "<span class='cultitalic'>You need [BLOOD_BARRAGE_COST] charges to perform this rite.</span>")
else
var/obj/rite = new /obj/item/gun/ballistic/shotgun/boltaction/enchanted/arcane_barrage/blood()
uses -= 300
uses -= BLOOD_BARRAGE_COST
qdel(src)
if(user.put_in_hands(rite))
to_chat(user, "<span class='cult'><b>Your hands glow with power!</b></span>")
@@ -790,11 +794,11 @@
to_chat(user, "<span class='cultitalic'>You need a free hand for this rite!</span>")
qdel(rite)
if("Blood Beam (500)")
if(uses < 500)
to_chat(user, "<span class='cultitalic'>You need 500 charges to perform this rite.</span>")
if(uses < BLOOD_BEAM_COST)
to_chat(user, "<span class='cultitalic'>You need [BLOOD_BEAM_COST] charges to perform this rite.</span>")
else
var/obj/rite = new /obj/item/blood_beam()
uses -= 500
uses -= BLOOD_BEAM_COST
qdel(src)
if(user.put_in_hands(rite))
to_chat(user, "<span class='cultlarge'><b>Your hands glow with POWER OVERWHELMING!!!</b></span>")
-1
View File
@@ -1942,7 +1942,6 @@
/obj/item/clothing/shoes/sneakers/black,
/obj/item/clothing/gloves/color/white,
/obj/item/clothing/mask/gas/mime,
/obj/item/clothing/head/beret,
/obj/item/clothing/head/frenchberet,
/obj/item/clothing/suit/suspenders,
/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing,
+10 -4
View File
@@ -273,12 +273,13 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
connection_timeofday = world.timeofday
winset(src, null, "command=\".configure graphics-hwmode on\"")
var/cev = CONFIG_GET(number/client_error_version)
var/ceb = CONFIG_GET(number/client_error_build)
var/cwv = CONFIG_GET(number/client_warn_version)
if (byond_version < cev) //Out of date client.
if (byond_version < cev || byond_build < ceb) //Out of date client.
to_chat(src, "<span class='danger'><b>Your version of BYOND is too old:</b></span>")
to_chat(src, CONFIG_GET(string/client_error_message))
to_chat(src, "Your version: [byond_version]")
to_chat(src, "Required version: [cev] or later")
to_chat(src, "Your version: [byond_version].[byond_build]")
to_chat(src, "Required version: [cev].[ceb] or later")
to_chat(src, "Visit <a href=\"https://secure.byond.com/download\">BYOND's website</a> to get the latest version of BYOND.")
if (connecting_admin)
to_chat(src, "Because you are an admin, you are being allowed to walk past this limitation, But it is still STRONGLY suggested you upgrade")
@@ -697,8 +698,14 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
/client/Click(atom/object, atom/location, control, params)
var/ab = FALSE
var/list/L = params2list(params)
var/dragged = L["drag"]
if(dragged && !L[dragged])
return
if (object && object == middragatom && L["left"])
ab = max(0, 5 SECONDS-(world.time-middragtime)*0.1)
var/mcl = CONFIG_GET(number/minute_click_limit)
if (!holder && mcl)
var/minute = round(world.time, 600)
@@ -718,7 +725,6 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
log_game("[key_name(src)] is using the middle click aimbot exploit")
message_admins("[ADMIN_LOOKUPFLW(src)] [ADMIN_KICK(usr)] is using the middle click aimbot exploit</span>")
add_system_note("aimbot", "Is using the middle click aimbot exploit")
log_game("[key_name(src)] Has hit the per-minute click limit of [mcl] clicks in a given game minute")
message_admins("[ADMIN_LOOKUPFLW(src)] [ADMIN_KICK(usr)] Has hit the per-minute click limit of [mcl] clicks in a given game minute")
to_chat(src, "<span class='danger'>[msg]</span>")
+80 -7
View File
@@ -14,19 +14,27 @@
dog_fashion = /datum/dog_fashion/head
/obj/item/clothing/head/hardhat/attack_self(mob/user)
on = !on
icon_state = "hardhat[on]_[item_color]"
item_state = "hardhat[on]_[item_color]"
user.update_inv_head() //so our mob-overlays update
/obj/item/clothing/head/hardhat/attack_self(mob/living/user)
toggle_helmet_light(user)
/obj/item/clothing/head/hardhat/proc/toggle_helmet_light(mob/living/user)
on = !on
if(on)
turn_on(user)
else
turn_off(user)
update_icon()
/obj/item/clothing/head/hardhat/update_icon()
icon_state = "hardhat[on]_[item_color]"
item_state = "hardhat[on]_[item_color]"
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
H.update_inv_head()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
A.UpdateButtonIcon(force = TRUE)
..()
/obj/item/clothing/head/hardhat/proc/turn_on(mob/user)
set_light(brightness_on)
@@ -81,4 +89,69 @@
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
/obj/item/clothing/head/hardhat/weldhat
name = "welding hard hat"
desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight AND welding shield! The bulb seems a little smaller though."
brightness_on = 3 //Needs a little bit of tradeoff
dog_fashion = null
actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_welding_screen)
flash_protect = 2
tint = 2
flags_inv = HIDEEYES | HIDEFACE
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
visor_flags_inv = HIDEEYES | HIDEFACE
visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
/obj/item/clothing/head/hardhat/weldhat/Initialize()
. = ..()
update_icon()
/obj/item/clothing/head/hardhat/weldhat/attack_self(mob/living/user)
toggle_helmet_light(user)
/obj/item/clothing/head/hardhat/weldhat/AltClick(mob/user)
if(user.canUseTopic(src, BE_CLOSE))
toggle_welding_screen(user)
/obj/item/clothing/head/hardhat/weldhat/proc/toggle_welding_screen(mob/living/user)
if(weldingvisortoggle(user))
playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1) //Visors don't just come from nothing
update_icon()
/obj/item/clothing/head/hardhat/weldhat/worn_overlays(isinhands)
. = ..()
if(!isinhands)
. += mutable_appearance('icons/mob/head.dmi', "weldhelmet")
if(!up)
. += mutable_appearance('icons/mob/head.dmi', "weldvisor")
/obj/item/clothing/head/hardhat/weldhat/update_icon()
cut_overlays()
if(!up)
add_overlay("weldvisor")
..()
/obj/item/clothing/head/hardhat/weldhat/orange
icon_state = "hardhat0_orange"
item_state = "hardhat0_orange"
item_color = "orange"
/obj/item/clothing/head/hardhat/weldhat/white
desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight AND welding shield!" //This bulb is not smaller
icon_state = "hardhat0_white"
item_state = "hardhat0_white"
brightness_on = 4 //Boss always takes the best stuff
item_color = "white"
clothing_flags = STOPSPRESSUREDAMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
/obj/item/clothing/head/hardhat/weldhat/dblue
icon_state = "hardhat0_dblue"
item_state = "hardhat0_dblue"
item_color = "dblue"
+15
View File
@@ -145,6 +145,21 @@
strip_delay = 60
dog_fashion = /datum/dog_fashion/head/warden
/obj/item/clothing/head/warden/drill
name = "warden's drill hat"
desc = "A special armored campaign hat with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection. Has the letters 'FMJ' enscribed on its side."
icon_state = "wardendrill"
item_state = "wardendrill"
dog_fashion = null
/obj/item/clothing/head/warden/drill/equipped(mob/living/carbon/human/user, slot)
..()
if(slot == SLOT_HEAD)
user.dna.add_mutation(YELLING)
/obj/item/clothing/head/warden/drill/dropped(mob/living/carbon/human/user)
user.dna.remove_mutation(YELLING)
/obj/item/clothing/head/beret/sec
name = "security beret"
desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."
+1 -1
View File
@@ -347,7 +347,7 @@
/obj/item/clothing/head/frenchberet
name = "french beret"
desc = "A quality beret, infused with the aroma of chain-smoking, wine-swilling Parisians. You feel less inclined to engage military conflict, for some reason."
icon_state = "beretblack"
icon_state = "beret"
dynamic_hair_suffix = ""
/obj/item/clothing/head/frenchberet/speechModification(M)
@@ -244,6 +244,7 @@
if(paranoia)
QDEL_NULL(paranoia)
paranoia = new()
paranoia.clonable = FALSE
user.gain_trauma(paranoia, TRAUMA_RESILIENCE_MAGIC)
to_chat(user, "<span class='warning'>As you don the foiled hat, an entire world of conspiracy theories and seemingly insane ideas suddenly rush into your mind. What you once thought unbelievable suddenly seems.. undeniable. Everything is connected and nothing happens just by accident. You know too much and now they're out to get you. </span>")
@@ -288,4 +288,4 @@
icon_state = "empoweredburger"
list_reagents = list("nutriment" = 8, "liquidelectricity" = 5)
tastes = list("bun" = 2, "pure electricity" = 4)
foodtype = GRAIN | TOXIC
foodtype = GRAIN | TOXIC
-1
View File
@@ -33,7 +33,6 @@
suit = /obj/item/clothing/suit/suspenders
backpack_contents = list(/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing=1)
accessory = /obj/item/clothing/accessory/pocketprotector/cosmetology
backpack = /obj/item/storage/backpack/mime
satchel = /obj/item/storage/backpack/mime
@@ -94,7 +94,7 @@
if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood
user.add_mob_blood(src)
if(ishuman(user))
var/mob/living/carbon/human/dirtyboy
var/mob/living/carbon/human/dirtyboy = user
dirtyboy.adjust_hygiene(-10)
if(affecting.body_zone == BODY_ZONE_HEAD)
if(wear_mask)
+1 -3
View File
@@ -7,9 +7,7 @@
return TRUE
if(istype(mover, /obj/item/projectile))
var/obj/item/projectile/P = mover
if(P.can_hit_target(src, P.permutated, src == P.original, TRUE))
P.Bump(src)
return TRUE
return !P.can_hit_target(src, P.permutated, src == P.original, TRUE)
if(mover.throwing)
return (!density || !(mobility_flags & MOBILITY_STAND))
if(buckled == mover)
@@ -179,10 +179,7 @@
/obj/effect/decal/cleanable/vomit,
/obj/effect/decal/cleanable/robot_debris,
/obj/effect/decal/cleanable/molten_object,
/obj/effect/decal/cleanable/food/tomato_smudge,
/obj/effect/decal/cleanable/food/egg_smudge,
/obj/effect/decal/cleanable/food/pie_smudge,
/obj/effect/decal/cleanable/food/flour,
/obj/effect/decal/cleanable/food,
/obj/effect/decal/cleanable/ash,
/obj/effect/decal/cleanable/greenglow,
/obj/effect/decal/cleanable/dirt,
@@ -20,7 +20,7 @@
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
mob_size = MOB_SIZE_LARGE
var/icon_aggro = null
var/crusher_drop_mod = 5
var/crusher_drop_mod = 25
/mob/living/simple_animal/hostile/asteroid/Initialize(mapload)
. = ..()
@@ -58,7 +58,7 @@
/mob/living/simple_animal/hostile/asteroid/death(gibbed)
SSblackbox.record_feedback("tally", "mobs_killed_mining", 1, type)
var/datum/status_effect/crusher_damage/C = has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
if(C && crusher_loot && prob((C.total_damage/maxHealth) * crusher_drop_mod)) //on average, you'll need to kill 20 creatures before getting the item
if(C && crusher_loot && prob((C.total_damage/maxHealth) * crusher_drop_mod)) //on average, you'll need to kill 4 creatures before getting the item
spawn_crusher_loot()
..(gibbed)
+1 -1
View File
@@ -214,7 +214,7 @@
/obj/item/suppressor
name = "suppressor"
desc = "A nigh-universal syndicate small-arms suppressor for maximum espionage."
desc = "A syndicate small-arms suppressor for maximum espionage."
icon = 'icons/obj/guns/projectile.dmi'
icon_state = "suppressor"
w_class = WEIGHT_CLASS_TINY
@@ -565,7 +565,7 @@
/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit(atom/target)
qdel(src)
return BULLET_ACT_HIT
return FALSE
/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/on_hit()
qdel(src)
+4 -7
View File
@@ -230,13 +230,6 @@
if(hitscan)
store_hitscan_collision(pcache)
return TRUE
if(firer && !ignore_source_check)
var/mob/checking = firer
if((A == firer) || (((A in firer.buckled_mobs) || (istype(checking) && (A == checking.buckled))) && (A != original)) || (A == firer.loc && ismecha(A))) //cannot shoot yourself or your mech
trajectory_ignore_forcemove = TRUE
forceMove(T)
trajectory_ignore_forcemove = FALSE
return FALSE
var/distance = get_dist(T, starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations.
def_zone = ran_zone(def_zone, max(100-(7*distance), 5)) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
@@ -529,6 +522,10 @@
/obj/item/projectile/proc/can_hit_target(atom/target, list/passthrough, direct_target = FALSE, ignore_loc = FALSE)
if(QDELETED(target))
return FALSE
if(!ignore_source_check && firer)
var/mob/M = firer
if((target == firer) || ((target == firer.loc) && ismecha(firer.loc)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target)))
return FALSE
if(!ignore_loc && (loc != target.loc))
return FALSE
if(target in passthrough)
@@ -128,7 +128,6 @@
return
replace_beaker(user, B)
to_chat(user, "<span class='notice'>You add [B] to [src].</span>")
updateUsrDialog()
update_icon()
return TRUE //no afterattack
@@ -1169,6 +1169,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/carbon/M)
if(ishuman(M) && M.job == "Mime")
M.silent = max(M.silent, MIMEDRINK_SILENCE_DURATION)
M.heal_bodypart_damage(1,1)
. = 1
return ..() || .
@@ -1855,6 +1856,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/blank_paper/on_mob_life(mob/living/carbon/M)
if(ishuman(M) && M.job == "Mime")
M.silent = max(M.silent, MIMEDRINK_SILENCE_DURATION)
M.heal_bodypart_damage(1,1)
. = 1
return ..()
@@ -154,6 +154,7 @@
/datum/reagent/consumable/nothing/on_mob_life(mob/living/carbon/M)
if(ishuman(M) && M.job == "Mime")
M.silent = max(M.silent, MIMEDRINK_SILENCE_DURATION)
M.heal_bodypart_damage(1,1, 0)
. = 1
..()
@@ -52,12 +52,11 @@
var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.")
to_chat(M, "<span class='notice'>[smoke_message]</span>")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "smoked", /datum/mood_event/smoked, name)
M.AdjustStun(-20, FALSE)
M.AdjustKnockdown(-20, FALSE)
M.AdjustUnconscious(-20, FALSE)
M.AdjustParalyzed(-20, FALSE)
M.AdjustImmobilized(-20, FALSE)
M.adjustStaminaLoss(-0.5*REM, 0)
M.AdjustStun(-5, FALSE)
M.AdjustKnockdown(-5, FALSE)
M.AdjustUnconscious(-5, FALSE)
M.AdjustParalyzed(-5, FALSE)
M.AdjustImmobilized(-5, FALSE)
..()
. = 1
@@ -914,7 +914,6 @@
toxpwr = 0
taste_description = "bone hurting"
overdose_threshold = 50
metabolization_rate = 2
/datum/reagent/toxin/bonehurtingjuice/on_mob_add(mob/living/carbon/M)
M.say("oof ouch my bones", forced = "bonehurtingjuice")
@@ -265,8 +265,8 @@
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/suppressor
name = "Universal Suppressor"
desc = "A reverse-engineered universal suppressor that fits on most small arms with threaded barrels."
name = "Suppressor"
desc = "A reverse-engineered suppressor that fits on most small arms with threaded barrels."
id = "suppressor"
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 500)
@@ -131,7 +131,7 @@ Slimecrossing Armor
desc = "A full suit of adamantine plate armor. Impressively resistant to damage, but weighs about as much as you do."
icon_state = "adamsuit"
item_state = "adamsuit"
flags_inv = list()
flags_inv = NONE
obj_flags = IMMUTABLE_SLOW
slowdown = 4
var/hit_reflect_chance = 40
+6 -1
View File
@@ -547,10 +547,15 @@
if(can_interact(usr))
return ..()
/obj/item/storage/pod/AltClick(mob/user)
if(!can_interact(user))
return
..()
/obj/item/storage/pod/can_interact(mob/user)
if(!..())
return FALSE
if(GLOB.security_level == SEC_LEVEL_RED || GLOB.security_level == SEC_LEVEL_DELTA || unlocked)
if(GLOB.security_level >= SEC_LEVEL_RED || unlocked)
return TRUE
to_chat(user, "The storage unit will only unlock during a Red or Delta security alert.")
+2 -3
View File
@@ -581,9 +581,8 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
exclude_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_weapons/suppressor
name = "Universal Suppressor"
desc = "Fitted for use on any small caliber weapon with a threaded barrel, this suppressor will silence the \
shots of the weapon for increased stealth and superior ambushing capability."
name = "Suppressor"
desc = "This suppressor will silence the shots of the weapon it is attached to for increased stealth and superior ambushing capability. It is compatible with many small ballistic guns including the Stechkin and C-20r, but not revolvers or energy guns."
item = /obj/item/suppressor
cost = 3
surplus = 10
+10 -1
View File
@@ -43,7 +43,9 @@
addtimer(VARSET_CALLBACK(src, canmove , TRUE), 20)
return FALSE
var/datum/component/riding/D = GetComponent(/datum/component/riding)
D.vehicle_move_delay = 10/H.get_num_arms()
//1.5 (movespeed as of this change) multiplied by 6.7 gets ABOUT 10 (rounded), the old constant for the wheelchair that gets divided by how many arms they have
//if that made no sense this simply makes the wheelchair speed change along with movement speed delay
D.vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * 6.7) / min(H.get_num_arms(), 2)
..()
/obj/vehicle/ridden/wheelchair/Moved()
@@ -100,3 +102,10 @@
if(isobserver(user) && CONFIG_GET(flag/ghost_interaction))
return TRUE
return FALSE
/obj/vehicle/ridden/wheelchair/the_whip/driver_move(mob/living/user, direction)
var/mob/living/carbon/human/H = user
if(istype(H))
var/datum/component/riding/D = GetComponent(/datum/component/riding)
D.vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * 6.7) / H.get_num_arms()
..()
+2 -1
View File
@@ -77,7 +77,8 @@
/obj/item/clothing/under/rank/engineer/hazard = 3,
/obj/item/clothing/suit/hazardvest = 3,
/obj/item/clothing/shoes/workboots = 3,
/obj/item/clothing/head/hardhat = 3)
/obj/item/clothing/head/hardhat = 3,
/obj/item/clothing/head/hardhat/weldhat = 3)
refill_canister = /obj/item/vending_refill/wardrobe/engi_wardrobe
payment_department = ACCOUNT_ENG
/obj/item/vending_refill/wardrobe/engi_wardrobe