This commit is contained in:
izac112
2023-10-30 11:24:00 +01:00
734 changed files with 324304 additions and 28792 deletions
+2 -2
View File
@@ -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
+3 -3
View File
@@ -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,
+2 -2
View File
@@ -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!"
+3
View File
@@ -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
+1 -1
View File
@@ -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>")
+2 -2
View File
@@ -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>")
+1 -1
View File
@@ -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))
+1 -1
View File
@@ -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
+3 -3
View File
@@ -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"))
+1 -1
View File
@@ -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)
+234 -234
View File
@@ -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())
+1 -1
View File
@@ -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
-1
View File
@@ -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",
+2 -2
View File
@@ -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.")
+13
View File
@@ -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"
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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>")
+2 -2
View File
@@ -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>")
+10
View File
@@ -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
+1 -1
View File
@@ -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>")
+1 -1
View File
@@ -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
+34 -5
View File
@@ -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
)
+131
View File
@@ -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
)
+1 -1
View File
@@ -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 ..()
+3 -3
View File
@@ -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>")
+1 -1
View File
@@ -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))
+2 -2
View File
@@ -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>")
+7 -7
View File
@@ -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)
+1 -1
View File
@@ -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)
+36 -1
View File
@@ -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
+1 -1
View File
@@ -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)
+5 -6
View File
@@ -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
+2 -2
View File
@@ -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].")
+2 -2
View File
@@ -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