mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-17 02:54:44 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into Socks
Conflicts: config/admins.txt
This commit is contained in:
@@ -108,14 +108,12 @@
|
||||
health -= tforce
|
||||
healthcheck()
|
||||
|
||||
|
||||
/obj/structure/alien/resin/attack_hand(mob/living/user)
|
||||
if(HULK in user.mutations)
|
||||
user.do_attack_animation(src)
|
||||
user.visible_message("<span class='danger'>[user] destroys [src]!</span>")
|
||||
health = 0
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/alien/resin/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
user.do_attack_animation(src)
|
||||
user.visible_message("<span class='danger'>[user] destroys [src]!</span>")
|
||||
health = 0
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/alien/resin/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -966,16 +966,16 @@ steam.start() -- spawns the effect
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/foamedmetal/attack_hand(var/mob/user)
|
||||
if ((HULK in user.mutations) || (prob(75 - metal*25)))
|
||||
/obj/structure/foamedmetal/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
if(prob(75 - metal*25))
|
||||
user.visible_message("<span class='danger'>[user] smashes through the foamed metal.</span>", \
|
||||
"<span class='danger'>You smash through the metal foam wall.</span>")
|
||||
|
||||
qdel(src)
|
||||
else
|
||||
user << "<span class='notice'>You hit the metal foam but bounce off it.</span>"
|
||||
return
|
||||
return 1
|
||||
|
||||
/obj/structure/foamedmetal/attack_hand(var/mob/user)
|
||||
user << "<span class='notice'>You hit the metal foam but bounce off it.</span>"
|
||||
|
||||
/obj/structure/foamedmetal/attackby(var/obj/item/I, var/mob/user)
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
/obj/item/bodybag = 1,
|
||||
/obj/item/clothing/glasses/meson = 2,
|
||||
/obj/item/clothing/glasses/sunglasses = 1,
|
||||
/obj/item/clothing/gloves/white{color = "yellow"; desc = "The colors are a bit dodgy."; icon_state = "yellow"; item_color = "yellow"; item_state = "ygloves"; name = "insulated gloves"} = 1,
|
||||
/obj/item/clothing/gloves/color/white{color = "yellow"; desc = "The colors are a bit dodgy."; icon_state = "yellow"; item_color = "yellow"; item_state = "ygloves"; name = "insulated gloves"} = 1,
|
||||
/obj/item/clothing/head/hardhat = 1,
|
||||
/obj/item/clothing/head/hardhat/red = 1,
|
||||
/obj/item/clothing/head/that{throwforce = 1; throwing = 1} = 1,
|
||||
|
||||
@@ -313,14 +313,7 @@
|
||||
add_logs(user, M, "attacked", object="[src.name]", addition="(INTENT: [uppertext(user.a_intent)])")
|
||||
|
||||
src.add_fingerprint(user)
|
||||
//if((CLUMSY in user.mutations) && prob(50))
|
||||
// M = user
|
||||
/*
|
||||
M << "\red You stab yourself in the eye."
|
||||
M.sdisabilities |= BLIND
|
||||
M.weakened += 4
|
||||
M.adjustBruteLoss(10)
|
||||
*/
|
||||
|
||||
if(M != user)
|
||||
M.visible_message("<span class='danger'>[user] has stabbed [M] in the eye with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] stabs you in the eye with [src]!</span>")
|
||||
@@ -341,7 +334,7 @@
|
||||
M.eye_stat += rand(2,4)
|
||||
if (M.eye_stat >= 10)
|
||||
M.eye_blurry += 15+(0.1*M.eye_blurry)
|
||||
M.disabilities |= NEARSIGHTED
|
||||
M.disabilities |= NEARSIGHT
|
||||
if(M.stat != 2)
|
||||
M << "<span class='danger'>Your eyes start to bleed profusely!</span>"
|
||||
if(prob(50))
|
||||
@@ -354,7 +347,7 @@
|
||||
if (prob(M.eye_stat - 10 + 1))
|
||||
if(M.stat != 2)
|
||||
M << "<span class='danger'>You go blind!</span>"
|
||||
M.sdisabilities |= BLIND
|
||||
M.disabilities |= BLIND
|
||||
return
|
||||
|
||||
/obj/item/clean_blood()
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/camera_bug/check_eye(var/mob/user as mob)
|
||||
if (user.stat || loc != user || !user.canmove || user.blinded || !current)
|
||||
if (user.stat || loc != user || !user.canmove || user.eye_blind || !current)
|
||||
user.reset_view(null)
|
||||
user.unset_machine()
|
||||
return null
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
var/last_used = 0 //last world.time it was used.
|
||||
|
||||
|
||||
/obj/item/device/flash/proc/clown_check(mob/user)
|
||||
if(user && (CLUMSY in user.mutations) && prob(50))
|
||||
/obj/item/device/flash/proc/clown_check(mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
flash_carbon(user, user, 15, 0)
|
||||
return 0
|
||||
return 1
|
||||
@@ -57,19 +57,20 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/device/flash/proc/flash_carbon(var/mob/living/carbon/M, var/mob/user = null, var/power = 5, convert = 1)
|
||||
/obj/item/device/flash/proc/flash_carbon(var/mob/living/carbon/M, var/mob/user = null, var/power = 5, targeted = 1)
|
||||
add_logs(user, M, "flashed", object="[src.name]")
|
||||
var/safety = M:eyecheck()
|
||||
var/safety = M.eyecheck()
|
||||
if(safety <= 0)
|
||||
M.confused += power
|
||||
flick("e_flash", M.flash)
|
||||
if(user && convert)
|
||||
if(user && targeted)
|
||||
terrible_conversion_proc(M, user)
|
||||
M.Stun(1)
|
||||
user.visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
|
||||
user.visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>")
|
||||
if(user && targeted)
|
||||
user.visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>")
|
||||
return 0
|
||||
|
||||
/obj/item/device/flash/attack(mob/living/M, mob/user)
|
||||
@@ -92,6 +93,7 @@
|
||||
/obj/item/device/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
|
||||
if(!try_use_flash(user))
|
||||
return 0
|
||||
user.visible_message("<span class='disarm'>[user]'s flash emits a blinding light!</span>")
|
||||
for(var/mob/living/carbon/M in oviewers(3, null))
|
||||
flash_carbon(M, user, 3, 0)
|
||||
|
||||
|
||||
@@ -45,11 +45,11 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
/obj/item/device/flashlight/attack(mob/living/carbon/human/M as mob, mob/living/carbon/human/user as mob)
|
||||
add_fingerprint(user)
|
||||
if(on && user.zone_sel.selecting == "eyes")
|
||||
|
||||
if(((CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
|
||||
if((user.disabilities & CLUMSY || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
|
||||
return ..() //just hit them in the head
|
||||
|
||||
if(!user.IsAdvancedToolUser())
|
||||
@@ -62,7 +62,7 @@
|
||||
return
|
||||
|
||||
if(M == user) //they're using it on themselves
|
||||
if(!M.blinded)
|
||||
if(!M.eye_blind)
|
||||
flick("flash", M.flash)
|
||||
M.visible_message("<span class='notice'>[M] directs [src] to \his eyes.</span>", \
|
||||
"<span class='notice'>You wave the light in front of your eyes! Trippy!</span>")
|
||||
@@ -75,12 +75,12 @@
|
||||
"<span class='notice'>You direct [src] to [M]'s eyes.</span>")
|
||||
|
||||
if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) //robots and aliens are unaffected
|
||||
if(M.stat == DEAD || M.sdisabilities & BLIND) //mob is dead or fully blind
|
||||
if(M.stat == DEAD || M.disabilities & BLIND) //mob is dead or fully blind
|
||||
user << "<span class='notice'>[M] pupils does not react to the light!</span>"
|
||||
else if(XRAY in M.mutations) //mob has X-RAY vision
|
||||
else if(M.dna.check_mutation(XRAY)) //mob has X-RAY vision
|
||||
user << "<span class='notice'>[M] pupils give an eerie glow!</span>"
|
||||
else //they're okay!
|
||||
if(!M.blinded)
|
||||
if(!M.eye_blind)
|
||||
flick("flash", M.flash) //flash the affected mob
|
||||
user << "<span class='notice'>[M]'s pupils narrow.</span>"
|
||||
else
|
||||
@@ -101,12 +101,45 @@
|
||||
|
||||
/obj/item/device/flashlight/pen
|
||||
name = "penlight"
|
||||
desc = "A pen-sized light, used by medical staff."
|
||||
desc = "A pen-sized light, used by medical staff. It can also be used to create a hologram to alert people of incoming medical assistance."
|
||||
icon_state = "penlight"
|
||||
item_state = ""
|
||||
flags = CONDUCT
|
||||
brightness_on = 2
|
||||
var/holo_cooldown = 0
|
||||
|
||||
/obj/item/device/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(!proximity_flag)
|
||||
if(holo_cooldown)
|
||||
user << "<span class='warning'>[src] is not ready yet.</span>"
|
||||
return
|
||||
var/T = get_turf(target)
|
||||
if(locate(/mob/living) in T)
|
||||
CreateHolo(T, user)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/device/flashlight/pen/proc/CreateHolo(var/tturf,var/creator)
|
||||
var/obj/effect/medical_holosign/M = new /obj/effect/medical_holosign(tturf)
|
||||
M.visible_message("<span class='danger'>[creator] created a medical hologram!</span>")
|
||||
holo_cooldown = 1
|
||||
spawn(100)
|
||||
holo_cooldown = 0
|
||||
return
|
||||
|
||||
/obj/effect/medical_holosign
|
||||
name = "medical holosign"
|
||||
desc = "A small holographic barrier that indicates a medic is coming to treat a patient."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "medi_holo"
|
||||
layer = 4.1
|
||||
mouse_opacity = 0
|
||||
|
||||
/obj/effect/medical_holosign/New()
|
||||
playsound(loc, 'sound/machines/ping.ogg', 50, 0)
|
||||
spawn(30)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/device/flashlight/seclite
|
||||
name = "seclite"
|
||||
|
||||
@@ -78,12 +78,9 @@
|
||||
if (!user.IsAdvancedToolUser())
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return
|
||||
if(user.has_mutation(HULK))
|
||||
user << "<span class='warning'>Your meaty finger is too large for the button!</span>"
|
||||
return
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.dna && NOGUNS in H.dna.species.specflags)
|
||||
if(H.dna && (H.dna.check_mutation(HULK) || NOGUNS in H.dna.species.specflags))
|
||||
user << "<span class='warning'>Your fingers can't press the button!</span>"
|
||||
return
|
||||
|
||||
@@ -109,7 +106,7 @@
|
||||
//eye target check
|
||||
outmsg = "<span class='notice'>You blind [C] by shining [src] in their eyes.</span>"
|
||||
var/eye_prot = C.eyecheck()
|
||||
if(C.blinded || eye_prot >= 2)
|
||||
if(C.eye_blind || eye_prot >= 2)
|
||||
eye_prot = 4
|
||||
var/severity = 3 - eye_prot
|
||||
if(prob(33))
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
|
||||
/obj/item/device/radio/headset/ai
|
||||
name = "\proper Integrated Subspace Transceiver "
|
||||
keyslot = new /obj/item/device/encryptionkey/ai
|
||||
keyslot2 = new /obj/item/device/encryptionkey/ai
|
||||
|
||||
/obj/item/device/radio/headset/ai/receive_range(freq, level)
|
||||
return ..(freq, level, 1)
|
||||
|
||||
@@ -77,10 +77,10 @@ MASS SPECTROMETER
|
||||
origin_tech = "magnets=1;biotech=1"
|
||||
var/mode = 1;
|
||||
|
||||
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/carbon/human/user as mob)
|
||||
|
||||
// Clumsiness/brain damage check
|
||||
if ((CLUMSY in user.mutations || user.getBrainLoss() >= 60) && prob(50))
|
||||
if ((user.disabilities & CLUMSY || user.getBrainLoss() >= 60) && prob(50))
|
||||
user << "<span class='notice'>You stupidly try to analyze the floor's vitals!</span>"
|
||||
user.visible_message("<span class='warning'>[user] has analyzed the floor's vitals!</span>")
|
||||
user.show_message("<span class='notice'>Analyzing Results for The floor:\n\t Overall Status: Healthy", 1)
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
/obj/item/toy/balloon/throw_impact(atom/hit_atom)
|
||||
if(src.reagents.total_volume >= 1)
|
||||
src.visible_message("<span class='danger'>The [src] bursts!</span>","You hear a pop and a splash.")
|
||||
src.visible_message("<span class='danger'>\The [src] bursts!</span>","You hear a pop and a splash.")
|
||||
src.reagents.reaction(get_turf(hit_atom))
|
||||
for(var/atom/A in get_turf(hit_atom))
|
||||
src.reagents.reaction(A)
|
||||
@@ -166,17 +166,17 @@
|
||||
"<span class='danger'> You hear a gunshot.</span>")
|
||||
|
||||
/obj/item/toy/ammo/gun
|
||||
name = "ammo-caps"
|
||||
name = "capgun ammo"
|
||||
desc = "Make sure to recyle the box in an autolathe when it gets empty."
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
icon_state = "357-7"
|
||||
icon_state = "357OLD-7"
|
||||
w_class = 1.0
|
||||
g_amt = 10
|
||||
m_amt = 10
|
||||
var/amount_left = 7.0
|
||||
|
||||
/obj/item/toy/ammo/gun/update_icon()
|
||||
src.icon_state = text("357-[]", src.amount_left)
|
||||
src.icon_state = text("357OLD-[]", src.amount_left)
|
||||
|
||||
/obj/item/toy/ammo/gun/examine(mob/user)
|
||||
..()
|
||||
@@ -735,7 +735,7 @@ obj/item/toy/cards/deck/attack_hand(mob/user as mob)
|
||||
src.cards -= choice
|
||||
H.pickup(user)
|
||||
user.put_in_active_hand(H)
|
||||
src.visible_message("<span class='notice'>[user] draws a card from the deck.</span>", "<span class='notice'>You draw a card from the deck.</span>")
|
||||
user.visible_message("<span class='notice'>[user] draws a card from the deck.</span>", "<span class='notice'>You draw a card from the deck.</span>")
|
||||
if(cards.len > 26)
|
||||
src.icon_state = "deck_[deckstyle]_full"
|
||||
else if(cards.len > 10)
|
||||
|
||||
@@ -174,7 +174,13 @@ RCD
|
||||
if(2)
|
||||
if(istype(A, /turf/simulated/floor))
|
||||
if(checkResource(10, user))
|
||||
if(!locate(/obj/machinery/door) in A)
|
||||
var/door_check = 1
|
||||
for(var/obj/machinery/door/D in A)
|
||||
if(!D.sub_door)
|
||||
door_check = 0
|
||||
break
|
||||
|
||||
if(door_check)
|
||||
user << "Building Airlock..."
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, 50))
|
||||
|
||||
@@ -9,6 +9,7 @@ RPD
|
||||
#define PIPE_TRINARY 2
|
||||
#define PIPE_TRIN_M 3
|
||||
#define PIPE_UNARY 4
|
||||
#define PIPE_QUAD 5
|
||||
|
||||
#define PAINT_MODE -2
|
||||
#define EATING_MODE -1
|
||||
@@ -41,20 +42,18 @@ RPD
|
||||
return
|
||||
|
||||
/datum/pipe_info/meter/Render(var/dispenser,var/label)
|
||||
return "<li><a href='?src=\ref[dispenser];makemeter=1;type=[PIPE_UNARY]'>[label]</a></li>" //hardcoding is no
|
||||
return "<li><a href='?src=\ref[dispenser];makemeter=1;type=[dirtype]'>[label]</a></li>" //hardcoding is no
|
||||
|
||||
var/global/list/disposalpipeID2State=list(
|
||||
"pipe-s",
|
||||
"pipe-c",
|
||||
"pipe-j1",
|
||||
"pipe-j2",
|
||||
"pipe-y",
|
||||
"pipe-t",
|
||||
"condisposal",
|
||||
"disposal",
|
||||
"outlet",
|
||||
"intake",
|
||||
"pipe-j1s",
|
||||
"pipe-j2s"
|
||||
"pipe-j1s"
|
||||
)
|
||||
|
||||
/datum/pipe_info/disposal
|
||||
@@ -66,11 +65,11 @@ var/global/list/disposalpipeID2State=list(
|
||||
src.icon_state=disposalpipeID2State[pid+1]
|
||||
src.dir=2
|
||||
src.dirtype=dt
|
||||
if(pid<6 || pid>8)
|
||||
if(pid<5 || pid>7)
|
||||
icon_state = "con[icon_state]"
|
||||
|
||||
/datum/pipe_info/disposal/Render(var/dispenser,var/label)
|
||||
return "<li><a href='?src=\ref[dispenser];dmake=[id];type=[PIPE_UNARY]'>[label]</a></li>" //avoid hardcoding.
|
||||
return "<li><a href='?src=\ref[dispenser];dmake=[id];type=[dirtype]'>[label]</a></li>" //avoid hardcoding.
|
||||
|
||||
//find these defines in code\game\machinery\pipe\consruction.dm
|
||||
var/global/list/RPD_recipes=list(
|
||||
@@ -80,7 +79,7 @@ var/global/list/RPD_recipes=list(
|
||||
"Manifold" = new /datum/pipe_info(PIPE_MANIFOLD, 1, PIPE_TRINARY),
|
||||
"Manual Valve" = new /datum/pipe_info(PIPE_MVALVE, 1, PIPE_BINARY),
|
||||
"Digital Valve" = new /datum/pipe_info(PIPE_DVALVE, 1, PIPE_BINARY),
|
||||
"4-Way Manifold" = new /datum/pipe_info(PIPE_4WAYMANIFOLD, 1, PIPE_BINARY),
|
||||
"4-Way Manifold" = new /datum/pipe_info(PIPE_4WAYMANIFOLD, 1, PIPE_QUAD),
|
||||
),
|
||||
"Devices"=list(
|
||||
"Connector" = new /datum/pipe_info(PIPE_CONNECTOR, 1, PIPE_UNARY),
|
||||
@@ -105,14 +104,15 @@ var/global/list/RPD_recipes=list(
|
||||
"Bent Pipe" = new /datum/pipe_info(PIPE_INSULATED_BENT, 5, PIPE_BENT),
|
||||
),
|
||||
"Disposal Pipes" = list(
|
||||
"Pipe" = new /datum/pipe_info/disposal(DISP_PIPE_STRAIGHT, PIPE_BINARY),
|
||||
"Bent Pipe" = new /datum/pipe_info/disposal(DISP_PIPE_BENT, PIPE_BENT),
|
||||
"Junction" = new /datum/pipe_info/disposal(DISP_JUNCTION, PIPE_TRINARY),
|
||||
"Y-Junction" = new /datum/pipe_info/disposal(DISP_YJUNCTION, PIPE_TRINARY),
|
||||
"Trunk" = new /datum/pipe_info/disposal(DISP_END_TRUNK, PIPE_TRINARY),
|
||||
"Bin" = new /datum/pipe_info/disposal(DISP_END_BIN, PIPE_UNARY),
|
||||
"Outlet" = new /datum/pipe_info/disposal(DISP_END_OUTLET, PIPE_UNARY),
|
||||
"Chute" = new /datum/pipe_info/disposal(DISP_END_CHUTE, PIPE_UNARY),
|
||||
"Pipe" = new /datum/pipe_info/disposal(DISP_PIPE_STRAIGHT, PIPE_BINARY),
|
||||
"Bent Pipe" = new /datum/pipe_info/disposal(DISP_PIPE_BENT, PIPE_TRINARY),
|
||||
"Junction" = new /datum/pipe_info/disposal(DISP_JUNCTION, PIPE_TRINARY),
|
||||
"Y-Junction" = new /datum/pipe_info/disposal(DISP_YJUNCTION, PIPE_TRINARY),
|
||||
"Trunk" = new /datum/pipe_info/disposal(DISP_END_TRUNK, PIPE_TRINARY),
|
||||
"Bin" = new /datum/pipe_info/disposal(DISP_END_BIN, PIPE_QUAD),
|
||||
"Outlet" = new /datum/pipe_info/disposal(DISP_END_OUTLET, PIPE_UNARY),
|
||||
"Chute" = new /datum/pipe_info/disposal(DISP_END_CHUTE, PIPE_UNARY),
|
||||
"Sort Junction" = new /datum/pipe_info/disposal(DISP_SORTJUNCTION, PIPE_TRINARY),
|
||||
)
|
||||
)
|
||||
/obj/item/weapon/pipe_dispenser
|
||||
@@ -342,6 +342,19 @@ var/global/list/RPD_recipes=list(
|
||||
<a href="?src=\ref[src];setdir=[WEST]" title="West">←</a>
|
||||
</p>
|
||||
"}
|
||||
if(PIPE_QUAD) // Single icon_state (eg 4-way manifolds)
|
||||
if(preview)
|
||||
user << browse_rsc(new /icon(preview), "pipe.png")
|
||||
|
||||
dirsel += "<p>"
|
||||
dirsel += render_dir_img(1,"pipe.png","Pipe")
|
||||
dirsel += "</p>"
|
||||
else
|
||||
dirsel+={"
|
||||
<p>
|
||||
<a href="?src=\ref[src];setdir=1" title="Pipe">↕</a>
|
||||
</p>
|
||||
"}
|
||||
|
||||
dat = {"
|
||||
<html>
|
||||
@@ -450,20 +463,20 @@ var/global/list/RPD_recipes=list(
|
||||
return
|
||||
if(loc != user)
|
||||
return
|
||||
if(!isrobot(user) && !ishuman(user))
|
||||
return 0
|
||||
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))
|
||||
return 0
|
||||
|
||||
switch(p_class)
|
||||
if(PAINT_MODE) // Paint pipes
|
||||
if(!istype(A,/obj/machinery/atmospherics/pipe) || istype(A,/obj/machinery/atmospherics/pipe/simple/heat_exchanging) || istype(A,/obj/machinery/atmospherics/pipe/simple/insulated))
|
||||
if(!istype(A,/obj/machinery/atmospherics/pipe))
|
||||
// Avoid spewing errors about invalid mode -2 when clicking on stuff that aren't pipes.
|
||||
user << "<span class='warning'>\The [src]'s error light flickers. Perhaps you need to only use it on pipes and pipe meters?</span>"
|
||||
return 0
|
||||
var/obj/machinery/atmospherics/pipe/P = A
|
||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||
P.pipe_color = paint_color
|
||||
P.color = paint_colors[paint_color]
|
||||
P.pipe_color = paint_colors[paint_color]
|
||||
P.stored.color = paint_colors[paint_color]
|
||||
user.visible_message("<span class='notice'>[user] paints \the [P] [paint_color].</span>","<span class='notice'>You paint \the [P] [paint_color].</span>")
|
||||
P.update_icon()
|
||||
return 1
|
||||
@@ -539,6 +552,8 @@ var/global/list/RPD_recipes=list(
|
||||
if(7)
|
||||
C.ptype = 8
|
||||
C.density = 1
|
||||
if(8)
|
||||
C.ptype = 9
|
||||
C.add_fingerprint(usr)
|
||||
C.update()
|
||||
return 1
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
"<span class='notice'>You throw [src]. It lands on [result]. [comment]</span>", \
|
||||
"<span class='notice'>You hear [src] landing on [result]. [comment]</span>")
|
||||
else if(src.throwing == 0) //Dice was thrown and is coming to rest
|
||||
src.loc.visible_message("<span class='notice'>[src] rolls to a stop, landing on [result]. [comment]</span>")
|
||||
visible_message("<span class='notice'>[src] rolls to a stop, landing on [result]. [comment]</span>")
|
||||
|
||||
/obj/item/weapon/dice/d4/Crossed(var/mob/living/carbon/human/H)
|
||||
if(istype(H) && !H.shoes)
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
var/damage_coeff = 1
|
||||
var/list/fields
|
||||
var/list/add_mutations = list()
|
||||
var/list/remove_mutations = list()
|
||||
|
||||
/obj/item/weapon/dnainjector/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
@@ -20,8 +22,15 @@
|
||||
user << "<span class='notice'>You can't modify [M]'s DNA while \he's dead.</span>"
|
||||
return
|
||||
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
|
||||
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
|
||||
for(var/datum/mutation/human/HM in remove_mutations)
|
||||
HM.on_losing(M)
|
||||
for(var/datum/mutation/human/HM in add_mutations)
|
||||
if(HM.name == RACEMUT)
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] <span class='danger'>(MONKEY)</span>")
|
||||
log_msg += " (MONKEY)"
|
||||
HM.force_give(M)
|
||||
if(fields)
|
||||
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
|
||||
if(fields["name"] && fields["UE"] && fields["blood_type"])
|
||||
M.real_name = fields["name"]
|
||||
M.dna.unique_enzymes = fields["UE"]
|
||||
@@ -30,13 +39,7 @@
|
||||
if(fields["UI"]) //UI+UE
|
||||
M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"])
|
||||
updateappearance(M)
|
||||
if(fields["SE"])
|
||||
M.dna.struc_enzymes = merge_text(M.dna.struc_enzymes, fields["SE"])
|
||||
if(ishuman(M) && (deconstruct_block(getblock(M.dna.struc_enzymes, RACEBLOCK), BAD_MUTATION_DIFFICULTY) == BAD_MUTATION_DIFFICULTY)) //check for monkeying people.
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] <span class='danger'>(MONKEY)</span>")
|
||||
log_msg += " (MONKEY)"
|
||||
domutcheck(M, null,(type != /obj/item/weapon/dnainjector)) //admin-spawnable-injectors always work
|
||||
log_attack(log_msg)
|
||||
log_attack(log_msg)
|
||||
else
|
||||
user << "<span class='notice'>It appears that [M] does not have compatible DNA.</span>"
|
||||
return
|
||||
@@ -67,28 +70,27 @@
|
||||
desc = "Cures green skin."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, HULKBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[HULK])
|
||||
|
||||
/obj/item/weapon/dnainjector/hulkmut
|
||||
name = "\improper DNA injector (Hulk)"
|
||||
desc = "This will make you big and strong, but give you a bad skin condition."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, HULKBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
|
||||
add_mutations.Add(mutations_list[HULK])
|
||||
/obj/item/weapon/dnainjector/xraymut
|
||||
name = "\improper DNA injector (Xray)"
|
||||
desc = "Finally you can see what the Captain does."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, XRAYBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[XRAY])
|
||||
|
||||
/obj/item/weapon/dnainjector/antixray
|
||||
name = "\improper DNA injector (Anti-Xray)"
|
||||
desc = "It will make you see harder."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, XRAYBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[XRAY])
|
||||
|
||||
/////////////////////////////////////
|
||||
/obj/item/weapon/dnainjector/antiglasses
|
||||
@@ -96,128 +98,126 @@
|
||||
desc = "Toss away those glasses!"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, NEARSIGHTEDBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[BADSIGHT])
|
||||
|
||||
/obj/item/weapon/dnainjector/glassesmut
|
||||
name = "\improper DNA injector (Glasses)"
|
||||
desc = "Will make you need dorkish glasses."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, NEARSIGHTEDBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[BADSIGHT])
|
||||
|
||||
/obj/item/weapon/dnainjector/epimut
|
||||
name = "\improper DNA injector (Epi.)"
|
||||
desc = "Shake shake shake the room!"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, EPILEPSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[EPILEPSY])
|
||||
|
||||
/obj/item/weapon/dnainjector/antiepi
|
||||
name = "\improper DNA injector (Anti-Epi.)"
|
||||
desc = "Will fix you up from shaking the room."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, EPILEPSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[EPILEPSY])
|
||||
////////////////////////////////////
|
||||
/obj/item/weapon/dnainjector/anticough
|
||||
name = "\improper DNA injector (Anti-Cough)"
|
||||
desc = "Will stop that aweful noise."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, COUGHBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[COUGH])
|
||||
|
||||
/obj/item/weapon/dnainjector/coughmut
|
||||
name = "\improper DNA injector (Cough)"
|
||||
desc = "Will bring forth a sound of horror from your throat."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, COUGHBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
|
||||
add_mutations.Add(mutations_list[COUGH])
|
||||
|
||||
/obj/item/weapon/dnainjector/clumsymut
|
||||
name = "\improper DNA injector (Clumsy)"
|
||||
desc = "Makes clown minions."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, CLUMSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
|
||||
add_mutations.Add(mutations_list[CLOWNMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/anticlumsy
|
||||
name = "\improper DNA injector (Anti-Clumy)"
|
||||
desc = "Apply this for Security Clown."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, CLUMSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[CLOWNMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/antitour
|
||||
name = "\improper DNA injector (Anti-Tour.)"
|
||||
desc = "Will cure tourrets."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, TOURETTESBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[TOURETTES])
|
||||
|
||||
/obj/item/weapon/dnainjector/tourmut
|
||||
name = "\improper DNA injector (Tour.)"
|
||||
desc = "Gives you a nasty case off tourrets."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, TOURETTESBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[TOURETTES])
|
||||
|
||||
/obj/item/weapon/dnainjector/stuttmut
|
||||
name = "\improper DNA injector (Stutt.)"
|
||||
desc = "Makes you s-s-stuttterrr"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, NERVOUSBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[NERVOUS])
|
||||
|
||||
/obj/item/weapon/dnainjector/antistutt
|
||||
name = "\improper DNA injector (Anti-Stutt.)"
|
||||
desc = "Fixes that speaking impairment."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, NERVOUSBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[NERVOUS])
|
||||
|
||||
/obj/item/weapon/dnainjector/antifire
|
||||
name = "\improper DNA injector (Anti-Fire)"
|
||||
desc = "Cures fire."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, FIREBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[COLDRES])
|
||||
|
||||
/obj/item/weapon/dnainjector/firemut
|
||||
name = "\improper DNA injector (Fire)"
|
||||
desc = "Gives you fire."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, FIREBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
add_mutations.Add(mutations_list[COLDRES])
|
||||
|
||||
/obj/item/weapon/dnainjector/blindmut
|
||||
name = "\improper DNA injector (Blind)"
|
||||
desc = "Makes you not see anything."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, BLINDBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[BLINDMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/antiblind
|
||||
name = "\improper DNA injector (Anti-Blind)"
|
||||
desc = "ITS A MIRACLE!!!"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, BLINDBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[BLINDMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/antitele
|
||||
name = "\improper DNA injector (Anti-Tele.)"
|
||||
desc = "Will make you not able to control your mind."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, TELEBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[TK])
|
||||
|
||||
/obj/item/weapon/dnainjector/telemut
|
||||
name = "\improper DNA injector (Tele.)"
|
||||
desc = "Super brain man!"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, TELEBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[TK])
|
||||
|
||||
/obj/item/weapon/dnainjector/telemut/darkbundle
|
||||
name = "\improper DNA injector"
|
||||
@@ -228,25 +228,25 @@
|
||||
desc = "Sorry, what did you say?"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, DEAFBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[DEAFMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/antideaf
|
||||
name = "\improper DNA injector (Anti-Deaf)"
|
||||
desc = "Will make you hear once more."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, DEAFBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[DEAFMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/h2m
|
||||
name = "\improper DNA injector (Human > Monkey)"
|
||||
desc = "Will make you a flea bag."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, RACEBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[RACEMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/m2h
|
||||
name = "\improper DNA injector (Monkey > Human)"
|
||||
desc = "Will make you...less hairy."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, RACEBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[RACEMUT])
|
||||
@@ -45,11 +45,11 @@
|
||||
M.Weaken(max(10/distance, 3))
|
||||
if (M.eye_stat >= 20 && takes_eye_damage)
|
||||
M << "<span class='warning'>Your eyes start to burn badly!</span>"
|
||||
M.disabilities |= NEARSIGHTED
|
||||
M.disabilities |= NEARSIGHT
|
||||
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
|
||||
if (prob(M.eye_stat - 20 + 1))
|
||||
M << "<span class='warning'>You can't see anything!</span>"
|
||||
M.sdisabilities |= BLIND
|
||||
M.disabilities |= BLIND
|
||||
|
||||
//Bang
|
||||
if((src.loc == M) || src.loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection
|
||||
@@ -63,9 +63,9 @@
|
||||
if (M.ear_damage >= 15)
|
||||
M << "<span class='warning'>Your ears start to ring badly!</span>"
|
||||
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
|
||||
if (prob(M.ear_damage - 10 + 5))
|
||||
if(prob(M.ear_damage - 10 + 5))
|
||||
M << "<span class='warning'>You can't hear anything!</span>"
|
||||
M.sdisabilities |= DEAF
|
||||
M.disabilities |= DEAF
|
||||
else
|
||||
if (M.ear_damage >= 5)
|
||||
M << "<span class='warning'>Your ears start to ring!</span>"
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
var/det_time = 50
|
||||
var/display_timer = 1
|
||||
|
||||
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user)
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>Huh? How does this thing work?</span>"
|
||||
active = 1
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
var/cuffsound = 'sound/weapons/handcuffs.ogg'
|
||||
var/trashtype = null //for disposable cuffs
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/attack(mob/living/carbon/C, mob/user)
|
||||
if(CLUMSY in user.mutations && prob(50))
|
||||
/obj/item/weapon/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>Uh... how do those things work?!</span>"
|
||||
apply_cuffs(user,user)
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
src.icon_state = "fork"
|
||||
return
|
||||
else
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
M = user
|
||||
return eyestab(M,user)
|
||||
|
||||
@@ -86,9 +86,9 @@
|
||||
"<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>"))
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob)
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
user << "<span class='danger'> You accidentally cut yourself with \the [src].</span>"
|
||||
/obj/item/weapon/kitchen/utensil/knife/attack(target, mob/living/carbon/human/user)
|
||||
if(istype(user) && user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='danger'>You accidentally cut yourself with \the [src].</span>"
|
||||
user.take_organ_damage(20)
|
||||
return
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
||||
|
||||
@@ -60,8 +60,8 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/melee/energy/attack_self(mob/living/user)
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
/obj/item/weapon/melee/energy/attack_self(mob/living/carbon/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>"
|
||||
user.take_organ_damage(5,5)
|
||||
active = !active
|
||||
@@ -189,4 +189,4 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/attack_self(mob/user)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -25,86 +25,15 @@
|
||||
icon_state = "baton"
|
||||
item_state = "classic_baton"
|
||||
slot_flags = SLOT_BELT
|
||||
force = 10
|
||||
|
||||
/obj/item/weapon/melee/classic_baton/attack(mob/M, mob/living/user)
|
||||
add_fingerprint(user)
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
user << "<span class='warning'>You club yourself over the head!</span>"
|
||||
user.Weaken(3 * force)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.apply_damage(2 * force, BRUTE, "head")
|
||||
H.forcesay(hit_appends)
|
||||
else
|
||||
user.take_organ_damage(2 * force)
|
||||
return
|
||||
add_logs(user, M, "attacked", object="[src.name]")
|
||||
|
||||
if(isrobot(M)) // Don't stun borgs, fix for issue #2436
|
||||
..()
|
||||
return
|
||||
if(!isliving(M)) // Don't stun nonhuman things
|
||||
return
|
||||
|
||||
if(user.a_intent == "harm")
|
||||
if(!..()) return
|
||||
if(M.stuttering < 7 && !(HULK in M.mutations))
|
||||
M.stuttering = 7
|
||||
M.Stun(7)
|
||||
M.Weaken(7)
|
||||
M.visible_message("<span class='danger'>[user] has beaten [M] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] has beaten [M] with [src]!</span>")
|
||||
else
|
||||
playsound(loc, 'sound/effects/woodhit.ogg', 50, 1, -1)
|
||||
M.Stun(7)
|
||||
M.Weaken(7)
|
||||
M.visible_message("<span class='danger'>[user] has stunned [M] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] has stunned [M] with [src]!</span>")
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.forcesay(hit_appends)
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/melee/telebaton
|
||||
name = "telescopic baton"
|
||||
desc = "A compact yet robust personal defense weapon. Can be concealed when folded."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "telebaton_0"
|
||||
item_state = "telebaton_0"
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
force = 3
|
||||
force = 12 //9 hit crit
|
||||
w_class = 3
|
||||
var/cooldown = 0
|
||||
var/on = 0
|
||||
var/on = 1
|
||||
|
||||
/obj/item/weapon/melee/telebaton/attack_self(mob/user as mob)
|
||||
on = !on
|
||||
if(on)
|
||||
user << "<span class ='warning'>You extend the baton.</span>"
|
||||
icon_state = "telebaton_1"
|
||||
item_state = "nullrod"
|
||||
w_class = 4 //doesnt fit in backpack when its on for balance
|
||||
force = 10 //seclite damage
|
||||
attack_verb = list("smacked", "struck", "cracked", "beaten")
|
||||
else
|
||||
user << "<span class ='notice'>You collapse the baton.</span>"
|
||||
icon_state = "telebaton_0"
|
||||
item_state = "telebaton_0" //no sprite in other words
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
force = 3 //not so robust now
|
||||
attack_verb = list("hit", "poked")
|
||||
|
||||
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/melee/telebaton/attack(mob/target as mob, mob/living/user as mob)
|
||||
/obj/item/weapon/melee/classic_baton/attack(mob/target as mob, mob/living/user as mob)
|
||||
if(on)
|
||||
add_fingerprint(user)
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
if((CLUMSY in user.disabilities) && prob(50))
|
||||
user << "<span class ='danger'>You club yourself over the head.</span>"
|
||||
user.Weaken(3 * force)
|
||||
if(ishuman(user))
|
||||
@@ -125,7 +54,7 @@
|
||||
if(cooldown <= 0)
|
||||
playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
|
||||
target.Weaken(3)
|
||||
add_logs(user, target, "stunned", object="telescopic baton")
|
||||
add_logs(user, target, "stunned", object="classic baton")
|
||||
src.add_fingerprint(user)
|
||||
target.visible_message("<span class ='danger'>[user] has knocked down [target] with \the [src]!</span>", \
|
||||
"<span class ='userdanger'>[user] has knocked down [target] with \the [src]!</span>")
|
||||
@@ -138,4 +67,38 @@
|
||||
cooldown = 0
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/melee/classic_baton/telescopic
|
||||
name = "telescopic baton"
|
||||
desc = "A compact yet robust personal defense weapon. Can be concealed when folded."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "telebaton_0"
|
||||
item_state = null
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
force = 0
|
||||
on = 0
|
||||
|
||||
/obj/item/weapon/melee/classic_baton/telescopic/attack_self(mob/user as mob)
|
||||
on = !on
|
||||
if(on)
|
||||
user << "<span class ='warning'>You extend the baton.</span>"
|
||||
icon_state = "telebaton_1"
|
||||
item_state = "nullrod"
|
||||
w_class = 4 //doesnt fit in backpack when its on for balance
|
||||
force = 10 //stunbaton damage
|
||||
attack_verb = list("smacked", "struck", "cracked", "beaten")
|
||||
else
|
||||
user << "<span class ='notice'>You collapse the baton.</span>"
|
||||
icon_state = "telebaton_0"
|
||||
item_state = null //no sprite for concealment even when in hand
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
force = 0 //not so robust now
|
||||
attack_verb = list("hit", "poked")
|
||||
|
||||
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
|
||||
add_fingerprint(user)
|
||||
@@ -56,8 +56,8 @@
|
||||
/obj/item/weapon/shield/energy/IsReflect()
|
||||
return (active)
|
||||
|
||||
/obj/item/weapon/shield/energy/attack_self(mob/living/user)
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
/obj/item/weapon/shield/energy/attack_self(mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>You beat yourself in the head with [src].</span>"
|
||||
user.take_organ_damage(5)
|
||||
active = !active
|
||||
|
||||
@@ -7,34 +7,6 @@
|
||||
slot_flags = SLOT_BELT
|
||||
attack_verb = list("whipped", "lashed", "disciplined")
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/proc/can_use()
|
||||
if(!ismob(loc)) return 0
|
||||
var/mob/M = loc
|
||||
if(src in M.get_equipped_items())
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/MouseDrop(obj/over_object as obj, src_location, over_location)
|
||||
var/mob/M = usr
|
||||
if(!istype(over_object, /obj/screen))
|
||||
return ..()
|
||||
playsound(src.loc, "rustle", 50, 1, -5)
|
||||
if (!M.restrained() && !M.stat && can_use())
|
||||
switch(over_object.name)
|
||||
if("r_hand")
|
||||
M.unEquip(src)
|
||||
M.put_in_r_hand(src)
|
||||
if("l_hand")
|
||||
M.unEquip(src)
|
||||
M.put_in_l_hand(src)
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/utility
|
||||
name = "toolbelt" //Carn: utility belt is nicer, but it bamboozles the text parsing.
|
||||
desc = "Holds tools."
|
||||
@@ -121,7 +93,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/normal,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
|
||||
/obj/item/device/flashlight/seclite,
|
||||
/obj/item/weapon/melee/telebaton
|
||||
/obj/item/weapon/melee/classic_baton/telescopic
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/security/New()
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
H.update_damage_overlays(0)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/book/bible/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
/obj/item/weapon/storage/book/bible/attack(mob/living/M as mob, mob/living/carbon/human/user as mob)
|
||||
|
||||
var/chaplain = 0
|
||||
if(user.mind && (user.mind.assigned_role == "Chaplain"))
|
||||
@@ -60,7 +60,7 @@
|
||||
user.take_organ_damage(0,10)
|
||||
return
|
||||
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
if (user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='danger'>The [src] slips out of your hand and hits your head.</span>"
|
||||
user.take_organ_damage(10)
|
||||
user.Paralyse(20)
|
||||
|
||||
@@ -83,13 +83,13 @@
|
||||
|
||||
/obj/item/weapon/storage/box/gloves/New()
|
||||
..()
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/color/latex(src)
|
||||
new /obj/item/clothing/gloves/color/latex(src)
|
||||
new /obj/item/clothing/gloves/color/latex(src)
|
||||
new /obj/item/clothing/gloves/color/latex(src)
|
||||
new /obj/item/clothing/gloves/color/latex(src)
|
||||
new /obj/item/clothing/gloves/color/latex(src)
|
||||
new /obj/item/clothing/gloves/color/latex(src)
|
||||
|
||||
/obj/item/weapon/storage/box/masks
|
||||
name = "box of sterile masks"
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
/obj/item/weapon/storage/proc/can_see_contents()
|
||||
var/list/cansee = list()
|
||||
for(var/mob/M in is_seeing)
|
||||
if(M.s_active == src)
|
||||
if(M.s_active == src && M.client)
|
||||
cansee |= M
|
||||
else
|
||||
is_seeing -= M
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
if(prob(5))
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
else
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
|
||||
|
||||
@@ -100,8 +100,8 @@
|
||||
update_icon()
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/melee/baton/attack(mob/M, mob/living/user)
|
||||
if(status && (CLUMSY in user.mutations) && prob(50))
|
||||
/obj/item/weapon/melee/baton/attack(mob/M, mob/living/carbon/human/user)
|
||||
if(status && user.disabilities & CLUMSY && prob(50))
|
||||
user.visible_message("<span class='danger'>[user] accidentally hits themself with [src]!</span>", \
|
||||
"<span class='userdanger'>You accidentally hit yourself with [src]!</span>")
|
||||
user.Weaken(stunforce*3)
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
if(!istype(M)) return ..()
|
||||
if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head")
|
||||
return ..()
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
M = user
|
||||
return eyestab(M,user)
|
||||
|
||||
@@ -349,14 +349,14 @@
|
||||
user << "<span class='warning'>Your eyes are really starting to hurt. This can't be good for you!</span>"
|
||||
if (prob(user.eye_stat - 25 + 1))
|
||||
user << "<span class='warning'>You go blind!</span>"
|
||||
user.sdisabilities |= BLIND
|
||||
user.disabilities |= BLIND
|
||||
else if(prob(user.eye_stat - 15 + 1))
|
||||
user << "<span class='warning'>You go blind!</span>"
|
||||
user.eye_blind = 5
|
||||
user.eye_blurry = 5
|
||||
user.disabilities |= NEARSIGHTED
|
||||
user.disabilities |= NEARSIGHT
|
||||
spawn(100)
|
||||
user.disabilities &= ~NEARSIGHTED
|
||||
user.disabilities &= ~NEARSIGHT
|
||||
|
||||
/obj/item/weapon/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user)
|
||||
if(welding)
|
||||
|
||||
@@ -27,24 +27,46 @@
|
||||
var/wieldsound = null
|
||||
var/unwieldsound = null
|
||||
|
||||
/obj/item/weapon/twohanded/proc/unwield()
|
||||
/obj/item/weapon/twohanded/proc/unwield(mob/living/carbon/user)
|
||||
if(!wielded) return
|
||||
wielded = 0
|
||||
force = force_unwielded
|
||||
name = "[initial(name)]"
|
||||
update_icon()
|
||||
user << "<span class='notice'>You are now carrying the [name] with one hand.</span>"
|
||||
if(unwieldsound)
|
||||
playsound(loc, unwieldsound, 50, 1)
|
||||
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand()
|
||||
if(O && istype(O))
|
||||
O.unwield()
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/proc/wield()
|
||||
/obj/item/weapon/twohanded/proc/wield(mob/living/carbon/user)
|
||||
if(wielded) return
|
||||
if(istype(user,/mob/living/carbon/monkey) )
|
||||
user << "<span class='warning'>It's too heavy for you to wield fully.</span>"
|
||||
return
|
||||
if(user.get_inactive_hand())
|
||||
user << "<span class='warning'>You need your other hand to be empty</span>"
|
||||
return
|
||||
wielded = 1
|
||||
force = force_wielded
|
||||
name = "[initial(name)] (Wielded)"
|
||||
update_icon()
|
||||
user << "<span class='notice'>You grab the [initial(name)] with both hands.</span>"
|
||||
if (wieldsound)
|
||||
playsound(loc, wieldsound, 50, 1)
|
||||
var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~
|
||||
O.name = "[initial(name)] - offhand"
|
||||
O.desc = "Your second grip on the [initial(name)]"
|
||||
user.put_in_inactive_hand(O)
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/mob_can_equip(M as mob, slot)
|
||||
//Cannot equip wielded items.
|
||||
if(wielded)
|
||||
M << "<span class='warning'>Unwield the [initial(name)] first!</span>"
|
||||
return 0
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/twohanded/dropped(mob/user as mob)
|
||||
@@ -58,41 +80,12 @@
|
||||
/obj/item/weapon/twohanded/update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/pickup(mob/user)
|
||||
unwield()
|
||||
|
||||
/obj/item/weapon/twohanded/attack_self(mob/user as mob)
|
||||
if( istype(user,/mob/living/carbon/monkey) )
|
||||
user << "<span class='warning'>It's too heavy for you to wield fully.</span>"
|
||||
return
|
||||
|
||||
..()
|
||||
if(wielded) //Trying to unwield it
|
||||
unwield()
|
||||
user << "<span class='notice'>You are now carrying the [name] with one hand.</span>"
|
||||
if (src.unwieldsound)
|
||||
playsound(src.loc, unwieldsound, 50, 1)
|
||||
|
||||
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand()
|
||||
if(O && istype(O))
|
||||
O.unwield()
|
||||
return
|
||||
|
||||
unwield(user)
|
||||
else //Trying to wield it
|
||||
if(user.get_inactive_hand())
|
||||
user << "<span class='warning'>You need your other hand to be empty</span>"
|
||||
return
|
||||
wield()
|
||||
user << "<span class='notice'>You grab the [initial(name)] with both hands.</span>"
|
||||
if (src.wieldsound)
|
||||
playsound(src.loc, wieldsound, 50, 1)
|
||||
|
||||
var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~
|
||||
O.name = "[initial(name)] - offhand"
|
||||
O.desc = "Your second grip on the [initial(name)]"
|
||||
user.put_in_inactive_hand(O)
|
||||
return
|
||||
|
||||
wield(user)
|
||||
|
||||
///////////OFFHAND///////////////
|
||||
/obj/item/weapon/twohanded/offhand
|
||||
@@ -212,9 +205,9 @@ obj/item/weapon/twohanded/
|
||||
clean_blood()//blood overlays get weird otherwise, because the sprite changes.
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/user as mob)
|
||||
/obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/carbon/human/user as mob)
|
||||
..()
|
||||
if((CLUMSY in user.mutations) && (wielded) && prob(40))
|
||||
if(user.disabilities & CLUMSY && (wielded) && prob(40))
|
||||
impale(user)
|
||||
return
|
||||
if((wielded) && prob(50))
|
||||
@@ -236,14 +229,18 @@ obj/item/weapon/twohanded/
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/wield() //Specific wield () hulk checks due to reflect_chance var for balance issues and switches hitsounds.
|
||||
..()
|
||||
var/mob/living/M = loc
|
||||
if(istype(loc, /mob/living))
|
||||
if (HULK in M.mutations)
|
||||
loc << "<span class='warning'>You lack the grace to wield this to its full extent.</span>"
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
/obj/item/weapon/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up
|
||||
if(wielded)
|
||||
user << "<span class='warning'>You cant pick up such dangerous item with your meaty hands without losing fingers, better not to.</span>"
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflect_chance var for balance issues and switches hitsounds.
|
||||
if(istype(M))
|
||||
if(M.dna.check_mutation(HULK))
|
||||
M << "<span class='warning'>You lack the grace to wield this.</span>"
|
||||
return
|
||||
..()
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds.
|
||||
..()
|
||||
@@ -251,11 +248,7 @@ obj/item/weapon/twohanded/
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/IsReflect()
|
||||
if(wielded)
|
||||
var/mob/living/M = loc
|
||||
if(istype(loc, /mob/living))
|
||||
if (HULK in M.mutations)
|
||||
return
|
||||
return 1
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/green
|
||||
New()
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if(!(usr in nearby))
|
||||
if(usr.client && usr.machine==src)
|
||||
if(TK in H.mutations)
|
||||
if(H.dna.check_mutation(TK))
|
||||
is_in_use = 1
|
||||
src.attack_hand(usr)
|
||||
in_use = is_in_use
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
|
||||
/obj/structure/mech_melee_attack(obj/mecha/M)
|
||||
if(M.damtype == "brute")
|
||||
M.occupant_message("<span class='danger'>You hit [src].</span>")
|
||||
visible_message("<span class='danger'>[M.name] has hit [src].</span>")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
*/
|
||||
/obj/structure/closet/chefcloset
|
||||
name = "\proper chef's closet"
|
||||
desc = "It's a storage unit for foodservice garments."
|
||||
desc = "It's a storage unit for foodservice garments and mouse traps."
|
||||
icon_state = "black"
|
||||
icon_closed = "black"
|
||||
|
||||
@@ -48,10 +48,14 @@
|
||||
new /obj/item/device/radio/headset/headset_srv(src)
|
||||
new /obj/item/clothing/tie/waistcoat(src)
|
||||
new /obj/item/clothing/tie/waistcoat(src)
|
||||
new /obj/item/clothing/head/soft/black(src)
|
||||
new /obj/item/clothing/head/soft/black(src)
|
||||
new /obj/item/clothing/suit/apron/chef(src)
|
||||
new /obj/item/clothing/suit/apron/chef(src)
|
||||
new /obj/item/clothing/suit/apron/chef(src)
|
||||
new /obj/item/clothing/head/soft/mime(src)
|
||||
new /obj/item/clothing/head/soft/mime(src)
|
||||
new /obj/item/weapon/storage/box/mousetraps(src)
|
||||
new /obj/item/weapon/storage/box/mousetraps(src)
|
||||
new /obj/item/clothing/suit/toggle/chef(src)
|
||||
new /obj/item/clothing/under/rank/chef(src)
|
||||
new /obj/item/clothing/head/chefhat(src)
|
||||
|
||||
@@ -68,7 +72,7 @@
|
||||
..()
|
||||
new /obj/item/clothing/under/rank/janitor(src)
|
||||
new /obj/item/weapon/cartridge/janitor(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/gloves/color/black(src)
|
||||
new /obj/item/clothing/head/soft/purple(src)
|
||||
new /obj/item/device/flashlight(src)
|
||||
new /obj/item/weapon/caution(src)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
new /obj/item/clothing/under/rank/chief_engineer(src)
|
||||
new /obj/item/clothing/head/hardhat/white(src)
|
||||
new /obj/item/clothing/head/welding(src)
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/weapon/cartridge/ce(src)
|
||||
new /obj/item/device/radio/headset/heads/ce(src)
|
||||
@@ -46,8 +46,8 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/engineering_electrical/New()
|
||||
..()
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
new /obj/item/weapon/storage/toolbox/electrical(src)
|
||||
new /obj/item/weapon/storage/toolbox/electrical(src)
|
||||
new /obj/item/weapon/storage/toolbox/electrical(src)
|
||||
|
||||
@@ -69,8 +69,8 @@
|
||||
new /obj/item/clothing/suit/toggle/labcoat(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/device/radio/headset/headset_med(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/weapon/defibrillator/loaded(src)
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||
new /obj/item/weapon/storage/belt/medical(src)
|
||||
new /obj/item/clothing/glasses/hud/health(src)
|
||||
new /obj/item/clothing/suit/toggle/wintercoat/medical(src)
|
||||
@@ -101,8 +101,8 @@
|
||||
new /obj/item/clothing/shoes/sneakers/brown (src)
|
||||
new /obj/item/weapon/cartridge/cmo(src)
|
||||
new /obj/item/device/radio/headset/heads/cmo(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/weapon/defibrillator/loaded(src)
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||
new /obj/item/weapon/storage/belt/medical(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/clothing/suit/toggle/wintercoat/medical(src)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
new /obj/item/clothing/under/rank/research_director/turtleneck(src)
|
||||
new /obj/item/weapon/cartridge/rd(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/color/latex(src)
|
||||
new /obj/item/device/radio/headset/heads/rd(src)
|
||||
new /obj/item/weapon/tank/air(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
src.locked = !src.locked
|
||||
add_fingerprint(user)
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
if((O.client && !( O.blinded )))
|
||||
if((O.client && !( O.eye_blind )))
|
||||
O << "<span class='notice'>[user] has [locked ? null : "un"]locked the locker.</span>"
|
||||
if(src.locked)
|
||||
src.icon_state = src.icon_locked
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
new /obj/item/weapon/cartridge/captain(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/device/radio/headset/heads/captain/alt(src)
|
||||
new /obj/item/clothing/gloves/captain(src)
|
||||
new /obj/item/clothing/gloves/color/captain(src)
|
||||
new /obj/item/clothing/suit/toggle/wintercoat/captain(src)
|
||||
new /obj/item/clothing/head/santa(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
@@ -198,7 +198,7 @@
|
||||
new /obj/item/clothing/under/rank/det(src)
|
||||
new /obj/item/clothing/suit/det_suit(src)
|
||||
new /obj/item/clothing/head/det_hat(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/gloves/color/black(src)
|
||||
new /obj/item/clothing/under/rank/det/grey(src)
|
||||
new /obj/item/clothing/suit/det_suit/grey(src)
|
||||
new /obj/item/clothing/head/fedora(src)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
L.client.perspective = EYE_PERSPECTIVE
|
||||
L.client.eye = src
|
||||
L.loc = src
|
||||
L.sdisabilities += MUTE
|
||||
L.disabilities += MUTE
|
||||
L.faction += "mimic" //Stops mimics from instaqdeling people in statues
|
||||
|
||||
health = L.health + 100 //stoning damaged mobs will result in easier to shatter statues
|
||||
@@ -79,7 +79,7 @@
|
||||
|
||||
for(var/mob/living/M in src)
|
||||
M.loc = src.loc
|
||||
M.sdisabilities -= MUTE
|
||||
M.disabilities -= MUTE
|
||||
M.take_overall_damage((M.health - health - 100),0) //any new damage the statue incurred is transfered to the mob
|
||||
M.faction -= "mimic"
|
||||
if(M.client)
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
if(prob(20))
|
||||
new /obj/item/device/multitool(src)
|
||||
if(prob(5))
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
if(prob(40))
|
||||
new /obj/item/clothing/head/hardhat(src)
|
||||
|
||||
|
||||
@@ -461,7 +461,13 @@ obj/structure/door_assembly/New()
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench) && !anchored )
|
||||
if(!locate(/obj/machinery/door) in loc)
|
||||
var/door_check = 1
|
||||
for(var/obj/machinery/door/D in loc)
|
||||
if(!D.sub_door)
|
||||
door_check = 0
|
||||
break
|
||||
|
||||
if(door_check)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] secures the airlock assembly to the floor.</span>", \
|
||||
"You start to secure the airlock assembly to the floor.", \
|
||||
|
||||
@@ -29,6 +29,12 @@
|
||||
/obj/structure/grille/attack_paw(mob/user as mob)
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/grille/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
shock(user, 70)
|
||||
health -= 5
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/grille/attack_hand(mob/living/user as mob)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
@@ -39,8 +45,6 @@
|
||||
|
||||
if(shock(user, 70))
|
||||
return
|
||||
if(HULK in user.mutations)
|
||||
health -= 5
|
||||
else
|
||||
health -= rand(1,2)
|
||||
healthcheck()
|
||||
@@ -192,6 +196,8 @@
|
||||
health -= W.force * 0.1
|
||||
else if(!shock(user, 70))
|
||||
switch(W.damtype)
|
||||
if(STAMINA)
|
||||
return
|
||||
if(BURN)
|
||||
playsound(loc, 'sound/items/welder.ogg', 80, 1)
|
||||
else
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/structure/lattice
|
||||
desc = "A lightweight support lattice."
|
||||
name = "lattice"
|
||||
desc = "A lightweight support lattice."
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "latticefull"
|
||||
density = 0
|
||||
@@ -18,7 +18,6 @@
|
||||
qdel(LAT)
|
||||
stored = new/obj/item/stack/rods(src)
|
||||
icon = 'icons/obj/smoothlattice.dmi'
|
||||
icon_state = "latticeblank"
|
||||
updateOverlays()
|
||||
for (var/dir in cardinal)
|
||||
var/obj/structure/lattice/L
|
||||
@@ -52,15 +51,15 @@
|
||||
return
|
||||
|
||||
/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob)
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if (istype(C, /obj/item/stack/tile/plasteel))
|
||||
var/turf/T = get_turf(src)
|
||||
T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead
|
||||
return
|
||||
T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead (for building plating)
|
||||
if(istype(C, /obj/item/stack/rods))
|
||||
T.attackby(C, user) //see above, for building catwalks
|
||||
if (istype(C, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = C
|
||||
if(WT.remove_fuel(0, user))
|
||||
user << "<span class='notice'>Slicing lattice joints ...</span>"
|
||||
user << "<span class='notice'>Slicing [name] joints ...</span>"
|
||||
Deconstruct()
|
||||
return
|
||||
|
||||
@@ -78,14 +77,61 @@
|
||||
if(!(istype(get_step(src, direction), /turf/space)))
|
||||
dir_sum += direction
|
||||
|
||||
icon_state = "lattice[dir_sum]"
|
||||
icon_state = "[name][dir_sum]"
|
||||
return
|
||||
|
||||
/obj/structure/lattice/Deconstruct()
|
||||
var/turf/T = loc
|
||||
stored.loc = T
|
||||
updateOverlays()
|
||||
..()
|
||||
|
||||
/obj/structure/lattice/singularity_pull(S, current_size)
|
||||
if(current_size >= STAGE_FOUR)
|
||||
Deconstruct()
|
||||
Deconstruct()
|
||||
|
||||
/obj/structure/lattice/catwalk
|
||||
name = "catwalk"
|
||||
desc = "A catwalk for easier EVA manuevering and cable placement."
|
||||
icon_state = "catwalkfull"
|
||||
|
||||
/obj/structure/lattice/catwalk/New()
|
||||
var/turf/T = loc
|
||||
T.cancable = 1
|
||||
..()
|
||||
|
||||
/obj/structure/lattice/catwalk/Destroy()
|
||||
var/turf/T = loc
|
||||
T.cancable = 0
|
||||
for(var/obj/structure/cable/C in T)
|
||||
C.Destroy()
|
||||
..()
|
||||
|
||||
/obj/structure/lattice/catwalk/Deconstruct()
|
||||
var/turf/T = loc
|
||||
T.cancable = 0
|
||||
for(var/obj/structure/cable/C in T)
|
||||
C.Deconstruct()
|
||||
..()
|
||||
|
||||
/obj/structure/lattice/catwalk/attackby(obj/item/C as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(C, /obj/item/stack/cable_coil))
|
||||
var/turf/T = get_turf(src)
|
||||
T.attackby(C, user) //catwalks 'enable' coil laying on space tiles, not the catwalks themselves
|
||||
return
|
||||
|
||||
/obj/structure/lattice/catwalk/updateOverlays()
|
||||
overlays.Cut()
|
||||
|
||||
var/dir_sum = 0
|
||||
|
||||
for (var/direction in cardinal)
|
||||
if(locate(/obj/structure/lattice/catwalk, get_step(src, direction)))
|
||||
dir_sum += direction
|
||||
else
|
||||
if(!(istype(get_step(src, direction), /turf/space)))
|
||||
dir_sum += direction
|
||||
|
||||
icon_state = "[name][dir_sum]"
|
||||
return
|
||||
@@ -58,6 +58,8 @@
|
||||
|
||||
/obj/structure/mirror/attackby(obj/item/I as obj, mob/living/user as mob)
|
||||
user.do_attack_animation(src)
|
||||
if(I.damtype == STAMINA)
|
||||
return
|
||||
if(shattered)
|
||||
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
|
||||
return
|
||||
|
||||
@@ -207,15 +207,16 @@
|
||||
/obj/structure/table/attack_paw(mob/user)
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/table/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 50, 1)
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
table_destroy(1)
|
||||
return 1
|
||||
|
||||
/obj/structure/table/attack_hand(mob/living/user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if(HULK in user.mutations)
|
||||
user.do_attack_animation(src)
|
||||
visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 50, 1)
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
table_destroy(1)
|
||||
return
|
||||
|
||||
/obj/structure/table/attack_tk() // no telehulk sorry
|
||||
return
|
||||
@@ -460,19 +461,17 @@
|
||||
/obj/structure/table/reinforced/attack_paw(mob/user)
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/table/reinforced/attack_hand(mob/user as mob)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if ((HULK in user.mutations))
|
||||
if (prob(75))
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
|
||||
usr << text("<span class='notice'>You kick [src] into pieces.</span>")
|
||||
usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
table_destroy(1)
|
||||
return
|
||||
else
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
usr << text("<span class='notice'>You kick [src].</span>")
|
||||
return
|
||||
/obj/structure/table/reinforced/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
if(prob(75))
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
|
||||
user << text("<span class='notice'>You kick [src] into pieces.</span>")
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
table_destroy(1)
|
||||
else
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
user << text("<span class='notice'>You kick [src].</span>")
|
||||
return 1
|
||||
|
||||
/*
|
||||
* Racks
|
||||
@@ -547,19 +546,19 @@
|
||||
/obj/structure/rack/attack_paw(mob/living/user)
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/rack/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
rack_destroy()
|
||||
return 1
|
||||
|
||||
/obj/structure/rack/attack_hand(mob/living/user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
playsound(loc, 'sound/items/dodgeball.ogg', 80, 1)
|
||||
user.visible_message("<span class='warning'>[user] kicks [src].</span>", \
|
||||
"<span class='warning'>You kick [src].</span>")
|
||||
|
||||
if(HULK in user.mutations)
|
||||
rack_destroy()
|
||||
else
|
||||
health -= rand(1,2)
|
||||
healthcheck()
|
||||
|
||||
health -= rand(1,2)
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/rack/attack_alien(mob/living/user)
|
||||
user.do_attack_animation(src)
|
||||
|
||||
@@ -18,8 +18,10 @@
|
||||
|
||||
/obj/structure/toilet/attack_hand(mob/living/user)
|
||||
if(swirlie)
|
||||
user.visible_message("<span class='danger'>[user] slams the toilet seat onto [swirlie]'s head!</span>", "<span class='notice'>You slam the toilet seat onto [swirlie]'s head!</span>", "You hear reverberating porcelain.")
|
||||
swirlie.adjustBruteLoss(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(src.loc, "swing_hit", 25, 1)
|
||||
swirlie.visible_message("<span class='danger'>[user] slams the toilet seat onto [swirlie]'s head!</span>", "<span class='userdanger'>[user] slams the toilet seat onto [swirlie]'s head!</span>", "You hear reverberating porcelain.")
|
||||
swirlie.adjustBruteLoss(5)
|
||||
return
|
||||
|
||||
if(cistern && !open)
|
||||
@@ -55,6 +57,7 @@
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/weapon/grab))
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
var/obj/item/weapon/grab/G = I
|
||||
if(!G.confirm())
|
||||
return
|
||||
@@ -64,21 +67,23 @@
|
||||
if(GM.loc != get_turf(src))
|
||||
user << "<span class='notice'>[GM] needs to be on [src].</span>"
|
||||
return
|
||||
if(open && !swirlie)
|
||||
user.visible_message("<span class='danger'>[user] starts to give [GM] a swirlie!</span>", "<span class='notice'>You start to give [GM] a swirlie!</span>")
|
||||
swirlie = GM
|
||||
if(do_after(user, 30, 5, 0))
|
||||
user.visible_message("<span class='danger'>[user] gives [GM] a swirlie!</span>", "<span class='notice'>You give [GM] a swirlie!</span>", "You hear a toilet flushing.")
|
||||
if(iscarbon(GM))
|
||||
var/mob/living/carbon/C = GM
|
||||
if(!C.internal)
|
||||
C.adjustOxyLoss(5)
|
||||
else
|
||||
GM.adjustOxyLoss(5)
|
||||
swirlie = null
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] slams [GM.name] into [src]!</span>", "<span class='notice'>You slam [GM] into [src]!</span>")
|
||||
GM.adjustBruteLoss(8)
|
||||
if(!swirlie)
|
||||
if(open)
|
||||
GM.visible_message("<span class='danger'>[user] starts to give [GM] a swirlie!</span>", "<span class='userdanger'>[user] starts to give [GM] a swirlie!</span>")
|
||||
swirlie = GM
|
||||
if(do_after(user, 30, 5, 0))
|
||||
GM.visible_message("<span class='danger'>[user] gives [GM] a swirlie!</span>", "<span class='userdanger'>[user] gives [GM] a swirlie!</span>", "You hear a toilet flushing.")
|
||||
if(iscarbon(GM))
|
||||
var/mob/living/carbon/C = GM
|
||||
if(!C.internal)
|
||||
C.adjustOxyLoss(5)
|
||||
else
|
||||
GM.adjustOxyLoss(5)
|
||||
swirlie = null
|
||||
else
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
|
||||
GM.visible_message("<span class='danger'>[user] slams [GM.name] into [src]!</span>", "<span class='userdanger'>[user] slams [GM.name] into [src]!</span>")
|
||||
GM.adjustBruteLoss(5)
|
||||
else
|
||||
user << "<span class='notice'>You need a tighter grip.</span>"
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/state = 0
|
||||
var/reinf = 0
|
||||
var/disassembled = 0
|
||||
var/shuttlew = 0
|
||||
var/wtype = "glass"
|
||||
var/fulltile = 0
|
||||
var/obj/item/stack/rods/storedrods
|
||||
var/obj/item/weapon/shard/storedshard
|
||||
@@ -28,15 +28,8 @@
|
||||
storedshard = new/obj/item/weapon/shard(src)
|
||||
ini_dir = dir
|
||||
if(reinf)
|
||||
icon_state = "rwindow"
|
||||
desc = "A reinforced window."
|
||||
name = "reinforced window"
|
||||
state = 2*anchored
|
||||
if(opacity)
|
||||
icon_state = "twindow"
|
||||
storedrods = new/obj/item/stack/rods(src)
|
||||
else
|
||||
icon_state = "window"
|
||||
|
||||
air_update_turf(1)
|
||||
update_nearby_icons()
|
||||
@@ -123,22 +116,25 @@
|
||||
add_fingerprint(user)
|
||||
playsound(loc, 'sound/effects/Glassknock.ogg', 50, 1)
|
||||
|
||||
/obj/structure/window/attack_hulk(mob/living/carbon/human/user)
|
||||
if(!can_be_reached(user))
|
||||
return
|
||||
..(user, 1)
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!"))
|
||||
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
|
||||
storedshard.add_fingerprint(user)
|
||||
if(storedrods)
|
||||
storedrods.add_fingerprint(user)
|
||||
hit(50)
|
||||
return 1
|
||||
|
||||
/obj/structure/window/attack_hand(mob/user as mob)
|
||||
if(!can_be_reached(user))
|
||||
return
|
||||
if(HULK in user.mutations)
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!"))
|
||||
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
|
||||
storedshard.add_fingerprint(user)
|
||||
if(storedrods)
|
||||
storedrods.add_fingerprint(user)
|
||||
spawnfragments()
|
||||
else
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.visible_message("<span class='notice'>[user] knocks on [src].</span>")
|
||||
add_fingerprint(user)
|
||||
playsound(loc, 'sound/effects/Glassknock.ogg', 50, 1)
|
||||
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.visible_message("<span class='notice'>[user] knocks on [src].</span>")
|
||||
add_fingerprint(user)
|
||||
playsound(loc, 'sound/effects/Glassknock.ogg', 50, 1)
|
||||
|
||||
/obj/structure/window/attack_paw(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
@@ -263,10 +259,6 @@
|
||||
if(I.damtype == BRUTE || I.damtype == BURN)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
hit(I.force)
|
||||
if(health <= 7)
|
||||
anchored = 0
|
||||
update_nearby_icons()
|
||||
step(src, get_dir(user, src))
|
||||
else
|
||||
playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
|
||||
..()
|
||||
@@ -409,17 +401,10 @@
|
||||
if(anchored)
|
||||
for(var/obj/structure/window/W in orange(src,1))
|
||||
if(W.anchored && W.density && W.fulltile) //Only counts anchored, not-destroyed fill-tile windows.
|
||||
if(abs(x-W.x)-abs(y-W.y) ) //doesn't count windows, placed diagonally to src
|
||||
junction |= get_dir(src,W)
|
||||
if(opacity)
|
||||
icon_state = "twindow[junction]"
|
||||
else
|
||||
if(shuttlew)
|
||||
icon_state = "swindow[junction]"
|
||||
else if(reinf)
|
||||
icon_state = "rwindow[junction]"
|
||||
else
|
||||
icon_state = "window[junction]"
|
||||
if(src.wtype == W.wtype)
|
||||
if(abs(x-W.x)-abs(y-W.y) ) //doesn't count windows, placed diagonally to src
|
||||
junction |= get_dir(src,W)
|
||||
icon_state = "[initial(icon_state)][junction]"
|
||||
|
||||
overlays.Cut()
|
||||
var/ratio = health / maxhealth
|
||||
@@ -467,9 +452,10 @@
|
||||
|
||||
/obj/structure/window/shuttle
|
||||
name = "shuttle window"
|
||||
desc = "A strong, air-locked pod window that is extremely difficult to destroy."
|
||||
desc = "A reinforced, air-locked pod window."
|
||||
icon_state = "swindow"
|
||||
dir = 5
|
||||
maxhealth = 100
|
||||
shuttlew = 1
|
||||
wtype = "shuttle"
|
||||
fulltile = 1
|
||||
reinf = 1
|
||||
Reference in New Issue
Block a user