mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-30 16:47:34 +01:00
Converts a number of simple_animals into their simple_mob variants (#5510)
* 125 commits merged from master * Converts a number of simple_animal mobs to the new format * Grammar fixes
This commit is contained in:
@@ -216,17 +216,17 @@ var/global/list/image/splatter_cache=list()
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions)
|
||||
spawn (0)
|
||||
var/direction = pick(directions)
|
||||
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
|
||||
sleep(3)
|
||||
if (i > 0)
|
||||
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
|
||||
b.basecolor = src.basecolor
|
||||
b.update_icon()
|
||||
spawn (0)
|
||||
var/direction = pick(directions)
|
||||
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
|
||||
sleep(3)
|
||||
if (i > 0)
|
||||
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
|
||||
b.basecolor = src.basecolor
|
||||
b.update_icon()
|
||||
|
||||
if (step_to(src, get_step(src, direction), 0))
|
||||
break
|
||||
if (step_to(src, get_step(src, direction), 0))
|
||||
break
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/mucus
|
||||
@@ -249,5 +249,5 @@ var/global/list/image/splatter_cache=list()
|
||||
//This version should be used for admin spawns and pre-mapped virus vectors (e.g. in PoIs), this version does not dry
|
||||
/obj/effect/decal/cleanable/mucus/mapped/New()
|
||||
..()
|
||||
virus2 = new /datum/disease2/disease
|
||||
virus2 |= new /datum/disease2/disease
|
||||
virus2.makerandom()
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
icon_state = design.icon_state // poster[serial_number]
|
||||
|
||||
/obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
if(W.is_wirecutter())
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
if(ruined)
|
||||
user << "<span class='notice'>You remove the remnants of the poster.</span>"
|
||||
|
||||
@@ -47,13 +47,13 @@
|
||||
explode(M)
|
||||
|
||||
/obj/effect/mine/attackby(obj/item/W as obj, mob/living/user as mob)
|
||||
if(isscrewdriver(W))
|
||||
if(W.is_screwdriver())
|
||||
panel_open = !panel_open
|
||||
user.visible_message("<span class='warning'>[user] very carefully screws the mine's panel [panel_open ? "open" : "closed"].</span>",
|
||||
"<span class='notice'>You very carefully screw the mine's panel [panel_open ? "open" : "closed"].</span>")
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
|
||||
else if((iswirecutter(W) || ismultitool(W)) && panel_open)
|
||||
else if((W.is_wirecutter() || istype(W, /obj/item/device/multitool)) && panel_open)
|
||||
interact(user)
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -46,4 +46,21 @@
|
||||
|
||||
/obj/effect/temporary_effect/shuttle_landing/initialize()
|
||||
flick("shuttle_warning", src) // flick() forces the animation to always begin at the start.
|
||||
. = ..()
|
||||
|
||||
// The manifestation of Zeus's might. Or just a really unlucky day.
|
||||
// This is purely a visual effect, this isn't the part of the code that hurts things.
|
||||
/obj/effect/temporary_effect/lightning_strike
|
||||
name = "lightning"
|
||||
desc = "How <i>shocked</i> you must be, to see this text. You must have <i>lightning</i> reflexes. \
|
||||
The humor in this description is just so <i>electrifying</i>."
|
||||
icon = 'icons/effects/96x256.dmi'
|
||||
icon_state = "lightning_strike"
|
||||
plane = PLANE_LIGHTING_ABOVE
|
||||
time_to_die = 1 SECOND
|
||||
pixel_x = -32
|
||||
|
||||
/obj/effect/temporary_effect/lightning_strike/initialize()
|
||||
icon_state += "[rand(1,2)]" // To have two variants of lightning sprites.
|
||||
animate(src, alpha = 0, time = time_to_die - 1)
|
||||
. = ..()
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
if(istype(mover, /mob/living/simple_animal/hostile/giant_spider))
|
||||
if(istype(mover, /mob/living/simple_mob/animal/giant_spider))
|
||||
return 1
|
||||
else if(istype(mover, /mob/living))
|
||||
if(prob(50))
|
||||
@@ -133,10 +133,10 @@
|
||||
var/amount_grown = -1
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/entry_vent
|
||||
var/travelling_in_vent = 0
|
||||
var/list/grow_as = list(/mob/living/simple_animal/hostile/giant_spider, /mob/living/simple_animal/hostile/giant_spider/nurse, /mob/living/simple_animal/hostile/giant_spider/hunter)
|
||||
var/list/grow_as = list(/mob/living/simple_mob/animal/giant_spider, /mob/living/simple_mob/animal/giant_spider/nurse, /mob/living/simple_mob/animal/giant_spider/hunter)
|
||||
|
||||
/obj/effect/spider/spiderling/frost
|
||||
grow_as = list(/mob/living/simple_animal/hostile/giant_spider/frost)
|
||||
grow_as = list(/mob/living/simple_mob/animal/giant_spider/frost)
|
||||
|
||||
/obj/effect/spider/spiderling/New(var/location, var/atom/parent)
|
||||
pixel_x = rand(6,-6)
|
||||
|
||||
@@ -158,7 +158,14 @@ var/global/list/tele_landmarks = list() // Terrible, but the alternative is loop
|
||||
/obj/effect/step_trigger/teleporter/planetary_fall
|
||||
var/datum/planet/planet = null
|
||||
|
||||
// First time setup, which planet are we aiming for?
|
||||
/obj/effect/step_trigger/teleporter/planetary_fall/proc/find_planet()
|
||||
return
|
||||
|
||||
/obj/effect/step_trigger/teleporter/planetary_fall/Trigger(var/atom/movable/A)
|
||||
if(!planet)
|
||||
find_planet()
|
||||
|
||||
if(planet)
|
||||
if(!planet.planet_floors.len)
|
||||
message_admins("ERROR: planetary_fall step trigger's list of outdoor floors was empty.")
|
||||
|
||||
@@ -806,3 +806,27 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
/obj/item/proc/apply_accessories(var/image/standing)
|
||||
return standing
|
||||
|
||||
/*
|
||||
* Assorted tool procs, so any item can emulate any tool, if coded
|
||||
*/
|
||||
/obj/item/proc/is_screwdriver()
|
||||
return FALSE
|
||||
|
||||
/obj/item/proc/is_wrench()
|
||||
return FALSE
|
||||
|
||||
/obj/item/proc/is_crowbar()
|
||||
return FALSE
|
||||
|
||||
/obj/item/proc/is_wirecutter()
|
||||
return FALSE
|
||||
|
||||
// These next three might bug out or runtime, unless someone goes back and finds a way to generalize their specific code
|
||||
/obj/item/proc/is_cable_coil()
|
||||
return FALSE
|
||||
|
||||
/obj/item/proc/is_multitool()
|
||||
return FALSE
|
||||
|
||||
/obj/item/proc/is_welder()
|
||||
return FALSE
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/obj/item/frame/apc/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
if (W.is_wrench())
|
||||
new /obj/item/stack/material/steel( get_turf(src.loc), 2 )
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
storage_capacity = (MOB_MEDIUM * 2) - 1
|
||||
var/contains_body = 0
|
||||
|
||||
/obj/structure/closet/body_bag/attackby(W as obj, mob/user as mob)
|
||||
/obj/structure/closet/body_bag/attackby(var/obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/pen))
|
||||
var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
|
||||
if (user.get_active_hand() != W)
|
||||
@@ -58,7 +58,7 @@
|
||||
src.name = "body bag"
|
||||
//..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/wirecutters))
|
||||
else if(W.is_wirecutter())
|
||||
to_chat(user, "You cut the tag off the bodybag")
|
||||
src.name = "body bag"
|
||||
src.overlays.Cut()
|
||||
@@ -239,7 +239,7 @@
|
||||
inject_occupant(H)
|
||||
break
|
||||
|
||||
else if(istype(W,/obj/item/weapon/screwdriver))
|
||||
else if(W.is_screwdriver())
|
||||
if(syringe)
|
||||
if(used)
|
||||
to_chat(user,"<span class='warning'>The injector cannot be removed now that the stasis bag has been used!</span>")
|
||||
|
||||
@@ -1254,7 +1254,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
if(isnull(cartridge))
|
||||
to_chat(usr, "<span class='notice'>There's no cartridge to eject.</span>")
|
||||
return
|
||||
return
|
||||
|
||||
cartridge.forceMove(get_turf(src))
|
||||
if(ismob(loc))
|
||||
@@ -1382,7 +1382,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
to_chat(user, "<span class='notice'>Blood type: [C:blood_DNA[blood]]\nDNA: [blood]</span>")
|
||||
|
||||
if(4)
|
||||
user.visible_message("<span class='warning'>\The [user] has analyzed [C]'s radiation levels!</span>", 1)
|
||||
user.visible_message("<span class='warning'>\The [user] has analyzed [C]'s radiation levels!</span>", "<span class='notice'>You have analyzed [C]'s radiation levels!</span>")
|
||||
to_chat(user, "<span class='notice'>Analyzing Results for [C]:</span>")
|
||||
if(C.radiation)
|
||||
to_chat(user, "<span class='notice'>Radiation Level: [C.radiation]</span>")
|
||||
|
||||
@@ -434,7 +434,7 @@ var/list/civilian_cartridges = list(
|
||||
for(var/S in supply_controller.shoppinglist)
|
||||
var/datum/supply_order/SO = S
|
||||
|
||||
supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.orderedby, "Comment" = html_encode(SO.comment))
|
||||
supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.ordered_by, "Comment" = html_encode(SO.comment))
|
||||
if(!supplyOrderData.len)
|
||||
supplyOrderData[++supplyOrderData.len] = list("Number" = null, "Name" = null, "OrderedBy"=null)
|
||||
|
||||
@@ -443,10 +443,13 @@ var/list/civilian_cartridges = list(
|
||||
|
||||
var/requestCount = 0
|
||||
var/requestData[0]
|
||||
for(var/S in supply_controller.requestlist)
|
||||
for(var/S in supply_controller.order_history)
|
||||
var/datum/supply_order/SO = S
|
||||
if(SO.status != SUP_ORDER_REQUESTED)
|
||||
continue
|
||||
|
||||
requestCount++
|
||||
requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.orderedby, "Comment" = html_encode(SO.comment))
|
||||
requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.ordered_by, "Comment" = html_encode(SO.comment))
|
||||
if(!requestData.len)
|
||||
requestData[++requestData.len] = list("Number" = null, "Name" = null, "orderedBy" = null, "Comment" = null)
|
||||
|
||||
|
||||
@@ -77,7 +77,9 @@
|
||||
"Weather" = planet.weather_holder.current_weather.name,
|
||||
"Temperature" = planet.weather_holder.temperature - T0C,
|
||||
"High" = planet.weather_holder.current_weather.temp_high - T0C,
|
||||
"Low" = planet.weather_holder.current_weather.temp_low - T0C)
|
||||
"Low" = planet.weather_holder.current_weather.temp_low - T0C,
|
||||
"Forecast" = english_list(planet.weather_holder.forecast, and_text = "→", comma_text = "→", final_comma_text = "→") // Unicode RIGHTWARDS ARROW.
|
||||
)
|
||||
weather[++weather.len] = W
|
||||
|
||||
injection = "<div>Test</div>"
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
to_chat(user, "<span class='notice'>You install a cell in \the [src].</span>")
|
||||
update_icon()
|
||||
|
||||
else if(isscrewdriver(W))
|
||||
else if(W.is_screwdriver())
|
||||
if(bcell)
|
||||
bcell.update_icon()
|
||||
bcell.forceMove(get_turf(src.loc))
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/device/multitool/hacktool/attackby(var/obj/item/W, var/mob/user)
|
||||
if(isscrewdriver(W))
|
||||
if(W.is_screwdriver())
|
||||
in_hack_mode = !in_hack_mode
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
else
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] already has a diode.</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
else if(W.is_screwdriver())
|
||||
if(diode)
|
||||
to_chat(user, "<span class='notice'>You remove the [diode.name] from the [src].</span>")
|
||||
diode.loc = get_turf(src.loc)
|
||||
|
||||
@@ -10,44 +10,162 @@
|
||||
var/insults = 0
|
||||
var/list/insultmsg = list("FUCK EVERYONE!", "I'M A TERRORIST!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "GLORY TO ALMACH!")
|
||||
|
||||
/obj/item/device/megaphone/attack_self(mob/living/user as mob)
|
||||
/obj/item/device/megaphone/proc/can_broadcast(var/mob/living/user)
|
||||
if (user.client)
|
||||
if(user.client.prefs.muted & MUTE_IC)
|
||||
src << "<span class='warning'>You cannot speak in IC (muted).</span>"
|
||||
return
|
||||
if(!ishuman(user))
|
||||
user << "<span class='warning'>You don't know how to use this!</span>"
|
||||
return
|
||||
to_chat(user, "<span class='warning'>You cannot speak in IC (muted).</span>")
|
||||
return 0
|
||||
if(!(ishuman(user) || user.isSynthetic()))
|
||||
to_chat(user, "<span class='warning'>You don't know how to use this!</span>")
|
||||
return 0
|
||||
if(user.silent)
|
||||
return
|
||||
return 0
|
||||
if(spamcheck)
|
||||
user << "<span class='warning'>\The [src] needs to recharge!</span>"
|
||||
return
|
||||
to_chat(user, "<span class='warning'>\The [src] needs to recharge!</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
var/message = sanitize(input(user, "Shout a message?", "Megaphone", null) as text)
|
||||
if(!message)
|
||||
return
|
||||
message = capitalize(message)
|
||||
/obj/item/device/megaphone/proc/do_broadcast(var/mob/living/user, var/message)
|
||||
if ((src.loc == user && usr.stat == 0))
|
||||
if(emagged)
|
||||
if(insults)
|
||||
for(var/mob/O in (viewers(user)))
|
||||
O.show_message("<B>[user]</B> broadcasts, <FONT size=3>\"[pick(insultmsg)]\"</FONT>",2) // 2 stands for hearable message
|
||||
user.audible_message("<B>[user]</B> broadcasts, <FONT size=3>\"[pick(insultmsg)]\"</FONT>")
|
||||
insults--
|
||||
else
|
||||
user << "<span class='warning'>*BZZZZzzzzzt*</span>"
|
||||
to_chat(user, "<span class='warning'>*BZZZZzzzzzt*</span>")
|
||||
else
|
||||
for(var/mob/O in (viewers(user)))
|
||||
O.show_message("<B>[user]</B> broadcasts, <FONT size=3>\"[message]\"</FONT>",2) // 2 stands for hearable message
|
||||
user.audible_message("<B>[user]</B> broadcasts, <FONT size=3>\"[message]\"</FONT>")
|
||||
|
||||
spamcheck = 1
|
||||
spawn(20)
|
||||
spamcheck = 0
|
||||
return
|
||||
|
||||
/obj/item/device/megaphone/attack_self(mob/living/user as mob)
|
||||
if(!can_broadcast(user))
|
||||
return
|
||||
|
||||
var/message = sanitize(input(user, "Shout a message?", "Megaphone", null) as text)
|
||||
if(!message)
|
||||
return
|
||||
message = capitalize(message)
|
||||
|
||||
do_broadcast(user, message)
|
||||
|
||||
/obj/item/device/megaphone/emag_act(var/remaining_charges, var/mob/user)
|
||||
if(!emagged)
|
||||
user << "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>"
|
||||
to_chat(user, "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>")
|
||||
emagged = 1
|
||||
insults = rand(1, 3)//to prevent dickflooding
|
||||
insults = rand(1, 3)//to prevent caps spam.
|
||||
return 1
|
||||
|
||||
/obj/item/device/megaphone/super
|
||||
name = "gigaphone"
|
||||
desc = "A device used to project your voice. Loudly-er."
|
||||
icon_state = "gigaphone"
|
||||
|
||||
var/broadcast_font = "verdana"
|
||||
var/broadcast_size = 3
|
||||
var/broadcast_color = "#000000" //Black by default.
|
||||
var/list/volume_options = list(2, 3, 4)
|
||||
var/list/font_options = list("times new roman", "times", "verdana", "sans-serif", "serif", "georgia")
|
||||
var/list/color_options= list("#000000", "#ff0000", "#00ff00", "#0000ff")
|
||||
|
||||
insultmsg = list("HONK?!", "HONK!", "HOOOOOOOONK!", "...!", "HUNK.", "Honk?")
|
||||
|
||||
/obj/item/device/megaphone/super/emag_act(var/remaining_charges, var/mob/user)
|
||||
..()
|
||||
if(emagged)
|
||||
if(!(11 in volume_options))
|
||||
volume_options = list(11)
|
||||
broadcast_size = 11
|
||||
if(!("comic sans ms" in font_options))
|
||||
font_options = list("comic sans ms")
|
||||
broadcast_font = "comic sans ms"
|
||||
to_chat(user, "<span class='notice'>\The [src] emits a <font face='comic sans ms' color='#ff69b4'>silly</font> sound.</span>")
|
||||
if(!("#ff69b4" in color_options))
|
||||
color_options = list("#ff69b4")
|
||||
broadcast_color = "#ff69b4"
|
||||
if(insults <= 0)
|
||||
insults = rand(1,3)
|
||||
to_chat(user, "<span class='warning'>You re-scramble \the [src]'s voice synthesizer.</span>")
|
||||
return 1
|
||||
|
||||
/obj/item/device/megaphone/super/verb/turn_volume_dial()
|
||||
set name = "Change Volume"
|
||||
set desc = "Allows you to change the megaphone's volume."
|
||||
set category = "Object"
|
||||
|
||||
adjust_volume(usr)
|
||||
|
||||
/obj/item/device/megaphone/super/proc/adjust_volume(var/mob/living/user)
|
||||
var/new_volume = input(user, "Set Volume") as null|anything in volume_options
|
||||
|
||||
if(new_volume && Adjacent(user))
|
||||
broadcast_size = new_volume
|
||||
|
||||
/obj/item/device/megaphone/super/verb/change_font()
|
||||
set name = "Change... Pronunciation?"
|
||||
set desc = "Allows you to change the megaphone's font."
|
||||
set category = "Object"
|
||||
|
||||
adjust_font(usr)
|
||||
|
||||
/obj/item/device/megaphone/super/proc/adjust_font(var/mob/living/user)
|
||||
var/new_font = input(user, "Set Volume") as null|anything in font_options
|
||||
|
||||
if(new_font && Adjacent(user))
|
||||
broadcast_font = new_font
|
||||
|
||||
/obj/item/device/megaphone/super/verb/change_color()
|
||||
set name = "Change... Tune?"
|
||||
set desc = "Allows you to change the megaphone's color."
|
||||
set category = "Object"
|
||||
|
||||
adjust_color(usr)
|
||||
|
||||
/obj/item/device/megaphone/super/proc/adjust_color(var/mob/living/user)
|
||||
var/new_color = input(user, "Set Volume") as null|anything in color_options
|
||||
|
||||
if(new_color && Adjacent(user))
|
||||
broadcast_color = new_color
|
||||
|
||||
/obj/item/device/megaphone/super/do_broadcast(var/mob/living/user, var/message)
|
||||
if ((src.loc == user && usr.stat == 0))
|
||||
if(emagged)
|
||||
if(insults)
|
||||
user.audible_message("<B>[user]</B> broadcasts, <FONT size=[broadcast_size] face='[broadcast_font]' color='[broadcast_color]'>\"[pick(insultmsg)]\"</FONT>")
|
||||
if(broadcast_size >= 11)
|
||||
var/turf/T = get_turf(user)
|
||||
playsound(T, 'sound/items/AirHorn.ogg', 100, 1)
|
||||
for(var/mob/living/carbon/M in oviewers(4, T))
|
||||
if(M.get_ear_protection() >= 2)
|
||||
continue
|
||||
M.sleeping = 0
|
||||
M.stuttering += 20
|
||||
M.ear_deaf += 30
|
||||
M.Weaken(3)
|
||||
if(prob(30))
|
||||
M.Stun(10)
|
||||
M.Paralyse(4)
|
||||
else
|
||||
M.make_jittery(50)
|
||||
insults--
|
||||
else
|
||||
user.audible_message("<span class='critical'>*BZZZZzzzzzt*</span>")
|
||||
if(prob(40) && insults <= 0)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, get_turf(user))
|
||||
s.start()
|
||||
user.visible_message("<span class='warning'>\The [src] sparks violently!</span>")
|
||||
spawn(30)
|
||||
explosion(get_turf(src), -1, -1, 1, 3, adminlog = 1)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
user.audible_message("<B>[user]</B> broadcasts, <FONT size=[broadcast_size] face='[broadcast_font]' color='[broadcast_color]'>\"[message]\"</FONT>")
|
||||
|
||||
spamcheck = 1
|
||||
spawn(20)
|
||||
spamcheck = 0
|
||||
return
|
||||
|
||||
@@ -30,13 +30,13 @@
|
||||
..()
|
||||
|
||||
/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
if(I.is_screwdriver())
|
||||
if(mode == 0)
|
||||
var/turf/T = loc
|
||||
if(isturf(T) && !!T.is_plating())
|
||||
attached = locate() in T
|
||||
if(!attached)
|
||||
user << "No exposed cable here to attach to."
|
||||
to_chat(user, "No exposed cable here to attach to.")
|
||||
return
|
||||
else
|
||||
anchored = 1
|
||||
@@ -45,7 +45,7 @@
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
return
|
||||
else
|
||||
user << "Device must be placed over an exposed cable to attach to it."
|
||||
to_chat(user, "Device must be placed over an exposed cable to attach to it.")
|
||||
return
|
||||
else
|
||||
if (mode == 2)
|
||||
|
||||
@@ -40,8 +40,8 @@
|
||||
if(!(..(user, 1) && radio_desc))
|
||||
return
|
||||
|
||||
user << "The following channels are available:"
|
||||
user << radio_desc
|
||||
to_chat(user, "The following channels are available:")
|
||||
to_chat(user, radio_desc)
|
||||
|
||||
/obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel)
|
||||
if (channel == "special")
|
||||
@@ -326,10 +326,10 @@
|
||||
/obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
// ..()
|
||||
user.set_machine(src)
|
||||
if (!( istype(W, /obj/item/weapon/screwdriver) || (istype(W, /obj/item/device/encryptionkey/ ))))
|
||||
if(!(W.is_screwdriver() || istype(W, /obj/item/device/encryptionkey)))
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(W.is_screwdriver())
|
||||
if(keyslot1 || keyslot2)
|
||||
|
||||
|
||||
@@ -353,15 +353,15 @@
|
||||
keyslot2 = null
|
||||
|
||||
recalculateChannels()
|
||||
user << "You pop out the encryption keys in the headset!"
|
||||
to_chat(user, "You pop out the encryption keys in the headset!")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
|
||||
else
|
||||
user << "This headset doesn't have any encryption keys! How useless..."
|
||||
to_chat(user, "This headset doesn't have any encryption keys! How useless...")
|
||||
|
||||
if(istype(W, /obj/item/device/encryptionkey/))
|
||||
if(keyslot1 && keyslot2)
|
||||
user << "The headset can't hold another key!"
|
||||
to_chat(user, "The headset can't hold another key!")
|
||||
return
|
||||
|
||||
if(!keyslot1)
|
||||
|
||||
@@ -118,9 +118,9 @@
|
||||
|
||||
/obj/item/device/radio/intercom/attackby(obj/item/W as obj, mob/user as mob)
|
||||
add_fingerprint(user)
|
||||
if(istype(W, /obj/item/weapon/screwdriver)) // Opening the intercom up.
|
||||
if(W.is_screwdriver()) // Opening the intercom up.
|
||||
wiresexposed = !wiresexposed
|
||||
user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
|
||||
to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"]")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
if(wiresexposed)
|
||||
if(!on)
|
||||
@@ -130,7 +130,7 @@
|
||||
else
|
||||
icon_state = "intercom"
|
||||
return
|
||||
if(wiresexposed && istype(W, /obj/item/weapon/wirecutters))
|
||||
if(wiresexposed && W.is_wirecutter())
|
||||
user.visible_message("<span class='warning'>[user] has cut the wires inside \the [src]!</span>", "You have cut the wires inside \the [src].")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
new/obj/item/stack/cable_coil(get_turf(src), 5)
|
||||
|
||||
@@ -561,7 +561,7 @@ var/global/list/default_medbay_channels = list(
|
||||
/obj/item/device/radio/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
user.set_machine(src)
|
||||
if (!( istype(W, /obj/item/weapon/screwdriver) ))
|
||||
if (!W.is_screwdriver())
|
||||
return
|
||||
b_stat = !( b_stat )
|
||||
if(!istype(src, /obj/item/device/radio/beacon))
|
||||
@@ -613,10 +613,10 @@ var/global/list/default_medbay_channels = list(
|
||||
/obj/item/device/radio/borg/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
// ..()
|
||||
user.set_machine(src)
|
||||
if (!( istype(W, /obj/item/weapon/screwdriver) || (istype(W, /obj/item/device/encryptionkey/ ))))
|
||||
if (!(W.is_screwdriver() || istype(W, /obj/item/device/encryptionkey)))
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(W.is_screwdriver())
|
||||
if(keyslot)
|
||||
|
||||
|
||||
@@ -632,15 +632,15 @@ var/global/list/default_medbay_channels = list(
|
||||
keyslot = null
|
||||
|
||||
recalculateChannels()
|
||||
user << "You pop out the encryption key in the radio!"
|
||||
to_chat(user, "You pop out the encryption key in the radio!")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
|
||||
else
|
||||
user << "This radio doesn't have any encryption keys!"
|
||||
to_chat(user, "This radio doesn't have any encryption keys!")
|
||||
|
||||
if(istype(W, /obj/item/device/encryptionkey/))
|
||||
if(keyslot)
|
||||
user << "The radio can't hold another key!"
|
||||
to_chat(user, "The radio can't hold another key!")
|
||||
return
|
||||
|
||||
if(!keyslot)
|
||||
@@ -692,9 +692,9 @@ var/global/list/default_medbay_channels = list(
|
||||
if(enable_subspace_transmission != subspace_transmission)
|
||||
subspace_transmission = !subspace_transmission
|
||||
if(subspace_transmission)
|
||||
usr << "<span class='notice'>Subspace Transmission is enabled</span>"
|
||||
to_chat(usr, "<span class='notice'>Subspace Transmission is enabled</span>")
|
||||
else
|
||||
usr << "<span class='notice'>Subspace Transmission is disabled</span>"
|
||||
to_chat(usr, "<span class='notice'>Subspace Transmission is disabled</span>")
|
||||
|
||||
if(subspace_transmission == 0)//Simple as fuck, clears the channel list to prevent talking/listening over them if subspace transmission is disabled
|
||||
channels = list()
|
||||
@@ -707,10 +707,10 @@ var/global/list/default_medbay_channels = list(
|
||||
shut_up = !shut_up
|
||||
if(shut_up)
|
||||
canhear_range = 0
|
||||
usr << "<span class='notice'>Loadspeaker disabled.</span>"
|
||||
to_chat(usr, "<span class='notice'>Loadspeaker disabled.</span>")
|
||||
else
|
||||
canhear_range = 3
|
||||
usr << "<span class='notice'>Loadspeaker enabled.</span>"
|
||||
to_chat(usr, "<span class='notice'>Loadspeaker enabled.</span>")
|
||||
. = 1
|
||||
|
||||
if(.)
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
cell.add_fingerprint(user)
|
||||
cell.update_icon()
|
||||
|
||||
user << "You remove \the [src.cell]."
|
||||
to_chat(user, "You remove \the [src.cell].")
|
||||
src.cell = null
|
||||
updateicon()
|
||||
return
|
||||
@@ -134,16 +134,16 @@
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
user << "<span class='notice'>You switch \the [src] [on ? "on" : "off"].</span>"
|
||||
to_chat(user, "<span class='notice'>You switch \the [src] [on ? "on" : "off"].</span>")
|
||||
|
||||
/obj/item/device/suit_cooling_unit/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if (W.is_screwdriver())
|
||||
if(cover_open)
|
||||
cover_open = 0
|
||||
user << "You screw the panel into place."
|
||||
to_chat(user, "You screw the panel into place.")
|
||||
else
|
||||
cover_open = 1
|
||||
user << "You unscrew the panel."
|
||||
to_chat(user, "You unscrew the panel.")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
updateicon()
|
||||
return
|
||||
@@ -151,12 +151,12 @@
|
||||
if (istype(W, /obj/item/weapon/cell))
|
||||
if(cover_open)
|
||||
if(cell)
|
||||
user << "There is a [cell] already installed here."
|
||||
to_chat(user, "There is a [cell] already installed here.")
|
||||
else
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
cell = W
|
||||
user << "You insert the [cell]."
|
||||
to_chat(user, "You insert the [cell].")
|
||||
updateicon()
|
||||
return
|
||||
|
||||
@@ -177,19 +177,19 @@
|
||||
|
||||
if (on)
|
||||
if (attached_to_suit(src.loc))
|
||||
user << "It's switched on and running."
|
||||
to_chat(user, "It's switched on and running.")
|
||||
else
|
||||
user << "It's switched on, but not attached to anything."
|
||||
to_chat(user, "It's switched on, but not attached to anything.")
|
||||
else
|
||||
user << "It is switched off."
|
||||
to_chat(user, "It is switched off.")
|
||||
|
||||
if (cover_open)
|
||||
if(cell)
|
||||
user << "The panel is open, exposing the [cell]."
|
||||
to_chat(user, "The panel is open, exposing the [cell].")
|
||||
else
|
||||
user << "The panel is open."
|
||||
to_chat(user, "The panel is open.")
|
||||
|
||||
if (cell)
|
||||
user << "The charge meter reads [round(cell.percent())]%."
|
||||
to_chat(user, "The charge meter reads [round(cell.percent())]%.")
|
||||
else
|
||||
user << "It doesn't have a power cell installed."
|
||||
to_chat(user, "It doesn't have a power cell installed.")
|
||||
|
||||
@@ -414,7 +414,7 @@
|
||||
|
||||
|
||||
/obj/item/device/tape/attackby(obj/item/I, mob/user, params)
|
||||
if(ruined && istype(I, /obj/item/weapon/screwdriver))
|
||||
if(ruined && I.is_screwdriver())
|
||||
to_chat(user, "<span class='notice'>You start winding the tape back in...</span>")
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
if(do_after(user, 120 * I.toolspeed, target = src))
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
w_class = ITEMSIZE_SMALL
|
||||
matter = list("glass" = 200)
|
||||
flags = NOBLUDGEON
|
||||
var/list/accept_mobs = list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/mouse)
|
||||
var/list/accept_mobs = list(/mob/living/simple_mob/animal/passive/lizard, /mob/living/simple_animal/mouse)
|
||||
var/contains = 0 // 0 = nothing, 1 = money, 2 = animal, 3 = spiderling
|
||||
|
||||
/obj/item/glass_jar/New()
|
||||
|
||||
@@ -1042,6 +1042,50 @@
|
||||
name = "tuxedo cat plushie"
|
||||
icon_state = "tuxedocat"
|
||||
|
||||
// nah, squids are better than foxes :>
|
||||
|
||||
/obj/item/toy/plushie/squid/green
|
||||
name = "green squid plushie"
|
||||
desc = "A small, cute and loveable squid friend. This one is green."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "greensquid"
|
||||
slot_flags = SLOT_HEAD
|
||||
|
||||
/obj/item/toy/plushie/squid/mint
|
||||
name = "mint squid plushie"
|
||||
desc = "A small, cute and loveable squid friend. This one is mint coloured."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "mintsquid"
|
||||
slot_flags = SLOT_HEAD
|
||||
|
||||
/obj/item/toy/plushie/squid/blue
|
||||
name = "blue squid plushie"
|
||||
desc = "A small, cute and loveable squid friend. This one is blue."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "bluesquid"
|
||||
slot_flags = SLOT_HEAD
|
||||
|
||||
/obj/item/toy/plushie/squid/orange
|
||||
name = "orange squid plushie"
|
||||
desc = "A small, cute and loveable squid friend. This one is orange."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "orangesquid"
|
||||
slot_flags = SLOT_HEAD
|
||||
|
||||
/obj/item/toy/plushie/squid/yellow
|
||||
name = "yellow squid plushie"
|
||||
desc = "A small, cute and loveable squid friend. This one is yellow."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "yellowsquid"
|
||||
slot_flags = SLOT_HEAD
|
||||
|
||||
/obj/item/toy/plushie/squid/pink
|
||||
name = "pink squid plushie"
|
||||
desc = "A small, cute and loveable squid friend. This one is pink."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "pinksquid"
|
||||
slot_flags = SLOT_HEAD
|
||||
|
||||
/obj/item/toy/plushie/therapy/red
|
||||
name = "red therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is red."
|
||||
|
||||
@@ -153,11 +153,6 @@
|
||||
name = T_BOARD("disease splicer")
|
||||
build_path = /obj/machinery/computer/diseasesplicer
|
||||
|
||||
/obj/item/weapon/circuitboard/ordercomp
|
||||
name = T_BOARD("supply ordering console")
|
||||
build_path = /obj/machinery/computer/ordercomp
|
||||
origin_tech = list(TECH_DATA = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/mining_shuttle
|
||||
name = T_BOARD("mining shuttle console")
|
||||
build_path = /obj/machinery/computer/shuttle_control/mining
|
||||
|
||||
@@ -7,15 +7,15 @@
|
||||
build_path = /obj/machinery/computer/rdconsole/core
|
||||
|
||||
/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I,/obj/item/weapon/screwdriver))
|
||||
if(I.is_screwdriver())
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
user.visible_message("<span class='notice'>\The [user] adjusts the jumper on \the [src]'s access protocol pins.</span>", "<span class='notice'>You adjust the jumper on the access protocol pins.</span>")
|
||||
if(build_path == /obj/machinery/computer/rdconsole/core)
|
||||
name = T_BOARD("RD Console - Robotics")
|
||||
build_path = /obj/machinery/computer/rdconsole/robotics
|
||||
user << "<span class='notice'>Access protocols set to robotics.</span>"
|
||||
to_chat(user, "<span class='notice'>Access protocols set to robotics.</span>")
|
||||
else
|
||||
name = T_BOARD("RD Console")
|
||||
build_path = /obj/machinery/computer/rdconsole/core
|
||||
user << "<span class='notice'>Access protocols set to default.</span>"
|
||||
to_chat(user, "<span class='notice'>Access protocols set to default.</span>")
|
||||
return
|
||||
@@ -3,11 +3,16 @@
|
||||
#endif
|
||||
|
||||
/obj/item/weapon/circuitboard/supplycomp
|
||||
name = T_BOARD("supply control console")
|
||||
name = T_BOARD("supply ordering console")
|
||||
build_path = /obj/machinery/computer/supplycomp
|
||||
origin_tech = list(TECH_DATA = 3)
|
||||
origin_tech = list(TECH_DATA = 2)
|
||||
var/contraband_enabled = 0
|
||||
|
||||
/obj/item/weapon/circuitboard/supplycomp/control
|
||||
name = T_BOARD("supply ordering console")
|
||||
build_path = /obj/machinery/computer/supplycomp/control
|
||||
origin_tech = list(TECH_DATA = 3)
|
||||
|
||||
/obj/item/weapon/circuitboard/supplycomp/construct(var/obj/machinery/computer/supplycomp/SC)
|
||||
if (..(SC))
|
||||
SC.can_order_contraband = contraband_enabled
|
||||
|
||||
@@ -12,17 +12,17 @@ obj/item/weapon/circuitboard/rdserver
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1)
|
||||
|
||||
obj/item/weapon/circuitboard/rdserver/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I,/obj/item/weapon/screwdriver))
|
||||
if(I.is_screwdriver())
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
user.visible_message("<span class='notice'>\The [user] adjusts the jumper on \the [src]'s access protocol pins.</span>", "<span class='notice'>You adjust the jumper on the access protocol pins.</span>")
|
||||
if(build_path == /obj/machinery/r_n_d/server/core)
|
||||
name = T_BOARD("RD Console - Robotics")
|
||||
build_path = /obj/machinery/r_n_d/server/robotics
|
||||
user << "<span class='notice'>Access protocols set to robotics.</span>"
|
||||
to_chat(user, "<span class='notice'>Access protocols set to robotics.</span>")
|
||||
else
|
||||
name = T_BOARD("RD Console")
|
||||
build_path = /obj/machinery/r_n_d/server/core
|
||||
user << "<span class='notice'>Access protocols set to default.</span>"
|
||||
to_chat(user, "<span class='notice'>Access protocols set to default.</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/circuitboard/destructive_analyzer
|
||||
|
||||
@@ -25,11 +25,11 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/plastique/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
if(I.is_screwdriver())
|
||||
open_panel = !open_panel
|
||||
user << "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>"
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler ))
|
||||
else if(I.is_wirecutter() || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler ))
|
||||
wires.Interact(user)
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
|
||||
/obj/item/weapon/flamethrower/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(user.stat || user.restrained() || user.lying) return
|
||||
if(iswrench(W) && !status)//Taking this apart
|
||||
if(W.is_wrench() && !status)//Taking this apart
|
||||
var/turf/T = get_turf(src)
|
||||
if(weldtool)
|
||||
weldtool.loc = T
|
||||
@@ -85,7 +85,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(isscrewdriver(W) && igniter && !lit)
|
||||
if(W.is_screwdriver() && igniter && !lit)
|
||||
status = !status
|
||||
user << "<span class='notice'>[igniter] is now [status ? "secured" : "unsecured"]!</span>"
|
||||
update_icon()
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
/obj/effect/spresent/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
|
||||
if (!istype(W, /obj/item/weapon/wirecutters))
|
||||
if (!W.is_wirecutter())
|
||||
user << "<span class='warning'>I need wirecutters for that.</span>"
|
||||
return
|
||||
|
||||
@@ -129,7 +129,8 @@
|
||||
if (!( locate(/obj/structure/table, src.loc) ))
|
||||
user << "<span class='warning'>You MUST put the paper on a table!</span>"
|
||||
if (W.w_class < ITEMSIZE_LARGE)
|
||||
if (user.get_type_in_hands(/obj/item/weapon/wirecutters))
|
||||
var/obj/item/I = user.get_inactive_hand()
|
||||
if(I.is_wirecutter())
|
||||
var/a_used = 2 ** (src.w_class - 1)
|
||||
if (src.amount < a_used)
|
||||
user << "<span class='warning'>You need more paper!</span>"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
det_time = 20
|
||||
origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4)
|
||||
|
||||
/obj/item/weapon/grenade/anti_photon/prime()
|
||||
/obj/item/weapon/grenade/anti_photon/detonate()
|
||||
playsound(src.loc, 'sound/effects/phasein.ogg', 50, 1, 5)
|
||||
set_light(10, -10, "#FFFFFF")
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
user.put_in_hands(B)
|
||||
name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]"
|
||||
if(stage > 1 && !active && clown_check(user))
|
||||
user << "<span class='warning'>You prime \the [name]!</span>"
|
||||
to_chat(user, "<span class='warning'>You prime \the [name]!</span>")
|
||||
|
||||
msg_admin_attack("[key_name_admin(user)] primed \a [src]")
|
||||
|
||||
@@ -56,13 +56,13 @@
|
||||
if(istype(W,/obj/item/device/assembly_holder) && (!stage || stage==1) && path != 2)
|
||||
var/obj/item/device/assembly_holder/det = W
|
||||
if(istype(det.a_left,det.a_right.type) || (!isigniter(det.a_left) && !isigniter(det.a_right)))
|
||||
user << "<span class='warning'>Assembly must contain one igniter.</span>"
|
||||
to_chat(user, "<span class='warning'>Assembly must contain one igniter.</span>")
|
||||
return
|
||||
if(!det.secured)
|
||||
user << "<span class='warning'>Assembly must be secured with screwdriver.</span>"
|
||||
to_chat(user, "<span class='warning'>Assembly must be secured with screwdriver.</span>")
|
||||
return
|
||||
path = 1
|
||||
user << "<span class='notice'>You add [W] to the metal casing.</span>"
|
||||
to_chat(user, "<span class='notice'>You add [W] to the metal casing.</span>")
|
||||
playsound(src.loc, 'sound/items/Screwdriver2.ogg', 25, -3)
|
||||
user.remove_from_mob(det)
|
||||
det.loc = src
|
||||
@@ -76,26 +76,26 @@
|
||||
icon_state = initial(icon_state) +"_ass"
|
||||
name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]"
|
||||
stage = 1
|
||||
else if(istype(W,/obj/item/weapon/screwdriver) && path != 2)
|
||||
else if(W.is_screwdriver() && path != 2)
|
||||
if(stage == 1)
|
||||
path = 1
|
||||
if(beakers.len)
|
||||
user << "<span class='notice'>You lock the assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You lock the assembly.</span>")
|
||||
name = "grenade"
|
||||
else
|
||||
// user << "<span class='warning'>You need to add at least one beaker before locking the assembly.</span>"
|
||||
user << "<span class='notice'>You lock the empty assembly.</span>"
|
||||
// to_chat(user, "<span class='warning'>You need to add at least one beaker before locking the assembly.</span>")
|
||||
to_chat(user, "<span class='notice'>You lock the empty assembly.</span>")
|
||||
name = "fake grenade"
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
icon_state = initial(icon_state) +"_locked"
|
||||
stage = 2
|
||||
else if(stage == 2)
|
||||
if(active && prob(95))
|
||||
user << "<span class='warning'>You trigger the assembly!</span>"
|
||||
prime()
|
||||
to_chat(user, "<span class='warning'>You trigger the assembly!</span>")
|
||||
detonate()
|
||||
return
|
||||
else
|
||||
user << "<span class='notice'>You unlock the assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You unlock the assembly.</span>")
|
||||
playsound(src.loc, W.usesound, 50, -3)
|
||||
name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]"
|
||||
icon_state = initial(icon_state) + (detonator?"_ass":"")
|
||||
@@ -104,23 +104,23 @@
|
||||
else if(is_type_in_list(W, allowed_containers) && (!stage || stage==1) && path != 2)
|
||||
path = 1
|
||||
if(beakers.len == 2)
|
||||
user << "<span class='warning'>The grenade can not hold more containers.</span>"
|
||||
to_chat(user, "<span class='warning'>The grenade can not hold more containers.</span>")
|
||||
return
|
||||
else
|
||||
if(W.reagents.total_volume)
|
||||
user << "<span class='notice'>You add \the [W] to the assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You add \the [W] to the assembly.</span>")
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
beakers += W
|
||||
stage = 1
|
||||
name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]"
|
||||
else
|
||||
user << "<span class='warning'>\The [W] is empty.</span>"
|
||||
to_chat(user, "<span class='warning'>\The [W] is empty.</span>")
|
||||
|
||||
examine(mob/user)
|
||||
..(user)
|
||||
if(detonator)
|
||||
user << "With attached [detonator.name]"
|
||||
to_chat(user, "With attached [detonator.name]")
|
||||
|
||||
activate(mob/user as mob)
|
||||
if(active) return
|
||||
@@ -144,7 +144,7 @@
|
||||
if(active)
|
||||
icon_state = initial(icon_state) + (primed?"_primed":"_active")
|
||||
|
||||
prime()
|
||||
detonate()
|
||||
if(!stage || stage<2) return
|
||||
|
||||
var/has_reagents = 0
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
var/emp_light = 7
|
||||
var/emp_long = 10
|
||||
|
||||
prime()
|
||||
..()
|
||||
if(empulse(src, emp_heavy, emp_med, emp_light, emp_long))
|
||||
qdel(src)
|
||||
return
|
||||
/obj/item/weapon/grenade/empgrenade/detonate()
|
||||
..()
|
||||
if(empulse(src, emp_heavy, emp_med, emp_light, emp_long))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/grenade/empgrenade/low_yield
|
||||
name = "low yield emp grenade"
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
var/spread_range = 7
|
||||
loadable = null
|
||||
|
||||
/obj/item/weapon/grenade/explosive/prime()
|
||||
/obj/item/weapon/grenade/explosive/detonate()
|
||||
..()
|
||||
|
||||
var/turf/O = get_turf(src)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
var/max_range = 10 //The maximum range possible, including species effect mods. Cuts off at 7 for normal humans. Should be 3 higher than your intended target range for affecting normal humans.
|
||||
var/banglet = 0
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/prime()
|
||||
/obj/item/weapon/grenade/flashbang/detonate()
|
||||
..()
|
||||
for(var/obj/structure/closet/L in hear(max_range, get_turf(src)))
|
||||
if(locate(/mob/living/carbon/, L))
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
new/obj/effect/effect/sparks(src.loc)
|
||||
new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=30, color="#FFFFFF")
|
||||
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -93,35 +94,37 @@
|
||||
else if(M.ear_damage >= 5)
|
||||
to_chat(M, "<span class='danger'>Your ears start to ring!</span>")
|
||||
|
||||
M.update_icons() //Forces matrix transform to proc if they are now laying, I guess?
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/Destroy()
|
||||
walk(src, 0) // Because we might have called walk_away, we must stop the walk loop or BYOND keeps an internal reference to us forever.
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve
|
||||
desc = "Use of this weapon may constiute a war crime in your area, consult your local Colony Director."
|
||||
name = "clusterbang"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "clusterbang"
|
||||
var/can_repeat = TRUE // Does this thing drop mini-clusterbangs?
|
||||
var/min_banglets = 4
|
||||
var/max_banglets = 8
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/clusterbang/prime()
|
||||
var/numspawned = rand(4,8)
|
||||
/obj/item/weapon/grenade/flashbang/clusterbang/detonate()
|
||||
var/numspawned = rand(min_banglets, max_banglets)
|
||||
var/again = 0
|
||||
for(var/more = numspawned,more > 0,more--)
|
||||
if(prob(35))
|
||||
again++
|
||||
numspawned --
|
||||
|
||||
for(,numspawned > 0, numspawned--)
|
||||
spawn(0)
|
||||
new /obj/item/weapon/grenade/flashbang/cluster(src.loc)//Launches flashbangs
|
||||
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
if(can_repeat)
|
||||
for(var/more = numspawned, more > 0, more--)
|
||||
if(prob(35))
|
||||
again++
|
||||
numspawned--
|
||||
|
||||
for(,again > 0, again--)
|
||||
spawn(0)
|
||||
new /obj/item/weapon/grenade/flashbang/clusterbang/segment(src.loc)//Creates a 'segment' that launches a few more flashbangs
|
||||
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
for(var/do_spawn = numspawned, do_spawn > 0, do_spawn--)
|
||||
new /obj/item/weapon/grenade/flashbang/cluster(src.loc)//Launches flashbangs
|
||||
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
|
||||
for(var/do_again = again, do_again > 0, do_again--)
|
||||
new /obj/item/weapon/grenade/flashbang/clusterbang/segment(src.loc)//Creates a 'segment' that launches a few more flashbangs
|
||||
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -130,41 +133,34 @@
|
||||
name = "clusterbang segment"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "clusterbang_segment"
|
||||
can_repeat = FALSE
|
||||
banglet = TRUE
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/clusterbang/segment/New()//Segments should never exist except part of the clusterbang, since these immediately 'do their thing' and asplode
|
||||
..()
|
||||
|
||||
icon_state = "clusterbang_segment_active"
|
||||
active = 1
|
||||
banglet = 1
|
||||
|
||||
var/stepdist = rand(1,4)//How far to step
|
||||
var/temploc = src.loc//Saves the current location to know where to step away from
|
||||
walk_away(src,temploc,stepdist)//I must go, my people need me
|
||||
|
||||
var/dettime = rand(15,60)
|
||||
spawn(dettime)
|
||||
prime()
|
||||
..()
|
||||
detonate()
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/clusterbang/segment/prime()
|
||||
var/numspawned = rand(4,8)
|
||||
for(var/more = numspawned,more > 0,more--)
|
||||
if(prob(35))
|
||||
numspawned --
|
||||
|
||||
for(,numspawned > 0, numspawned--)
|
||||
spawn(0)
|
||||
new /obj/item/weapon/grenade/flashbang/cluster(src.loc)
|
||||
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
qdel(src)
|
||||
return
|
||||
/obj/item/weapon/grenade/flashbang/cluster
|
||||
banglet = TRUE
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/cluster/New()//Same concept as the segments, so that all of the parts don't become reliant on the clusterbang
|
||||
spawn(0)
|
||||
icon_state = "flashbang_active"
|
||||
active = 1
|
||||
banglet = 1
|
||||
var/stepdist = rand(1,3)
|
||||
var/temploc = src.loc
|
||||
walk_away(src,temploc,stepdist)
|
||||
var/dettime = rand(15,60)
|
||||
spawn(dettime)
|
||||
prime()
|
||||
..()
|
||||
|
||||
icon_state = "flashbang_active"
|
||||
|
||||
var/stepdist = rand(1,3)
|
||||
var/temploc = src.loc
|
||||
walk_away(src,temploc,stepdist)
|
||||
|
||||
var/dettime = rand(15,60)
|
||||
spawn(dettime)
|
||||
detonate()
|
||||
@@ -13,6 +13,7 @@
|
||||
var/active = 0
|
||||
var/det_time = 50
|
||||
var/loadable = 1
|
||||
var/arm_sound = 'sound/weapons/armbomb.ogg'
|
||||
|
||||
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user)
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
@@ -21,7 +22,7 @@
|
||||
activate(user)
|
||||
add_fingerprint(user)
|
||||
spawn(5)
|
||||
prime()
|
||||
detonate()
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -35,7 +36,7 @@
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
spawn(det_time)
|
||||
prime()
|
||||
detonate()
|
||||
return
|
||||
user.set_dir(get_dir(user, target))
|
||||
user.drop_item()
|
||||
@@ -76,14 +77,14 @@
|
||||
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
active = 1
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
playsound(loc, arm_sound, 75, 1, -3)
|
||||
|
||||
spawn(det_time)
|
||||
prime()
|
||||
detonate()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/proc/prime()
|
||||
/obj/item/weapon/grenade/proc/detonate()
|
||||
// playsound(loc, 'sound/items/Welder2.ogg', 25, 1)
|
||||
var/turf/T = get_turf(src)
|
||||
if(T)
|
||||
@@ -91,7 +92,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(isscrewdriver(W))
|
||||
if(W.is_screwdriver())
|
||||
switch(det_time)
|
||||
if (1)
|
||||
det_time = 10
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
smoke = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/grenade/smokebomb/prime()
|
||||
/obj/item/weapon/grenade/smokebomb/detonate()
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
src.smoke.set_up(10, 0, usr.loc)
|
||||
spawn(0)
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
var/spawner_type = null // must be an object path
|
||||
var/deliveryamt = 1 // amount of type to deliver
|
||||
|
||||
// Prime now just handles the two loops that query for people in lockers and people who can see it.
|
||||
/obj/item/weapon/grenade/spawnergrenade/prime()
|
||||
// Detonate now just handles the two loops that query for people in lockers and people who can see it.
|
||||
/obj/item/weapon/grenade/spawnergrenade/detonate()
|
||||
|
||||
if(spawner_type && deliveryamt)
|
||||
// Make a quick flash
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/manhacks
|
||||
name = "manhack delivery grenade"
|
||||
spawner_type = /mob/living/simple_animal/hostile/viscerator
|
||||
spawner_type = /mob/living/simple_mob/mechanical/viscerator
|
||||
deliveryamt = 5
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/spider
|
||||
name = "spider delivery grenade"
|
||||
spawner_type = /mob/living/simple_animal/hostile/giant_spider/hunter
|
||||
spawner_type = /mob/living/simple_mob/animal/giant_spider/hunter
|
||||
deliveryamt = 3
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
/obj/item/weapon/grenade/supermatter
|
||||
name = "supermatter grenade"
|
||||
icon_state = "banana"
|
||||
item_state = "emergency_engi"
|
||||
origin_tech = list(TECH_BLUESPACE = 5, TECH_MAGNET = 4, TECH_ENGINEERING = 5)
|
||||
arm_sound = 'sound/effects/3.wav'
|
||||
var/implode_at
|
||||
|
||||
/obj/item/weapon/grenade/supermatter/Destroy()
|
||||
if(implode_at)
|
||||
processing_objects -= src
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/grenade/supermatter/detonate()
|
||||
..()
|
||||
processing_objects += src
|
||||
implode_at = world.time + 10 SECONDS
|
||||
update_icon()
|
||||
playsound(src, 'sound/weapons/wave.ogg', 100)
|
||||
|
||||
/obj/item/weapon/grenade/supermatter/update_icon()
|
||||
overlays.Cut()
|
||||
if(implode_at)
|
||||
overlays += image(icon = 'icons/rust.dmi', icon_state = "emfield_s1")
|
||||
|
||||
/obj/item/weapon/grenade/supermatter/process()
|
||||
if(!isturf(loc))
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.drop_from_inventory(src)
|
||||
forceMove(get_turf(src))
|
||||
playsound(src, 'sound/effects/supermatter.ogg', 100)
|
||||
supermatter_pull(src, world.view, STAGE_THREE)
|
||||
if(world.time > implode_at)
|
||||
explosion(loc, 1, 3, 5, 4)
|
||||
qdel(src)
|
||||
@@ -39,7 +39,7 @@
|
||||
IC.examine(user)
|
||||
|
||||
/obj/item/weapon/implant/integrated_circuit/attackby(var/obj/item/O, var/mob/user)
|
||||
if(istype(O, /obj/item/weapon/crowbar) || istype(O, /obj/item/device/integrated_electronics) || istype(O, /obj/item/integrated_circuit) || istype(O, /obj/item/weapon/screwdriver) || istype(O, /obj/item/weapon/cell/device) )
|
||||
if(O.is_crowbar() || istype(O, /obj/item/device/integrated_electronics) || istype(O, /obj/item/integrated_circuit) || O.is_screwdriver() || istype(O, /obj/item/weapon/cell/device) )
|
||||
IC.attackby(O, user)
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
thrown_force_divisor = 0.1
|
||||
|
||||
/obj/item/weapon/material/butterflyconstruction/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/screwdriver))
|
||||
user << "You finish the concealed blade weapon."
|
||||
if(W.is_screwdriver())
|
||||
to_chat(user, "You finish the concealed blade weapon.")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
new /obj/item/weapon/material/butterfly(user.loc, material.name)
|
||||
qdel(src)
|
||||
@@ -33,7 +33,7 @@
|
||||
/obj/item/weapon/material/butterflyhandle/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/material/butterflyblade))
|
||||
var/obj/item/weapon/material/butterflyblade/B = W
|
||||
user << "You attach the two concealed blade parts."
|
||||
to_chat(user, "You attach the two concealed blade parts.")
|
||||
new /obj/item/weapon/material/butterflyconstruction(user.loc, B.material.name)
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
@@ -58,10 +58,10 @@
|
||||
if(istype(I, /obj/item/weapon/material/shard) || istype(I, /obj/item/weapon/material/butterflyblade))
|
||||
var/obj/item/weapon/material/tmp_shard = I
|
||||
finished = new /obj/item/weapon/material/twohanded/spear(get_turf(user), tmp_shard.material.name)
|
||||
user << "<span class='notice'>You fasten \the [I] to the top of the rod with the cable.</span>"
|
||||
else if(istype(I, /obj/item/weapon/wirecutters))
|
||||
to_chat(user, "<span class='notice'>You fasten \the [I] to the top of the rod with the cable.</span>")
|
||||
else if(I.is_wirecutter())
|
||||
finished = new /obj/item/weapon/melee/baton/cattleprod(get_turf(user))
|
||||
user << "<span class='notice'>You fasten the wirecutters to the top of the rod with the cable, prongs outward.</span>"
|
||||
to_chat(user, "<span class='notice'>You fasten the wirecutters to the top of the rod with the cable, prongs outward.</span>")
|
||||
if(finished)
|
||||
user.drop_from_inventory(src)
|
||||
user.drop_from_inventory(I)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/epitaph = "" //A quick little blurb
|
||||
|
||||
/obj/item/weapon/material/gravemarker/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(W.is_screwdriver())
|
||||
var/carving_1 = sanitizeSafe(input(user, "Who is \the [src.name] for?", "Gravestone Naming", null) as text, MAX_NAME_LEN)
|
||||
if(carving_1)
|
||||
user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
|
||||
@@ -27,7 +27,7 @@
|
||||
user.visible_message("[user] carves something into \the [src.name].", "You carve your message into \the [src.name].")
|
||||
epitaph += carving_2
|
||||
update_icon()
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(W.is_wrench())
|
||||
user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
|
||||
if(do_after(user, material.hardness * W.toolspeed))
|
||||
material.place_dismantled_product(get_turf(src))
|
||||
|
||||
@@ -43,11 +43,11 @@
|
||||
icon_state = "utility"
|
||||
can_hold = list(
|
||||
///obj/item/weapon/combitool,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/wirecutters,
|
||||
/obj/item/weapon/wrench,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/cell/device,
|
||||
@@ -71,21 +71,21 @@
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/full
|
||||
starts_with = list(
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/wrench,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/wirecutters,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/stack/cable_coil/random_belt
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/atmostech
|
||||
starts_with = list(
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/wrench,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/wirecutters,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/chief
|
||||
@@ -96,8 +96,8 @@
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/chief/full
|
||||
starts_with = list(
|
||||
/obj/item/weapon/screwdriver/power,
|
||||
/obj/item/weapon/crowbar/power,
|
||||
/obj/item/weapon/tool/screwdriver/power,
|
||||
/obj/item/weapon/tool/crowbar/power,
|
||||
/obj/item/weapon/weldingtool/experimental,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/stack/cable_coil/random_belt,
|
||||
@@ -130,7 +130,7 @@
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/weapon/reagent_containers/hypospray,
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/cell/device,
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
@@ -241,11 +241,11 @@
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/alien/full
|
||||
starts_with = list(
|
||||
/obj/item/weapon/screwdriver/alien,
|
||||
/obj/item/weapon/wrench/alien,
|
||||
/obj/item/weapon/tool/screwdriver/alien,
|
||||
/obj/item/weapon/tool/wrench/alien,
|
||||
/obj/item/weapon/weldingtool/alien,
|
||||
/obj/item/weapon/crowbar/alien,
|
||||
/obj/item/weapon/wirecutters/alien,
|
||||
/obj/item/weapon/tool/crowbar/alien,
|
||||
/obj/item/weapon/tool/wirecutters/alien,
|
||||
/obj/item/device/multitool/alien,
|
||||
/obj/item/stack/cable_coil/alien
|
||||
)
|
||||
@@ -278,7 +278,7 @@
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/weapon/reagent_containers/hypospray,
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/cell/device,
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
@@ -368,7 +368,7 @@
|
||||
/obj/item/weapon/clipboard,
|
||||
/obj/item/weapon/anodevice,
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/weapon/wrench,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/storage/excavation,
|
||||
/obj/item/weapon/anobattery,
|
||||
/obj/item/device/ano_scanner,
|
||||
|
||||
@@ -41,13 +41,13 @@
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
return
|
||||
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if (W.is_screwdriver())
|
||||
if (do_after(user, 20 * W.toolspeed))
|
||||
src.open =! src.open
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user.show_message(text("<span class='notice'>You [] the service panel.</span>", (src.open ? "open" : "close")))
|
||||
return
|
||||
if ((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking))
|
||||
if (istype(W, /obj/item/device/multitool) && (src.open == 1)&& (!src.l_hacking))
|
||||
user.show_message("<span class='notice'>Now attempting to reset internal memory, please hold.</span>", 1)
|
||||
src.l_hacking = 1
|
||||
if (do_after(usr, 100))
|
||||
@@ -135,7 +135,7 @@
|
||||
src.overlays = null
|
||||
overlays += image('icons/obj/storage.dmi', icon_locking)
|
||||
locked = 0
|
||||
user << (feedback ? feedback : "You short out the lock of \the [src].")
|
||||
to_chat(user, (feedback ? feedback : "You short out the lock of \the [src]."))
|
||||
return 1
|
||||
|
||||
// -----------------------------
|
||||
@@ -156,7 +156,7 @@
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if ((src.loc == user) && (src.locked == 1))
|
||||
usr << "<span class='warning'>[src] is locked and cannot be opened!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is locked and cannot be opened!</span>")
|
||||
else if ((src.loc == user) && (!src.locked))
|
||||
src.open(usr)
|
||||
else
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
icon_state = "red"
|
||||
item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red")
|
||||
starts_with = list(
|
||||
/obj/item/weapon/crowbar/red,
|
||||
/obj/item/weapon/tool/crowbar/red,
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
/obj/item/device/radio
|
||||
)
|
||||
@@ -36,12 +36,12 @@
|
||||
icon_state = "blue"
|
||||
item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue")
|
||||
starts_with = list(
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/wrench,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/device/analyzer,
|
||||
/obj/item/weapon/wirecutters
|
||||
/obj/item/weapon/tool/wirecutters
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/toolbox/electrical
|
||||
@@ -49,10 +49,10 @@
|
||||
icon_state = "yellow"
|
||||
item_state_slots = list(slot_r_hand_str = "toolbox_yellow", slot_l_hand_str = "toolbox_yellow")
|
||||
starts_with = list(
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/wirecutters,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/stack/cable_coil/random_belt,
|
||||
/obj/item/stack/cable_coil/random_belt
|
||||
)
|
||||
@@ -72,20 +72,20 @@
|
||||
force = 14
|
||||
starts_with = list(
|
||||
/obj/item/clothing/gloves/yellow,
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/wrench,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/wirecutters,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/device/multitool
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/toolbox/syndicate/powertools
|
||||
starts_with = list(
|
||||
/obj/item/clothing/gloves/yellow,
|
||||
/obj/item/weapon/screwdriver/power,
|
||||
/obj/item/weapon/tool/screwdriver/power,
|
||||
/obj/item/weapon/weldingtool/experimental,
|
||||
/obj/item/weapon/crowbar/power,
|
||||
/obj/item/weapon/tool/crowbar/power,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/stack/cable_coil/random_belt,
|
||||
/obj/item/device/analyzer
|
||||
|
||||
@@ -223,19 +223,19 @@
|
||||
/obj/item/weapon/storage/box/syndie_kit/demolitions
|
||||
starts_with = list(
|
||||
/obj/item/weapon/syndie/c4explosive,
|
||||
/obj/item/weapon/screwdriver
|
||||
/obj/item/weapon/tool/screwdriver
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy
|
||||
starts_with = list(
|
||||
/obj/item/weapon/syndie/c4explosive/heavy,
|
||||
/obj/item/weapon/screwdriver
|
||||
/obj/item/weapon/tool/screwdriver
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy
|
||||
starts_with = list(
|
||||
/obj/item/weapon/syndie/c4explosive/heavy/super_heavy,
|
||||
/obj/item/weapon/screwdriver
|
||||
/obj/item/weapon/tool/screwdriver
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/secure/briefcase/rifle
|
||||
@@ -253,8 +253,8 @@
|
||||
description_fluff = "The container, upon opening, looks to have a few oddly shaped indentations in its packing."
|
||||
description_antag = "This case will likely contain a charged fuel rod gun, and a few fuel rods to go with it. It can only hold the fuel rod gun, fuel rods, batteries, a screwdriver, and stock machine parts."
|
||||
force = 12 //Anti-rad lined i.e. Lead, probably gonna hurt a bit if you get bashed with it.
|
||||
can_hold = list(/obj/item/weapon/gun/magnetic/fuelrod, /obj/item/weapon/fuel_assembly, /obj/item/weapon/cell, /obj/item/weapon/stock_parts, /obj/item/weapon/screwdriver)
|
||||
cant_hold = list(/obj/item/weapon/screwdriver/power)
|
||||
can_hold = list(/obj/item/weapon/gun/magnetic/fuelrod, /obj/item/weapon/fuel_assembly, /obj/item/weapon/cell, /obj/item/weapon/stock_parts, /obj/item/weapon/tool/screwdriver)
|
||||
cant_hold = list(/obj/item/weapon/tool/screwdriver/power)
|
||||
starts_with = list(
|
||||
/obj/item/weapon/gun/magnetic/fuelrod,
|
||||
/obj/item/weapon/fuel_assembly/deuterium,
|
||||
@@ -262,5 +262,5 @@
|
||||
/obj/item/weapon/fuel_assembly/tritium,
|
||||
/obj/item/weapon/fuel_assembly/tritium,
|
||||
/obj/item/weapon/fuel_assembly/phoron,
|
||||
/obj/item/weapon/screwdriver
|
||||
/obj/item/weapon/tool/screwdriver
|
||||
)
|
||||
|
||||
@@ -32,12 +32,12 @@
|
||||
/obj/item/weapon/photo,
|
||||
/obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/weapon/sample,
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/stamp,
|
||||
/obj/item/clothing/accessory/permit,
|
||||
/obj/item/clothing/accessory/badge
|
||||
)
|
||||
cant_hold = list(/obj/item/weapon/screwdriver/power)
|
||||
cant_hold = list(/obj/item/weapon/tool/screwdriver/power)
|
||||
slot_flags = SLOT_ID
|
||||
|
||||
var/obj/item/weapon/card/id/front_id = null
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
else if(lit && detonator_mode)
|
||||
switch(alert(user, "What would you like to do?", "Lighter", "Press the button.", "Close the lighter."))
|
||||
if("Press the button.")
|
||||
user << "<span class='warning'>You press the button.</span>"
|
||||
to_chat(user, "<span class='warning'>You press the button.</span>")
|
||||
icon_state = "[base_state]click"
|
||||
if(src.bomb)
|
||||
src.bomb.detonate()
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/flame/lighter/zippo/c4detonator/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(W.is_screwdriver())
|
||||
detonator_mode = !detonator_mode
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You unscrew the top panel of \the [src] revealing a button.</span>"
|
||||
to_chat(user, "<span class='notice'>You unscrew the top panel of \the [src] revealing a button.</span>")
|
||||
|
||||
@@ -130,7 +130,7 @@ var/list/global/tank_gauge_cache = list()
|
||||
to_chat(user, "<span class='notice'>You attach the wires to the tank.</span>")
|
||||
src.add_bomb_overlay()
|
||||
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
if(W.is_wirecutter())
|
||||
if(wired && src.proxyassembly.assembly)
|
||||
|
||||
to_chat(user, "<span class='notice'>You carefully begin clipping the wires that attach to the tank.</span>")
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
// File is unticked because this is entirely untested old code
|
||||
|
||||
|
||||
/*
|
||||
* Combitool
|
||||
*/
|
||||
/obj/item/weapon/combitool
|
||||
name = "combi-tool"
|
||||
desc = "It even has one of those nubbins for doing the thingy."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "combitool"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
var/list/spawn_tools = list(
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/weapon/material/knife,
|
||||
/obj/item/weapon/material/kitchen/utensil/fork,
|
||||
/obj/item/weapon/material/knife/machete/hatchet
|
||||
)
|
||||
var/list/tools = list()
|
||||
var/current_tool = 1
|
||||
|
||||
/obj/item/weapon/combitool/examine()
|
||||
..()
|
||||
if(loc == usr && tools.len)
|
||||
to_chat(usr, "It has the following fittings:")
|
||||
for(var/obj/item/tool in tools)
|
||||
to_chat(usr, "\icon[tool] - [tool.name][tools[current_tool]==tool?" (selected)":""]")
|
||||
|
||||
/obj/item/weapon/combitool/New()
|
||||
..()
|
||||
for(var/type in spawn_tools)
|
||||
tools |= new type(src)
|
||||
|
||||
/obj/item/weapon/combitool/attack_self(mob/user as mob)
|
||||
if(++current_tool > tools.len) current_tool = 1
|
||||
var/obj/item/tool = tools[current_tool]
|
||||
if(!tool)
|
||||
to_chat(user, "You can't seem to find any fittings in \the [src].")
|
||||
else
|
||||
to_chat(user, "You switch \the [src] to the [tool.name] fitting.")
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/combitool/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!M.Adjacent(user))
|
||||
return 0
|
||||
var/obj/item/tool = tools[current_tool]
|
||||
if(!tool) return 0
|
||||
return (tool ? tool.attack(M,user) : 0)
|
||||
|
||||
/obj/item/weapon/combitool/afterattack(var/atom/target, var/mob/living/user, proximity, params)
|
||||
if(!proximity)
|
||||
return 0
|
||||
var/obj/item/tool = tools[current_tool]
|
||||
if(!tool) return 0
|
||||
tool.loc = user
|
||||
var/resolved = target.attackby(tool,user)
|
||||
if(!resolved && tool && target)
|
||||
tool.afterattack(target,user,1)
|
||||
if(tool)
|
||||
tool.loc = src
|
||||
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Crowbar
|
||||
*/
|
||||
|
||||
/obj/item/weapon/tool/crowbar
|
||||
name = "crowbar"
|
||||
desc = "Used to remove floors and to pry open doors."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "crowbar"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 6
|
||||
throwforce = 7
|
||||
pry = 1
|
||||
item_state = "crowbar"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_ENGINEERING = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50)
|
||||
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
|
||||
usesound = 'sound/items/crowbar.ogg'
|
||||
toolspeed = 1
|
||||
|
||||
/obj/item/weapon/tool/crowbar/is_crowbar()
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/tool/crowbar/red
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "red_crowbar"
|
||||
item_state = "crowbar_red"
|
||||
|
||||
/obj/item/weapon/tool/crowbar/alien
|
||||
name = "alien crowbar"
|
||||
desc = "A hard-light crowbar. It appears to pry by itself, without any effort required."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
usesound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
icon_state = "crowbar"
|
||||
toolspeed = 0.1
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_ENGINEERING = 4)
|
||||
|
||||
/obj/item/weapon/tool/crowbar/cyborg
|
||||
name = "hydraulic crowbar"
|
||||
desc = "A hydraulic prying tool, compact but powerful. Designed to replace crowbars in industrial synthetics."
|
||||
usesound = 'sound/items/jaws_pry.ogg'
|
||||
force = 10
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/tool/crowbar/power
|
||||
name = "jaws of life"
|
||||
desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a prying head."
|
||||
icon_state = "jaws_pry"
|
||||
item_state = "jawsoflife"
|
||||
matter = list(MAT_METAL=150, MAT_SILVER=50)
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
usesound = 'sound/items/jaws_pry.ogg'
|
||||
force = 15
|
||||
toolspeed = 0.25
|
||||
var/obj/item/weapon/tool/wirecutters/power/counterpart = null
|
||||
|
||||
/obj/item/weapon/tool/crowbar/power/New(newloc, no_counterpart = TRUE)
|
||||
..(newloc)
|
||||
if(!counterpart && no_counterpart)
|
||||
counterpart = new(src, FALSE)
|
||||
counterpart.counterpart = src
|
||||
|
||||
/obj/item/weapon/tool/crowbar/power/Destroy()
|
||||
if(counterpart)
|
||||
counterpart.counterpart = null // So it can qdel cleanly.
|
||||
qdel_null(counterpart)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/tool/crowbar/power/attack_self(mob/user)
|
||||
playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the cutting jaws to [src].</span>")
|
||||
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* Screwdriver
|
||||
*/
|
||||
/obj/item/weapon/tool/screwdriver
|
||||
name = "screwdriver"
|
||||
desc = "You can be totally screwwy with this."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "screwdriver"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT | SLOT_EARS
|
||||
force = 6
|
||||
w_class = ITEMSIZE_TINY
|
||||
throwforce = 5
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
usesound = 'sound/items/screwdriver.ogg'
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 75)
|
||||
attack_verb = list("stabbed")
|
||||
sharp = 1
|
||||
toolspeed = 1
|
||||
var/random_color = TRUE
|
||||
|
||||
/obj/item/weapon/tool/screwdriver/suicide_act(mob/user)
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
viewers(user) << pick("<span class='danger'>\The [user] is stabbing the [src.name] into [TU.his] temple! It looks like [TU.hes] trying to commit suicide.</span>", \
|
||||
"<span class='danger'>\The [user] is stabbing the [src.name] into [TU.his] heart! It looks like [TU.hes] trying to commit suicide.</span>")
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/tool/screwdriver/New()
|
||||
if(random_color)
|
||||
switch(pick("red","blue","purple","brown","green","cyan","yellow"))
|
||||
if ("red")
|
||||
icon_state = "screwdriver2"
|
||||
item_state = "screwdriver"
|
||||
if ("blue")
|
||||
icon_state = "screwdriver"
|
||||
item_state = "screwdriver_blue"
|
||||
if ("purple")
|
||||
icon_state = "screwdriver3"
|
||||
item_state = "screwdriver_purple"
|
||||
if ("brown")
|
||||
icon_state = "screwdriver4"
|
||||
item_state = "screwdriver_brown"
|
||||
if ("green")
|
||||
icon_state = "screwdriver5"
|
||||
item_state = "screwdriver_green"
|
||||
if ("cyan")
|
||||
icon_state = "screwdriver6"
|
||||
item_state = "screwdriver_cyan"
|
||||
if ("yellow")
|
||||
icon_state = "screwdriver7"
|
||||
item_state = "screwdriver_yellow"
|
||||
|
||||
if (prob(75))
|
||||
src.pixel_y = rand(0, 16)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/tool/screwdriver/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M) || user.a_intent == "help")
|
||||
return ..()
|
||||
if(user.zone_sel.selecting != O_EYES && user.zone_sel.selecting != BP_HEAD)
|
||||
return ..()
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
M = user
|
||||
return eyestab(M,user)
|
||||
|
||||
/obj/item/weapon/tool/screwdriver/is_screwdriver()
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/tool/screwdriver/alien
|
||||
name = "alien screwdriver"
|
||||
desc = "An ultrasonic screwdriver."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "screwdriver_a"
|
||||
item_state = "screwdriver_black"
|
||||
usesound = 'sound/items/pshoom.ogg'
|
||||
toolspeed = 0.1
|
||||
random_color = FALSE
|
||||
|
||||
/obj/item/weapon/tool/screwdriver/cyborg
|
||||
name = "powered screwdriver"
|
||||
desc = "An electrical screwdriver, designed to be both precise and quick."
|
||||
usesound = 'sound/items/drill_use.ogg'
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/tool/screwdriver/power
|
||||
name = "hand drill"
|
||||
desc = "A simple powered hand drill. It's fitted with a screw bit."
|
||||
icon_state = "drill_screw"
|
||||
item_state = "drill"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 150, MAT_SILVER = 50)
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
slot_flags = SLOT_BELT
|
||||
force = 8
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throwforce = 8
|
||||
throw_speed = 2
|
||||
throw_range = 3//it's heavier than a screw driver/wrench, so it does more damage, but can't be thrown as far
|
||||
attack_verb = list("drilled", "screwed", "jabbed", "whacked")
|
||||
hitsound = 'sound/items/drill_hit.ogg'
|
||||
usesound = 'sound/items/drill_use.ogg'
|
||||
toolspeed = 0.25
|
||||
random_color = FALSE
|
||||
var/obj/item/weapon/tool/wrench/power/counterpart = null
|
||||
|
||||
/obj/item/weapon/tool/screwdriver/power/New(newloc, no_counterpart = TRUE)
|
||||
..(newloc)
|
||||
if(!counterpart && no_counterpart)
|
||||
counterpart = new(src, FALSE)
|
||||
counterpart.counterpart = src
|
||||
|
||||
/obj/item/weapon/tool/screwdriver/power/Destroy()
|
||||
if(counterpart)
|
||||
counterpart.counterpart = null // So it can qdel cleanly.
|
||||
qdel_null(counterpart)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/tool/screwdriver/power/attack_self(mob/user)
|
||||
playsound(get_turf(user),'sound/items/change_drill.ogg',50,1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the bolt driver bit to [src].</span>")
|
||||
+612
-1042
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Wirecutters
|
||||
*/
|
||||
/obj/item/weapon/tool/wirecutters
|
||||
name = "wirecutters"
|
||||
desc = "This cuts wires."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "cutters"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 6
|
||||
throw_speed = 2
|
||||
throw_range = 9
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 80)
|
||||
attack_verb = list("pinched", "nipped")
|
||||
hitsound = 'sound/items/wirecutter.ogg'
|
||||
usesound = 'sound/items/wirecutter.ogg'
|
||||
sharp = 1
|
||||
edge = 1
|
||||
toolspeed = 1
|
||||
var/random_color = TRUE
|
||||
|
||||
/obj/item/weapon/tool/wirecutters/New()
|
||||
if(random_color && prob(50))
|
||||
icon_state = "cutters-y"
|
||||
item_state = "cutters_yellow"
|
||||
..()
|
||||
|
||||
/obj/item/weapon/tool/wirecutters/attack(mob/living/carbon/C as mob, mob/user as mob)
|
||||
if(istype(C) && user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/weapon/handcuffs/cable)))
|
||||
usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\
|
||||
"You cut \the [C]'s restraints with \the [src]!",\
|
||||
"You hear cable being cut.")
|
||||
C.handcuffed = null
|
||||
if(C.buckled && C.buckled.buckle_require_restraints)
|
||||
C.buckled.unbuckle_mob()
|
||||
C.update_inv_handcuffed()
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/tool/wirecutters/is_wirecutter()
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/tool/wirecutters/alien
|
||||
name = "alien wirecutters"
|
||||
desc = "Extremely sharp wirecutters, made out of a silvery-green metal."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "cutters"
|
||||
toolspeed = 0.1
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4)
|
||||
random_color = FALSE
|
||||
|
||||
/obj/item/weapon/tool/wirecutters/cyborg
|
||||
name = "wirecutters"
|
||||
desc = "This cuts wires. With science."
|
||||
usesound = 'sound/items/jaws_cut.ogg'
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/tool/wirecutters/power
|
||||
name = "jaws of life"
|
||||
desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a cutting head."
|
||||
icon_state = "jaws_cutter"
|
||||
item_state = "jawsoflife"
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
matter = list(MAT_METAL=150, MAT_SILVER=50)
|
||||
usesound = 'sound/items/jaws_cut.ogg'
|
||||
force = 15
|
||||
toolspeed = 0.25
|
||||
random_color = FALSE
|
||||
var/obj/item/weapon/tool/crowbar/power/counterpart = null
|
||||
|
||||
/obj/item/weapon/tool/wirecutters/power/New(newloc, no_counterpart = TRUE)
|
||||
..(newloc)
|
||||
if(!counterpart && no_counterpart)
|
||||
counterpart = new(src, FALSE)
|
||||
counterpart.counterpart = src
|
||||
|
||||
/obj/item/weapon/tool/wirecutters/power/Destroy()
|
||||
if(counterpart)
|
||||
counterpart.counterpart = null // So it can qdel cleanly.
|
||||
qdel_null(counterpart)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/tool/wirecutters/power/attack_self(mob/user)
|
||||
playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the pry jaws to [src].</span>")
|
||||
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Wrench
|
||||
*/
|
||||
/obj/item/weapon/tool/wrench
|
||||
name = "wrench"
|
||||
desc = "A wrench with many common uses. Can be usually found in your hand."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "wrench"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 6
|
||||
throwforce = 7
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
|
||||
usesound = 'sound/items/ratchet.ogg'
|
||||
toolspeed = 1
|
||||
|
||||
/obj/item/weapon/tool/wrench/is_wrench()
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/tool/wrench/cyborg
|
||||
name = "automatic wrench"
|
||||
desc = "An advanced robotic wrench. Can be found in industrial synthetic shells."
|
||||
usesound = 'sound/items/drill_use.ogg'
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/tool/wrench/alien
|
||||
name = "alien wrench"
|
||||
desc = "A polarized wrench. It causes anything placed between the jaws to turn."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "wrench"
|
||||
usesound = 'sound/effects/empulse.ogg'
|
||||
toolspeed = 0.1
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 5)
|
||||
|
||||
/obj/item/weapon/tool/wrench/power
|
||||
name = "hand drill"
|
||||
desc = "A simple powered hand drill. It's fitted with a bolt bit."
|
||||
icon_state = "drill_bolt"
|
||||
item_state = "drill"
|
||||
usesound = 'sound/items/drill_use.ogg'
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 150, MAT_SILVER = 50)
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
force = 8
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throwforce = 8
|
||||
attack_verb = list("drilled", "screwed", "jabbed")
|
||||
toolspeed = 0.25
|
||||
var/obj/item/weapon/tool/screwdriver/power/counterpart = null
|
||||
|
||||
/obj/item/weapon/tool/wrench/power/New(newloc, no_counterpart = TRUE)
|
||||
..(newloc)
|
||||
if(!counterpart && no_counterpart)
|
||||
counterpart = new(src, FALSE)
|
||||
counterpart.counterpart = src
|
||||
|
||||
/obj/item/weapon/tool/wrench/power/Destroy()
|
||||
if(counterpart)
|
||||
counterpart.counterpart = null // So it can qdel cleanly.
|
||||
qdel_null(counterpart)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/tool/wrench/power/attack_self(mob/user)
|
||||
playsound(get_turf(user),'sound/items/change_drill.ogg',50,1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the screw driver bit to [src].</span>")
|
||||
@@ -39,7 +39,7 @@
|
||||
/obj/CanUseTopic(var/mob/user, var/datum/topic_state/state)
|
||||
if(user.CanUseObjTopic(src))
|
||||
return ..()
|
||||
user << "<span class='danger'>\icon[src]Access Denied!</span>"
|
||||
to_chat(user, "<span class='danger'>\icon[src]Access Denied!</span>")
|
||||
return STATUS_CLOSE
|
||||
|
||||
/mob/living/silicon/CanUseObjTopic(var/obj/O)
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
icon_state = "welder"
|
||||
|
||||
/obj/random/tool/item_to_spawn()
|
||||
return pick(/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/wirecutters,
|
||||
return pick(/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/weldingtool/largetank,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/wrench,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/device/multitool)
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
|
||||
/obj/random/tool/powermaint/item_to_spawn()
|
||||
return pick(prob(320);/obj/random/tool,
|
||||
prob(1);/obj/item/weapon/screwdriver/power,
|
||||
prob(1);/obj/item/weapon/wirecutters/power,
|
||||
prob(1);/obj/item/weapon/tool/screwdriver/power,
|
||||
prob(1);/obj/item/weapon/tool/wirecutters/power,
|
||||
prob(15);/obj/item/weapon/weldingtool/electric,
|
||||
prob(5);/obj/item/weapon/weldingtool/experimental)
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
icon_state = "jaws_pry"
|
||||
|
||||
/obj/random/tool/power/item_to_spawn()
|
||||
return pick(/obj/item/weapon/screwdriver/power,
|
||||
/obj/item/weapon/wirecutters/power,
|
||||
return pick(/obj/item/weapon/tool/screwdriver/power,
|
||||
/obj/item/weapon/tool/wirecutters/power,
|
||||
/obj/item/weapon/weldingtool/electric,
|
||||
/obj/item/weapon/weldingtool/experimental)
|
||||
|
||||
@@ -49,11 +49,11 @@
|
||||
icon_state = "welder"
|
||||
|
||||
/obj/random/tool/alien/item_to_spawn()
|
||||
return pick(/obj/item/weapon/screwdriver/alien,
|
||||
/obj/item/weapon/wirecutters/alien,
|
||||
return pick(/obj/item/weapon/tool/screwdriver/alien,
|
||||
/obj/item/weapon/tool/wirecutters/alien,
|
||||
/obj/item/weapon/weldingtool/alien,
|
||||
/obj/item/weapon/crowbar/alien,
|
||||
/obj/item/weapon/wrench/alien,
|
||||
/obj/item/weapon/tool/crowbar/alien,
|
||||
/obj/item/weapon/tool/wrench/alien,
|
||||
/obj/item/stack/cable_coil/alien,
|
||||
/obj/item/device/multitool/alien)
|
||||
|
||||
|
||||
@@ -18,24 +18,24 @@
|
||||
var/mob_retaliate = 0
|
||||
|
||||
/obj/random/mob/item_to_spawn()
|
||||
return pick(prob(10);/mob/living/simple_animal/lizard,
|
||||
prob(6);/mob/living/simple_animal/retaliate/diyaab,
|
||||
return pick(prob(10);/mob/living/simple_mob/animal/passive/lizard,
|
||||
prob(6);/mob/living/simple_mob/animal/sif/diyaab,
|
||||
prob(10);/mob/living/simple_animal/cat/fluff,
|
||||
prob(6);/mob/living/simple_animal/cat/kitten,
|
||||
prob(10);/mob/living/simple_animal/corgi,
|
||||
prob(6);/mob/living/simple_animal/corgi/puppy,
|
||||
prob(10);/mob/living/simple_animal/crab,
|
||||
prob(10);/mob/living/simple_mob/animal/passive/crab,
|
||||
prob(10);/mob/living/simple_animal/chicken,
|
||||
prob(6);/mob/living/simple_animal/chick,
|
||||
prob(10);/mob/living/simple_animal/cow,
|
||||
prob(6);/mob/living/simple_animal/retaliate/goat,
|
||||
prob(10);/mob/living/simple_animal/penguin,
|
||||
prob(10);/mob/living/simple_mob/animal/passive/penguin,
|
||||
prob(10);/mob/living/simple_animal/mouse,
|
||||
prob(10);/mob/living/simple_animal/yithian,
|
||||
prob(10);/mob/living/simple_animal/tindalos,
|
||||
prob(10);/mob/living/simple_mob/animal/passive/yithian,
|
||||
prob(10);/mob/living/simple_mob/animal/passive/tindalos,
|
||||
prob(10);/mob/living/simple_animal/corgi/tamaskan,
|
||||
prob(3);/mob/living/simple_animal/parrot,
|
||||
prob(1);/mob/living/simple_animal/giant_crab)
|
||||
prob(1);/mob/living/simple_mob/animal/passive/crab)
|
||||
|
||||
/obj/random/mob/spawn_item() //These should only ever have simple mobs.
|
||||
var/build_path = item_to_spawn()
|
||||
@@ -65,14 +65,14 @@
|
||||
mob_wander_distance = 10
|
||||
|
||||
/obj/random/mob/sif/item_to_spawn()
|
||||
return pick(prob(30);/mob/living/simple_animal/retaliate/diyaab,
|
||||
prob(15);/mob/living/simple_animal/crab,
|
||||
prob(15);/mob/living/simple_animal/penguin,
|
||||
return pick(prob(30);/mob/living/simple_mob/animal/sif/diyaab,
|
||||
prob(15);/mob/living/simple_mob/animal/passive/crab,
|
||||
prob(15);/mob/living/simple_mob/animal/passive/penguin,
|
||||
prob(15);/mob/living/simple_animal/mouse,
|
||||
prob(15);/mob/living/simple_animal/corgi/tamaskan,
|
||||
prob(2);/mob/living/simple_animal/hostile/giant_spider/frost,
|
||||
prob(2);/mob/living/simple_mob/animal/giant_spider/frost,
|
||||
prob(1);/mob/living/simple_animal/hostile/goose,
|
||||
prob(20);/mob/living/simple_animal/giant_crab)
|
||||
prob(20);/mob/living/simple_mob/animal/passive/crab)
|
||||
|
||||
|
||||
/obj/random/mob/sif/peaceful
|
||||
@@ -84,12 +84,12 @@
|
||||
mob_wander_distance = 12
|
||||
|
||||
/obj/random/mob/sif/peaceful/item_to_spawn()
|
||||
return pick(prob(30);/mob/living/simple_animal/retaliate/diyaab,
|
||||
prob(15);/mob/living/simple_animal/crab,
|
||||
prob(15);/mob/living/simple_animal/penguin,
|
||||
return pick(prob(30);/mob/living/simple_mob/animal/sif/diyaab,
|
||||
prob(15);/mob/living/simple_mob/animal/passive/crab,
|
||||
prob(15);/mob/living/simple_mob/animal/passive/penguin,
|
||||
prob(15);/mob/living/simple_animal/mouse,
|
||||
prob(15);/mob/living/simple_animal/corgi/tamaskan,
|
||||
prob(20);/mob/living/simple_animal/giant_crab)
|
||||
prob(20);/mob/living/simple_mob/animal/sif/hooligan_crab)
|
||||
|
||||
/obj/random/mob/sif/hostile
|
||||
name = "Random Hostile Sif Animal"
|
||||
@@ -97,9 +97,9 @@
|
||||
icon_state = "frost"
|
||||
|
||||
/obj/random/mob/sif/hostile/item_to_spawn()
|
||||
return pick(prob(22);/mob/living/simple_animal/hostile/savik,
|
||||
prob(33);/mob/living/simple_animal/hostile/giant_spider/frost,
|
||||
prob(45);/mob/living/simple_animal/hostile/shantak)
|
||||
return pick(prob(22);/mob/living/simple_mob/animal/sif/savik,
|
||||
prob(33);/mob/living/simple_mob/animal/giant_spider/frost,
|
||||
prob(45);/mob/living/simple_mob/animal/sif/shantak)
|
||||
|
||||
/obj/random/mob/spider
|
||||
name = "Random Spider" //Spiders should patrol where they spawn.
|
||||
@@ -110,9 +110,9 @@
|
||||
mob_wander_distance = 4
|
||||
|
||||
/obj/random/mob/spider/item_to_spawn()
|
||||
return pick(prob(22);/mob/living/simple_animal/hostile/giant_spider/nurse,
|
||||
prob(33);/mob/living/simple_animal/hostile/giant_spider/hunter,
|
||||
prob(45);/mob/living/simple_animal/hostile/giant_spider)
|
||||
return pick(prob(22);/mob/living/simple_mob/animal/giant_spider/nurse,
|
||||
prob(33);/mob/living/simple_mob/animal/giant_spider/hunter,
|
||||
prob(45);/mob/living/simple_mob/animal/giant_spider)
|
||||
|
||||
/obj/random/mob/spider/nurse
|
||||
name = "Random Nurse Spider"
|
||||
@@ -123,8 +123,8 @@
|
||||
mob_wander_distance = 4
|
||||
|
||||
/obj/random/mob/spider/nurse/item_to_spawn()
|
||||
return pick(prob(22);/mob/living/simple_animal/hostile/giant_spider/nurse/hat,
|
||||
prob(45);/mob/living/simple_animal/hostile/giant_spider/nurse)
|
||||
return pick(prob(22);/mob/living/simple_mob/animal/giant_spider/nurse/hat,
|
||||
prob(45);/mob/living/simple_mob/animal/giant_spider/nurse)
|
||||
|
||||
/obj/random/mob/spider/mutant
|
||||
name = "Random Mutant Spider"
|
||||
@@ -133,15 +133,15 @@
|
||||
|
||||
/obj/random/mob/spider/mutant/item_to_spawn()
|
||||
return pick(prob(5);/obj/random/mob/spider,
|
||||
prob(10);/mob/living/simple_animal/hostile/giant_spider/webslinger,
|
||||
prob(10);/mob/living/simple_animal/hostile/giant_spider/carrier,
|
||||
prob(33);/mob/living/simple_animal/hostile/giant_spider/lurker,
|
||||
prob(33);/mob/living/simple_animal/hostile/giant_spider/tunneler,
|
||||
prob(40);/mob/living/simple_animal/hostile/giant_spider/pepper,
|
||||
prob(20);/mob/living/simple_animal/hostile/giant_spider/thermic,
|
||||
prob(40);/mob/living/simple_animal/hostile/giant_spider/electric,
|
||||
prob(1);/mob/living/simple_animal/hostile/giant_spider/phorogenic,
|
||||
prob(40);/mob/living/simple_animal/hostile/giant_spider/frost)
|
||||
prob(10);/mob/living/simple_mob/animal/giant_spider/webslinger,
|
||||
prob(10);/mob/living/simple_mob/animal/giant_spider/carrier,
|
||||
prob(33);/mob/living/simple_mob/animal/giant_spider/lurker,
|
||||
prob(33);/mob/living/simple_mob/animal/giant_spider/tunneler,
|
||||
prob(40);/mob/living/simple_mob/animal/giant_spider/pepper,
|
||||
prob(20);/mob/living/simple_mob/animal/giant_spider/thermic,
|
||||
prob(40);/mob/living/simple_mob/animal/giant_spider/electric,
|
||||
prob(1);/mob/living/simple_mob/animal/giant_spider/phorogenic,
|
||||
prob(40);/mob/living/simple_mob/animal/giant_spider/frost)
|
||||
|
||||
/obj/random/mob/robotic
|
||||
name = "Random Robot Mob"
|
||||
@@ -158,17 +158,17 @@
|
||||
mob_retaliate = 1
|
||||
|
||||
/obj/random/mob/robotic/item_to_spawn() //Hivebots have a total number of 'lots' equal to the lesser drone, at 60.
|
||||
return pick(prob(60);/mob/living/simple_animal/hostile/malf_drone/lesser,
|
||||
prob(50);/mob/living/simple_animal/hostile/malf_drone,
|
||||
return pick(prob(60);/mob/living/simple_mob/mechanical/combat_drone/lesser,
|
||||
prob(50);/mob/living/simple_mob/mechanical/combat_drone,
|
||||
prob(15);/mob/living/simple_animal/hostile/mecha/malf_drone,
|
||||
prob(10);/mob/living/simple_animal/hostile/hivebot,
|
||||
prob(15);/mob/living/simple_animal/hostile/hivebot/swarm,
|
||||
prob(10);/mob/living/simple_animal/hostile/hivebot/range,
|
||||
prob(5);/mob/living/simple_animal/hostile/hivebot/range/rapid,
|
||||
prob(5);/mob/living/simple_animal/hostile/hivebot/range/ion,
|
||||
prob(5);/mob/living/simple_animal/hostile/hivebot/range/laser,
|
||||
prob(5);/mob/living/simple_animal/hostile/hivebot/range/strong,
|
||||
prob(5);/mob/living/simple_animal/hostile/hivebot/range/guard)
|
||||
prob(10);/mob/living/simple_mob/mechanical/hivebot,
|
||||
prob(15);/mob/living/simple_mob/mechanical/hivebot/swarm,
|
||||
prob(10);/mob/living/simple_mob/mechanical/hivebot/ranged_damage,
|
||||
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid,
|
||||
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion,
|
||||
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser,
|
||||
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong,
|
||||
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard)
|
||||
|
||||
/obj/random/mob/robotic/hivebot
|
||||
name = "Random Hivebot"
|
||||
@@ -178,11 +178,11 @@
|
||||
mob_faction = "hivebot"
|
||||
|
||||
/obj/random/mob/robotic/hivebot/item_to_spawn()
|
||||
return pick(prob(10);/mob/living/simple_animal/hostile/hivebot,
|
||||
prob(15);/mob/living/simple_animal/hostile/hivebot/swarm,
|
||||
prob(10);/mob/living/simple_animal/hostile/hivebot/range,
|
||||
prob(5);/mob/living/simple_animal/hostile/hivebot/range/rapid,
|
||||
prob(5);/mob/living/simple_animal/hostile/hivebot/range/ion,
|
||||
prob(5);/mob/living/simple_animal/hostile/hivebot/range/laser,
|
||||
prob(5);/mob/living/simple_animal/hostile/hivebot/range/strong,
|
||||
prob(5);/mob/living/simple_animal/hostile/hivebot/range/guard)
|
||||
return pick(prob(10);/mob/living/simple_mob/mechanical/hivebot,
|
||||
prob(15);/mob/living/simple_mob/mechanical/hivebot/swarm,
|
||||
prob(10);/mob/living/simple_mob/mechanical/hivebot/ranged_damage,
|
||||
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid,
|
||||
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion,
|
||||
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser,
|
||||
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong,
|
||||
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard)
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/catwalk/attackby(obj/item/C as obj, mob/user as mob)
|
||||
if (istype(C, /obj/item/weapon/weldingtool))
|
||||
if(istype(C, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = C
|
||||
if(WT.isOn())
|
||||
if(WT.remove_fuel(0, user))
|
||||
@@ -76,7 +76,7 @@
|
||||
new /obj/item/stack/rods(src.loc)
|
||||
new /obj/structure/lattice(src.loc)
|
||||
qdel(src)
|
||||
if(istype(C, /obj/item/weapon/screwdriver))
|
||||
if(C.is_screwdriver())
|
||||
if(health < maxhealth)
|
||||
to_chat(user, "<span class='notice'>You begin repairing \the [src.name] with \the [C.name].</span>")
|
||||
if(do_after(user, 20, src))
|
||||
|
||||
@@ -260,7 +260,7 @@
|
||||
src.update_icon()
|
||||
for(var/mob/M in viewers(src))
|
||||
M.show_message("<span class='warning'>[src] has been [welded?"welded shut":"unwelded"] by [user.name].</span>", 3, "You hear welding.", 2)
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
else if(W.is_wrench())
|
||||
if(welded)
|
||||
if(anchored)
|
||||
user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
starts_with = list(/obj/item/weapon/material/twohanded/fireaxe)
|
||||
|
||||
/obj/structure/closet/fireaxecabinet/New()
|
||||
/obj/structure/closet/fireaxecabinet/initialize()
|
||||
..()
|
||||
fireaxe = locate() in contents
|
||||
|
||||
|
||||
@@ -9,6 +9,6 @@
|
||||
/obj/item/clothing/mask/breath,
|
||||
/obj/item/clothing/head/helmet/space/void,
|
||||
/obj/item/clothing/suit/space/void,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/cell,
|
||||
/obj/item/device/multitool)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
/obj/item/clothing/head/greenbandana,
|
||||
/obj/item/weapon/material/minihoe,
|
||||
/obj/item/weapon/material/knife/machete/hatchet,
|
||||
/obj/item/weapon/wirecutters/clippers,
|
||||
/obj/item/weapon/tool/wirecutters/clippers,
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/hydro,
|
||||
/obj/item/clothing/shoes/boots/winter/hydro)
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/device/radio/off,
|
||||
/obj/random/medical,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
/obj/item/weapon/storage/box/freezer,
|
||||
/obj/item/clothing/accessory/storage/white_vest,
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
spark_system.start()
|
||||
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
else if(W.is_wrench())
|
||||
if(welded)
|
||||
if(anchored)
|
||||
user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
/obj/item/weapon/storage/box/holobadge/hos,
|
||||
/obj/item/clothing/accessory/badge/holo/hos,
|
||||
/obj/item/weapon/reagent_containers/spray/pepper,
|
||||
/obj/item/weapon/crowbar/red,
|
||||
/obj/item/weapon/tool/crowbar/red,
|
||||
/obj/item/weapon/storage/box/flashbangs,
|
||||
/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/device/flash,
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
/obj/item/clothing/under/syndicate,
|
||||
/obj/item/clothing/head/helmet/space/void/merc,
|
||||
/obj/item/clothing/suit/space/void/merc,
|
||||
/obj/item/weapon/crowbar/red,
|
||||
/obj/item/weapon/tool/crowbar/red,
|
||||
/obj/item/weapon/cell/high,
|
||||
/obj/item/weapon/card/id/syndicate,
|
||||
/obj/item/device/multitool,
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
/obj/structure/closet/syndicate/suit
|
||||
desc = "It's a storage unit for voidsuits."
|
||||
|
||||
|
||||
starts_with = list(
|
||||
/obj/item/weapon/tank/jetpack/oxygen,
|
||||
/obj/item/clothing/shoes/magboots,
|
||||
|
||||
@@ -113,15 +113,15 @@
|
||||
if(prob(70))
|
||||
starts_with += /obj/item/device/flashlight
|
||||
if(prob(70))
|
||||
starts_with += /obj/item/weapon/screwdriver
|
||||
starts_with += /obj/item/weapon/tool/screwdriver
|
||||
if(prob(70))
|
||||
starts_with += /obj/item/weapon/wrench
|
||||
starts_with += /obj/item/weapon/tool/wrench
|
||||
if(prob(70))
|
||||
starts_with += /obj/item/weapon/weldingtool
|
||||
if(prob(70))
|
||||
starts_with += /obj/item/weapon/crowbar
|
||||
starts_with += /obj/item/weapon/tool/crowbar
|
||||
if(prob(70))
|
||||
starts_with += /obj/item/weapon/wirecutters
|
||||
starts_with += /obj/item/weapon/tool/wirecutters
|
||||
if(prob(70))
|
||||
starts_with += /obj/item/device/t_scanner
|
||||
if(prob(20))
|
||||
@@ -202,7 +202,7 @@
|
||||
icon_closed = "hydrant"
|
||||
icon_opened = "hydrant_open"
|
||||
plane = TURF_PLANE
|
||||
layer = ABOVE_TURF_LAYER
|
||||
layer = ABOVE_TURF_LAYER
|
||||
anchored = 1
|
||||
density = 0
|
||||
wall_mounted = 1
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
/obj/structure/closet/walllocker/emerglocker
|
||||
name = "emergency locker"
|
||||
desc = "A wall mounted locker with emergency supplies."
|
||||
var/list/spawnitems = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/crowbar/red)
|
||||
var/list/spawnitems = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/tool/crowbar/red)
|
||||
var/amount = 2 // spawns each items X times.
|
||||
icon_state = "emerg"
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
user.drop_item()
|
||||
W.forceMove(src)
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/wirecutters))
|
||||
else if(W.is_wirecutter())
|
||||
if(rigged)
|
||||
user << "<span class='notice'>You cut away the wiring.</span>"
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
@@ -191,7 +191,7 @@
|
||||
src.toggle(user)
|
||||
|
||||
/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(is_type_in_list(W, list(/obj/item/weapon/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/wirecutters)))
|
||||
if(is_type_in_list(W, list(/obj/item/weapon/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/tool/wirecutters)))
|
||||
return ..()
|
||||
if(istype(W, /obj/item/weapon/melee/energy/blade))
|
||||
emag_act(INFINITY, user)
|
||||
|
||||
@@ -17,15 +17,20 @@
|
||||
I.forceMove(src)
|
||||
|
||||
/obj/structure/largecrate/attack_hand(mob/user as mob)
|
||||
user << "<span class='notice'>You need a crowbar to pry this open!</span>"
|
||||
to_chat(user, "<span class='notice'>You need a crowbar to pry this open!</span>")
|
||||
return
|
||||
|
||||
/obj/structure/largecrate/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
to_chat(user, "<span class='notice'>You can't open this here!</span>")
|
||||
if(W.is_crowbar())
|
||||
new /obj/item/stack/material/wood(src)
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
for(var/atom/movable/AM in contents)
|
||||
if(AM.simulated) AM.forceMove(T)
|
||||
if(AM.simulated)
|
||||
AM.forceMove(T)
|
||||
|
||||
user.visible_message("<span class='notice'>[user] pries \the [src] open.</span>", \
|
||||
"<span class='notice'>You pry open \the [src].</span>", \
|
||||
"<span class='notice'>You hear splitting wood.</span>")
|
||||
@@ -42,7 +47,7 @@
|
||||
icon_state = "mulecrate"
|
||||
|
||||
/obj/structure/largecrate/hoverpod/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
if(W.is_crowbar())
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME
|
||||
var/obj/mecha/working/hoverpod/H = new (loc)
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
layer = OBJ_LAYER
|
||||
|
||||
/obj/structure/curtain/attackby(obj/item/P, mob/user)
|
||||
if(istype(P, /obj/item/weapon/wirecutters))
|
||||
if(P.is_wirecutter())
|
||||
playsound(src, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You start to cut the shower curtains.</span>"
|
||||
if(do_after(user, 10))
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
to_chat(user, "<span class='notice'>You need more welding fuel.</span>")
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench) && state == 0)
|
||||
else if(W.is_wrench() && state == 0)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
if(anchored)
|
||||
user.visible_message("[user] begins unsecuring the airlock assembly from the floor.", "You starts unsecuring the airlock assembly from the floor.")
|
||||
@@ -223,7 +223,7 @@
|
||||
src.state = 1
|
||||
to_chat(user, "<span class='notice'>You wire the airlock.</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1 )
|
||||
else if(W.is_wirecutter() && state == 1 )
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.")
|
||||
|
||||
@@ -245,7 +245,7 @@
|
||||
src.state = 2
|
||||
src.electronics = W
|
||||
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && state == 2 )
|
||||
else if(W.is_crowbar() && state == 2 )
|
||||
//This should never happen, but just in case I guess
|
||||
if (!electronics)
|
||||
to_chat(user, "<span class='notice'>There was nothing to remove.</span>")
|
||||
@@ -287,7 +287,7 @@
|
||||
to_chat(user, "<span class='notice'>You installed [material_display_name(material_name)] plating into the airlock assembly.</span>")
|
||||
glass = material_name
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 )
|
||||
else if(W.is_screwdriver() && state == 2 )
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
to_chat(user, "<span class='notice'>Now finishing the airlock.</span>")
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/bed/chair/e_chair/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(W.is_wrench())
|
||||
var/obj/structure/bed/chair/C = new /obj/structure/bed/chair(loc)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
C.set_dir(dir)
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
user << "<span class='notice'>You place [O] in [src].</span>"
|
||||
else
|
||||
opened = !opened
|
||||
if(istype(O, /obj/item/weapon/wrench))
|
||||
if(O.is_wrench())
|
||||
if(!has_extinguisher)
|
||||
user << "<span class='notice'>You start to unwrench the extinguisher cabinet.</span>"
|
||||
playsound(src.loc, O.usesound, 50, 1)
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
var/list/qualifiers = list("with ease", "without any trouble", "with great effort")
|
||||
|
||||
/obj/structure/fitness/weightlifter/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(W.is_wrench())
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1)
|
||||
weight = ((weight) % qualifiers.len) + 1
|
||||
to_chat(user, "You set the machine's weight level to [weight].")
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
anchored = 1
|
||||
density = 1
|
||||
pixel_x = -16
|
||||
plane = MOB_LAYER // You know what, let's play it safe.
|
||||
plane = MOB_PLANE // You know what, let's play it safe.
|
||||
layer = ABOVE_MOB_LAYER
|
||||
var/base_state = null // Used for stumps.
|
||||
var/health = 200 // Used for chopping down trees.
|
||||
@@ -52,12 +52,12 @@
|
||||
animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
|
||||
|
||||
// Used when the tree gets hurt.
|
||||
/obj/structure/flora/tree/proc/adjust_health(var/amount, var/is_ranged = FALSE)
|
||||
/obj/structure/flora/tree/proc/adjust_health(var/amount, var/damage_wood = FALSE)
|
||||
if(is_stump)
|
||||
return
|
||||
|
||||
// Bullets and lasers ruin some of the wood
|
||||
if(is_ranged && product_amount > 0)
|
||||
if(damage_wood && product_amount > 0)
|
||||
var/wood = initial(product_amount)
|
||||
product_amount -= round(wood * (abs(amount)/max_health))
|
||||
|
||||
@@ -90,12 +90,16 @@
|
||||
set_light(0)
|
||||
|
||||
/obj/structure/flora/tree/ex_act(var/severity)
|
||||
adjust_health(-(max_health / severity))
|
||||
adjust_health(-(max_health / severity), TRUE)
|
||||
|
||||
/obj/structure/flora/tree/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.get_structure_damage())
|
||||
adjust_health(-Proj.get_structure_damage(), TRUE)
|
||||
|
||||
/obj/structure/flora/tree/tesla_act(power, explosive)
|
||||
adjust_health(-power / 100, TRUE) // Kills most trees in one lightning strike.
|
||||
..()
|
||||
|
||||
/obj/structure/flora/tree/get_description_interaction()
|
||||
var/list/results = list()
|
||||
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/obj/structure/ghost_pod/manual/corgi
|
||||
name = "glowing rune"
|
||||
desc = "This rune slowly lights up and goes dim in a repeating pattern, like a slow heartbeat. It's almost as if it's calling out to you to touch it..."
|
||||
description_info = "This will summon some manner of creature through quite dubious means. The creature will be controlled by a player."
|
||||
icon_state = "corgirune"
|
||||
icon_state_opened = "corgirune-inert"
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
ghost_query_type = /datum/ghost_query/corgi_rune
|
||||
confirm_before_open = TRUE
|
||||
|
||||
/obj/structure/ghost_pod/manual/corgi/trigger()
|
||||
..("<span class='warning'>\The [usr] places their hand on the rune!</span>", "is attempting to summon a corgi.")
|
||||
|
||||
/obj/structure/ghost_pod/manual/corgi/create_occupant(var/mob/M)
|
||||
lightning_strike(get_turf(src), cosmetic = TRUE)
|
||||
density = FALSE
|
||||
var/mob/living/simple_animal/corgi/R = new(get_turf(src))
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(R)
|
||||
to_chat(M, "<span class='notice'>You are a <b>Corgi</b>! Woof!</span>")
|
||||
R.ckey = M.ckey
|
||||
visible_message("<span class='warning'>With a bright flash of light, \the [src] disappears, and in its place stands a small corgi.</span>")
|
||||
log_and_message_admins("successfully touched \a [src] and summoned a corgi.")
|
||||
..()
|
||||
|
||||
/obj/structure/ghost_pod/manual/cursedblade
|
||||
name = "abandoned blade"
|
||||
desc = "A red crystal blade that someone jammed deep into a stone. If you try hard enough, you might be able to remove it."
|
||||
icon_state = "soulblade-embedded"
|
||||
icon_state_opened = "soulblade-released"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
ghost_query_type = /datum/ghost_query/cursedblade
|
||||
confirm_before_open = TRUE
|
||||
|
||||
/obj/structure/ghost_pod/manual/cursedblade/trigger()
|
||||
..("<span class='warning'>\The [usr] attempts to pull out the sword!</span>", "is activating a cursed blade.")
|
||||
|
||||
/obj/structure/ghost_pod/manual/cursedblade/create_occupant(var/mob/M)
|
||||
density = FALSE
|
||||
var/obj/item/weapon/melee/cursedblade/R = new(get_turf(src))
|
||||
to_chat(M, "<span class='notice'>You are a <b>Cursed Sword</b>, discovered by a hapless explorer. \
|
||||
You were once an explorer yourself, when one day you discovered a strange sword made from a red crystal. As soon as you touched it,\
|
||||
your body was reduced to ashes and your soul was cursed to remain trapped in the blade forever. \
|
||||
Now it is up to you to decide whether you want to be a faithful companion, or a bitter prisoner of the blade.</span>")
|
||||
R.ghost_inhabit(M)
|
||||
visible_message("<span class='warning'>The blade shines brightly for a brief moment as [usr] pulls it out of the stone!</span>")
|
||||
log_and_message_admins("successfully acquired a cursed sword.")
|
||||
..()
|
||||
@@ -58,54 +58,4 @@
|
||||
R.ckey = M.ckey
|
||||
visible_message("<span class='warning'>As \the [src] opens, the eyes of the robot flicker as it is activated.</span>")
|
||||
R.Namepick()
|
||||
..()
|
||||
|
||||
/obj/structure/ghost_pod/manual/corgi
|
||||
name = "glowing rune"
|
||||
desc = "This rune slowly lights up and goes dim in a repeating pattern, like a slow heartbeat. It's almost as if it's calling out to you to touch it..."
|
||||
description_info = "This will summon some manner of creature through quite dubious means. The creature will be controlled by a player."
|
||||
icon_state = "corgirune"
|
||||
icon_state_opened = "corgirune-inert"
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
ghost_query_type = /datum/ghost_query/corgi_rune
|
||||
confirm_before_open = TRUE
|
||||
|
||||
/obj/structure/ghost_pod/manual/corgi/trigger()
|
||||
..("<span class='warning'>\The [usr] places their hand on the rune!</span>", "is attempting to summon a corgi.")
|
||||
|
||||
/obj/structure/ghost_pod/manual/corgi/create_occupant(var/mob/M)
|
||||
density = FALSE
|
||||
var/mob/living/simple_animal/corgi/R = new(get_turf(src))
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(R)
|
||||
to_chat(M, "<span class='notice'>You are a <b>Corgi</b>! Woof!</span>")
|
||||
R.ckey = M.ckey
|
||||
visible_message("<span class='warning'>With a bright flash of light, \the [src] disappears, and in its place stands a small corgi.</span>")
|
||||
log_and_message_admins("successfully touched \a [src] and summoned a corgi.")
|
||||
..()
|
||||
|
||||
/obj/structure/ghost_pod/manual/cursedblade
|
||||
name = "abandoned blade"
|
||||
desc = "A red crystal blade that someone jammed deep into a stone. If you try hard enough, you might be able to remove it."
|
||||
icon_state = "soulblade-embedded"
|
||||
icon_state_opened = "soulblade-released"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
ghost_query_type = /datum/ghost_query/cursedblade
|
||||
confirm_before_open = TRUE
|
||||
|
||||
/obj/structure/ghost_pod/manual/cursedblade/trigger()
|
||||
..("<span class='warning'>\The [usr] attempts to pull out the sword!</span>", "is activating a cursed blade.")
|
||||
|
||||
/obj/structure/ghost_pod/manual/cursedblade/create_occupant(var/mob/M)
|
||||
density = FALSE
|
||||
var/obj/item/weapon/melee/cursedblade/R = new(get_turf(src))
|
||||
to_chat(M, "<span class='notice'>You are a <b>Cursed Sword</b>, discovered by a hapless explorer. \
|
||||
You were once an explorer yourself, when one day you discovered a strange sword made from a red crystal. As soon as you touched it,\
|
||||
your body was reduced to ashes and your soul was cursed to remain trapped in the blade forever. \
|
||||
Now it is up to you to decide whether you want to be a faithful companion, or a bitter prisoner of the blade.</span>")
|
||||
R.ghost_inhabit(M)
|
||||
visible_message("<span class='warning'>The blade shines brightly for a brief moment as [usr] pulls it out of the stone!</span>")
|
||||
log_and_message_admins("successfully acquired a cursed sword.")
|
||||
..()
|
||||
@@ -144,7 +144,7 @@
|
||||
reinforce_girder()
|
||||
|
||||
/obj/structure/girder/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench) && state == 0)
|
||||
if(W.is_wrench() && state == 0)
|
||||
if(anchored && !reinf_material)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
to_chat(user, "<span class='notice'>Now disassembling the girder...</span>")
|
||||
@@ -170,7 +170,7 @@
|
||||
to_chat(user, "<span class='notice'>You drill through the girder!</span>")
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
else if(W.is_screwdriver())
|
||||
if(state == 2)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
to_chat(user, "<span class='notice'>Now unsecuring support struts...</span>")
|
||||
@@ -183,7 +183,7 @@
|
||||
reinforcing = !reinforcing
|
||||
to_chat(user, "<span class='notice'>\The [src] can now be [reinforcing? "reinforced" : "constructed"]!</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1)
|
||||
else if(W.is_wirecutter() && state == 1)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
to_chat(user, "<span class='notice'>Now removing support struts...</span>")
|
||||
if(do_after(user,40 * W.toolspeed))
|
||||
@@ -193,7 +193,7 @@
|
||||
reinf_material = null
|
||||
reset_girder()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored)
|
||||
else if(W.is_crowbar() && state == 0 && anchored)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
to_chat(user, "<span class='notice'>Now dislodging the girder...</span>")
|
||||
if(do_after(user, 40 * W.toolspeed))
|
||||
@@ -329,7 +329,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/girder/cult/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(W.is_wrench())
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
to_chat(user, "<span class='notice'>Now disassembling the girder...</span>")
|
||||
if(do_after(user,40 * W.toolspeed))
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
return 1
|
||||
|
||||
/obj/structure/gravemarker/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(W.is_screwdriver())
|
||||
var/carving_1 = sanitizeSafe(input(user, "Who is \the [src.name] for?", "Gravestone Naming", null) as text, MAX_NAME_LEN)
|
||||
if(carving_1)
|
||||
user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
|
||||
@@ -72,7 +72,7 @@
|
||||
epitaph += carving_2
|
||||
update_icon()
|
||||
return
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(W.is_wrench())
|
||||
user.visible_message("[user] starts taking down \the [src.name].", "You start taking down \the [src.name].")
|
||||
if(do_after(user, material.hardness * W.toolspeed))
|
||||
user.visible_message("[user] takes down \the [src.name].", "You take down \the [src.name].")
|
||||
|
||||
@@ -94,12 +94,12 @@
|
||||
spawn(0) healthcheck() //spawn to make sure we return properly if the grille is deleted
|
||||
|
||||
/obj/structure/grille/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(iswirecutter(W))
|
||||
if(W.is_wirecutter())
|
||||
if(!shock(user, 100))
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
new /obj/item/stack/rods(get_turf(src), destroyed ? 1 : 2)
|
||||
qdel(src)
|
||||
else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored))
|
||||
else if((W.is_screwdriver()) && (istype(loc, /turf/simulated) || anchored))
|
||||
if(!shock(user, 90))
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
anchored = !anchored
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
health -= proj_damage
|
||||
..()
|
||||
if(health <= 0)
|
||||
deflate(1)
|
||||
puncture()
|
||||
return
|
||||
|
||||
/obj/structure/inflatable/ex_act(severity)
|
||||
@@ -59,15 +59,15 @@
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
deflate(1)
|
||||
puncture()
|
||||
return
|
||||
if(3.0)
|
||||
if(prob(50))
|
||||
deflate(1)
|
||||
puncture()
|
||||
return
|
||||
|
||||
/obj/structure/inflatable/blob_act()
|
||||
deflate(1)
|
||||
puncture()
|
||||
|
||||
/obj/structure/inflatable/attack_hand(mob/user as mob)
|
||||
add_fingerprint(user)
|
||||
@@ -78,7 +78,7 @@
|
||||
|
||||
if (can_puncture(W))
|
||||
visible_message("<span class='danger'>[user] pierces [src] with [W]!</span>")
|
||||
deflate(1)
|
||||
puncture()
|
||||
if(W.damtype == BRUTE || W.damtype == BURN)
|
||||
hit(W.force)
|
||||
..()
|
||||
@@ -89,7 +89,7 @@
|
||||
if(sound_effect)
|
||||
playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
|
||||
if(health <= 0)
|
||||
deflate(1)
|
||||
puncture()
|
||||
|
||||
/obj/structure/inflatable/CtrlClick()
|
||||
hand_deflate()
|
||||
@@ -102,20 +102,21 @@
|
||||
R.add_fingerprint(user)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/inflatable/proc/deflate(var/violent=0)
|
||||
/obj/structure/inflatable/proc/deflate()
|
||||
playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
|
||||
if(violent)
|
||||
visible_message("[src] rapidly deflates!")
|
||||
var/obj/item/inflatable/torn/R = new /obj/item/inflatable/torn(loc)
|
||||
//user << "<span class='notice'>You slowly deflate the inflatable wall.</span>"
|
||||
visible_message("[src] slowly deflates.")
|
||||
spawn(50)
|
||||
var/obj/item/inflatable/R = new /obj/item/inflatable(loc)
|
||||
src.transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
else
|
||||
//user << "<span class='notice'>You slowly deflate the inflatable wall.</span>"
|
||||
visible_message("[src] slowly deflates.")
|
||||
spawn(50)
|
||||
var/obj/item/inflatable/R = new /obj/item/inflatable(loc)
|
||||
src.transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/inflatable/proc/puncture()
|
||||
playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
|
||||
visible_message("[src] rapidly deflates!")
|
||||
var/obj/item/inflatable/torn/R = new /obj/item/inflatable/torn(loc)
|
||||
src.transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/inflatable/verb/hand_deflate()
|
||||
set name = "Deflate"
|
||||
@@ -133,7 +134,7 @@
|
||||
user.do_attack_animation(src)
|
||||
if(health <= 0)
|
||||
user.visible_message("<span class='danger'>[user] [attack_verb] open the [src]!</span>")
|
||||
spawn(1) deflate(1)
|
||||
spawn(1) puncture()
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] [attack_verb] at [src]!</span>")
|
||||
return 1
|
||||
@@ -221,19 +222,20 @@
|
||||
else
|
||||
icon_state = "door_closed"
|
||||
|
||||
/obj/structure/inflatable/door/deflate(var/violent=0)
|
||||
/obj/structure/inflatable/door/deflate()
|
||||
playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
|
||||
if(violent)
|
||||
visible_message("[src] rapidly deflates!")
|
||||
var/obj/item/inflatable/door/torn/R = new /obj/item/inflatable/door/torn(loc)
|
||||
visible_message("[src] slowly deflates.")
|
||||
spawn(50)
|
||||
var/obj/item/inflatable/door/R = new /obj/item/inflatable/door(loc)
|
||||
src.transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
else
|
||||
visible_message("[src] slowly deflates.")
|
||||
spawn(50)
|
||||
var/obj/item/inflatable/door/R = new /obj/item/inflatable/door(loc)
|
||||
src.transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/inflatable/door/puncture()
|
||||
playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
|
||||
visible_message("[src] rapidly deflates!")
|
||||
var/obj/item/inflatable/door/torn/R = new /obj/item/inflatable/door/torn(loc)
|
||||
src.transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/inflatable/torn
|
||||
name = "torn inflatable wall"
|
||||
|
||||
@@ -365,9 +365,9 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
/obj/item/device/gps,
|
||||
/obj/item/device/geiger,
|
||||
/obj/item/device/mass_spectrometer,
|
||||
/obj/item/weapon/wrench,
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/wirecutters,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/mecha_parts/mecha_equipment/generator,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,
|
||||
@@ -450,11 +450,11 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
uncommon_loot = list(
|
||||
/obj/item/device/multitool/alien,
|
||||
/obj/item/stack/cable_coil/alien,
|
||||
/obj/item/weapon/crowbar/alien,
|
||||
/obj/item/weapon/screwdriver/alien,
|
||||
/obj/item/weapon/tool/crowbar/alien,
|
||||
/obj/item/weapon/tool/screwdriver/alien,
|
||||
/obj/item/weapon/weldingtool/alien,
|
||||
/obj/item/weapon/wirecutters/alien,
|
||||
/obj/item/weapon/wrench/alien
|
||||
/obj/item/weapon/tool/wirecutters/alien,
|
||||
/obj/item/weapon/tool/wrench/alien
|
||||
)
|
||||
rare_loot = list(
|
||||
/obj/item/weapon/storage/belt/utility/alien/full
|
||||
@@ -496,11 +496,11 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
common_loot = list(
|
||||
/obj/item/device/multitool/alien,
|
||||
/obj/item/stack/cable_coil/alien,
|
||||
/obj/item/weapon/crowbar/alien,
|
||||
/obj/item/weapon/screwdriver/alien,
|
||||
/obj/item/weapon/tool/crowbar/alien,
|
||||
/obj/item/weapon/tool/screwdriver/alien,
|
||||
/obj/item/weapon/weldingtool/alien,
|
||||
/obj/item/weapon/wirecutters/alien,
|
||||
/obj/item/weapon/wrench/alien,
|
||||
/obj/item/weapon/tool/wirecutters/alien,
|
||||
/obj/item/weapon/tool/wrench/alien,
|
||||
/obj/item/weapon/surgical/FixOVein/alien,
|
||||
/obj/item/weapon/surgical/bone_clamp/alien,
|
||||
/obj/item/weapon/surgical/cautery/alien,
|
||||
|
||||
@@ -49,24 +49,24 @@
|
||||
..()
|
||||
|
||||
/obj/structure/mirror/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
if(I.is_wrench())
|
||||
if(!glass)
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
if(do_after(user, 20 * I.toolspeed))
|
||||
user << "<span class='notice'>You unfasten the frame.</span>"
|
||||
to_chat(user, "<span class='notice'>You unfasten the frame.</span>")
|
||||
new /obj/item/frame/mirror( src.loc )
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
if(I.is_wrench())
|
||||
if(shattered && glass)
|
||||
user << "<span class='notice'>The broken glass falls out.</span>"
|
||||
to_chat(user, "<span class='notice'>The broken glass falls out.</span>")
|
||||
icon_state = "mirror_frame"
|
||||
glass = !glass
|
||||
new /obj/item/weapon/material/shard( src.loc )
|
||||
return
|
||||
if(!shattered && glass)
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the glass.</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the glass.</span>")
|
||||
glass = !glass
|
||||
icon_state = "mirror_frame"
|
||||
new /obj/item/stack/material/glass( src.loc, 2 )
|
||||
@@ -76,15 +76,15 @@
|
||||
if(!glass)
|
||||
var/obj/item/stack/material/glass/G = I
|
||||
if (G.get_amount() < 2)
|
||||
user << "<span class='warning'>You need two sheets of glass to add them to the frame.</span>"
|
||||
to_chat(user, "<span class='warning'>You need two sheets of glass to add them to the frame.</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start to add the glass to the frame.</span>"
|
||||
to_chat(user, "<span class='notice'>You start to add the glass to the frame.</span>")
|
||||
if(do_after(user, 20))
|
||||
if (G.use(2))
|
||||
shattered = 0
|
||||
glass = 1
|
||||
icon_state = "mirror"
|
||||
user << "<span class='notice'>You add the glass to the frame.</span>"
|
||||
to_chat(user, "<span class='notice'>You add the glass to the frame.</span>")
|
||||
return
|
||||
|
||||
if(shattered && glass)
|
||||
|
||||
@@ -429,8 +429,8 @@
|
||||
return
|
||||
|
||||
/obj/structure/device/piano/attackby(obj/item/O as obj, mob/user as mob)
|
||||
if (istype(O, /obj/item/weapon/wrench))
|
||||
if (anchored)
|
||||
if(O.is_wrench())
|
||||
if(anchored)
|
||||
playsound(src.loc, O.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to loosen \the [src]'s casters...</span>"
|
||||
if (do_after(user, 40 * O.toolspeed))
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
user << "<span class='notice'>You pin the paper to the noticeboard.</span>"
|
||||
else
|
||||
user << "<span class='notice'>You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached.</span>"
|
||||
if(istype(O, /obj/item/weapon/wrench))
|
||||
if(O.is_wrench())
|
||||
user << "<span class='notice'>You start to unwrench the noticeboard.</span>"
|
||||
playsound(src.loc, O.usesound, 50, 1)
|
||||
if(do_after(user, 15 * O.toolspeed))
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
)
|
||||
|
||||
/obj/structure/plasticflaps/attackby(obj/item/P, mob/user)
|
||||
if(istype(P, /obj/item/weapon/wirecutters))
|
||||
if(P.is_wirecutter())
|
||||
playsound(src, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You start to cut the plastic flaps.</span>"
|
||||
if(do_after(user, 10 * P.toolspeed))
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
|
||||
/obj/structure/railing/attackby(obj/item/W as obj, mob/user as mob)
|
||||
// Dismantle
|
||||
if(istype(W, /obj/item/weapon/wrench) && !anchored)
|
||||
if(W.is_wrench() && !anchored)
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
if(do_after(user, 20, src))
|
||||
user.visible_message("<span class='notice'>\The [user] dismantles \the [src].</span>", "<span class='notice'>You dismantle \the [src].</span>")
|
||||
@@ -217,7 +217,7 @@
|
||||
return
|
||||
|
||||
// Install
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(W.is_screwdriver())
|
||||
user.visible_message(anchored ? "<span class='notice'>\The [user] begins unscrewing \the [src].</span>" : "<span class='notice'>\The [user] begins fasten \the [src].</span>" )
|
||||
playsound(loc, W.usesound, 75, 1)
|
||||
if(do_after(user, 10, src))
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
return
|
||||
|
||||
/obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction
|
||||
if(istype(tool, /obj/item/weapon/screwdriver) && !istype(src, /obj/structure/sign/double))
|
||||
if(tool.is_screwdriver() && !istype(src, /obj/structure/sign/double))
|
||||
playsound(src, tool.usesound, 50, 1)
|
||||
user << "You unfasten the sign with your [tool]."
|
||||
to_chat(user, "You unfasten the sign with your [tool].")
|
||||
var/obj/item/sign/S = new(src.loc)
|
||||
S.name = name
|
||||
S.desc = desc
|
||||
@@ -42,7 +42,7 @@
|
||||
var/sign_state = ""
|
||||
|
||||
/obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction
|
||||
if(istype(tool, /obj/item/weapon/screwdriver) && isturf(user.loc))
|
||||
if(tool.is_screwdriver() && isturf(user.loc))
|
||||
var/direction = input("In which direction?", "Select direction.") in list("North", "East", "South", "West", "Cancel")
|
||||
if(direction == "Cancel") return
|
||||
var/obj/structure/sign/S = new(user.loc)
|
||||
@@ -59,7 +59,7 @@
|
||||
S.name = name
|
||||
S.desc = desc
|
||||
S.icon_state = sign_state
|
||||
user << "You fasten \the [S] with your [tool]."
|
||||
to_chat(user, "You fasten \the [S] with your [tool].")
|
||||
qdel(src)
|
||||
else ..()
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/bed/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(W.is_wrench())
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
dismantle()
|
||||
qdel(src)
|
||||
@@ -120,7 +120,7 @@
|
||||
add_padding(padding_type)
|
||||
return
|
||||
|
||||
else if (istype(W, /obj/item/weapon/wirecutters))
|
||||
else if(W.is_wirecutter())
|
||||
if(!padding_material)
|
||||
to_chat(user, "\The [src] has no padding to remove.")
|
||||
return
|
||||
@@ -213,7 +213,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/bed/roller/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench) || istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters))
|
||||
if(W.is_wrench() || istype(W,/obj/item/stack) || W.is_wirecutter())
|
||||
return
|
||||
else if(istype(W,/obj/item/roller_holder))
|
||||
if(has_buckled_mobs())
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/bed/chair/office/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters))
|
||||
if(istype(W,/obj/item/stack) || W.is_wirecutter())
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/bed/chair/wood/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters))
|
||||
if(istype(W,/obj/item/stack) || W.is_wirecutter())
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ var/global/list/stool_cache = list() //haha stool
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/stool/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(W.is_wrench())
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
dismantle()
|
||||
qdel(src)
|
||||
@@ -138,7 +138,7 @@ var/global/list/stool_cache = list() //haha stool
|
||||
user << "You add padding to \the [src]."
|
||||
add_padding(padding_type)
|
||||
return
|
||||
else if (istype(W, /obj/item/weapon/wirecutters))
|
||||
else if (W.is_wirecutter())
|
||||
if(!padding_material)
|
||||
user << "\The [src] has no padding to remove."
|
||||
return
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
L.set_dir(dir)
|
||||
|
||||
/obj/structure/bed/chair/wheelchair/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench) || istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters))
|
||||
if(W.is_wrench() || W.is_wirecutter() || istype(W,/obj/item/stack))
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
user << "<span class='notice'>[src] is full.</span>"
|
||||
updateUsrDialog()
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
if(I.is_wrench())
|
||||
if(anchored)
|
||||
user << "<span class='notice'>You lean down and unwrench [src].</span>"
|
||||
anchored = 0
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
icon_state = "toilet[open][cistern]"
|
||||
|
||||
/obj/structure/toilet/attackby(obj/item/I as obj, mob/living/user as mob)
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
if(I.is_crowbar())
|
||||
to_chat(user, "<span class='notice'>You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"].</span>")
|
||||
playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
|
||||
if(do_after(user, 30))
|
||||
@@ -160,7 +160,7 @@
|
||||
/obj/machinery/shower/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(I.type == /obj/item/device/analyzer)
|
||||
to_chat(user, "<span class='notice'>The water temperature seems to be [watertemp].</span>")
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
if(I.is_wrench())
|
||||
var/newtemp = input(user, "What setting would you like to set the temperature valve to?", "Water Temperature Valve") in temperature_settings
|
||||
to_chat(user, "<span class='notice'>You begin to adjust the temperature valve with \the [I].</span>")
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
|
||||
@@ -108,7 +108,7 @@ obj/structure/windoor_assembly/Destroy()
|
||||
return
|
||||
|
||||
//Wrenching an unsecure assembly anchors it in place. Step 4 complete
|
||||
if(istype(W, /obj/item/weapon/wrench) && !anchored)
|
||||
if(W.is_wrench() && !anchored)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
user.visible_message("[user] secures the windoor assembly to the floor.", "You start to secure the windoor assembly to the floor.")
|
||||
|
||||
@@ -119,7 +119,7 @@ obj/structure/windoor_assembly/Destroy()
|
||||
step = 0
|
||||
|
||||
//Unwrenching an unsecure assembly un-anchors it. Step 4 undone
|
||||
else if(istype(W, /obj/item/weapon/wrench) && anchored)
|
||||
else if(W.is_wrench() && anchored)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
user.visible_message("[user] unsecures the windoor assembly to the floor.", "You start to unsecure the windoor assembly to the floor.")
|
||||
|
||||
@@ -145,7 +145,7 @@ obj/structure/windoor_assembly/Destroy()
|
||||
if("02")
|
||||
|
||||
//Removing wire from the assembly. Step 5 undone.
|
||||
if(istype(W, /obj/item/weapon/wirecutters) && !src.electronics)
|
||||
if(W.is_wirecutter() && !src.electronics)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.")
|
||||
|
||||
@@ -174,7 +174,7 @@ obj/structure/windoor_assembly/Destroy()
|
||||
W.loc = src.loc
|
||||
|
||||
//Screwdriver to remove airlock electronics. Step 6 undone.
|
||||
else if(istype(W, /obj/item/weapon/screwdriver) && src.electronics)
|
||||
else if(W.is_screwdriver() && src.electronics)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to uninstall electronics from the airlock assembly.")
|
||||
|
||||
@@ -187,7 +187,7 @@ obj/structure/windoor_assembly/Destroy()
|
||||
ae.loc = src.loc
|
||||
|
||||
//Crowbar to complete the assembly, Step 7 complete.
|
||||
else if(istype(W, /obj/item/weapon/crowbar))
|
||||
else if(W.is_crowbar())
|
||||
if(!src.electronics)
|
||||
to_chat(usr,"<span class='warning'>The assembly is missing electronics.</span>")
|
||||
return
|
||||
|
||||
@@ -262,7 +262,7 @@
|
||||
|
||||
if(W.flags & NOBLUDGEON) return
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(W.is_screwdriver())
|
||||
if(reinf && state >= 1)
|
||||
state = 3 - state
|
||||
update_nearby_icons()
|
||||
@@ -280,11 +280,11 @@
|
||||
update_verbs()
|
||||
playsound(src, W.usesound, 75, 1)
|
||||
user << (anchored ? "<span class='notice'>You have fastened the window to the floor.</span>" : "<span class='notice'>You have unfastened the window.</span>")
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1)
|
||||
else if(W.is_crowbar() && reinf && state <= 1)
|
||||
state = 1 - state
|
||||
playsound(src, W.usesound, 75, 1)
|
||||
user << (state ? "<span class='notice'>You have pried the window into the frame.</span>" : "<span class='notice'>You have pried the window out of the frame.</span>")
|
||||
else if(istype(W, /obj/item/weapon/wrench) && !anchored && (!state || !reinf))
|
||||
else if(W.is_wrench() && !anchored && (!state || !reinf))
|
||||
if(!glasstype)
|
||||
user << "<span class='notice'>You're not sure how to dismantle \the [src] properly.</span>"
|
||||
else
|
||||
@@ -294,7 +294,7 @@
|
||||
if(is_fulltile())
|
||||
mats.amount = 4
|
||||
qdel(src)
|
||||
else if(iscoil(W) && reinf && state == 0 && !istype(src, /obj/structure/window/reinforced/polarized))
|
||||
else if(istype(W, /obj/item/stack/cable_coil) && reinf && state == 0 && !istype(src, /obj/structure/window/reinforced/polarized))
|
||||
var/obj/item/stack/cable_coil/C = W
|
||||
if (C.use(1))
|
||||
playsound(src.loc, 'sound/effects/sparks1.ogg', 75, 1)
|
||||
@@ -572,7 +572,7 @@
|
||||
maxhealth = 80
|
||||
|
||||
/obj/structure/window/reinforced/polarized/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(ismultitool(W) && !anchored) // Only allow programming if unanchored!
|
||||
if(istype(W, /obj/item/device/multitool) && !anchored) // Only allow programming if unanchored!
|
||||
var/obj/item/device/multitool/MT = W
|
||||
// First check if they have a windowtint button buffered
|
||||
if(istype(MT.connectable, /obj/machinery/button/windowtint))
|
||||
@@ -632,7 +632,7 @@
|
||||
icon_state = "light[active]"
|
||||
|
||||
/obj/machinery/button/windowtint/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(ismultitool(W))
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
var/obj/item/device/multitool/MT = W
|
||||
if(!id)
|
||||
// If no ID is set yet (newly built button?) let them select an ID for first-time use!
|
||||
|
||||
Reference in New Issue
Block a user