This commit is contained in:
izac112
2023-10-30 11:24:00 +01:00
734 changed files with 324304 additions and 28792 deletions
+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
+1 -1
View File
@@ -176,7 +176,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
//This prevents dumb stuff like splashing the cart with the contents of a container, after putting said container into trash
else if (!has_items)
if (I.is_wrench())
if (I.has_tool_quality(TOOL_WRENCH))
if (do_after(user, 5 SECONDS, src))
dismantle(user)
return
+4 -4
View File
@@ -55,19 +55,19 @@
/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob)
if (istype(C, /obj/item/stack/tile/floor))
if(istype(C, /obj/item/stack/tile/floor))
var/turf/T = get_turf(src)
T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead
return
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.welding == 1)
if(WT.remove_fuel(0, user))
to_chat(user, "<span class='notice'>Slicing lattice joints ...</span>")
new /obj/item/stack/rods(src.loc)
qdel(src)
return
if (istype(C, /obj/item/stack/rods))
if(istype(C, /obj/item/stack/rods))
var/obj/item/stack/rods/R = C
if(R.get_amount() < 2)
to_chat(user, "<span class='notice'>You need at least two rods to form a catwalk here.</span>")
+1 -1
View File
@@ -86,7 +86,7 @@
return
// Dismantling the half wall
if(W.is_wrench())
if(W.has_tool_quality(TOOL_WRENCH))
for(var/obj/structure/S in loc)
if(istype(S, /obj/structure/window))
to_chat(user, "<span class='notice'>There is still a window on the low wall!</span>")
@@ -295,7 +295,7 @@
to_chat(user, "<span class='warning'>Close the valve first.</span>")
return
if (tank)
if(!W.is_wrench())
if(!W.has_tool_quality(TOOL_WRENCH))
return
if (!is_loosen)
is_loosen = TRUE
+2 -2
View File
@@ -50,7 +50,7 @@
..()
/obj/structure/mirror/attackby(obj/item/I as obj, mob/user as mob)
if(I.is_wrench())
if(I.has_tool_quality(TOOL_WRENCH))
if(!glass)
playsound(src, I.usesound, 50, 1)
if(do_after(user, 20 * I.toolspeed))
@@ -58,7 +58,7 @@
new /obj/item/frame/mirror( src.loc )
qdel(src)
return
if(I.is_wrench())
if(I.has_tool_quality(TOOL_WRENCH))
if(shattered && glass)
to_chat(user, "<span class='notice'>The broken glass falls out.</span>")
icon_state = "mirror_frame"
+1 -1
View File
@@ -17,7 +17,7 @@
)
/obj/structure/plasticflaps/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 plastic flaps.</span>")
if(do_after(user, 10 * P.toolspeed))
@@ -1,7 +1,7 @@
/obj/structure/prop/altevian_generator_wrecked
name = "Converted High Energy Exchange Supplier Extractor"
desc = "A take on the classic PACMAN reactors that are seen throughout the galaxy. The altevians have ripped apart the tech and seemed to of found a way to maximize the fuel usage one would see with this kind of process. \
However, it is a lot bulkier and nearly impossible to break apart, but still can be moved if need be with special tools. This one appears to be totally wrecked though."
name = "Phoronic Conversion System"
desc = "A reactor system similar to the PACMAN generators seen throughout the stars. This one is a specific model created by the altevians. It seems the designers have found a way to significantly improve fuel efficiency compared to more common portable generators. \
However, due to its construction and size it is nearly impossible to break apart. It still can be moved if need be with special tools. This one appears to be totally wrecked though."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "alteviangenwrecked"
bound_width = 64
@@ -33,4 +33,4 @@
icon_state = "altevian_jump_drive_wrecked"
desc = "A drive created by the Altevian Hegemony that focuses heavily on using Bluespace and other tactics to achieve a stable traversal between the stars. \
This drive is commonly seen on their medium sized craft to help with logistical operations. This one appears to be totally wrecked."
has_misc_overlay = FALSE
has_misc_overlay = FALSE
@@ -0,0 +1,52 @@
//props for more fantasy type settings
/obj/structure/prop/fantasy
name = "some fantasy thing"
desc = "My description is broken, bug a developer."
icon = 'icons/obj/props/fantasy.dmi'
density = TRUE
anchored = TRUE
/obj/structure/prop/fantasy/throne
name = "throne"
desc = "An ornate golden throne for the truly pompous."
icon_state = "throne"
/obj/structure/prop/fantasy/anvil
name = "anvil"
desc = "A big solid chunk of cast steel used for smithing."
icon_state = "anvil"
/obj/structure/prop/fantasy/grindstone
name = "grindstone"
desc = "A pedal powered, rough wheel that is used to sharpen and refine metal."
icon_state = "grindstone"
/obj/structure/prop/fantasy/kiln
name = "kiln"
desc = "A large stone furnace."
icon_state = "kiln"
/obj/structure/prop/fantasy/redbanner
name = "tapestry"
desc = "A red tapestry hanging from the wall."
icon_state = "redbanner"
density = FALSE
/obj/structure/prop/fantasy/pinkbanner
name = "tapestry"
desc = "A red tapestry hanging from the wall."
icon_state = "pinkbanner"
density = FALSE
/obj/structure/prop/fantasy/redbanner_standing
name = "banner"
desc = "A red banner hanging from a stand."
icon_state = "redbanner_stand"
density = FALSE
/obj/structure/prop/fantasy/pinkbanner_standing
name = "banner"
desc = "A red banner hanging from a stand."
icon_state = "pinkbanner_stand"
density = FALSE
@@ -21,6 +21,15 @@
/obj/structure/prop/statue/statue5
icon_state = "artwork_statue_5"
//sunken ship mast
/obj/structure/prop/statue/sunkensail
name = "sail mast"
desc = "A long since collapsed mast with a sail draped over it."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "sunkensail"
density = FALSE
//TGMC Ship Mast
/obj/structure/prop/statue/stump_plaque
+4 -4
View File
@@ -202,7 +202,7 @@
/obj/structure/railing/attackby(obj/item/W as obj, mob/user as mob)
// Dismantle
if(W.is_wrench() && !anchored)
if(W.has_tool_quality(TOOL_WRENCH) && !anchored)
playsound(src, W.usesound, 50, 1)
if(do_after(user, 20, src))
user.visible_message("<b>\The [user]</b> dismantles \the [src].", "<span class='notice'>You dismantle \the [src].</span>")
@@ -211,8 +211,8 @@
return
// Repair
if(health < maxhealth && istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/F = W
if(health < maxhealth && W.has_tool_quality(TOOL_WELDER))
var/obj/item/weapon/weldingtool/F = W.get_welder()
if(F.welding)
playsound(src, F.usesound, 50, 1)
if(do_after(user, 20, src))
@@ -221,7 +221,7 @@
return
// Install
if(W.is_screwdriver())
if(W.has_tool_quality(TOOL_SCREWDRIVER))
user.visible_message(anchored ? "<b>\The [user]</b> begins unscrewing \the [src]." : "<b>\The [user]</b> begins fasten \the [src]." )
playsound(src, W.usesound, 75, 1)
if(do_after(user, 10, src))
+1 -1
View File
@@ -14,7 +14,7 @@
return
/obj/structure/salvageable/attackby(obj/item/I, mob/user)
if(I.is_crowbar())
if(I.has_tool_quality(TOOL_CROWBAR))
playsound(src, I.usesound, 50, 1)
var/actual_time = I.toolspeed * 170
user.visible_message( \
+2 -2
View File
@@ -11,7 +11,7 @@
qdel(src)
/obj/structure/sign/attackby(obj/item/tool, mob/user) //deconstruction
if(tool.is_screwdriver() && !istype(src, /obj/structure/sign/scenery) && !istype(src, /obj/structure/sign/double))
if(tool.has_tool_quality(TOOL_SCREWDRIVER) && !istype(src, /obj/structure/sign/scenery) && !istype(src, /obj/structure/sign/double))
playsound(src, tool.usesound, 50, 1)
unfasten(user)
else ..()
@@ -36,7 +36,7 @@
var/original_type
/obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction
if(tool.is_screwdriver() && isturf(user.loc))
if(tool.has_tool_quality(TOOL_SCREWDRIVER) && isturf(user.loc))
var/direction = tgui_input_list(usr, "In which direction?", "Select direction.", list("North", "East", "South", "West", "Cancel"))
if(direction == "Cancel") return
var/target_type = original_type || /obj/structure/sign
+23 -4
View File
@@ -1,5 +1,6 @@
/obj/structure/simple_door
name = "door"
description_info = "If you hold left alt whilst left-clicking on a door, you can knock on it to announce your presence to anyone on the other side! Alternately if you are on HARM intent when doing this, you will bang loudly on the door!"
density = TRUE
anchored = TRUE
can_atmos_pass = ATMOS_PASS_DENSITY
@@ -15,6 +16,10 @@
var/knock_sound = 'sound/machines/door/knock_glass.ogg'
var/knock_hammer_sound = 'sound/weapons/sonic_jackhammer.ogg'
var/locked = FALSE //has the door been locked?
var/lock_id = null //does the door have an associated key?
var/keysound = 'sound/items/toolbelt_equip.ogg'
/obj/structure/simple_door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
TemperatureAct(exposed_temperature)
@@ -96,6 +101,9 @@
var/mob/M = user
if(!material.can_open_material_door(user))
return
if(locked && state == 0)
to_chat(M,"<span class='warning'>It's locked!</span>")
return
if(world.time - user.last_bumped <= 60)
return
if(M.client)
@@ -146,13 +154,24 @@
/obj/structure/simple_door/attackby(obj/item/weapon/W as obj, mob/user as mob)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(istype(W,/obj/item/weapon/pickaxe))
if(istype(W,/obj/item/weapon/simple_key))
var/obj/item/weapon/simple_key/key = W
if(state)
to_chat(user,"<span class='notice'>\The [src] must be closed in order for you to lock it.</span>")
else if(key.key_id != src.lock_id)
to_chat(user,"<span class='warning'>The [key] doesn't fit \the [src]'s lock!</span>")
else if(key.key_id == src.lock_id)
visible_message("<span class='notice'>[user] [key.keyverb] \the [key] and [locked ? "unlocks" : "locks"] \the [src].</span>")
locked = !locked
playsound(src, keysound,100, 1)
return
if(istype(W,/obj/item/weapon/pickaxe) && breakable)
var/obj/item/weapon/pickaxe/digTool = W
visible_message("<span class='danger'>[user] starts digging [src]!</span>")
if(do_after(user,digTool.digspeed*hardness) && src)
visible_message("<span class='danger'>[user] finished digging [src]!</span>")
Dismantle()
else if(istype(W,/obj/item/weapon)) //not sure, can't not just weapons get passed to this proc?
else if(istype(W,/obj/item/weapon) && breakable) //not sure, can't not just weapons get passed to this proc?
hardness -= W.force/10
visible_message("<span class='danger'>[user] hits [src] with [W]!</span>")
if(material == get_material_by_name("resin"))
@@ -162,8 +181,8 @@
else
playsound(src, 'sound/weapons/smash.ogg', 50, 1)
CheckHardness()
else if(istype(W,/obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
else if(W.has_tool_quality(TOOL_WELDER) && breakable)
var/obj/item/weapon/weldingtool/WT = W.get_welder()
if(material.ignition_point && WT.remove_fuel(0, user))
TemperatureAct(150)
else
@@ -88,7 +88,7 @@
return
/obj/structure/bed/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.is_wrench())
if(W.has_tool_quality(TOOL_WRENCH))
playsound(src, W.usesound, 50, 1)
dismantle()
qdel(src)
@@ -119,7 +119,7 @@
add_padding(padding_type)
return
else if(W.is_wirecutter())
else if(W.has_tool_quality(TOOL_WIRECUTTER))
if(!padding_material)
to_chat(user, "\The [src] has no padding to remove.")
return
@@ -219,7 +219,7 @@
return
/obj/structure/bed/roller/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.is_wrench() || istype(W,/obj/item/stack) || W.is_wirecutter())
if(W.has_tool_quality(TOOL_WRENCH) || istype(W,/obj/item/stack) || W.has_tool_quality(TOOL_WIRECUTTER))
return
else if(istype(W,/obj/item/roller_holder))
if(has_buckled_mobs())
@@ -369,7 +369,7 @@
buckle_lying = 1
/obj/structure/dirtybed/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.is_wrench())
if(W.has_tool_quality(TOOL_WRENCH))
playsound(src, W.usesound, 100, 1)
if(anchored)
user.visible_message("[user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
@@ -384,4 +384,4 @@
if(!anchored)
to_chat(user,"<span class='notice'> The bed isn't secured.</span>")
return
return
@@ -80,6 +80,20 @@
src.set_dir(turn(src.dir, 270))
/obj/structure/bed/chair/verb/rotate_counterclockwise()
set name = "Rotate Chair Counter-Clockwise"
set category = "Object"
set src in oview(1)
if(!usr || !isturf(usr.loc))
return
if(usr.stat || usr.restrained())
return
if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction))
return
src.set_dir(turn(src.dir, 90))
/obj/structure/bed/chair/shuttle
name = "chair"
icon_state = "shuttlechair"
@@ -193,7 +207,7 @@
return
/obj/structure/bed/chair/office/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/stack) || W.is_wirecutter())
if(istype(W,/obj/item/stack) || W.has_tool_quality(TOOL_WIRECUTTER))
return
..()
@@ -259,7 +273,7 @@
return
/obj/structure/bed/chair/wood/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/stack) || W.is_wirecutter())
if(istype(W,/obj/item/stack) || W.has_tool_quality(TOOL_WIRECUTTER))
return
..()
@@ -110,7 +110,7 @@ var/global/list/stool_cache = list() //haha stool
qdel(src)
/obj/item/weapon/stool/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.is_wrench())
if(W.has_tool_quality(TOOL_WRENCH))
playsound(src, W.usesound, 50, 1)
dismantle()
qdel(src)
@@ -140,7 +140,7 @@ var/global/list/stool_cache = list() //haha stool
to_chat(user, "You add padding to \the [src].")
add_padding(padding_type)
return
else if (W.is_wirecutter())
else if (W.has_tool_quality(TOOL_WIRECUTTER))
if(!padding_material)
to_chat(user, "\The [src] has no padding to remove.")
return
@@ -55,7 +55,7 @@
L.set_dir(dir)
/obj/structure/bed/chair/wheelchair/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.is_wrench() || W.is_wirecutter() || istype(W,/obj/item/stack))
if(W.has_tool_quality(TOOL_WRENCH) || W.has_tool_quality(TOOL_WIRECUTTER) || istype(W,/obj/item/stack))
return
..()
@@ -73,7 +73,7 @@
phorontanks++
else
full = TRUE
else if(I.is_wrench())
else if(I.has_tool_quality(TOOL_WRENCH))
if(anchored)
to_chat(user, "<span class='notice'>You lean down and unwrench [src].</span>")
anchored = FALSE
@@ -281,6 +281,7 @@
prob(4);/obj/item/seeds/ambrosiavulgarisseed,
prob(4);/obj/item/weapon/gun/energy/sizegun,
prob(4);/obj/item/device/slow_sizegun,
prob(4);/obj/item/clothing/accessory/collar/shock/bluespace,
prob(3);/obj/item/weapon/material/butterfly,
prob(3);/obj/item/weapon/material/butterfly/switchblade,
prob(3);/obj/item/clothing/gloves/knuckledusters,
@@ -312,7 +313,8 @@
prob(1);/obj/item/capture_crystal,
prob(1);/obj/item/device/perfect_tele/one_beacon,
prob(1);/obj/item/clothing/gloves/bluespace,
prob(1);/obj/item/weapon/gun/energy/mouseray)
prob(1);/obj/item/weapon/gun/energy/mouseray,
prob(1);/obj/item/clothing/accessory/collar/shock/bluespace/modified)
var/obj/item/I = new path()
return I
+2 -3
View File
@@ -44,7 +44,7 @@
icon_state = "[initial(icon_state)][open][cistern]"
/obj/structure/toilet/attackby(obj/item/I as obj, mob/living/user as mob)
if(I.is_crowbar())
if(I.has_tool_quality(TOOL_CROWBAR))
to_chat(user, "<span class='notice'>You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"].</span>")
playsound(src, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
if(do_after(user, 30))
@@ -124,7 +124,6 @@
else
to_chat(user, "<span class='notice'>You need a tighter grip.</span>")
/obj/structure/urinal
name = "urinal"
desc = "The HU-452, an experimental urinal."
@@ -201,7 +200,7 @@
/obj/machinery/shower/attackby(obj/item/I as obj, mob/user as mob)
if(I.type == /obj/item/device/analyzer)
to_chat(user, "<span class='notice'>The water temperature seems to be [watertemp].</span>")
if(I.is_wrench())
if(I.has_tool_quality(TOOL_WRENCH))
var/newtemp = tgui_input_list(user, "What setting would you like to set the temperature valve to?", "Water Temperature Valve", temperature_settings)
to_chat(user, "<span class='notice'>You begin to adjust the temperature valve with \the [I].</span>")
playsound(src, I.usesound, 50, 1)
@@ -87,8 +87,8 @@
switch(state)
if("01")
if(istype(W, /obj/item/weapon/weldingtool) && !anchored )
var/obj/item/weapon/weldingtool/WT = W
if(W.has_tool_quality(TOOL_WELDER) && !anchored)
var/obj/item/weapon/weldingtool/WT = W.get_welder()
if (WT.remove_fuel(0,user))
user.visible_message("[user] disassembles the windoor assembly.", "You start to disassemble the windoor assembly.")
playsound(src, WT.usesound, 50, 1)
@@ -106,7 +106,7 @@
return
//Wrenching an unsecure assembly anchors it in place. Step 4 complete
if(W.is_wrench() && !anchored)
if(W.has_tool_quality(TOOL_WRENCH) && !anchored)
playsound(src, W.usesound, 100, 1)
user.visible_message("[user] secures the windoor assembly to the floor.", "You start to secure the windoor assembly to the floor.")
@@ -117,7 +117,7 @@
step = 0
//Unwrenching an unsecure assembly un-anchors it. Step 4 undone
else if(W.is_wrench() && anchored)
else if(W.has_tool_quality(TOOL_WRENCH) && anchored)
playsound(src, W.usesound, 100, 1)
user.visible_message("[user] unsecures the windoor assembly to the floor.", "You start to unsecure the windoor assembly to the floor.")
@@ -143,7 +143,7 @@
if("02")
//Removing wire from the assembly. Step 5 undone.
if(W.is_wirecutter() && !src.electronics)
if(W.has_tool_quality(TOOL_WIRECUTTER) && !src.electronics)
playsound(src, W.usesound, 100, 1)
user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.")
@@ -172,7 +172,7 @@
W.loc = src.loc
//Screwdriver to remove airlock electronics. Step 6 undone.
else if(W.is_screwdriver() && src.electronics)
else if(W.has_tool_quality(TOOL_SCREWDRIVER) && src.electronics)
playsound(src, W.usesound, 100, 1)
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to uninstall electronics from the airlock assembly.")
@@ -185,7 +185,7 @@
ae.loc = src.loc
//Crowbar to complete the assembly, Step 7 complete.
else if(W.is_crowbar())
else if(W.has_tool_quality(TOOL_CROWBAR))
if(!src.electronics)
to_chat(usr,"<span class='warning'>The assembly is missing electronics.</span>")
return
+5 -5
View File
@@ -223,8 +223,8 @@
if(!istype(W)) return//I really wish I did not need this
// Fixing.
if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent == I_HELP)
var/obj/item/weapon/weldingtool/WT = W
if(W.has_tool_quality(TOOL_WELDER) && user.a_intent == I_HELP)
var/obj/item/weapon/weldingtool/WT = W.get_welder()
if(health < maxhealth)
if(WT.remove_fuel(1 ,user))
to_chat(user, "<span class='notice'>You begin repairing [src]...</span>")
@@ -265,7 +265,7 @@
if(W.flags & NOBLUDGEON) return
if(W.is_screwdriver())
if(W.has_tool_quality(TOOL_SCREWDRIVER))
if(reinf && state >= 1)
state = 3 - state
update_nearby_icons()
@@ -285,11 +285,11 @@
update_verbs()
playsound(src, W.usesound, 75, 1)
to_chat(user, "<span class='notice'>You have [anchored ? "" : "un"]fastened the window [anchored ? "to" : "from"] the floor.</span>")
else if(W.is_crowbar() && reinf && state <= 1)
else if(W.has_tool_quality(TOOL_CROWBAR) && reinf && state <= 1)
state = 1 - state
playsound(src, W.usesound, 75, 1)
to_chat(user, "<span class='notice'>You have pried the window [state ? "into" : "out of"] the frame.</span>")
else if(W.is_wrench() && !anchored && (!state || !reinf))
else if(W.has_tool_quality(TOOL_WRENCH) && !anchored && (!state || !reinf))
if(!glasstype)
to_chat(user, "<span class='notice'>You're not sure how to dismantle \the [src] properly.</span>")
else