mirror of
https://github.com/Yawn-Wider/YWPolarisVore.git
synced 2026-08-24 05:28:16 +01:00
Merge branch 'release' of https://github.com/VOREStation/VOREStation into izac
This commit is contained in:
@@ -192,8 +192,8 @@
|
||||
|
||||
var/damage = W.force / 4.0
|
||||
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(W.has_tool_quality(TOOL_WELDER))
|
||||
var/obj/item/weapon/weldingtool/WT = W.get_welder()
|
||||
|
||||
if(WT.remove_fuel(0, user))
|
||||
damage = 15
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
poster_set = TRUE
|
||||
|
||||
/obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.is_wirecutter())
|
||||
if(W.has_tool_quality(TOOL_WIRECUTTER))
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
if(ruined)
|
||||
to_chat(user, "<span class='notice'>You remove the remnants of the poster.</span>")
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
flick("poster_being_set", src)
|
||||
|
||||
/obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.is_wirecutter())
|
||||
if(W.has_tool_quality(TOOL_WIRECUTTER))
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
if(ruined)
|
||||
to_chat(user, "<span class='notice'>You remove the remnants of the poster.</span>")
|
||||
|
||||
@@ -64,6 +64,8 @@
|
||||
name = "Clown"
|
||||
/obj/effect/landmark/start/entertainer
|
||||
name = "Entertainer"
|
||||
/obj/effect/landmark/start/entrepreneur
|
||||
name = "Entrepreneur"
|
||||
/obj/effect/landmark/start/intern
|
||||
name = "Intern"
|
||||
/obj/effect/landmark/start/iaa
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
explode(M)
|
||||
|
||||
/obj/effect/mine/attackby(obj/item/W as obj, mob/living/user as mob)
|
||||
if(W.is_screwdriver())
|
||||
if(W.has_tool_quality(TOOL_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>")
|
||||
@@ -110,7 +110,7 @@
|
||||
// Panel open, stay uncloaked, or uncloak if already cloaked. If you don't cloak on place, ignore it and just be normal alpha.
|
||||
alpha = camo_net ? (panel_open ? 255 : 50) : 255
|
||||
|
||||
else if((W.is_wirecutter() || istype(W, /obj/item/device/multitool)) && panel_open)
|
||||
else if((W.has_tool_quality(TOOL_WIRECUTTER) || istype(W, /obj/item/device/multitool)) && panel_open)
|
||||
interact(user)
|
||||
else
|
||||
..()
|
||||
@@ -309,7 +309,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/mine/attackby(obj/item/W as obj, mob/living/user as mob)
|
||||
if(W.is_screwdriver() && trap)
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER) && trap)
|
||||
to_chat(user, "<span class='notice'>You begin removing \the [trap].</span>")
|
||||
if(do_after(user, 10 SECONDS))
|
||||
to_chat(user, "<span class='notice'>You finish disconnecting the mine's trigger.</span>")
|
||||
|
||||
@@ -752,11 +752,18 @@ var/global/list/semirandom_mob_spawner_decisions = list()
|
||||
list(/mob/living/simple_mob/vore/aggressive/rat) = 100,
|
||||
list(/mob/living/simple_mob/vore/bee) = 100,
|
||||
list(/mob/living/simple_mob/vore/catgirl) = 100,
|
||||
list(/mob/living/simple_mob/vore/wolftaur) = 100,
|
||||
list(/mob/living/simple_mob/vore/cookiegirl) = 100,
|
||||
list(/mob/living/simple_mob/vore/fennec) = 100,
|
||||
list(/mob/living/simple_mob/vore/fennix) = 50,
|
||||
list(/mob/living/simple_mob/vore/hippo) = 70,
|
||||
list(/mob/living/simple_mob/vore/horse) = 100,
|
||||
list(/mob/living/simple_mob/vore/raptor) = 100,
|
||||
list(/mob/living/simple_mob/vore/succubus) = 100,
|
||||
list(/mob/living/simple_mob/vore/vampire) = 50,
|
||||
list(/mob/living/simple_mob/vore/vampire/queen) = 1,
|
||||
list(/mob/living/simple_mob/vore/bat) = 50,
|
||||
list(/mob/living/simple_mob/vore/scel) = 10,
|
||||
list(
|
||||
/mob/living/simple_mob/vore/lamia,
|
||||
/mob/living/simple_mob/vore/lamia/albino,
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
|
||||
var/damage = W.force / 4.0
|
||||
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(W.has_tool_quality(TOOL_WELDER))
|
||||
var/obj/item/weapon/weldingtool/WT = W.get_welder()
|
||||
|
||||
if(WT.remove_fuel(0, user))
|
||||
damage = 15
|
||||
|
||||
@@ -248,3 +248,41 @@ var/global/list/tele_landmarks = list() // Terrible, but the alternative is loop
|
||||
else
|
||||
message_admins("ERROR: planetary_fall step trigger lacks a planet to fall onto.")
|
||||
return
|
||||
|
||||
//Death
|
||||
|
||||
/obj/effect/step_trigger/death
|
||||
var/deathmessage = "You die a horrible, brutal and very sudden death."
|
||||
var/deathalert = "has stepped on a death trigger."
|
||||
|
||||
/obj/effect/step_trigger/death/Trigger(var/atom/movable/A)
|
||||
if(isliving(A))
|
||||
to_chat(A, "<span class='danger'>[deathmessage]</span>")
|
||||
log_and_message_admins("[A] [deathalert]")
|
||||
qdel(A)
|
||||
|
||||
/obj/effect/step_trigger/death/train_lost
|
||||
deathmessage = "You fly down the tunnel of the train at high speed for a few moments before impact kills you with sheer concussive force."
|
||||
deathalert = "fell off the side of the train and died horribly."
|
||||
|
||||
/obj/effect/step_trigger/death/train_crush
|
||||
deathmessage = "You get horribly crushed by the train, there's pretty much nothing left of you."
|
||||
deathalert = "fell under the train and was crushed horribly."
|
||||
|
||||
/obj/effect/step_trigger/death/fly_off
|
||||
deathmessage = "You get caught up in the slipstream of the train and quickly dragged down into the tracks. Your body is brutally smashed into the electrified rails and then sucked right under a carriage. No one is finding that mess, thankfully."
|
||||
deathalert = "tried to fly away from the train but was died horribly in the process."
|
||||
|
||||
//warning
|
||||
|
||||
/obj/effect/step_trigger/warning
|
||||
var/warningmessage = "Warning!"
|
||||
icon_state = "warnmarker"
|
||||
|
||||
/obj/effect/step_trigger/warning/Trigger(var/atom/movable/A)
|
||||
if(isliving(A))
|
||||
to_chat(A, "<span class='warning'>[warningmessage]</span>")
|
||||
|
||||
/obj/effect/step_trigger/warning/train_edge
|
||||
warningmessage = "The wind billowing alongside the train is extremely strong here! Any movement could easily pull you down beneath the carriages, return to the train immediately!"
|
||||
|
||||
|
||||
@@ -1018,3 +1018,6 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen
|
||||
|
||||
/obj/item/proc/on_holder_escape(var/obj/item/weapon/holder/H)
|
||||
return
|
||||
|
||||
/obj/item/proc/get_welder()
|
||||
return
|
||||
@@ -87,7 +87,7 @@
|
||||
/obj/item/weapon/deskbell/attackby(obj/item/W, mob/user, params)
|
||||
if(!istype(W))
|
||||
return
|
||||
if(W.is_wrench() && isturf(loc))
|
||||
if(W.has_tool_quality(TOOL_WRENCH) && isturf(loc))
|
||||
if(do_after(5))
|
||||
if(!src) return
|
||||
to_chat(user, "<span class='notice'>You dissasemble the desk bell</span>")
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
src.name = "body bag"
|
||||
//..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
|
||||
return
|
||||
else if(W.is_wirecutter())
|
||||
else if(W.has_tool_quality(TOOL_WIRECUTTER))
|
||||
to_chat(user, "You cut the tag off the bodybag")
|
||||
src.name = "body bag"
|
||||
cut_overlays()
|
||||
@@ -264,7 +264,7 @@
|
||||
inject_occupant(H)
|
||||
break
|
||||
|
||||
else if(W.is_screwdriver())
|
||||
else if(W.has_tool_quality(TOOL_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>")
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
to_chat(user, "<span class='notice'>You install a cell in \the [src].</span>")
|
||||
update_icon()
|
||||
|
||||
else if(W.is_screwdriver())
|
||||
else if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
if(bcell)
|
||||
bcell.update_icon()
|
||||
bcell.forceMove(get_turf(src.loc))
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
power_supply = new cell_type(src)
|
||||
|
||||
/obj/item/device/flash/attackby(var/obj/item/W, var/mob/user)
|
||||
if(W.is_screwdriver() && broken)
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER) && broken)
|
||||
if(repairing)
|
||||
to_chat(user, "<span class='notice'>\The [src] is already being repaired!</span>")
|
||||
return
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
var/list/known_targets
|
||||
var/list/supported_types
|
||||
var/datum/tgui_state/default/must_hack/hack_state
|
||||
|
||||
|
||||
/obj/item/device/multitool/hacktool/override
|
||||
hackspeed = 0.75
|
||||
max_level = 5
|
||||
@@ -31,7 +31,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/device/multitool/hacktool/attackby(var/obj/item/W, var/mob/user)
|
||||
if(W.is_screwdriver())
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
in_hack_mode = !in_hack_mode
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
else
|
||||
@@ -78,7 +78,7 @@
|
||||
if(D.security_level > max_level)
|
||||
to_chat(user, "\icon[src][bicon(src)] <span class='warning'>Target's electronic security is too complex.</span>")
|
||||
return 0
|
||||
|
||||
|
||||
var/found = known_targets.Find(D)
|
||||
if(found)
|
||||
known_targets.Swap(1, found) // Move the last hacked item first
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] already has a diode.</span>")
|
||||
|
||||
else if(W.is_screwdriver())
|
||||
else if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
if(diode)
|
||||
to_chat(user, "<span class='notice'>You remove the [diode.name] from the [src].</span>")
|
||||
diode.loc = get_turf(src.loc)
|
||||
|
||||
@@ -66,9 +66,6 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/item/device/multitool/is_multitool()
|
||||
return TRUE
|
||||
|
||||
/obj/item/device/multitool/cyborg
|
||||
name = "multitool"
|
||||
desc = "Optimised and stripped-down version of a regular multitool."
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
to_chat(user, "<span class='notice'>You install a cell in \the [src].</span>")
|
||||
update_icon()
|
||||
|
||||
else if(W.is_screwdriver())
|
||||
else if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
if(bcell)
|
||||
if(istype(bcell, /obj/item/weapon/cell/device/shield_generator)) //No stealing self charging batteries!
|
||||
var/choice = tgui_alert(user, "A popup appears on the device 'REMOVING THE INTERNAL CELL WILL DESTROY THE BATTERY. DO YOU WISH TO CONTINUE?'...Well, do you?", "Selection List", list("Cancel", "Remove"))
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user)
|
||||
if(I.is_screwdriver())
|
||||
if(I.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
if(mode == 0)
|
||||
var/turf/T = loc
|
||||
if(isturf(T) && !!T.is_plating())
|
||||
|
||||
@@ -336,10 +336,10 @@
|
||||
/obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
// ..()
|
||||
user.set_machine(src)
|
||||
if(!(W.is_screwdriver() || istype(W, /obj/item/device/encryptionkey)))
|
||||
if(!(W.has_tool_quality(TOOL_SCREWDRIVER) || istype(W, /obj/item/device/encryptionkey)))
|
||||
return
|
||||
|
||||
if(W.is_screwdriver())
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
if(keyslot1 || keyslot2)
|
||||
|
||||
|
||||
|
||||
@@ -1,235 +1,235 @@
|
||||
/obj/item/device/radio/intercom
|
||||
name = "station intercom (General)"
|
||||
desc = "Talk through this."
|
||||
icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit - New Icon
|
||||
icon_state = "intercom"
|
||||
layer = ABOVE_WINDOW_LAYER
|
||||
anchored = TRUE
|
||||
w_class = ITEMSIZE_LARGE
|
||||
canhear_range = 7 //VOREStation Edit
|
||||
flags = NOBLOODY
|
||||
light_color = "#00ff00"
|
||||
light_power = 0.25
|
||||
blocks_emissive = NONE
|
||||
vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature
|
||||
var/circuit = /obj/item/weapon/circuitboard/intercom
|
||||
var/number = 0
|
||||
var/wiresexposed = 0
|
||||
|
||||
/obj/item/device/radio/intercom/Initialize()
|
||||
. = ..()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
GLOB.apc_event.register(A, src, /atom/proc/update_icon)
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/radio/intercom/Destroy()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
GLOB.apc_event.unregister(A, src, /atom/proc/update_icon)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/intercom/custom
|
||||
name = "station intercom (Custom)"
|
||||
broadcasting = 0
|
||||
listening = 0
|
||||
|
||||
/obj/item/device/radio/intercom/interrogation
|
||||
name = "station intercom (Interrogation)"
|
||||
frequency = 1449
|
||||
broadcasting = 1 //yw edit starts
|
||||
listening = 0
|
||||
|
||||
/obj/item/device/radio/intercom/interrogation/observation
|
||||
listening = 1
|
||||
broadcasting = 0 //yw edit ends
|
||||
|
||||
/obj/item/device/radio/intercom/private
|
||||
name = "station intercom (Private)"
|
||||
frequency = AI_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/specops
|
||||
name = "\improper Spec Ops intercom"
|
||||
frequency = ERT_FREQ
|
||||
subspace_transmission = 1
|
||||
centComm = 1
|
||||
|
||||
/obj/item/device/radio/intercom/department
|
||||
canhear_range = 5
|
||||
broadcasting = 0
|
||||
listening = 1
|
||||
|
||||
/obj/item/device/radio/intercom/department/medbay
|
||||
name = "station intercom (Medbay)"
|
||||
icon_state = "medintercom"
|
||||
light_color = "#00aaff"
|
||||
frequency = MED_I_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/department/security
|
||||
name = "station intercom (Security)"
|
||||
icon_state = "secintercom"
|
||||
light_color = "#ff0000"
|
||||
frequency = SEC_I_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/entertainment
|
||||
name = "entertainment intercom"
|
||||
frequency = ENT_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/omni
|
||||
name = "global announcer"
|
||||
/obj/item/device/radio/intercom/omni/Initialize()
|
||||
channels = radiochannels.Copy()
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/intercom/New()
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
|
||||
/obj/item/device/radio/intercom/department/medbay/New()
|
||||
..()
|
||||
internal_channels = default_medbay_channels.Copy()
|
||||
|
||||
/obj/item/device/radio/intercom/department/security/New()
|
||||
..()
|
||||
internal_channels = list(
|
||||
num2text(PUB_FREQ) = list(),
|
||||
num2text(SEC_I_FREQ) = list(access_security)
|
||||
)
|
||||
|
||||
/obj/item/device/radio/intercom/entertainment/New()
|
||||
..()
|
||||
internal_channels = list(
|
||||
num2text(PUB_FREQ) = list(),
|
||||
num2text(ENT_FREQ) = list()
|
||||
)
|
||||
|
||||
/obj/item/device/radio/intercom/syndicate
|
||||
name = "illicit intercom"
|
||||
desc = "Talk through this. Evilly"
|
||||
frequency = SYND_FREQ
|
||||
subspace_transmission = 1
|
||||
syndie = 1
|
||||
|
||||
/obj/item/device/radio/intercom/syndicate/New()
|
||||
..()
|
||||
internal_channels[num2text(SYND_FREQ)] = list(access_syndicate)
|
||||
|
||||
/obj/item/device/radio/intercom/raider
|
||||
name = "illicit intercom"
|
||||
desc = "Pirate radio, but not in the usual sense of the word."
|
||||
frequency = RAID_FREQ
|
||||
subspace_transmission = 1
|
||||
syndie = 1
|
||||
|
||||
/obj/item/device/radio/intercom/raider/New()
|
||||
..()
|
||||
internal_channels[num2text(RAID_FREQ)] = list(access_syndicate)
|
||||
|
||||
/obj/item/device/radio/intercom/attack_ai(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
spawn (0)
|
||||
attack_self(user)
|
||||
|
||||
/obj/item/device/radio/intercom/attack_hand(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
spawn (0)
|
||||
attack_self(user)
|
||||
|
||||
/obj/item/device/radio/intercom/attackby(obj/item/W as obj, mob/user as mob)
|
||||
add_fingerprint(user)
|
||||
if(W.is_screwdriver()) // Opening the intercom up.
|
||||
wiresexposed = !wiresexposed
|
||||
to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"]")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
update_icon()
|
||||
else 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)
|
||||
var/obj/structure/frame/A = new /obj/structure/frame(src.loc)
|
||||
var/obj/item/weapon/circuitboard/M = circuit
|
||||
A.frame_type = M.board_type
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.circuit = M
|
||||
A.set_dir(dir)
|
||||
A.anchored = TRUE
|
||||
A.state = 2
|
||||
A.update_icon()
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
else
|
||||
src.attack_hand(user)
|
||||
|
||||
/obj/item/device/radio/intercom/receive_range(freq, level)
|
||||
if (!on)
|
||||
return -1
|
||||
if(!(0 in level))
|
||||
var/turf/position = get_turf(src)
|
||||
if(isnull(position) || !(position.z in level))
|
||||
return -1
|
||||
if (!src.listening)
|
||||
return -1
|
||||
if(freq in ANTAG_FREQS)
|
||||
if(!(src.syndie))
|
||||
return -1//Prevents broadcast of messages over devices lacking the encryption
|
||||
|
||||
return canhear_range
|
||||
|
||||
/obj/item/device/radio/intercom/update_icon()
|
||||
var/area/A = get_area(src)
|
||||
on = A?.powered(EQUIP)
|
||||
|
||||
cut_overlays()
|
||||
|
||||
if(!on)
|
||||
set_light(0)
|
||||
set_light_on(FALSE)
|
||||
if(wiresexposed)
|
||||
icon_state = "intercom-p_open"
|
||||
else
|
||||
icon_state = "intercom-p"
|
||||
else
|
||||
if(wiresexposed)
|
||||
icon_state = "intercom_open"
|
||||
set_light(0)
|
||||
set_light_on(FALSE)
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
add_overlay(mutable_appearance(icon, "[icon_state]_ov"))
|
||||
add_overlay(emissive_appearance(icon, "[icon_state]_ov"))
|
||||
set_light(2)
|
||||
set_light_on(TRUE)
|
||||
|
||||
//VOREStation Add Start
|
||||
/obj/item/device/radio/intercom/AICtrlClick(var/mob/user)
|
||||
ToggleBroadcast()
|
||||
to_chat(user, "<span class='notice'>\The [src]'s microphone is now <b>[broadcasting ? "enabled" : "disabled"]</b>.</span>")
|
||||
|
||||
/obj/item/device/radio/intercom/AIAltClick(var/mob/user)
|
||||
if(frequency == AI_FREQ)
|
||||
set_frequency(initial(frequency))
|
||||
to_chat(user, "<span class='notice'>\The [src]'s frequency is now set to <font color='green'><b>Default</b></font>.</span>")
|
||||
else
|
||||
set_frequency(AI_FREQ)
|
||||
to_chat(user, "<span class='notice'>\The [src]'s frequency is now set to <font color='pink'><b>AI Private</b></font>.</span>")
|
||||
//VOREStation Add End
|
||||
/obj/item/device/radio/intercom/locked
|
||||
var/locked_frequency
|
||||
|
||||
/obj/item/device/radio/intercom/locked/set_frequency(var/frequency)
|
||||
if(frequency == locked_frequency)
|
||||
..(locked_frequency)
|
||||
|
||||
/obj/item/device/radio/intercom/locked/list_channels()
|
||||
return ""
|
||||
|
||||
/obj/item/device/radio/intercom/locked/ai_private
|
||||
name = "\improper AI intercom"
|
||||
frequency = AI_FREQ
|
||||
broadcasting = 1
|
||||
listening = 1
|
||||
|
||||
/obj/item/device/radio/intercom/locked/confessional
|
||||
name = "confessional intercom"
|
||||
/obj/item/device/radio/intercom
|
||||
name = "station intercom (General)"
|
||||
desc = "Talk through this."
|
||||
icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit - New Icon
|
||||
icon_state = "intercom"
|
||||
layer = ABOVE_WINDOW_LAYER
|
||||
anchored = TRUE
|
||||
w_class = ITEMSIZE_LARGE
|
||||
canhear_range = 7 //VOREStation Edit
|
||||
flags = NOBLOODY
|
||||
light_color = "#00ff00"
|
||||
light_power = 0.25
|
||||
blocks_emissive = NONE
|
||||
vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature
|
||||
var/circuit = /obj/item/weapon/circuitboard/intercom
|
||||
var/number = 0
|
||||
var/wiresexposed = 0
|
||||
|
||||
/obj/item/device/radio/intercom/Initialize()
|
||||
. = ..()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
GLOB.apc_event.register(A, src, /atom/proc/update_icon)
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/radio/intercom/Destroy()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
GLOB.apc_event.unregister(A, src, /atom/proc/update_icon)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/intercom/custom
|
||||
name = "station intercom (Custom)"
|
||||
broadcasting = 0
|
||||
listening = 0
|
||||
|
||||
/obj/item/device/radio/intercom/interrogation
|
||||
name = "station intercom (Interrogation)"
|
||||
frequency = 1449
|
||||
broadcasting = 1 //yw edit starts
|
||||
listening = 0
|
||||
|
||||
/obj/item/device/radio/intercom/interrogation/observation
|
||||
listening = 1
|
||||
broadcasting = 0 //yw edit ends
|
||||
|
||||
/obj/item/device/radio/intercom/private
|
||||
name = "station intercom (Private)"
|
||||
frequency = AI_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/specops
|
||||
name = "\improper Spec Ops intercom"
|
||||
frequency = ERT_FREQ
|
||||
subspace_transmission = 1
|
||||
centComm = 1
|
||||
|
||||
/obj/item/device/radio/intercom/department
|
||||
canhear_range = 5
|
||||
broadcasting = 0
|
||||
listening = 1
|
||||
|
||||
/obj/item/device/radio/intercom/department/medbay
|
||||
name = "station intercom (Medbay)"
|
||||
icon_state = "medintercom"
|
||||
light_color = "#00aaff"
|
||||
frequency = MED_I_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/department/security
|
||||
name = "station intercom (Security)"
|
||||
icon_state = "secintercom"
|
||||
light_color = "#ff0000"
|
||||
frequency = SEC_I_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/entertainment
|
||||
name = "entertainment intercom"
|
||||
frequency = ENT_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/omni
|
||||
name = "global announcer"
|
||||
/obj/item/device/radio/intercom/omni/Initialize()
|
||||
channels = radiochannels.Copy()
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/intercom/New()
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
|
||||
/obj/item/device/radio/intercom/department/medbay/New()
|
||||
..()
|
||||
internal_channels = default_medbay_channels.Copy()
|
||||
|
||||
/obj/item/device/radio/intercom/department/security/New()
|
||||
..()
|
||||
internal_channels = list(
|
||||
num2text(PUB_FREQ) = list(),
|
||||
num2text(SEC_I_FREQ) = list(access_security)
|
||||
)
|
||||
|
||||
/obj/item/device/radio/intercom/entertainment/New()
|
||||
..()
|
||||
internal_channels = list(
|
||||
num2text(PUB_FREQ) = list(),
|
||||
num2text(ENT_FREQ) = list()
|
||||
)
|
||||
|
||||
/obj/item/device/radio/intercom/syndicate
|
||||
name = "illicit intercom"
|
||||
desc = "Talk through this. Evilly"
|
||||
frequency = SYND_FREQ
|
||||
subspace_transmission = 1
|
||||
syndie = 1
|
||||
|
||||
/obj/item/device/radio/intercom/syndicate/New()
|
||||
..()
|
||||
internal_channels[num2text(SYND_FREQ)] = list(access_syndicate)
|
||||
|
||||
/obj/item/device/radio/intercom/raider
|
||||
name = "illicit intercom"
|
||||
desc = "Pirate radio, but not in the usual sense of the word."
|
||||
frequency = RAID_FREQ
|
||||
subspace_transmission = 1
|
||||
syndie = 1
|
||||
|
||||
/obj/item/device/radio/intercom/raider/New()
|
||||
..()
|
||||
internal_channels[num2text(RAID_FREQ)] = list(access_syndicate)
|
||||
|
||||
/obj/item/device/radio/intercom/attack_ai(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
spawn (0)
|
||||
attack_self(user)
|
||||
|
||||
/obj/item/device/radio/intercom/attack_hand(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
spawn (0)
|
||||
attack_self(user)
|
||||
|
||||
/obj/item/device/radio/intercom/attackby(obj/item/W as obj, mob/user as mob)
|
||||
add_fingerprint(user)
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER)) // Opening the intercom up.
|
||||
wiresexposed = !wiresexposed
|
||||
to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"]")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
update_icon()
|
||||
else if(wiresexposed && W.has_tool_quality(TOOL_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)
|
||||
var/obj/structure/frame/A = new /obj/structure/frame(src.loc)
|
||||
var/obj/item/weapon/circuitboard/M = circuit
|
||||
A.frame_type = M.board_type
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.circuit = M
|
||||
A.set_dir(dir)
|
||||
A.anchored = TRUE
|
||||
A.state = 2
|
||||
A.update_icon()
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
else
|
||||
src.attack_hand(user)
|
||||
|
||||
/obj/item/device/radio/intercom/receive_range(freq, level)
|
||||
if (!on)
|
||||
return -1
|
||||
if(!(0 in level))
|
||||
var/turf/position = get_turf(src)
|
||||
if(isnull(position) || !(position.z in level))
|
||||
return -1
|
||||
if (!src.listening)
|
||||
return -1
|
||||
if(freq in ANTAG_FREQS)
|
||||
if(!(src.syndie))
|
||||
return -1//Prevents broadcast of messages over devices lacking the encryption
|
||||
|
||||
return canhear_range
|
||||
|
||||
/obj/item/device/radio/intercom/update_icon()
|
||||
var/area/A = get_area(src)
|
||||
on = A?.powered(EQUIP)
|
||||
|
||||
cut_overlays()
|
||||
|
||||
if(!on)
|
||||
set_light(0)
|
||||
set_light_on(FALSE)
|
||||
if(wiresexposed)
|
||||
icon_state = "intercom-p_open"
|
||||
else
|
||||
icon_state = "intercom-p"
|
||||
else
|
||||
if(wiresexposed)
|
||||
icon_state = "intercom_open"
|
||||
set_light(0)
|
||||
set_light_on(FALSE)
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
add_overlay(mutable_appearance(icon, "[icon_state]_ov"))
|
||||
add_overlay(emissive_appearance(icon, "[icon_state]_ov"))
|
||||
set_light(2)
|
||||
set_light_on(TRUE)
|
||||
|
||||
//VOREStation Add Start
|
||||
/obj/item/device/radio/intercom/AICtrlClick(var/mob/user)
|
||||
ToggleBroadcast()
|
||||
to_chat(user, "<span class='notice'>\The [src]'s microphone is now <b>[broadcasting ? "enabled" : "disabled"]</b>.</span>")
|
||||
|
||||
/obj/item/device/radio/intercom/AIAltClick(var/mob/user)
|
||||
if(frequency == AI_FREQ)
|
||||
set_frequency(initial(frequency))
|
||||
to_chat(user, "<span class='notice'>\The [src]'s frequency is now set to <font color='green'><b>Default</b></font>.</span>")
|
||||
else
|
||||
set_frequency(AI_FREQ)
|
||||
to_chat(user, "<span class='notice'>\The [src]'s frequency is now set to <font color='pink'><b>AI Private</b></font>.</span>")
|
||||
//VOREStation Add End
|
||||
/obj/item/device/radio/intercom/locked
|
||||
var/locked_frequency
|
||||
|
||||
/obj/item/device/radio/intercom/locked/set_frequency(var/frequency)
|
||||
if(frequency == locked_frequency)
|
||||
..(locked_frequency)
|
||||
|
||||
/obj/item/device/radio/intercom/locked/list_channels()
|
||||
return ""
|
||||
|
||||
/obj/item/device/radio/intercom/locked/ai_private
|
||||
name = "\improper AI intercom"
|
||||
frequency = AI_FREQ
|
||||
broadcasting = 1
|
||||
listening = 1
|
||||
|
||||
/obj/item/device/radio/intercom/locked/confessional
|
||||
name = "confessional intercom"
|
||||
frequency = 1480
|
||||
@@ -614,7 +614,7 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
|
||||
/obj/item/device/radio/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
user.set_machine(src)
|
||||
if (!W.is_screwdriver())
|
||||
if (!W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
return
|
||||
b_stat = !( b_stat )
|
||||
if(!istype(src, /obj/item/device/radio/beacon))
|
||||
@@ -666,10 +666,10 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
|
||||
/obj/item/device/radio/borg/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
// ..()
|
||||
user.set_machine(src)
|
||||
if (!(W.is_screwdriver() || istype(W, /obj/item/device/encryptionkey)))
|
||||
if (!(W.has_tool_quality(TOOL_SCREWDRIVER) || istype(W, /obj/item/device/encryptionkey)))
|
||||
return
|
||||
|
||||
if(W.is_screwdriver())
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
if(keyslot)
|
||||
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
if(organ)
|
||||
dat += "<b>Organ damage</b> - Give Peridaxon. Perform full body scan for targeted organ repair surgery.<br>"
|
||||
if(bloodloss)
|
||||
dat += "<b>Low blood volume</b> - Commence blood transfusion via IV drip or provide blood-restorative chemicals (i.e. Iron)."
|
||||
dat += "<b>Low blood volume</b> - Commence blood transfusion via IV drip or provide blood-restorative chemicals (e.g.: Copper for zorren and skrell, iron for the rest)."
|
||||
if(M.getToxLoss())
|
||||
dat += "<b>Toxins</b> - Give Dylovene or Carthatoline. Vomitting is normal and helpful. Tends to be a symptom of larger issues, such as infection.<br>"
|
||||
if(M.getBruteLoss())
|
||||
|
||||
@@ -304,14 +304,15 @@
|
||||
var/blood_volume = H.vessel.get_reagent_amount("blood")
|
||||
var/blood_percent = round((blood_volume / H.species.blood_volume)*100)
|
||||
var/blood_type = H.dna.b_type
|
||||
var/blood_reagent = H.species.blood_reagents
|
||||
if(blood_volume <= H.species.blood_volume*H.species.blood_level_danger)
|
||||
dat += "<span class='danger'><i>Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]</i></span><br>"
|
||||
dat += "<span class='danger'><i>Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]. Basis: [blood_reagent].</i></span><br>"
|
||||
else if(blood_volume <= H.species.blood_volume*H.species.blood_level_warning)
|
||||
dat += "<span class='danger'><i>Warning: Blood Level VERY LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]</i></span><br>"
|
||||
dat += "<span class='danger'><i>Warning: Blood Level VERY LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]. Basis: [blood_reagent].</i></span><br>"
|
||||
else if(blood_volume <= H.species.blood_volume*H.species.blood_level_safe)
|
||||
dat += "<span class='danger'>Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span><br>"
|
||||
dat += "<span class='danger'>Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]. Basis: [blood_reagent].</span><br>"
|
||||
else
|
||||
dat += "<span class='notice'>Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span><br>"
|
||||
dat += "<span class='notice'>Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]. Basis: [blood_reagent].</span><br>"
|
||||
dat += "<span class='notice'>Subject's pulse: <font color='[H.pulse == PULSE_THREADY || H.pulse == PULSE_NONE ? "red" : "blue"]'>[H.get_pulse(GETPULSE_TOOL)] bpm.</font></span><br>" // VORE Edit: Missed a linebreak here.
|
||||
if(istype(H.species, /datum/species/xenochimera)) // VOREStation Edit Start: Visible feedback for medmains on Xenochimera.
|
||||
if(H.stat == DEAD && H.revive_ready == REVIVING_READY && !H.hasnutriment())
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
else
|
||||
to_chat(user, "Error: The device is linked to another monitor.")
|
||||
|
||||
else if(W.is_wrench() && user.a_intent != I_HURT)
|
||||
else if(W.has_tool_quality(TOOL_WRENCH) && user.a_intent != I_HURT)
|
||||
if(isturf(loc))
|
||||
anchored = !anchored
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
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 (W.is_screwdriver())
|
||||
if (W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
if(cover_open)
|
||||
cover_open = 0
|
||||
to_chat(user, "You screw the panel into place.")
|
||||
@@ -237,7 +237,7 @@
|
||||
return cell
|
||||
|
||||
/obj/item/device/suit_cooling_unit/emergency/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (W.is_screwdriver())
|
||||
if (W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
to_chat(user, "<span class='warning'>This cooler's cell is permanently installed!</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -409,7 +409,7 @@
|
||||
|
||||
|
||||
/obj/item/device/tape/attackby(obj/item/I, mob/user, params)
|
||||
if(ruined && I.is_screwdriver())
|
||||
if(ruined && I.has_tool_quality(TOOL_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))
|
||||
|
||||
@@ -57,3 +57,53 @@
|
||||
/obj/item/weapon/paper/sec_ticket/update_icon()
|
||||
icon = icon
|
||||
icon_state = icon_state
|
||||
|
||||
|
||||
/obj/item/device/ticket_printer/train
|
||||
name = "permission ticket printer"
|
||||
desc = "It prints permit tickets!"
|
||||
icon = 'icons/obj/device_vr.dmi'
|
||||
icon_state = "train_ticket_printer"
|
||||
|
||||
/obj/item/device/ticket_printer/train/print_a_ticket(mob/user)
|
||||
|
||||
var/ticket_name = sanitize(tgui_input_text(user, "The Name of the person you are issuing the ticket to.", "Name", max_length = 100))
|
||||
if(length(ticket_name) > 100)
|
||||
tgui_alert_async(usr, "Entered name too long. 100 character limit.","Error")
|
||||
return
|
||||
if(!ticket_name)
|
||||
return
|
||||
var/details = sanitize(tgui_input_text(user, "What is the ticket for? This could be anything like travel to a destination or permission to do something! This is not official and does not override any rules or authorities on the station.", "Ticket Details", max_length = 200))
|
||||
if(length(details) > 200)
|
||||
tgui_alert_async(usr, "Entered details too long. 200 character limit.","Error")
|
||||
return
|
||||
if(!details)
|
||||
return
|
||||
|
||||
var/turf/our_turf = get_turf(user)
|
||||
|
||||
var/final = "<head><style>body {font-family: Verdana; background-color: #ffa1ef;}</style></head><center><h3>Permit Ticket</h3><hr>This ticket has been issued to <br><big>[capitalize(ticket_name)]</big></center><b>This permits them to</b>:<br><i>[details]</i><br>Issued by:<i>[user]</i><hr><center><small>This ticket is non-refundable from the time of receipt. This ticket holds the authority of the issuer only and does not hold any authority over persons nor entities that were not involved in this transaction.</small><br></center>"
|
||||
|
||||
var/obj/item/weapon/paper/permit_ticket/p = new /obj/item/weapon/paper/permit_ticket(our_turf)
|
||||
|
||||
p.info = final
|
||||
p.name = "Permit Ticket: [ticket_name]"
|
||||
playsound(user, 'sound/items/ticket_printer.ogg', 75, 1)
|
||||
|
||||
log_and_message_admins("has issued '[ticket_name]' a permit ticket: \"[details]\"", user)
|
||||
last_print = world.time
|
||||
|
||||
/obj/item/weapon/paper/permit_ticket
|
||||
name = "Permit Ticket"
|
||||
desc = "A ticket issued to permit someone to do something!"
|
||||
icon = 'icons/obj/bureaucracy_vr.dmi'
|
||||
icon_state = "permit_ticket"
|
||||
|
||||
/obj/item/weapon/paper/permit_ticket/Initialize(mapload, text, title)
|
||||
. = ..()
|
||||
icon = 'icons/obj/bureaucracy_vr.dmi'
|
||||
icon_state = "permit_ticket"
|
||||
|
||||
/obj/item/weapon/paper/permit_ticket/update_icon()
|
||||
icon = icon
|
||||
icon_state = icon_state
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
"LOSE WEIGHT THREE TIMES FASTER WITH THESE LOW-G MANEUVERS!",
|
||||
"SHOCKING FIGURES REVEAL MORE TEENS DIE TO UNATHI HONOUR DUELS THAN GUN VIOLENCE",
|
||||
"MY DAUGHTER JOINED A NEURAL COLLECTIVE AND NOW SHE CAN TASTE SPACETIME: FULL STORY INSIDE",
|
||||
"WERE THE NAZIS PSYCHIC? ONE HISTORIAN TELLS ALL",
|
||||
"TAJARANS: CUTE AND CUDDLY, OR INFILTRATING THE GOVERNMENT? FIND OUT MORE INSIDE",
|
||||
"IS THE SOLAR GOVERNMENT CREATING AN AI SUPERINTELLIGENCE NEAR MERCURY? ONE EXPERT REVEALS SHOCKING INSIDER DETAILS!",
|
||||
"TOP TEN HISTORICAL FIGURES THAT WERE TWO PROMETHEANS IN A TRENCHCOAT",
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
|
||||
|
||||
/obj/item/target/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if (W.has_tool_quality(TOOL_WELDER))
|
||||
var/obj/item/weapon/weldingtool/WT = W.get_welder()
|
||||
if(WT.remove_fuel(0, user))
|
||||
cut_overlays()
|
||||
to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.")
|
||||
|
||||
@@ -263,6 +263,12 @@
|
||||
affecting.salve()
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
|
||||
/obj/item/stack/medical/ointment/simple
|
||||
name = "ointment paste"
|
||||
desc = "A simple thick paste used to salve burns."
|
||||
singular_name = "old-ointment"
|
||||
icon_state = "old-ointment"
|
||||
|
||||
/obj/item/stack/medical/advanced/bruise_pack
|
||||
name = "advanced trauma kit"
|
||||
singular_name = "advanced trauma kit"
|
||||
|
||||
@@ -41,8 +41,8 @@
|
||||
stacktype = material.stack_type
|
||||
|
||||
/obj/item/stack/tile/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if (W.has_tool_quality(TOOL_WELDER))
|
||||
var/obj/item/weapon/weldingtool/WT = W.get_welder()
|
||||
|
||||
if(can_weld == FALSE)
|
||||
to_chat("You can't reform these into their original components.")
|
||||
|
||||
@@ -432,6 +432,19 @@
|
||||
drop_sound = 'sound/items/drop/soda.ogg'
|
||||
pickup_sound = 'sound/items/pickup/soda.ogg'
|
||||
|
||||
|
||||
/obj/item/trash/pasty
|
||||
name = "pasty packaging"
|
||||
icon_state = "pasty"
|
||||
|
||||
/obj/item/trash/sausageroll
|
||||
name = "sausage roll packaging"
|
||||
icon_state = "sausageroll"
|
||||
|
||||
/obj/item/trash/scotchegg
|
||||
name = "scotch egg packaging"
|
||||
icon_state = "scotchegg"
|
||||
|
||||
//Candy Bars (1-10)
|
||||
/obj/item/trash/candy/cb01
|
||||
name = "\improper Tau Ceti Bar wrapper"
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
visible_message("<span class='notice'>[user] pairs [I] to [nickname]</span>")
|
||||
toggle_pairing()
|
||||
|
||||
else if(I.is_screwdriver() && cell)
|
||||
else if(I.has_tool_quality(TOOL_SCREWDRIVER) && cell)
|
||||
if(do_after(user, 3 SECONDS, src))
|
||||
to_chat(user, "<span class='notice'>You remove [cell] into [nickname].</span>")
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
|
||||
@@ -250,7 +250,7 @@
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/rms/attackby(obj/item/W, mob/user)
|
||||
if(W.is_multitool())
|
||||
if(W.has_tool_quality(TOOL_MULTITOOL))
|
||||
overcharge = !overcharge
|
||||
if(overcharge)
|
||||
to_chat(user, "<span class='notice'>The Rapid Material Synthesizer quietly whirrs...</span>")
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
|
||||
/obj/item/weapon/flame/candle/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(W.has_tool_quality(TOOL_WELDER))
|
||||
var/obj/item/weapon/weldingtool/WT = W.get_welder()
|
||||
if(WT.isOn()) //Badasses dont get blinded by lighting their candle with a welding tool
|
||||
light("<span class='notice'>\The [user] casually lights the [src] with [W].</span>")
|
||||
else if(istype(W, /obj/item/weapon/flame/lighter))
|
||||
|
||||
@@ -623,15 +623,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
lit = 1
|
||||
icon_state = "lighteron"
|
||||
playsound(src, activation_sound, 75, 1)
|
||||
if(prob(95))
|
||||
user.visible_message("<span class='notice'>After a few attempts, [user] manages to light the [src].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You burn yourself while lighting the lighter.</span>")
|
||||
if (user.get_left_hand() == src)
|
||||
user.apply_damage(2,BURN,"l_hand")
|
||||
else
|
||||
user.apply_damage(2,BURN,"r_hand")
|
||||
user.visible_message("<span class='notice'>After a few attempts, [user] manages to light the [src], they however burn their finger in the process.</span>")
|
||||
user.visible_message("<span class='notice'>After a few attempts, [user] manages to light the [src].</span>")
|
||||
|
||||
set_light(2, 0.5, "#FF9933")
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
build_path = /obj/machinery/computer/rdconsole/core
|
||||
|
||||
/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(I.is_screwdriver())
|
||||
if(I.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
user.visible_message("<b>\The [user]</b> adjusts the jumper on \the [src]'s access protocol pins.", "<span class='notice'>You adjust the jumper on the access protocol pins.</span>")
|
||||
if(build_path == /obj/machinery/computer/rdconsole/core)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/rdserver/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(I.is_screwdriver())
|
||||
if(I.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
user.visible_message("<b>\The [user]</b> adjusts the jumper on \the [src]'s access protocol pins.", "<span class='notice'>You adjust the jumper on the access protocol pins.</span>")
|
||||
if(build_path == /obj/machinery/r_n_d/server/core)
|
||||
|
||||
@@ -29,11 +29,11 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/plastique/attackby(var/obj/item/I, var/mob/user)
|
||||
if(I.is_screwdriver())
|
||||
if(I.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
open_panel = !open_panel
|
||||
to_chat(user, "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>")
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
else if(I.is_wirecutter() || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler ))
|
||||
else if(I.has_tool_quality(TOOL_WIRECUTTER) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler ))
|
||||
wires.Interact(user)
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
|
||||
/obj/item/weapon/flamethrower/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(user.stat || user.restrained() || user.lying) return
|
||||
if(W.is_wrench() && !status)//Taking this apart
|
||||
if(W.has_tool_quality(TOOL_WRENCH) && !status)//Taking this apart
|
||||
var/turf/T = get_turf(src)
|
||||
if(weldtool)
|
||||
weldtool.loc = T
|
||||
@@ -84,7 +84,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(W.is_screwdriver() && igniter && !lit)
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER) && igniter && !lit)
|
||||
status = !status
|
||||
to_chat(user, "<span class='notice'>[igniter] is now [status ? "secured" : "unsecured"]!</span>")
|
||||
update_icon()
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
/obj/effect/spresent/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
|
||||
if (!W.is_wirecutter())
|
||||
if (!W.has_tool_quality(TOOL_WIRECUTTER))
|
||||
to_chat(user, "<span class='warning'>I need wirecutters for that.</span>")
|
||||
return
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
to_chat(user, "<span class='warning'>You MUST put the paper on a table!</span>")
|
||||
if (W.w_class < ITEMSIZE_LARGE)
|
||||
var/obj/item/I = user.get_inactive_hand()
|
||||
if(I.is_wirecutter())
|
||||
if(I.has_tool_quality(TOOL_WIRECUTTER))
|
||||
var/a_used = 2 ** (src.w_class - 1)
|
||||
if (src.amount < a_used)
|
||||
to_chat(user, "<span class='warning'>You need more paper!</span>")
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
icon_state = initial(icon_state) +"_ass"
|
||||
name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]"
|
||||
stage = 1
|
||||
else if(W.is_screwdriver() && path != 2)
|
||||
else if(W.has_tool_quality(TOOL_SCREWDRIVER) && path != 2)
|
||||
if(stage == 1)
|
||||
path = 1
|
||||
if(beakers.len)
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.is_screwdriver())
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
switch(det_time)
|
||||
if (1)
|
||||
det_time = 10
|
||||
|
||||
@@ -191,6 +191,10 @@
|
||||
name = "Entertainer's ID"
|
||||
initial_sprite_stack = list("base-stamp", "top-generic", "stamp-n", "stripe-brown")
|
||||
|
||||
/obj/item/weapon/card/id/civilian/entrepreneur
|
||||
name = "Entrepreneur's ID"
|
||||
initial_sprite_stack = list("base-stamp", "top-generic", "stamp-n", "stripe-gold")
|
||||
|
||||
/obj/item/weapon/card/id/civilian/clown
|
||||
name = "Clown's ID"
|
||||
initial_sprite_stack = list("base-stamp", "top-rainbow", "stamp-n")
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
return IC.examine(user)
|
||||
|
||||
/obj/item/weapon/implant/integrated_circuit/attackby(var/obj/item/O, var/mob/user)
|
||||
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) )
|
||||
if(O.has_tool_quality(TOOL_CROWBAR) || istype(O, /obj/item/device/integrated_electronics) || istype(O, /obj/item/integrated_circuit) || O.has_tool_quality(TOOL_SCREWDRIVER) || istype(O, /obj/item/weapon/cell/device) )
|
||||
IC.attackby(O, user)
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
thrown_force_divisor = 0.1
|
||||
|
||||
/obj/item/weapon/material/butterflyconstruction/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(W.is_screwdriver())
|
||||
if(W.has_tool_quality(TOOL_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)
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/inducer/attackby(obj/item/W, mob/user)
|
||||
if(W.is_screwdriver())
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
if(!opened)
|
||||
to_chat(user, "<span class='notice'>You open the battery compartment.</span>")
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
/obj/item/weapon/simple_key
|
||||
name = "key"
|
||||
desc = "A plain, old-timey key, as one might use to unlock a door."
|
||||
icon = 'icons/obj/keys.dmi'
|
||||
icon_state = "key_basetype"
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
pickup_sound = 'sound/items/pickup/ring.ogg'
|
||||
w_class = ITEMSIZE_TINY
|
||||
var/keyverb = "uses" //so simple_keys can be keycards instead, if desired
|
||||
var/key_id = "placeholder_DONOTUSE" //needs to match the associated door's LOCK_ID var
|
||||
@@ -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(W.is_screwdriver())
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
var/carving_1 = sanitizeSafe(tgui_input_text(user, "Who is \the [src.name] for?", "Gravestone Naming", null, MAX_NAME_LEN), 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(W.is_wrench())
|
||||
if(W.has_tool_quality(TOOL_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))
|
||||
|
||||
@@ -290,7 +290,7 @@ Protectiveness | Armor %
|
||||
unbreakable = FALSE
|
||||
name = "plate insert"
|
||||
desc = "used to craft armor plates for a plate carrier. Trim with a welder for light armor or add a second for heavy armor"
|
||||
|
||||
|
||||
/obj/item/weapon/material/armor_plating/attackby(var/obj/O, mob/user)
|
||||
if(istype(O, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/S = O
|
||||
@@ -323,12 +323,12 @@ Protectiveness | Armor %
|
||||
..()
|
||||
|
||||
//Make plating inserts for modular armour.
|
||||
/obj/item/weapon/material/armor_plating/insert/attackby(var/obj/O, mob/user)
|
||||
/obj/item/weapon/material/armor_plating/insert/attackby(var/obj/item/O, mob/user)
|
||||
|
||||
. = ..()
|
||||
|
||||
if(istype(O, /obj/item/weapon/weldingtool))
|
||||
var /obj/item/weapon/weldingtool/S = O
|
||||
if(O.has_tool_quality(TOOL_WELDER))
|
||||
var /obj/item/weapon/weldingtool/S = O.get_welder()
|
||||
if(S.remove_fuel(0,user))
|
||||
if(!src || !S.isOn()) return
|
||||
to_chat(user, "<span class='notice'>You trim down the edges to size.</span>")
|
||||
|
||||
@@ -47,8 +47,8 @@
|
||||
alpha = 255
|
||||
|
||||
/obj/item/weapon/material/shard/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/weldingtool) && material.shard_can_repair)
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(W.has_tool_quality(TOOL_WELDER) && material.shard_can_repair)
|
||||
var/obj/item/weapon/weldingtool/WT = W.get_welder()
|
||||
if(WT.remove_fuel(0, user))
|
||||
material.place_sheet(loc)
|
||||
qdel(src)
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
update_icon()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] already has a cell.</span>")
|
||||
else if(W.is_screwdriver() && bcell)
|
||||
else if(W.has_tool_quality(TOOL_SCREWDRIVER) && bcell)
|
||||
bcell.update_icon()
|
||||
bcell.forceMove(get_turf(loc))
|
||||
bcell = null
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/altevian
|
||||
name = "plasma blade cutter"
|
||||
desc = "A device used as both defense and operational purposes to cut through most metals. This is usually seen on engineers from the altevian hegemony when working salvaging derelicts."
|
||||
desc = "A device that's primarily used to cut through hull plating and interior structure, but also doubles as a deadly weapon. It's normally seen in the hands of altevian engineers as they carry out salvage work."
|
||||
icon_state = "altevian-cutter"
|
||||
item_state = "altevian-cutter"
|
||||
icon = 'icons/obj/weapons_vr.dmi'
|
||||
@@ -22,4 +22,4 @@
|
||||
if(active)
|
||||
icon_state = "[initial(icon_state)]_active"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
@@ -13,22 +13,4 @@
|
||||
sharp = TRUE
|
||||
edge = FALSE
|
||||
attack_verb = list("stabbed", "lunged at", "dextrously struck", "sliced", "lacerated", "impaled", "diced", "charioted")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
/obj/item/weapon/melee/altevian_wrench
|
||||
name = "Hull Systems Multi-Wrench"
|
||||
desc = "A wrench designed with a method to help secure and access bolts, hatches, and airlocks on altevian designed vessels. This operates as nothing more than a massive wrench when used for other purposes."
|
||||
icon = 'icons/obj/weapons_vr.dmi'
|
||||
icon_state = "altevian-wrench"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_melee_vr.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_melee_vr.dmi',
|
||||
)
|
||||
slot_flags = SLOT_BACK
|
||||
force = 25
|
||||
throwforce = 15
|
||||
w_class = ITEMSIZE_HUGE
|
||||
sharp = FALSE
|
||||
edge = FALSE
|
||||
attack_verb = list("whacked", "slammed", "bashed", "wrenched", "fixed", "bolted", "clonked", "bonked")
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
@@ -54,6 +54,8 @@
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/tool/transforming/powerdrill,
|
||||
/obj/item/weapon/tool/transforming/jawsoflife,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/cell/device,
|
||||
@@ -124,6 +126,8 @@
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/tool/transforming/powerdrill,
|
||||
/obj/item/weapon/tool/transforming/jawsoflife,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/cell/device,
|
||||
@@ -153,8 +157,8 @@
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/chief/full
|
||||
starts_with = list(
|
||||
/obj/item/weapon/tool/screwdriver/power,
|
||||
/obj/item/weapon/tool/crowbar/power,
|
||||
/obj/item/weapon/tool/transforming/powerdrill,
|
||||
/obj/item/weapon/tool/transforming/jawsoflife,
|
||||
/obj/item/weapon/weldingtool/experimental,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/stack/cable_coil/random_belt,
|
||||
@@ -169,11 +173,13 @@
|
||||
storage_slots = 14 //twice the amount as a normal belt
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 14
|
||||
can_hold = list(
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/tool/transforming/powerdrill,
|
||||
/obj/item/weapon/tool/transforming/jawsoflife,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/cell/device,
|
||||
@@ -507,6 +513,7 @@
|
||||
/obj/item/weapon/anodevice,
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/tool/transforming/powerdrill,
|
||||
/obj/item/weapon/storage/excavation,
|
||||
/obj/item/weapon/anobattery,
|
||||
/obj/item/device/ano_scanner,
|
||||
|
||||
@@ -109,6 +109,7 @@
|
||||
/obj/item/weapon/anodevice,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/tool/transforming/powerdrill,
|
||||
/obj/item/weapon/storage/excavation,
|
||||
/obj/item/weapon/anobattery,
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector,
|
||||
@@ -147,6 +148,7 @@
|
||||
/obj/item/weapon/clipboard,
|
||||
/obj/item/weapon/anodevice,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/tool/transforming/powerdrill,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/weapon/storage/excavation,
|
||||
/obj/item/weapon/anobattery,
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy,
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy,
|
||||
/obj/item/weapon/storage/pill_bottle/inaprovaline,
|
||||
/obj/item/weapon/storage/pill_bottle/iron,
|
||||
/obj/item/weapon/storage/pill_bottle/blood_regen,
|
||||
/obj/item/weapon/storage/pill_bottle/dexalin
|
||||
)
|
||||
|
||||
@@ -146,6 +146,12 @@
|
||||
/obj/item/weapon/storage/pill_bottle/iron
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/iron = 14)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/blood_regen
|
||||
name = "pill bottle (blood regeneration)"
|
||||
desc = "Contains iron and copper pills for treating bloodloss by employed species."
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/iron = 9,
|
||||
/obj/item/weapon/reagent_containers/pill/copper = 5)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/adminordrazine
|
||||
name = "pill bottle (Adminordrazine)"
|
||||
desc = "It's magic. We don't have to explain it."
|
||||
@@ -265,7 +271,8 @@
|
||||
starts_with = list(
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline = 3,
|
||||
/obj/item/weapon/reagent_containers/pill/antitox = 3,
|
||||
/obj/item/weapon/reagent_containers/pill/iron = 2,
|
||||
/obj/item/weapon/reagent_containers/pill/iron = 1,
|
||||
/obj/item/weapon/reagent_containers/pill/copper = 1,
|
||||
/obj/item/weapon/reagent_containers/pill/tramadol = 2,
|
||||
/obj/item/weapon/reagent_containers/pill/hyronalin = 3,
|
||||
/obj/item/weapon/reagent_containers/pill/spaceacillin
|
||||
|
||||
@@ -76,6 +76,8 @@
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/tool/transforming/powerdrill,
|
||||
/obj/item/weapon/tool/transforming/jawsoflife,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/cell/device,
|
||||
@@ -95,9 +97,9 @@
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
/obj/item/weapon/tape_roll,
|
||||
/obj/item/device/integrated_electronics/wirer,
|
||||
/obj/item/device/integrated_electronics/debugger,
|
||||
/obj/item/weapon/shovel/spade,
|
||||
/obj/item/stack/nanopaste,
|
||||
/obj/item/device/integrated_electronics/debugger,
|
||||
/obj/item/weapon/shovel/spade,
|
||||
/obj/item/stack/nanopaste,
|
||||
/obj/item/device/geiger
|
||||
) //Vorestation Add - make it the same as the tool-belt why was it not like this to start with wtf
|
||||
|
||||
@@ -156,7 +158,7 @@
|
||||
/obj/item/stack/nanopaste,
|
||||
/obj/item/taperoll/medical,
|
||||
/obj/item/weapon/storage/box/freezer,
|
||||
/obj/item/clothing/mask/chewable/candy/lolli,
|
||||
/obj/item/clothing/mask/chewable/candy/lolli,
|
||||
) //Vorestation add - added a bunch of misc medical stuff
|
||||
max_storage_space = ITEMSIZE_COST_SMALL*3 //Vorestation Add - makes it slightly smaller since its a lot of stuff with pocket access
|
||||
remove_delay = 5 //Vorestation Add - .5 second delay, get the medical things faster because there is no reason to use this otherwise. still gotta stop moving to take things out.
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
playsound(src, "sparks", 50, 1)
|
||||
return
|
||||
|
||||
if (W.is_screwdriver())
|
||||
if (W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
if (do_after(user, 20 * W.toolspeed))
|
||||
src.open =! src.open
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
|
||||
@@ -97,9 +97,9 @@
|
||||
/obj/item/weapon/storage/toolbox/syndicate/powertools
|
||||
starts_with = list(
|
||||
/obj/item/clothing/gloves/yellow,
|
||||
/obj/item/weapon/tool/screwdriver/power,
|
||||
/obj/item/weapon/tool/transforming/powerdrill,
|
||||
/obj/item/weapon/weldingtool/experimental,
|
||||
/obj/item/weapon/tool/crowbar/power,
|
||||
/obj/item/weapon/tool/transforming/jawsoflife,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/stack/cable_coil/random_belt,
|
||||
/obj/item/device/analyzer
|
||||
|
||||
@@ -328,7 +328,6 @@
|
||||
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/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,
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
/obj/item/weapon/makeover,
|
||||
/obj/item/pizzavoucher //VOREStation edit
|
||||
)
|
||||
cant_hold = list(/obj/item/weapon/tool/screwdriver/power)
|
||||
slot_flags = SLOT_ID
|
||||
|
||||
var/obj/item/weapon/card/id/front_id = null
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/flame/lighter/zippo/c4detonator/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
if(W.is_screwdriver())
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
detonator_mode = !detonator_mode
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
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(W.is_wirecutter())
|
||||
if(W.has_tool_quality(TOOL_WIRECUTTER))
|
||||
if(wired && src.proxyassembly.assembly)
|
||||
|
||||
to_chat(user, "<span class='notice'>You carefully begin clipping the wires that attach to the tank.</span>")
|
||||
@@ -185,7 +185,7 @@ var/list/global/tank_gauge_cache = list()
|
||||
to_chat(user, "<span class='notice'>You need to wire the device up first.</span>")
|
||||
|
||||
|
||||
if(istype(W, /obj/item/weapon/weldingtool/))
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(1,user))
|
||||
if(!valve_welded)
|
||||
|
||||
@@ -72,34 +72,40 @@
|
||||
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)
|
||||
name = "power pryer"
|
||||
desc = "You shouldn't see this."
|
||||
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
|
||||
/*
|
||||
* Prybar
|
||||
*/
|
||||
|
||||
/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/prybar
|
||||
name = "pry bar"
|
||||
desc = "A steel bar with a wedge, designed specifically for opening unpowered doors in an emergency. It comes in a variety of configurations - collect them all!"
|
||||
icon = 'icons/obj/tools_vr.dmi'
|
||||
icon_state = "prybar"
|
||||
item_state = "crowbar"
|
||||
slot_flags = SLOT_BELT
|
||||
force = 4
|
||||
throwforce = 5
|
||||
pry = 1
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_ENGINEERING = 1)
|
||||
matter = list(MAT_STEEL = 30)
|
||||
attack_verb = list("whapped", "smacked", "swatted", "thwacked", "hit")
|
||||
usesound = 'sound/items/crowbar.ogg'
|
||||
toolspeed = 1
|
||||
var/random_color = TRUE
|
||||
|
||||
/obj/item/weapon/tool/crowbar/power/attack_self(mob/user)
|
||||
playsound(src, 'sound/items/change_jaws.ogg', 50, 1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
counterpart.persist_storable = persist_storable
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the cutting jaws to [src].</span>")
|
||||
/obj/item/weapon/tool/prybar/red
|
||||
icon_state = "prybar_red"
|
||||
item_state = "crowbar_red"
|
||||
random_color = FALSE
|
||||
|
||||
/obj/item/weapon/tool/prybar/New()
|
||||
if(random_color)
|
||||
icon_state = "prybar[pick("","_green","_aubergine","_blue")]"
|
||||
. = ..()
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* Prybar
|
||||
*/
|
||||
|
||||
/obj/item/weapon/tool/prybar
|
||||
name = "pry bar"
|
||||
desc = "A steel bar with a wedge, designed specifically for opening unpowered doors in an emergency. It comes in a variety of configurations - collect them all!"
|
||||
icon = 'icons/obj/tools_vr.dmi'
|
||||
icon_state = "prybar"
|
||||
item_state = "crowbar"
|
||||
slot_flags = SLOT_BELT
|
||||
force = 4
|
||||
throwforce = 5
|
||||
pry = 1
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_ENGINEERING = 1)
|
||||
matter = list(MAT_STEEL = 30)
|
||||
attack_verb = list("whapped", "smacked", "swatted", "thwacked", "hit")
|
||||
usesound = 'sound/items/crowbar.ogg'
|
||||
toolspeed = 1
|
||||
var/random_color = TRUE
|
||||
|
||||
/obj/item/weapon/tool/prybar/red
|
||||
icon_state = "prybar_red"
|
||||
item_state = "crowbar_red"
|
||||
random_color = FALSE
|
||||
|
||||
/obj/item/weapon/tool/prybar/New()
|
||||
if(random_color)
|
||||
icon_state = "prybar[pick("","_green","_aubergine","_blue")]"
|
||||
. = ..()
|
||||
@@ -106,42 +106,10 @@
|
||||
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(MAT_STEEL = 150, MAT_SILVER = 50)
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
slot_flags = SLOT_BELT
|
||||
name = "power screwdriver"
|
||||
desc = "You shouldn't see this."
|
||||
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(src,'sound/items/change_drill.ogg',50,1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
counterpart.persist_storable = persist_storable
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the bolt driver bit to [src].</span>")
|
||||
toolspeed = 0.25
|
||||
@@ -0,0 +1,182 @@
|
||||
/obj/item/weapon/tool/transforming
|
||||
name = "transforming tool"
|
||||
desc = "You should never see this..."
|
||||
var/list/possible_tooltypes = list()
|
||||
var/current_tooltype = 1
|
||||
var/obj/item/weapon/weldingtool/welder
|
||||
var/weldertype = /obj/item/weapon/weldingtool/dummy
|
||||
|
||||
/obj/item/weapon/tool/transforming/New(newloc, no_counterpart = TRUE)
|
||||
..(newloc)
|
||||
if(TOOL_WELDER in possible_tooltypes)
|
||||
welder = new weldertype(src)
|
||||
on_tool_switch()
|
||||
|
||||
/obj/item/weapon/tool/transforming/Destroy()
|
||||
if(welder)
|
||||
QDEL_NULL(welder)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/tool/transforming/get_welder()
|
||||
return welder
|
||||
|
||||
/obj/item/weapon/tool/transforming/attack_self(mob/user)
|
||||
if(!possible_tooltypes.len || possible_tooltypes.len < 2)
|
||||
return
|
||||
if(current_tooltype == possible_tooltypes.len)
|
||||
current_tooltype = 1
|
||||
else
|
||||
current_tooltype++
|
||||
|
||||
on_tool_switch(user)
|
||||
|
||||
/obj/item/weapon/tool/transforming/proc/on_tool_switch(var/mob/user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/tool/transforming/jawsoflife
|
||||
name = "jaws of life"
|
||||
desc = "A set of jaws of life, compressed through the magic of science."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "jaws_pry"
|
||||
item_state = "jawsoflife"
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
matter = list(MAT_METAL=150, MAT_SILVER=50)
|
||||
usesound = 'sound/items/jaws_pry.ogg'
|
||||
force = 15
|
||||
toolspeed = 0.25
|
||||
sharp = TRUE
|
||||
edge = TRUE
|
||||
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked", "pinched", "nipped")
|
||||
possible_tooltypes = list(TOOL_CROWBAR,TOOL_WIRECUTTER)
|
||||
|
||||
/obj/item/weapon/tool/transforming/jawsoflife/on_tool_switch(var/mob/user)
|
||||
switch(possible_tooltypes[current_tooltype])
|
||||
if(TOOL_CROWBAR)
|
||||
desc = initial(desc) + " It's fitted with a prying head."
|
||||
icon_state = "jaws_pry"
|
||||
usesound = 'sound/items/jaws_pry.ogg'
|
||||
tool_qualities = list(TOOL_CROWBAR)
|
||||
if(user)
|
||||
playsound(src, 'sound/items/change_jaws.ogg', 50, 1)
|
||||
to_chat(user, "<span class='notice'>You attach the pry jaws to [src].</span>")
|
||||
if(TOOL_WIRECUTTER)
|
||||
desc = initial(desc) + " It's fitted with a cutting head."
|
||||
icon_state = "jaws_cutter"
|
||||
usesound = 'sound/items/jaws_cut.ogg'
|
||||
tool_qualities = list(TOOL_WIRECUTTER)
|
||||
if(user)
|
||||
playsound(src, 'sound/items/change_jaws.ogg', 50, 1)
|
||||
to_chat(user, "<span class='notice'>You attach the cutting jaws to [src].</span>")
|
||||
|
||||
/obj/item/weapon/tool/transforming/powerdrill
|
||||
name = "hand drill"
|
||||
desc = "A simple powered hand drill."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "drill_bolt"
|
||||
item_state = "drill"
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
matter = list(MAT_STEEL = 150, MAT_SILVER = 50)
|
||||
hitsound = 'sound/items/drill_hit.ogg'
|
||||
usesound = 'sound/items/drill_use.ogg'
|
||||
force = 8
|
||||
throwforce = 8
|
||||
toolspeed = 0.25
|
||||
sharp = FALSE
|
||||
edge = FALSE
|
||||
attack_verb = list("drilled", "screwed", "jabbed", "whacked")
|
||||
possible_tooltypes = list(TOOL_WRENCH,TOOL_SCREWDRIVER)
|
||||
|
||||
/obj/item/weapon/tool/transforming/powerdrill/on_tool_switch(var/mob/user)
|
||||
switch(possible_tooltypes[current_tooltype])
|
||||
if(TOOL_WRENCH)
|
||||
desc = initial(desc) + " It's fitted with a bolt driver."
|
||||
icon_state = "drill_bolt"
|
||||
sharp = FALSE
|
||||
tool_qualities = list(TOOL_WRENCH)
|
||||
if(user)
|
||||
playsound(src,'sound/items/change_drill.ogg',50,1)
|
||||
to_chat(user, "<span class='notice'>You attach the bolt driver to [src].</span>")
|
||||
if(TOOL_SCREWDRIVER)
|
||||
desc = initial(desc) + " It's fitted with a screw driver."
|
||||
icon_state = "drill_screw"
|
||||
sharp = TRUE
|
||||
tool_qualities = list(TOOL_SCREWDRIVER)
|
||||
if(user)
|
||||
playsound(src,'sound/items/change_drill.ogg',50,1)
|
||||
to_chat(user, "<span class='notice'>You attach the screw driver to [src].</span>")
|
||||
|
||||
/obj/item/weapon/tool/transforming/altevian
|
||||
name = "Hull Systems Omni-Tool"
|
||||
desc = "A big and bulky tool, used by Altevians for engineering duties. It's able to do the job of any regular tool while scaled up to a comically large size. It seems nanites are in play to help with adjusting the tip and handling some of the heavy lifting when in use."
|
||||
icon = 'icons/obj/weapons_vr.dmi'
|
||||
icon_state = "altevian-wrench"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_melee_vr.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_melee_vr.dmi',
|
||||
)
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = ITEMSIZE_HUGE
|
||||
force = 25
|
||||
throwforce = 15
|
||||
toolspeed = 0.25
|
||||
sharp = FALSE
|
||||
edge = FALSE
|
||||
attack_verb = list("whacked", "slammed", "bashed", "wrenched", "fixed", "bolted", "clonked", "bonked")
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
possible_tooltypes = list(TOOL_WRENCH,TOOL_CROWBAR,TOOL_WIRECUTTER,TOOL_SCREWDRIVER,TOOL_MULTITOOL,TOOL_WELDER)
|
||||
weldertype = /obj/item/weapon/weldingtool/dummy/altevian
|
||||
|
||||
/obj/item/weapon/tool/transforming/altevian/on_tool_switch(var/mob/user)
|
||||
switch(possible_tooltypes[current_tooltype])
|
||||
if(TOOL_WRENCH)
|
||||
desc = initial(desc) + " It's currently in bolting mode."
|
||||
icon_state = "altevian-wrench"
|
||||
usesound = 'sound/items/ratchet.ogg'
|
||||
tool_qualities = list(TOOL_WRENCH)
|
||||
if(user)
|
||||
playsound(src,'sound/items/ratchet.ogg',50,1)
|
||||
to_chat(user, "<span class='notice'>You reconfigure [src] into bolting mode.</span>")
|
||||
if(TOOL_CROWBAR)
|
||||
desc = initial(desc) + " It's currently in prying mode."
|
||||
icon_state = "altevian-crowbar"
|
||||
usesound = 'sound/items/crowbar.ogg'
|
||||
tool_qualities = list(TOOL_CROWBAR)
|
||||
if(user)
|
||||
playsound(src,'sound/items/ratchet.ogg',50,1)
|
||||
to_chat(user, "<span class='notice'>You reconfigure [src] into prying mode.</span>")
|
||||
if(TOOL_WIRECUTTER)
|
||||
desc = initial(desc) + " It's currently in cutting mode."
|
||||
icon_state = "altevian-wirecutter"
|
||||
usesound = 'sound/items/wirecutter.ogg'
|
||||
tool_qualities = list(TOOL_WIRECUTTER)
|
||||
if(user)
|
||||
playsound(src,'sound/items/ratchet.ogg',50,1)
|
||||
to_chat(user, "<span class='notice'>You reconfigure [src] into cutting mode.</span>")
|
||||
if(TOOL_SCREWDRIVER)
|
||||
desc = initial(desc) + " It's currently in screwing mode."
|
||||
icon_state = "altevian-screwdriver"
|
||||
usesound = 'sound/items/screwdriver.ogg'
|
||||
tool_qualities = list(TOOL_SCREWDRIVER)
|
||||
if(user)
|
||||
playsound(src,'sound/items/ratchet.ogg',50,1)
|
||||
to_chat(user, "<span class='notice'>You reconfigure [src] into screwing mode.</span>")
|
||||
if(TOOL_MULTITOOL)
|
||||
desc = initial(desc) + " It's currently in pulsing mode."
|
||||
icon_state = "altevian-pulser"
|
||||
usesound = 'sound/items/screwdriver.ogg'
|
||||
tool_qualities = list(TOOL_MULTITOOL)
|
||||
if(user)
|
||||
playsound(src,'sound/items/ratchet.ogg',50,1)
|
||||
to_chat(user, "<span class='notice'>You reconfigure [src] into pulsing mode.</span>")
|
||||
if(TOOL_WELDER)
|
||||
desc = initial(desc) + " It's currently in welding mode."
|
||||
icon_state = "altevian-welder-on"
|
||||
welder.usesound = 'sound/items/Welder2.ogg'
|
||||
usesound = 'sound/items/Welder2.ogg'
|
||||
tool_qualities = list(TOOL_WELDER)
|
||||
if(user)
|
||||
playsound(src,'sound/items/ratchet.ogg',50,1)
|
||||
to_chat(user, "<span class='notice'>You reconfigure [src] into welding mode.</span>")
|
||||
|
||||
/obj/item/weapon/weldingtool/dummy/altevian
|
||||
toolspeed = 0.25
|
||||
@@ -41,6 +41,7 @@
|
||||
toolspeed = 1
|
||||
drop_sound = 'sound/items/drop/weldingtool.ogg'
|
||||
pickup_sound = 'sound/items/pickup/weldingtool.ogg'
|
||||
tool_qualities = list(TOOL_WELDER)
|
||||
|
||||
/obj/item/weapon/weldingtool/Initialize()
|
||||
. = ..()
|
||||
@@ -58,6 +59,9 @@
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/weldingtool/get_welder()
|
||||
return src
|
||||
|
||||
/obj/item/weapon/weldingtool/examine(mob/user)
|
||||
. = ..()
|
||||
if(max_fuel && loc == user)
|
||||
@@ -690,4 +694,22 @@
|
||||
else
|
||||
setWelding(FALSE, M.occupant)
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/dummy
|
||||
name = "dummy welding tool"
|
||||
desc = "you shouldn't be reading this. Tell a dev!"
|
||||
welding = TRUE
|
||||
|
||||
/obj/item/weapon/weldingtool/dummy/process()
|
||||
return
|
||||
|
||||
/obj/item/weapon/weldingtool/dummy/get_fuel()
|
||||
return get_max_fuel()
|
||||
|
||||
/obj/item/weapon/weldingtool/dummy/remove_fuel(var/amount = 1, var/mob/M = null)
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/weldingtool/dummy/isOn()
|
||||
return TRUE
|
||||
|
||||
#undef WELDER_FUEL_BURN_INTERVAL
|
||||
|
||||
@@ -98,35 +98,8 @@
|
||||
reach = 2
|
||||
|
||||
/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)
|
||||
name = "power cutters"
|
||||
desc = "You shouldn't see this."
|
||||
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(src, 'sound/items/change_jaws.ogg', 50, 1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
counterpart.persist_storable = persist_storable
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the pry jaws to [src].</span>")
|
||||
toolspeed = 0.25
|
||||
@@ -74,37 +74,10 @@
|
||||
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"
|
||||
name = "power wrench"
|
||||
desc = "You shouldn't see this."
|
||||
usesound = 'sound/items/drill_use.ogg'
|
||||
matter = list(MAT_STEEL = 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(src,'sound/items/change_drill.ogg',50,1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
counterpart.persist_storable = persist_storable
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the screw driver bit to [src].</span>")
|
||||
|
||||
@@ -244,7 +244,7 @@
|
||||
|
||||
var/inc_damage = W.force
|
||||
|
||||
if(W.is_wirecutter())
|
||||
if(W.has_tool_quality(TOOL_WIRECUTTER))
|
||||
if(!shock(user, 100, pick(BP_L_HAND, BP_R_HAND)))
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
inc_damage *= 3
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
|
||||
/obj/random/tool/powermaint/item_to_spawn()
|
||||
return pick(prob(320);/obj/random/tool,
|
||||
prob(1);/obj/item/weapon/tool/screwdriver/power,
|
||||
prob(1);/obj/item/weapon/tool/wirecutters/power,
|
||||
prob(1);/obj/item/weapon/tool/transforming/powerdrill,
|
||||
prob(1);/obj/item/weapon/tool/transforming/jawsoflife,
|
||||
prob(15);/obj/item/weapon/weldingtool/electric,
|
||||
prob(5);/obj/item/weapon/weldingtool/experimental)
|
||||
|
||||
@@ -36,8 +36,8 @@
|
||||
icon_state = "tool_2"
|
||||
|
||||
/obj/random/tool/power/item_to_spawn()
|
||||
return pick(/obj/item/weapon/tool/screwdriver/power,
|
||||
/obj/item/weapon/tool/wirecutters/power,
|
||||
return pick(/obj/item/weapon/tool/transforming/powerdrill,
|
||||
/obj/item/weapon/tool/transforming/jawsoflife,
|
||||
/obj/item/weapon/weldingtool/electric,
|
||||
/obj/item/weapon/weldingtool/experimental)
|
||||
|
||||
@@ -215,7 +215,7 @@
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/dermaline,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/dexalin_plus,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/bicaridine,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/iron)
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/blood_regen)
|
||||
|
||||
/obj/random/medical/lite
|
||||
name = "Random Medicine"
|
||||
@@ -1111,3 +1111,32 @@
|
||||
/obj/item/weapon/storage/box/donkpockets/honk,
|
||||
/obj/item/weapon/storage/box/donkpockets/gondola,
|
||||
/obj/item/weapon/storage/box/donkpockets/berry)
|
||||
|
||||
/obj/random/bluespace
|
||||
name = "Random Bluespace Item"
|
||||
desc = "This is a random Bluespace item."
|
||||
icon_state = "bluespace"
|
||||
|
||||
/obj/random/bluespace/item_to_spawn()
|
||||
return pick(
|
||||
prob(20);/obj/item/weapon/gun/energy/sizegun,
|
||||
prob(20);/obj/item/device/slow_sizegun,
|
||||
prob(20);/obj/item/clothing/accessory/collar/shock/bluespace,
|
||||
prob(4);/obj/item/weapon/reagent_containers/glass/beaker/bluespace,
|
||||
prob(4);/obj/item/device/bodysnatcher,
|
||||
prob(10);/obj/item/clothing/under/hyperfiber,
|
||||
prob(10);/obj/item/clothing/under/hyperfiber/bluespace,
|
||||
prob(20);/obj/item/weapon/implant/sizecontrol,
|
||||
prob(2);/obj/item/weapon/storage/bag/ore/holding,
|
||||
prob(2);/obj/item/weapon/storage/backpack/holding,
|
||||
prob(2);/obj/item/weapon/storage/backpack/holding/duffle,
|
||||
prob(2);/obj/item/weapon/storage/bag/trash/holding,
|
||||
prob(2);/obj/item/weapon/storage/pouch/holding,
|
||||
prob(2);/obj/item/weapon/storage/belt/medical/holding,
|
||||
prob(2);/obj/item/weapon/storage/belt/utility/holding,
|
||||
prob(2);/obj/item/device/perfect_tele,
|
||||
prob(8);/obj/item/capture_crystal/random,
|
||||
prob(10);/obj/item/weapon/bluespace_harpoon,
|
||||
prob(10);/obj/item/weapon/bluespace_crystal,
|
||||
prob(1);/obj/item/clothing/glasses/graviton
|
||||
)
|
||||
@@ -235,3 +235,134 @@
|
||||
prob(5);/obj/item/organ/internal/stomach,
|
||||
prob(5);/obj/item/organ/internal/voicebox,
|
||||
)
|
||||
|
||||
/obj/random/potion
|
||||
name = "random potion"
|
||||
desc = "A random potion."
|
||||
icon_state = "potion"
|
||||
spawn_nothing_percentage = 0
|
||||
|
||||
/obj/random/potion/item_to_spawn()
|
||||
return pick(prob(20);/obj/item/weapon/reagent_containers/glass/bottle/potion/healing,
|
||||
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/greater_healing,
|
||||
prob(20);/obj/item/weapon/reagent_containers/glass/bottle/potion/fire_resist,
|
||||
prob(20);/obj/item/weapon/reagent_containers/glass/bottle/potion/antidote,
|
||||
prob(20);/obj/item/weapon/reagent_containers/glass/bottle/potion/water,
|
||||
prob(8);/obj/item/weapon/reagent_containers/glass/bottle/potion/regeneration,
|
||||
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/panacea,
|
||||
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/magic,
|
||||
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/lightness,
|
||||
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/SOP,
|
||||
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/shrink,
|
||||
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/growth,
|
||||
prob(20);/obj/item/weapon/reagent_containers/glass/bottle/potion/pain,
|
||||
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/faerie,
|
||||
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/relaxation,
|
||||
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/speed,
|
||||
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/attractiveness,
|
||||
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/girljuice,
|
||||
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/boyjuice,
|
||||
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/badpolymorph,
|
||||
prob(2);/obj/item/weapon/reagent_containers/glass/bottle/potion/bonerepair,
|
||||
prob(1);/obj/item/weapon/reagent_containers/glass/bottle/potion/truepolymorph
|
||||
)
|
||||
|
||||
/obj/random/potion_ingredient
|
||||
name = "random potion ingredient"
|
||||
desc = "A random potion."
|
||||
icon_state = "ingredient"
|
||||
spawn_nothing_percentage = 0
|
||||
|
||||
/obj/random/potion_ingredient/item_to_spawn()
|
||||
return pick(prob(10);/obj/item/weapon/potion_material/blood_ruby,
|
||||
prob(2);/obj/item/weapon/potion_material/ruby_eye,
|
||||
prob(10);/obj/item/weapon/potion_material/golden_scale,
|
||||
prob(10);/obj/item/weapon/potion_material/frozen_dew,
|
||||
prob(10);/obj/item/weapon/potion_material/living_coral,
|
||||
prob(4);/obj/item/weapon/potion_material/rare_horn,
|
||||
prob(5);/obj/item/weapon/potion_material/moldy_bread,
|
||||
prob(5);/obj/item/weapon/potion_material/glowing_gem,
|
||||
prob(5);/obj/item/weapon/potion_material/giant_toe,
|
||||
prob(2);/obj/item/weapon/potion_material/flesh_of_the_stars,
|
||||
prob(2);/obj/item/weapon/potion_material/spinning_poppy,
|
||||
prob(2);/obj/item/weapon/potion_material/salt_mage,
|
||||
prob(10);/obj/item/weapon/potion_material/golden_grapes,
|
||||
prob(5);/obj/item/weapon/potion_material/fairy_house,
|
||||
prob(5);/obj/item/weapon/potion_material/thorny_bulb,
|
||||
prob(5);/obj/item/weapon/potion_material/ancient_egg,
|
||||
prob(5);/obj/item/weapon/potion_material/crown_stem,
|
||||
prob(2);/obj/item/weapon/potion_material/red_ingot,
|
||||
prob(2);/obj/item/weapon/potion_material/soft_diamond,
|
||||
prob(2);/obj/item/weapon/potion_material/solid_mist,
|
||||
prob(1);/obj/item/weapon/potion_material/spider_leg,
|
||||
prob(1);/obj/item/weapon/potion_material/folded_dark
|
||||
)
|
||||
|
||||
/obj/random/potion_base
|
||||
name = "random potion base"
|
||||
desc = "A random potion base."
|
||||
icon_state = "base"
|
||||
spawn_nothing_percentage = 0
|
||||
|
||||
/obj/random/potion_base/item_to_spawn()
|
||||
return pick(prob(10);/obj/item/weapon/potion_base/aqua_regia,
|
||||
prob(10);/obj/item/weapon/potion_base/ichor,
|
||||
prob(10);/obj/item/weapon/potion_base/alkahest
|
||||
)
|
||||
|
||||
/obj/random/fantasy_item
|
||||
name = "random fantasy item"
|
||||
desc = "A random fantasy item."
|
||||
icon_state = "fantasy"
|
||||
spawn_nothing_percentage = 0
|
||||
|
||||
/obj/random/fantasy_item/item_to_spawn()
|
||||
return pick(prob(3);/obj/item/device/healthanalyzer/scroll,
|
||||
prob(10);/obj/item/weapon/gun/energy/taser/magic,
|
||||
prob(5);/obj/item/weapon/bluespace_harpoon/wand,
|
||||
prob(10);/obj/item/device/slow_sizegun/magic,
|
||||
prob(10);/obj/item/clothing/gloves/bluespace/magic,
|
||||
prob(30);/obj/item/weapon/coin/gold,
|
||||
prob(30);/obj/item/weapon/coin/silver,
|
||||
prob(30);/obj/item/weapon/coin/platinum,
|
||||
prob(20);/obj/item/weapon/material/sword/rapier,
|
||||
prob(20);/obj/item/weapon/material/sword/longsword,
|
||||
prob(20);/obj/item/clothing/head/helmet/bucket/wood,
|
||||
prob(3);/obj/item/weapon/tool/wirecutters/alien/magic,
|
||||
prob(3);/obj/item/weapon/tool/crowbar/alien/magic,
|
||||
prob(3);/obj/item/weapon/tool/screwdriver/alien/magic,
|
||||
prob(3);/obj/item/weapon/weldingtool/alien/magic,
|
||||
prob(3);/obj/item/weapon/tool/wrench/alien/magic,
|
||||
prob(3);/obj/item/weapon/surgical/bone_clamp/alien/magic,
|
||||
prob(10);/obj/item/stack/material/gold,
|
||||
prob(10);/obj/item/stack/material/silver,
|
||||
prob(3);/obj/item/weapon/bone/skull,
|
||||
prob(20);/obj/item/weapon/material/twohanded/staff,
|
||||
prob(3);/obj/item/weapon/gun/energy/hooklauncher/ring,
|
||||
prob(3);/obj/item/toy/eight_ball,
|
||||
prob(3);/obj/item/device/perfect_tele/magic
|
||||
)
|
||||
|
||||
/obj/random/fantasy_item/better
|
||||
name = "better random fantasy item"
|
||||
desc = "A random fantasy item."
|
||||
icon_state = "fantasy2"
|
||||
spawn_nothing_percentage = 0
|
||||
|
||||
/obj/random/fantasy_item/better/item_to_spawn()
|
||||
return pick(prob(10);/obj/item/device/healthanalyzer/scroll,
|
||||
prob(10);/obj/item/weapon/gun/energy/taser/magic,
|
||||
prob(10);/obj/item/weapon/bluespace_harpoon/wand,
|
||||
prob(10);/obj/item/device/slow_sizegun/magic,
|
||||
prob(10);/obj/item/clothing/gloves/bluespace/magic,
|
||||
prob(10);/obj/item/weapon/tool/wirecutters/alien/magic,
|
||||
prob(10);/obj/item/weapon/tool/crowbar/alien/magic,
|
||||
prob(10);/obj/item/weapon/tool/screwdriver/alien/magic,
|
||||
prob(10);/obj/item/weapon/weldingtool/alien/magic,
|
||||
prob(10);/obj/item/weapon/tool/wrench/alien/magic,
|
||||
prob(10);/obj/item/weapon/surgical/bone_clamp/alien/magic,
|
||||
prob(10);/obj/item/weapon/material/twohanded/staff,
|
||||
prob(10);/obj/item/weapon/gun/energy/hooklauncher/ring,
|
||||
prob(10);/obj/item/device/perfect_tele/magic,
|
||||
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/truepolymorph
|
||||
)
|
||||
|
||||
@@ -394,7 +394,7 @@
|
||||
frame_canvas(user, I)
|
||||
else if(current_canvas && current_canvas.painting_name == initial(current_canvas.painting_name) && istype(I,/obj/item/weapon/pen))
|
||||
try_rename(user)
|
||||
else if(current_canvas && I.is_wirecutter())
|
||||
else if(current_canvas && I.has_tool_quality(TOOL_WIRECUTTER))
|
||||
unframe_canvas(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -87,12 +87,12 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/catwalk/attackby(obj/item/C as obj, mob/user as mob)
|
||||
if(istype(C, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = C
|
||||
if(C.has_tool_quality(TOOL_WELDER))
|
||||
var/obj/item/weapon/weldingtool/WT = C.get_welder()
|
||||
if(WT.isOn() && WT.remove_fuel(0, user))
|
||||
deconstruct(user)
|
||||
return
|
||||
if(C.is_crowbar() && plated_tile)
|
||||
if(C.has_tool_quality(TOOL_CROWBAR) && plated_tile)
|
||||
hatch_open = !hatch_open
|
||||
if(hatch_open)
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 100, 2)
|
||||
|
||||
@@ -271,7 +271,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.is_wrench())
|
||||
if(W.has_tool_quality(TOOL_WRENCH))
|
||||
if(opened)
|
||||
if(anchored)
|
||||
user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
|
||||
@@ -291,8 +291,8 @@
|
||||
return 0
|
||||
if(istype(W,/obj/item/tk_grab))
|
||||
return 0
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(W.has_tool_quality(TOOL_WELDER))
|
||||
var/obj/item/weapon/weldingtool/WT = W.get_welder()
|
||||
if(!WT.remove_fuel(0,user))
|
||||
if(!WT.isOn())
|
||||
return
|
||||
@@ -326,8 +326,8 @@
|
||||
else if(seal_tool)
|
||||
if(istype(W, seal_tool))
|
||||
var/obj/item/weapon/S = W
|
||||
if(istype(S, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = S
|
||||
if(S.has_tool_quality(TOOL_WELDER))
|
||||
var/obj/item/weapon/weldingtool/WT = S.get_welder()
|
||||
if(!WT.remove_fuel(0,user))
|
||||
if(!WT.isOn())
|
||||
return
|
||||
|
||||
@@ -1441,6 +1441,10 @@
|
||||
decals = null
|
||||
color = COLOR_OFF_WHITE
|
||||
|
||||
/decl/closet_appearance/wall_double/wooden
|
||||
decals = null
|
||||
color = WOOD_COLOR_RICH
|
||||
|
||||
/decl/closet_appearance/wall_double/medical
|
||||
decals = null
|
||||
color = COLOR_OFF_WHITE
|
||||
@@ -1578,6 +1582,15 @@
|
||||
/decl/closet_appearance/wall_double/generic_civ
|
||||
color = COLOR_DARK_BLUE_GRAY
|
||||
|
||||
/decl/closet_appearance/wall_double/casino
|
||||
color = COLOR_GRAY20
|
||||
decals = null
|
||||
extra_decals = list(
|
||||
"stripe_outer" = COLOR_GOLD,
|
||||
"stripe_inner" = COLOR_ORANGE,
|
||||
"thaler" = COLOR_GREEN
|
||||
)
|
||||
|
||||
// Carts
|
||||
/decl/closet_appearance/cart
|
||||
color = COLOR_GRAY20
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
icon_state = icon_closed
|
||||
|
||||
/obj/structure/closet/secure_closet/egg/attackby(obj/item/weapon/W, mob/user as mob) //This also prevents crew from welding the eggs and making them unable to be opened.
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
if(W.has_tool_quality(TOOL_WELDER))
|
||||
src.dump_contents()
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
to_chat(user, "<span class='notice'>Access Denied</span>")
|
||||
|
||||
/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.is_wrench())
|
||||
if(W.has_tool_quality(TOOL_WRENCH))
|
||||
if(opened)
|
||||
if(anchored)
|
||||
user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
|
||||
@@ -90,7 +90,7 @@
|
||||
spark_system.start()
|
||||
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
|
||||
playsound(src, "sparks", 50, 1)
|
||||
else if(istype(W,/obj/item/weapon/packageWrap) || istype(W,/obj/item/weapon/weldingtool))
|
||||
else if(istype(W,/obj/item/weapon/packageWrap) || W.has_tool_quality(TOOL_WELDER))
|
||||
return ..(W,user)
|
||||
else
|
||||
togglelock(user)
|
||||
|
||||
@@ -80,6 +80,27 @@
|
||||
/obj/structure/closet/walllocker/medical/east
|
||||
pixel_x = 32
|
||||
dir = EAST
|
||||
|
||||
/obj/structure/closet/walllocker/wooden
|
||||
name = "wooden cabinet"
|
||||
desc = "A wall mounted storage cabinet."
|
||||
closet_appearance = /decl/closet_appearance/wall_double/wooden
|
||||
|
||||
/obj/structure/closet/walllocker/wooden/north
|
||||
pixel_y = 32
|
||||
dir = SOUTH
|
||||
|
||||
/obj/structure/closet/walllocker/wooden/south
|
||||
pixel_y = -32
|
||||
dir = NORTH
|
||||
|
||||
/obj/structure/closet/walllocker/wooden/west
|
||||
pixel_x = -32
|
||||
dir = WEST
|
||||
|
||||
/obj/structure/closet/walllocker/wooden/east
|
||||
pixel_x = 32
|
||||
dir = EAST
|
||||
//VOREStation Add End
|
||||
|
||||
//double-size "cabinet" lockers, from Killian
|
||||
@@ -315,6 +336,25 @@
|
||||
pixel_x = 32
|
||||
dir = EAST
|
||||
|
||||
/obj/structure/closet/walllocker_double/casino
|
||||
closet_appearance = /decl/closet_appearance/wall_double/casino
|
||||
|
||||
/obj/structure/closet/walllocker_double/casino/north
|
||||
pixel_y = 32
|
||||
dir = SOUTH
|
||||
|
||||
/obj/structure/closet/walllocker_double/casino/south
|
||||
pixel_y = -32
|
||||
dir = NORTH
|
||||
|
||||
/obj/structure/closet/walllocker_double/casino/west
|
||||
pixel_x = -32
|
||||
dir = WEST
|
||||
|
||||
/obj/structure/closet/walllocker_double/casino/east
|
||||
pixel_x = 32
|
||||
dir = EAST
|
||||
|
||||
/obj/structure/closet/walllocker_double/cargo
|
||||
desc = "A wall mounted cabinet. This one is in cargo colors."
|
||||
closet_appearance = /decl/closet_appearance/wall_double/cargo
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
src.set_dir(turn(src.dir, 90))
|
||||
|
||||
/obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.is_wrench() && istype(src,/obj/structure/closet/crate/bin))
|
||||
if(W.has_tool_quality(TOOL_WRENCH) && istype(src,/obj/structure/closet/crate/bin))
|
||||
return ..()
|
||||
else if(opened)
|
||||
if(isrobot(user))
|
||||
@@ -117,7 +117,7 @@
|
||||
user.drop_item()
|
||||
W.forceMove(src)
|
||||
return
|
||||
else if(W.is_wirecutter())
|
||||
else if(W.has_tool_quality(TOOL_WIRECUTTER))
|
||||
if(rigged)
|
||||
to_chat(user , "<span class='notice'>You cut away the wiring.</span>")
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
@@ -730,6 +730,15 @@
|
||||
open_sound = 'sound/effects/wooden_closet_open.ogg'
|
||||
close_sound = 'sound/effects/wooden_closet_close.ogg'
|
||||
|
||||
//Chest
|
||||
/obj/structure/closet/crate/chest
|
||||
name = "chest"
|
||||
desc = "A fancy chest made from wood and lined with red velvet."
|
||||
icon = 'icons/obj/closets/chest.dmi'
|
||||
closet_appearance = null
|
||||
open_sound = 'sound/effects/wooden_closet_open.ogg'
|
||||
close_sound = 'sound/effects/wooden_closet_close.ogg'
|
||||
|
||||
//Mining Cart
|
||||
/obj/structure/closet/crate/miningcar
|
||||
name = "mining cart"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
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())
|
||||
if(W.has_tool_quality(TOOL_CROWBAR))
|
||||
new /obj/item/stack/material/wood(src)
|
||||
|
||||
for(var/atom/movable/AM in contents)
|
||||
@@ -55,7 +55,7 @@
|
||||
icon_state = "vehiclecrate"
|
||||
|
||||
/obj/structure/largecrate/hoverpod/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.is_crowbar())
|
||||
if(W.has_tool_quality(TOOL_CROWBAR))
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME
|
||||
var/obj/mecha/working/hoverpod/H = new (loc)
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "You hear chirping and cawing inside the crate. It sounds like there are a lot of birds in there..."
|
||||
|
||||
/obj/structure/largecrate/birds/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.is_crowbar())
|
||||
if(W.has_tool_quality(TOOL_CROWBAR))
|
||||
new /obj/item/stack/material/wood(src)
|
||||
new /mob/living/simple_mob/animal/passive/bird(src)
|
||||
new /mob/living/simple_mob/animal/passive/bird/parrot/kea(src)
|
||||
|
||||
@@ -31,11 +31,11 @@
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
to_chat(user, "<span class='notice'>You can't open this here!</span>")
|
||||
if(W.is_wrench() && do_after(user, 60 * W.toolspeed, src))
|
||||
if(W.has_tool_quality(TOOL_WRENCH) && do_after(user, 60 * W.toolspeed, src))
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
disassemble(W, user)
|
||||
user.visible_message("<span class='notice'>[user] begins loosening \the [src]'s bolts.</span>")
|
||||
if(W.is_wirecutter() && do_after(user, 70 * W.toolspeed, src))
|
||||
if(W.has_tool_quality(TOOL_WIRECUTTER) && do_after(user, 70 * W.toolspeed, src))
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
disassemble(W, user)
|
||||
user.visible_message("<span class='notice'>[user] begins cutting \the [src]'s bolts.</span>")
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
layer = OBJ_LAYER
|
||||
|
||||
/obj/structure/curtain/attackby(obj/item/P, mob/user)
|
||||
if(P.is_wirecutter())
|
||||
if(P.has_tool_quality(TOOL_WIRECUTTER))
|
||||
playsound(src, P.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>You start to cut the shower curtains.</span>")
|
||||
if(do_after(user, 10))
|
||||
|
||||
@@ -20,14 +20,14 @@
|
||||
layer = BELOW_MOB_LAYER
|
||||
|
||||
/obj/structure/dancepole/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(O.is_screwdriver())
|
||||
if(O.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
anchored = !anchored
|
||||
playsound(src, O.usesound, 50, 1)
|
||||
if(anchored)
|
||||
to_chat(user, "<font color='blue'>You secure \the [src].</font>")
|
||||
else
|
||||
to_chat(user, "<font color='blue'>You unsecure \the [src].</font>")
|
||||
if(O.is_wrench())
|
||||
if(O.has_tool_quality(TOOL_WRENCH))
|
||||
playsound(src, O.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>Now disassembling \the [src]...</span>")
|
||||
if(do_after(user, 30 * O.toolspeed))
|
||||
|
||||
@@ -170,8 +170,8 @@
|
||||
rename_door(user)
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/weldingtool) && ( (istext(glass)) || (glass == 1) || (!anchored) ))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(W.has_tool_quality(TOOL_WELDER) && ( (istext(glass)) || (glass == 1) || (!anchored) ))
|
||||
var/obj/item/weapon/weldingtool/WT = W.get_welder()
|
||||
if (WT.remove_fuel(0, user))
|
||||
playsound(src, WT.usesound, 50, 1)
|
||||
if(istext(glass))
|
||||
@@ -200,7 +200,7 @@
|
||||
to_chat(user, "<span class='notice'>You need more welding fuel.</span>")
|
||||
return
|
||||
|
||||
else if(W.is_wrench() && state == 0)
|
||||
else if(W.has_tool_quality(TOOL_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(W.is_wirecutter() && state == 1 )
|
||||
else if(W.has_tool_quality(TOOL_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(W.is_crowbar() && state == 2 )
|
||||
else if(W.has_tool_quality(TOOL_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(W.is_screwdriver() && state == 2 )
|
||||
else if(W.has_tool_quality(TOOL_SCREWDRIVER) && state == 2 )
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
to_chat(user, "<span class='notice'>Now finishing the airlock.</span>")
|
||||
|
||||
|
||||
@@ -31,15 +31,15 @@
|
||||
if(!T)
|
||||
warning("Drop pod wasn't spawned on a turf")
|
||||
return
|
||||
|
||||
|
||||
moveToNullspace()
|
||||
icon_state = "[initial(icon_state)]_falling"
|
||||
|
||||
|
||||
// Show warning on 3x3 area centred on our drop spot
|
||||
var/list/turfs_nearby = block(get_step(T, SOUTHWEST), get_step(T, NORTHEAST))
|
||||
for(var/turf/TN in turfs_nearby)
|
||||
new /obj/effect/temporary_effect/shuttle_landing(TN)
|
||||
|
||||
|
||||
// Wait a minute
|
||||
sleep(4 SECONDS)
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
T.hotspot_expose(900)
|
||||
sleep(1 SECOND)
|
||||
filters = null
|
||||
|
||||
|
||||
// CRONCH
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 50, 1)
|
||||
if(!polite)
|
||||
@@ -69,7 +69,7 @@
|
||||
else
|
||||
for(var/turf/simulated/floor/F in view(1, T))
|
||||
F.burn_tile(900)
|
||||
|
||||
|
||||
for(var/obj/O in T)
|
||||
if(O == src)
|
||||
continue
|
||||
@@ -80,7 +80,7 @@
|
||||
// Landed! Simmer
|
||||
plane = initial(plane)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
|
||||
|
||||
if(auto_open)
|
||||
sleep(2 SECONDS)
|
||||
open_pod()
|
||||
@@ -109,7 +109,7 @@
|
||||
user.visible_message("<b>[user]</b> opens \the [src]!","You open \the [src]!")
|
||||
|
||||
/obj/structure/drop_pod/attackby(obj/item/O, mob/user)
|
||||
if(O.is_wrench())
|
||||
if(O.has_tool_quality(TOOL_WRENCH))
|
||||
if(finished)
|
||||
to_chat(user, "<span class='notice'>You start breaking down \the [src].</span>")
|
||||
if(do_after(user, 10 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE))
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/bed/chair/e_chair/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.is_wrench())
|
||||
if(W.has_tool_quality(TOOL_WRENCH))
|
||||
var/obj/structure/bed/chair/C = new /obj/structure/bed/chair(loc)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
C.set_dir(dir)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
to_chat(user, "<span class='notice'>You place [O] in [src].</span>")
|
||||
else
|
||||
opened = !opened
|
||||
if(O.is_wrench())
|
||||
if(O.has_tool_quality(TOOL_WRENCH))
|
||||
if(!has_extinguisher)
|
||||
to_chat(user, "<span class='notice'>You start to unwrench the extinguisher cabinet.</span>")
|
||||
playsound(src, O.usesound, 50, 1)
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/structure/fence/attackby(obj/item/W, mob/user)
|
||||
if(W.is_wirecutter())
|
||||
if(W.has_tool_quality(TOOL_WIRECUTTER))
|
||||
if(!cuttable)
|
||||
to_chat(user, span("warning", "This section of the fence can't be cut."))
|
||||
return
|
||||
@@ -170,6 +170,41 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/structure/fence/wood
|
||||
cuttable = FALSE
|
||||
name = "fence"
|
||||
desc = "A wooden fence. Not as effective as a wall, but generally it keeps people out."
|
||||
description_info = "Projectiles can freely pass fences."
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
|
||||
icon = 'icons/obj/fence.dmi'
|
||||
icon_state = "wood_straight"
|
||||
|
||||
/obj/structure/fence/wood/end
|
||||
icon_state = "wood_end"
|
||||
|
||||
/obj/structure/fence/wood/corner
|
||||
icon_state = "wood_corner"
|
||||
|
||||
/obj/structure/fence/hedge
|
||||
cuttable = FALSE
|
||||
name = "hedge"
|
||||
desc = "A large hedge. Not as effective as a wall, but generally it keeps people out."
|
||||
description_info = "Projectiles can freely pass fences."
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
opacity = 1
|
||||
|
||||
icon = 'icons/obj/fence.dmi'
|
||||
icon_state = "hedge_straight"
|
||||
|
||||
/obj/structure/fence/hedge/end
|
||||
icon_state = "hedge_end"
|
||||
|
||||
/obj/structure/fence/hedge/corner
|
||||
icon_state = "hedge_corner"
|
||||
|
||||
#undef CUT_TIME
|
||||
#undef CLIMB_TIME
|
||||
|
||||
|
||||
@@ -34,7 +34,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(W.is_wrench())
|
||||
if(W.has_tool_quality(TOOL_WRENCH))
|
||||
playsound(src, 'sound/items/Deconstruct.ogg', 75, 1)
|
||||
weight = ((weight) % qualifiers.len) + 1
|
||||
to_chat(user, "You set the machine's weight level to [weight].")
|
||||
|
||||
@@ -640,3 +640,48 @@
|
||||
|
||||
/obj/structure/flora/sif/frostbelle/get_harvestable_desc()
|
||||
return "<span class='notice'>\The [src] seems to be budding.</span>"
|
||||
|
||||
//Start of underwater plants
|
||||
|
||||
/obj/structure/flora/underwater
|
||||
name = "underwater plant"
|
||||
desc = "A plant that thrives deep under water."
|
||||
icon = 'icons/obj/flora/underwaterflora.dmi'
|
||||
icon_state = "plant-1"
|
||||
|
||||
/obj/structure/flora/underwater/plant1
|
||||
icon_state = "plant-1"
|
||||
|
||||
/obj/structure/flora/underwater/plant2
|
||||
icon_state = "plant-2"
|
||||
|
||||
/obj/structure/flora/underwater/plant3
|
||||
icon_state = "plant-3"
|
||||
|
||||
/obj/structure/flora/underwater/plant4
|
||||
icon_state = "plant-4"
|
||||
|
||||
/obj/structure/flora/underwater/plant5
|
||||
icon_state = "plant-5"
|
||||
|
||||
/obj/structure/flora/underwater/seaweed1
|
||||
icon_state = "seaweed-1"
|
||||
|
||||
/obj/structure/flora/underwater/seaweed2
|
||||
icon_state = "seaweed-2"
|
||||
|
||||
/obj/structure/flora/underwater/seaweed3
|
||||
icon_state = "seaweed-3"
|
||||
|
||||
/obj/structure/flora/underwater/grass1
|
||||
icon_state = "grass-1"
|
||||
|
||||
/obj/structure/flora/underwater/grass2
|
||||
icon_state = "grass-2"
|
||||
|
||||
/obj/structure/flora/underwater/grass3
|
||||
icon_state = "grass-3"
|
||||
|
||||
/obj/structure/flora/underwater/grass4
|
||||
icon_state = "grass-4"
|
||||
|
||||
|
||||
@@ -53,7 +53,14 @@
|
||||
"Snapdragon" =/mob/living/simple_mob/vore/pakkun/snapdragon,
|
||||
"Sand pakkun" = /mob/living/simple_mob/vore/pakkun/sand,
|
||||
"Fire pakkun" = /mob/living/simple_mob/vore/pakkun/fire,
|
||||
"Amethyst pakkun" = /mob/living/simple_mob/vore/pakkun/purple
|
||||
"Amethyst pakkun" = /mob/living/simple_mob/vore/pakkun/purple,
|
||||
"Raptor" = /mob/living/simple_mob/vore/raptor,
|
||||
"Giant Bat" = /mob/living/simple_mob/vore/bat,
|
||||
"Scel (Orange)" = /mob/living/simple_mob/vore/scel/orange,
|
||||
"Scel (Blue)" = /mob/living/simple_mob/vore/scel/blue,
|
||||
"Scel (Purple)" = /mob/living/simple_mob/vore/scel/purple,
|
||||
"Scel (Red)" = /mob/living/simple_mob/vore/scel/red,
|
||||
"Scel (Green)" = /mob/living/simple_mob/vore/scel/green
|
||||
)
|
||||
|
||||
/obj/structure/ghost_pod/ghost_activated/maintpred/create_occupant(var/mob/M)
|
||||
@@ -66,6 +73,10 @@
|
||||
reset_ghostpod()
|
||||
return
|
||||
|
||||
//No OOC notes
|
||||
if (not_has_ooc_text(M))
|
||||
return
|
||||
|
||||
while(finalized == "No" && M.client)
|
||||
choice = tgui_input_list(M, "What type of predator do you want to play as?", "Maintpred Choice", possible_mobs)
|
||||
if(!choice) //We probably pushed the cancel button on the mob selection. Let's just put the ghost pod back in the list.
|
||||
@@ -115,6 +126,11 @@
|
||||
|
||||
/obj/structure/ghost_pod/ghost_activated/morphspawn/create_occupant(var/mob/M)
|
||||
..()
|
||||
|
||||
//No OOC notes
|
||||
if (not_has_ooc_text(M))
|
||||
return
|
||||
|
||||
var/mob/living/simple_mob/vore/morph/newMorph = new /mob/living/simple_mob/vore/morph(get_turf(src))
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(newMorph)
|
||||
|
||||
@@ -90,6 +90,11 @@
|
||||
if(jobban_isbanned(user, "GhostRoles"))
|
||||
to_chat(user, "<span class='warning'>You cannot inhabit this creature because you are banned from playing ghost roles.</span>")
|
||||
return
|
||||
|
||||
//No OOC notes
|
||||
if (not_has_ooc_text(user))
|
||||
return
|
||||
|
||||
//VOREStation Add End
|
||||
if(used)
|
||||
to_chat(user, "<span class='warning'>Another spirit appears to have gotten to \the [src] before you. Sorry.</span>")
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
to_chat(user, "<span class='warning'>You cannot inhabit this creature because you are banned from playing ghost roles.</span>")
|
||||
return
|
||||
|
||||
//No OOC notes
|
||||
if (not_has_ooc_text(user))
|
||||
return
|
||||
|
||||
if(!remains_active || busy)
|
||||
return
|
||||
|
||||
@@ -51,4 +55,4 @@
|
||||
/obj/structure/ghost_pod/ghost_activated/Initialize(var/mapload)
|
||||
. = ..()
|
||||
if(!mapload)
|
||||
ghostpod_startup(spawn_active)
|
||||
ghostpod_startup(spawn_active)
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
reinforce_girder()
|
||||
|
||||
/obj/structure/girder/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(W.is_wrench() && state == 0)
|
||||
if(W.has_tool_quality(TOOL_WRENCH) && state == 0)
|
||||
if(anchored && !reinf_material)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
to_chat(user, "<span class='notice'>Now disassembling the girder...</span>")
|
||||
@@ -172,7 +172,7 @@
|
||||
to_chat(user, "<span class='notice'>You drill through the girder!</span>")
|
||||
dismantle()
|
||||
|
||||
else if(W.is_screwdriver())
|
||||
else if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
if(state == 2)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
to_chat(user, "<span class='notice'>Now unsecuring support struts...</span>")
|
||||
@@ -185,7 +185,7 @@
|
||||
reinforcing = !reinforcing
|
||||
to_chat(user, "<span class='notice'>\The [src] can now be [reinforcing? "reinforced" : "constructed"]!</span>")
|
||||
|
||||
else if(W.is_wirecutter() && state == 1)
|
||||
else if(W.has_tool_quality(TOOL_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))
|
||||
@@ -195,7 +195,7 @@
|
||||
reinf_material = null
|
||||
reset_girder()
|
||||
|
||||
else if(W.is_crowbar() && state == 0 && anchored)
|
||||
else if(W.has_tool_quality(TOOL_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))
|
||||
@@ -339,7 +339,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/girder/cult/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(W.is_wrench())
|
||||
if(W.has_tool_quality(TOOL_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))
|
||||
@@ -419,4 +419,3 @@
|
||||
|
||||
/obj/structure/girder/eris
|
||||
wall_type = /turf/simulated/wall/eris
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
return TRUE
|
||||
|
||||
/obj/structure/gravemarker/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
if(W.is_screwdriver())
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
var/carving_1 = sanitizeSafe(tgui_input_text(user, "Who is \the [src.name] for?", "Gravestone Naming", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(carving_1)
|
||||
user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
|
||||
@@ -67,7 +67,7 @@
|
||||
epitaph += carving_2
|
||||
update_icon()
|
||||
return
|
||||
if(W.is_wrench())
|
||||
if(W.has_tool_quality(TOOL_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 @@
|
||||
return
|
||||
if(istype(W, /obj/item/weapon/rcd)) // To stop us from hitting the grille when building windows, because grilles don't let parent handle it properly.
|
||||
return FALSE
|
||||
else if(W.is_wirecutter())
|
||||
else if(W.has_tool_quality(TOOL_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((W.is_screwdriver()) && (istype(loc, /turf/simulated) || anchored))
|
||||
else if((W.has_tool_quality(TOOL_SCREWDRIVER)) && (istype(loc, /turf/simulated) || anchored))
|
||||
if(!shock(user, 90))
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
anchored = !anchored
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user