diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm
index cfc40fa0170..2a555451def 100644
--- a/_maps/map_files/Delta/delta.dmm
+++ b/_maps/map_files/Delta/delta.dmm
@@ -287,7 +287,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"aec" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
@@ -462,7 +462,7 @@
/turf/simulated/floor/plating,
/area/maintenance/auxsolarstarboard)
"afj" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/northeast,
/obj/item/radio/intercom{
name = "east bump";
@@ -471,7 +471,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"afk" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 9;
icon_state = "brown"
@@ -860,7 +860,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"ahV" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/mineral/titanium/blue,
/area/shuttle/arrival/station)
"ahW" = (
@@ -894,7 +894,7 @@
/obj/machinery/light{
dir = 1
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow,
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
@@ -981,7 +981,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"ajy" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow,
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
@@ -1650,7 +1650,7 @@
},
/area/hallway/primary/central)
"anz" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 4
},
@@ -1955,7 +1955,7 @@
},
/area/hallway/secondary/entry)
"aow" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "neutralcorner"
},
@@ -1973,7 +1973,7 @@
},
/area/maintenance/fore2)
"aoA" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "neutralcorner"
@@ -2086,7 +2086,7 @@
/turf/simulated/floor/plasteel/grimy,
/area/security/vacantoffice)
"aoY" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
name = "north bump";
pixel_y = 24
@@ -2151,7 +2151,7 @@
},
/area/security/customs)
"apg" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
name = "north bump";
pixel_y = 24
@@ -2545,7 +2545,7 @@
/turf/simulated/floor/plasteel/grimy,
/area/hallway/secondary/entry)
"aqc" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -2696,7 +2696,7 @@
/turf/simulated/floor/plasteel/dark,
/area/maintenance/electrical_shop)
"aqw" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/maintenance/electrical_shop)
"aqx" = (
@@ -2714,7 +2714,7 @@
/turf/simulated/floor/wood,
/area/maintenance/electrical_shop)
"aqz" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/maintenance/electrical_shop)
"aqA" = (
@@ -2745,7 +2745,7 @@
/turf/simulated/floor/wood,
/area/maintenance/electrical_shop)
"aqD" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 1
},
@@ -2984,7 +2984,7 @@
/turf/simulated/floor/plating,
/area/maintenance/fore2)
"arh" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel/dark,
/area/maintenance/fore2)
@@ -2998,7 +2998,7 @@
},
/area/maintenance/fore2)
"arj" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/sign/poster/contraband/random{
pixel_y = 32
},
@@ -3136,7 +3136,7 @@
/turf/simulated/floor/wood,
/area/security/vacantoffice)
"arF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/security/vacantoffice)
"arG" = (
@@ -3621,7 +3621,7 @@
},
/area/security/checkpoint2)
"asI" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plating,
/area/maintenance/fore2)
"asJ" = (
@@ -4033,7 +4033,7 @@
/turf/simulated/floor/plasteel/grimy,
/area/hallway/secondary/entry)
"atD" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/newscaster{
dir = 1;
name = "south bump";
@@ -4176,7 +4176,7 @@
/turf/simulated/floor/plasteel/dark,
/area/maintenance/fore2)
"atS" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/maintenance/fore2)
"atU" = (
@@ -4352,7 +4352,7 @@
/turf/simulated/floor/wood,
/area/maintenance/electrical_shop)
"auo" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/power/apc{
name = "south bump";
pixel_y = -24
@@ -4419,7 +4419,7 @@
},
/area/maintenance/fore2)
"auw" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 8
},
@@ -4612,7 +4612,7 @@
},
/area/hallway/secondary/entry)
"avc" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "neutralcorner"
@@ -4660,7 +4660,7 @@
/turf/simulated/floor/plasteel,
/area/maintenance/fore)
"avg" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "neutralcorner"
@@ -6054,7 +6054,7 @@
},
/area/engine/controlroom)
"axW" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/sign/nosmoking_2{
pixel_x = 32
},
@@ -6289,7 +6289,7 @@
/turf/simulated/floor/plasteel,
/area/maintenance/fore2)
"ayF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow/hollow,
/turf/simulated/floor/plasteel,
/area/engine/controlroom)
@@ -7702,7 +7702,7 @@
/turf/space,
/area/space/nearstation)
"aBW" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable{
d1 = 1;
d2 = 2;
@@ -8212,7 +8212,7 @@
/turf/simulated/floor/plasteel,
/area/hydroponics/abandoned_garden)
"aDl" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 1
},
@@ -8248,7 +8248,7 @@
/turf/simulated/floor/plasteel,
/area/hydroponics/abandoned_garden)
"aDq" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/status_display{
pixel_y = 32
},
@@ -9786,7 +9786,7 @@
/turf/simulated/floor/plasteel,
/area/engine/controlroom)
"aHd" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow,
/turf/simulated/floor/plasteel,
/area/hydroponics/abandoned_garden)
@@ -10468,7 +10468,7 @@
/turf/simulated/floor/plasteel/dark,
/area/maintenance/incinerator)
"aIB" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/southwest,
/turf/simulated/floor/plasteel,
/area/engine/controlroom)
@@ -10868,7 +10868,7 @@
},
/area/security/permabrig)
"aJD" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/southeast,
/turf/simulated/floor/plasteel,
/area/engine/controlroom)
@@ -10879,7 +10879,7 @@
/turf/simulated/floor/plating,
/area/quartermaster/storage)
"aJF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/item/radio/intercom{
name = "south bump";
pixel_y = -28
@@ -12289,7 +12289,7 @@
},
/area/quartermaster/storage)
"aNl" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "brown"
@@ -12746,7 +12746,7 @@
/turf/simulated/floor/plasteel/grimy,
/area/maintenance/gambling_den)
"aOq" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/grimy,
/area/maintenance/gambling_den)
"aOr" = (
@@ -12756,7 +12756,7 @@
/turf/simulated/floor/plasteel/grimy,
/area/maintenance/gambling_den)
"aOs" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plating,
/area/maintenance/gambling_den)
"aOt" = (
@@ -12775,7 +12775,7 @@
},
/area/maintenance/gambling_den)
"aOu" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/maintenance/gambling_den)
"aOv" = (
@@ -12836,7 +12836,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/status_display{
pixel_y = 32
},
@@ -13005,7 +13005,7 @@
name = "east bump";
pixel_x = 24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "red"
@@ -13273,7 +13273,7 @@
/turf/simulated/floor/plasteel/dark,
/area/atmos)
"aPI" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/atmos)
"aPJ" = (
@@ -13379,7 +13379,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/grimy,
/area/crew_quarters/theatre)
"aQb" = (
@@ -13863,7 +13863,7 @@
},
/area/atmos)
"aQZ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "vault"
@@ -14184,7 +14184,7 @@
},
/area/quartermaster/sorting)
"aRO" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/alarm{
dir = 8;
name = "east bump";
@@ -14361,7 +14361,7 @@
/area/quartermaster/storage)
"aSr" = (
/obj/machinery/light,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/ai_status_display{
pixel_y = -32
},
@@ -15586,7 +15586,7 @@
/obj/machinery/light{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/extinguisher_cabinet{
name = "east bump";
pixel_x = 30
@@ -15641,7 +15641,7 @@
},
/area/quartermaster/storage)
"aVb" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
@@ -16861,7 +16861,7 @@
/area/hallway/primary/fore)
"aXB" = (
/obj/structure/table/wood,
-/obj/item/twohanded/staff/broom,
+/obj/item/staff/broom,
/obj/item/clothing/head/witchwig,
/obj/machinery/newscaster{
dir = 4;
@@ -17643,7 +17643,7 @@
},
/area/atmos)
"aZn" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 1;
name = "custom placement";
@@ -17750,7 +17750,7 @@
/area/crew_quarters/heads/hos)
"aZz" = (
/obj/machinery/light,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/newscaster{
dir = 1;
name = "south bump";
@@ -18413,7 +18413,7 @@
/turf/simulated/floor/plasteel,
/area/crew_quarters/kitchen)
"baR" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/newscaster{
dir = 4;
name = "west bump";
@@ -18502,7 +18502,7 @@
},
/area/quartermaster/office)
"baY" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "brown"
},
@@ -19828,7 +19828,7 @@
},
/area/hallway/primary/fore)
"bdW" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "brown"
@@ -20005,7 +20005,7 @@
/area/maintenance/fsmaint)
"beA" = (
/obj/effect/decal/warning_stripes/northeastcorner,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -20422,7 +20422,7 @@
},
/area/quartermaster/miningdock)
"bfC" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow,
/turf/simulated/floor/plasteel,
/area/quartermaster/miningdock)
@@ -20895,7 +20895,7 @@
/turf/simulated/wall,
/area/crew_quarters/chief)
"bgK" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/plasteel{
dir = 8;
@@ -20919,7 +20919,7 @@
/turf/simulated/floor/plasteel/dark,
/area/turret_protected/ai)
"bgO" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/unary/vent_pump/on,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
@@ -21112,7 +21112,7 @@
/area/atmos)
"bhv" = (
/obj/effect/decal/warning_stripes/yellow/hollow,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/hydroponics)
"bhw" = (
@@ -22226,7 +22226,7 @@
},
/area/quartermaster/miningdock)
"bjK" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 10;
@@ -22885,7 +22885,7 @@
/turf/simulated/floor/plasteel/dark,
/area/aisat)
"blw" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light,
/turf/simulated/floor/plasteel{
icon_state = "brown"
@@ -23325,7 +23325,7 @@
/obj/structure/window/reinforced{
dir = 8
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/aisat)
"bmq" = (
@@ -23343,7 +23343,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/aisat)
"bms" = (
@@ -23529,7 +23529,7 @@
/turf/simulated/floor/plasteel,
/area/atmos)
"bmL" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/pipe/simple/visible/purple{
dir = 9
},
@@ -24133,7 +24133,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "neutralcorner"
@@ -24429,7 +24429,7 @@
name = "east bump";
pixel_x = 28
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "darkred"
@@ -24968,7 +24968,7 @@
},
/area/hallway/primary/central)
"bpU" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "yellowcorner"
@@ -26740,7 +26740,7 @@
name = "south bump";
pixel_y = -24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 8;
name = "west bump";
@@ -26923,7 +26923,7 @@
/turf/simulated/floor/plasteel,
/area/atmos)
"buA" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small,
/obj/machinery/atmospherics/pipe/simple/visible/yellow{
dir = 4
@@ -27372,7 +27372,7 @@
},
/area/maintenance/starboard2)
"bvC" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/sign/nosmoking_2{
pixel_y = 32
},
@@ -28169,7 +28169,7 @@
},
/area/atmos)
"bxc" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "caution"
@@ -28481,7 +28481,7 @@
},
/area/hallway/primary/starboard)
"bxK" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/machinery/camera{
c_tag = "Primary Security Hallway North-East";
@@ -28538,7 +28538,7 @@
},
/area/security/checkpoint)
"bxS" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "darkred"
@@ -28623,7 +28623,7 @@
/turf/simulated/floor/greengrid,
/area/turret_protected/ai)
"byg" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/turret_protected/ai)
"byh" = (
@@ -29520,7 +29520,7 @@
/turf/simulated/floor/plasteel,
/area/storage/tech)
"bAi" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow,
/turf/simulated/floor/plasteel,
/area/storage/tech)
@@ -29601,7 +29601,7 @@
},
/area/engine/hardsuitstorage)
"bAr" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 1
},
@@ -29614,7 +29614,7 @@
},
/area/bridge)
"bAt" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/bridge)
"bAw" = (
@@ -29745,7 +29745,7 @@
icon_state = "4-8"
},
/obj/effect/decal/warning_stripes/yellow,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -29775,7 +29775,7 @@
d2 = 8;
icon_state = "2-8"
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 1
},
@@ -29965,7 +29965,7 @@
},
/area/engine/break_room)
"bBF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/power/apc{
dir = 1;
name = "north bump";
@@ -30370,7 +30370,7 @@
/turf/simulated/floor/plasteel/dark,
/area/bridge)
"bCn" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 1
},
@@ -30598,7 +30598,7 @@
pixel_y = 24;
req_access_txt = "19"
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable{
d1 = 4;
d2 = 8;
@@ -31252,7 +31252,7 @@
},
/area/hallway/primary/central)
"bDE" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/status_display{
pixel_x = -32
},
@@ -31304,7 +31304,7 @@
},
/area/storage/tech)
"bDI" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/ai_status_display{
pixel_x = 32
},
@@ -31542,7 +31542,7 @@
},
/area/bridge)
"bEd" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "darkblue"
@@ -31587,7 +31587,7 @@
/turf/simulated/floor/carpet,
/area/bridge)
"bEj" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "darkblue"
@@ -31795,7 +31795,7 @@
},
/area/engine/gravitygenerator)
"bEH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "whitebluecorner"
@@ -31871,7 +31871,7 @@
},
/area/engine/break_room)
"bET" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 8;
name = "west bump";
@@ -31884,7 +31884,7 @@
},
/area/engine/break_room)
"bEU" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 4;
name = "east bump";
@@ -32135,7 +32135,7 @@
},
/area/storage/primary)
"bFr" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow/hollow,
/turf/simulated/floor/plasteel,
/area/storage/primary)
@@ -32348,7 +32348,7 @@
},
/area/bridge)
"bFR" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small,
/turf/simulated/floor/plasteel/dark,
/area/bridge)
@@ -33594,7 +33594,7 @@
/turf/simulated/floor/plating,
/area/security/warden)
"bIg" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "darkred"
@@ -33682,7 +33682,7 @@
/turf/simulated/floor/plasteel,
/area/engine/gravitygenerator)
"bIq" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/crew_quarters/chief)
"bIr" = (
@@ -33713,7 +33713,7 @@
/turf/simulated/floor/plasteel/dark,
/area/crew_quarters/chief)
"bIv" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
name = "north bump";
pixel_y = 24
@@ -33941,7 +33941,7 @@
/turf/simulated/floor/wood,
/area/bridge/meeting_room)
"bJa" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 1
},
@@ -34069,7 +34069,7 @@
/turf/simulated/floor/wood,
/area/crew_quarters/captain)
"bJr" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/crew_quarters/captain)
"bJs" = (
@@ -34167,7 +34167,7 @@
},
/area/security/detectives_office)
"bJC" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/power/apc{
dir = 8;
name = "west bump";
@@ -34425,7 +34425,7 @@
/turf/simulated/floor/plasteel/dark,
/area/engine/break_room)
"bKc" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 4;
name = "east bump";
@@ -34443,7 +34443,7 @@
},
/area/engine/break_room)
"bKd" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 8
},
@@ -34615,7 +34615,7 @@
/turf/simulated/wall,
/area/engine/break_room)
"bKy" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/ai_status_display{
pixel_x = -32
},
@@ -34633,7 +34633,7 @@
/turf/simulated/floor/plasteel,
/area/storage/primary)
"bKB" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/status_display{
pixel_x = 32
},
@@ -35023,7 +35023,7 @@
/turf/simulated/wall,
/area/security/prison/cell_block)
"bLC" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 8
},
@@ -35438,7 +35438,7 @@
},
/area/engine/break_room)
"bMw" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "yellow"
@@ -35452,7 +35452,7 @@
name = "east bump";
pixel_x = 28
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "yellow"
@@ -36055,7 +36055,7 @@
/turf/simulated/floor/plasteel/dark,
/area/engine/break_room)
"bNY" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "vault"
@@ -36244,7 +36244,7 @@
/turf/simulated/floor/plasteel/dark,
/area/storage/tech)
"bOr" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 1;
name = "south bump";
@@ -36265,7 +36265,7 @@
/turf/simulated/floor/plasteel,
/area/storage/tech)
"bOt" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light_switch{
dir = 1;
name = "south bump";
@@ -36320,7 +36320,7 @@
/turf/simulated/floor/plasteel,
/area/storage/primary)
"bOz" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/storage/primary)
"bOA" = (
@@ -36619,7 +36619,7 @@
/turf/simulated/floor/plasteel/dark,
/area/security/detectives_office)
"bPk" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 1;
name = "south bump";
@@ -36821,7 +36821,7 @@
},
/area/turret_protected/aisat)
"bPJ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -36835,7 +36835,7 @@
},
/area/turret_protected/aisat)
"bPN" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "vault"
@@ -37108,7 +37108,7 @@
},
/area/security/brig)
"bQp" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 8
},
@@ -37245,7 +37245,7 @@
/turf/simulated/floor/wood,
/area/bridge/meeting_room)
"bQG" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light,
/turf/simulated/floor/wood,
/area/bridge/meeting_room)
@@ -38459,7 +38459,7 @@
},
/area/hallway/primary/starboard)
"bTm" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/power/apc{
dir = 8;
name = "west bump";
@@ -38981,7 +38981,7 @@
/turf/simulated/floor/plasteel/dark,
/area/engine/break_room)
"bUf" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/alarm{
dir = 8;
name = "east bump";
@@ -39029,7 +39029,7 @@
/turf/simulated/floor/plating,
/area/crew_quarters/chief)
"bUn" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 8;
name = "custom placement";
@@ -39321,14 +39321,14 @@
/turf/simulated/floor/wood,
/area/crew_quarters/heads/hop)
"bUR" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/keycard_auth{
pixel_y = 24
},
/turf/simulated/floor/wood,
/area/crew_quarters/heads/hop)
"bUT" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/crew_quarters/heads/hop)
"bUU" = (
@@ -39782,7 +39782,7 @@
},
/area/turret_protected/aisat)
"bVN" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 4;
name = "east bump";
@@ -40122,7 +40122,7 @@
name = "south bump";
pixel_y = -24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "yellow"
@@ -40574,7 +40574,7 @@
/turf/space,
/area/space/nearstation)
"bXH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light,
/turf/simulated/floor/plasteel{
icon_state = "dark"
@@ -40599,7 +40599,7 @@
},
/area/turret_protected/aisat)
"bXK" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light,
/obj/machinery/alarm{
dir = 1;
@@ -40658,7 +40658,7 @@
},
/area/turret_protected/aisat)
"bXP" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/extinguisher_cabinet{
name = "east bump";
pixel_x = 30
@@ -40731,7 +40731,7 @@
/turf/simulated/floor/plasteel,
/area/engine/engineering)
"bYe" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "cautioncorner"
@@ -41607,7 +41607,7 @@
/turf/simulated/floor/carpet/black,
/area/crew_quarters/captain/bedroom)
"cat" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/newscaster/security_unit{
dir = 8;
name = "east bump";
@@ -41642,7 +41642,7 @@
/turf/simulated/floor/plasteel/dark,
/area/crew_quarters/courtroom)
"cay" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/crew_quarters/courtroom)
"caz" = (
@@ -41658,7 +41658,7 @@
},
/area/hallway/primary/starboard)
"caA" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "neutral"
@@ -41828,7 +41828,7 @@
/turf/simulated/floor/plasteel/dark,
/area/crew_quarters/heads/hop)
"caV" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 1
},
@@ -42016,7 +42016,7 @@
},
/area/engine/engineering)
"cbu" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/camera{
c_tag = "Engine Room North";
network = list("Engineering","SS13")
@@ -42234,7 +42234,7 @@
/turf/simulated/floor/plasteel,
/area/engine/engineering)
"cbS" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable{
d1 = 4;
d2 = 8;
@@ -42995,7 +42995,7 @@
/turf/simulated/floor/plating,
/area/maintenance/port)
"cdx" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 8
},
@@ -43015,7 +43015,7 @@
/turf/simulated/floor/plasteel/grimy,
/area/library)
"cdA" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 4
},
@@ -43192,7 +43192,7 @@
name = "south bump";
pixel_y = -24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/camera{
c_tag = "Captain's Quarters";
dir = 1
@@ -43737,7 +43737,7 @@
/turf/simulated/floor/wood,
/area/library)
"cfs" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/library)
"cft" = (
@@ -44047,7 +44047,7 @@
},
/area/magistrateoffice)
"cgk" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "cult"
},
@@ -44675,7 +44675,7 @@
},
/area/tcommsat/chamber)
"chX" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -46517,7 +46517,7 @@
},
/area/hallway/primary/central)
"cmf" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/item/radio/intercom{
name = "west bump";
pixel_x = -28
@@ -46987,7 +46987,7 @@
/turf/simulated/floor/wood,
/area/crew_quarters/heads/hop)
"cnt" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light_switch{
dir = 1;
name = "south bump";
@@ -47098,7 +47098,7 @@
/turf/space,
/area/space/nearstation)
"cnJ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "neutral"
},
@@ -47773,7 +47773,7 @@
/turf/simulated/wall/r_wall,
/area/engine/engineering)
"cpr" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable/yellow{
d1 = 1;
d2 = 4;
@@ -48624,7 +48624,7 @@
/turf/simulated/floor/plasteel,
/area/engine/equipmentstorage)
"crk" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/camera{
c_tag = "Library South";
dir = 1
@@ -48644,7 +48644,7 @@
/turf/simulated/floor/plasteel/grimy,
/area/library)
"crm" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light,
/obj/machinery/light_switch{
dir = 1;
@@ -48657,7 +48657,7 @@
/turf/simulated/floor/plasteel/grimy,
/area/library)
"cro" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/grimy,
/area/library)
"crp" = (
@@ -49127,7 +49127,7 @@
/obj/structure/window/reinforced{
dir = 8
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/aisat)
"csl" = (
@@ -49135,7 +49135,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/aisat)
"csm" = (
@@ -49223,7 +49223,7 @@
/turf/simulated/floor/plating,
/area/engine/engineering)
"csw" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/warning_stripes/yellow/hollow,
/obj/machinery/firealarm{
@@ -49713,7 +49713,7 @@
/turf/simulated/floor/plasteel,
/area/engine/engineering)
"ctH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/library)
"ctI" = (
@@ -49943,7 +49943,7 @@
},
/area/hallway/primary/central/south)
"cuf" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable{
d1 = 4;
d2 = 8;
@@ -50073,7 +50073,7 @@
},
/area/hallway/primary/central)
"cuv" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
},
@@ -50359,7 +50359,7 @@
},
/area/engine/engineering)
"cuX" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light_switch{
name = "north bump";
pixel_y = 24
@@ -50579,7 +50579,7 @@
/turf/simulated/floor/plasteel/dark,
/area/ai_monitored/storage/eva)
"cvz" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 1
},
@@ -50852,7 +50852,7 @@
/turf/simulated/floor/plasteel/white,
/area/medical/medbay)
"cwq" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow,
/turf/simulated/floor/plasteel/white,
/area/maintenance/port2)
@@ -50907,7 +50907,7 @@
/turf/simulated/floor/plating,
/area/engine/hardsuitstorage)
"cwy" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/sign/electricshock{
pixel_y = 32
},
@@ -51534,7 +51534,7 @@
/turf/simulated/floor/plasteel,
/area/maintenance/port)
"cxV" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/extinguisher_cabinet{
name = "west bump";
pixel_x = -30
@@ -51596,7 +51596,7 @@
/turf/simulated/floor/plasteel/dark,
/area/library)
"cyb" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/newscaster{
dir = 8;
name = "east bump";
@@ -51819,7 +51819,7 @@
/turf/simulated/floor/plasteel,
/area/maintenance/port2)
"cyF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/crew_quarters/locker/locker_toilet)
"cyH" = (
@@ -52086,7 +52086,7 @@
/turf/simulated/floor/plasteel,
/area/maintenance/port)
"czo" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/item/radio/intercom{
name = "north bump";
pixel_y = 28
@@ -52861,7 +52861,7 @@
/turf/simulated/floor/plasteel/dark,
/area/library)
"cAU" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/item/radio/intercom{
name = "south bump";
pixel_y = -28
@@ -52959,7 +52959,7 @@
},
/area/hallway/primary/central)
"cBi" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 1
},
@@ -53477,7 +53477,7 @@
},
/area/engine/hardsuitstorage)
"cCv" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable{
d1 = 1;
d2 = 8;
@@ -53579,7 +53579,7 @@
/turf/simulated/floor/carpet,
/area/assembly/showroom)
"cCN" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 1;
name = "south bump";
@@ -53610,7 +53610,7 @@
/turf/simulated/floor/carpet,
/area/assembly/showroom)
"cCR" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light,
/turf/simulated/floor/carpet,
/area/assembly/showroom)
@@ -53908,12 +53908,12 @@
/turf/simulated/floor/plasteel,
/area/assembly/chargebay)
"cDJ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/southeast,
/turf/simulated/floor/plasteel,
/area/engine/engineering)
"cDK" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/sign/electricshock{
pixel_y = -32
},
@@ -53957,7 +53957,7 @@
/turf/simulated/floor/plating,
/area/maintenance/port)
"cDQ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plating,
/area/maintenance/port)
"cDR" = (
@@ -54006,7 +54006,7 @@
},
/area/maintenance/port)
"cEb" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/item/radio/intercom{
name = "south bump";
pixel_y = -28
@@ -54084,7 +54084,7 @@
/turf/simulated/floor/plasteel/dark,
/area/ai_monitored/storage/eva)
"cEs" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/ai_monitored/storage/eva)
"cEt" = (
@@ -55447,7 +55447,7 @@
},
/area/crew_quarters/fitness)
"cGT" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
@@ -55858,7 +55858,7 @@
},
/area/crew_quarters/fitness)
"cId" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "neutral"
},
@@ -56532,7 +56532,7 @@
/turf/simulated/floor/plasteel,
/area/maintenance/electrical)
"cJW" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow/hollow,
/turf/simulated/floor/plasteel,
/area/maintenance/electrical)
@@ -56699,12 +56699,12 @@
},
/area/medical/research)
"cKy" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plasteel/dark,
/area/medical/cmo)
"cKz" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "bluecorner"
},
@@ -57173,7 +57173,7 @@
},
/area/maintenance/electrical)
"cLF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plating,
/area/maintenance/electrical)
"cLG" = (
@@ -57365,7 +57365,7 @@
/turf/simulated/floor/plasteel/white,
/area/medical/research)
"cMn" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "whitepurplecorner"
@@ -57401,7 +57401,7 @@
},
/area/medical/reception)
"cMt" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "whitebluecorner"
@@ -57816,7 +57816,7 @@
/turf/simulated/floor/plating,
/area/toxins/xenobiology)
"cND" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "whitepurplecorner"
@@ -58002,7 +58002,7 @@
/turf/simulated/floor/plasteel/white,
/area/medical/reception)
"cNV" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -58315,7 +58315,7 @@
/turf/simulated/floor/plasteel,
/area/maintenance/electrical)
"cOz" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/status_display{
pixel_x = -32
},
@@ -59154,7 +59154,7 @@
},
/area/toxins/xenobiology)
"cQO" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 1
},
@@ -59223,7 +59223,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/primary/aft)
"cRd" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "whitepurplecorner"
@@ -59243,7 +59243,7 @@
/turf/simulated/floor/plating,
/area/maintenance/starboardsolar)
"cRg" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "whitepurplecorner"
},
@@ -59254,7 +59254,7 @@
},
/area/hallway/primary/aft)
"cRj" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "whitebluecorner"
@@ -59279,7 +59279,7 @@
},
/area/medical/reception)
"cRm" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "whitebluecorner"
},
@@ -59336,7 +59336,7 @@
name = "east bump";
pixel_x = 28
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/medical/psych)
"cRt" = (
@@ -59843,7 +59843,7 @@
},
/area/medical/medbay)
"cSB" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plasteel{
dir = 8;
@@ -60289,7 +60289,7 @@
/turf/simulated/floor/plasteel/white,
/area/toxins/xenobiology)
"cTy" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light,
/turf/simulated/floor/plasteel{
icon_state = "whitepurple"
@@ -61152,7 +61152,7 @@
},
/area/toxins/lab)
"cVu" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/status_display{
pixel_y = 32
},
@@ -61345,7 +61345,7 @@
},
/area/medical/exam_room)
"cVV" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/defibrillator_mount/loaded{
pixel_y = 30
},
@@ -61800,7 +61800,7 @@
},
/area/toxins/xenobiology)
"cWV" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow/hollow,
/turf/simulated/floor/plasteel{
icon_state = "whitepurple"
@@ -62076,7 +62076,7 @@
/turf/simulated/floor/plating,
/area/maintenance/starboard)
"cXO" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "neutralcorner"
},
@@ -62781,7 +62781,7 @@
/turf/simulated/floor/plasteel/freezer,
/area/medical/medbay)
"cZM" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/alarm{
dir = 4;
name = "west bump";
@@ -62906,7 +62906,7 @@
},
/area/medical/medbreak)
"cZY" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "whitebluecorner"
@@ -62939,12 +62939,12 @@
},
/area/maintenance/starboard)
"dae" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/cleanable/cobweb,
/turf/simulated/floor/plating,
/area/maintenance/abandonedbar)
"daf" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/maintenance/abandonedbar)
"dag" = (
@@ -63244,7 +63244,7 @@
/turf/simulated/floor/plasteel/white,
/area/toxins/lab)
"daM" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "whitepurplecorner"
},
@@ -63291,7 +63291,7 @@
},
/area/medical/surgery)
"daS" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plating,
/area/medical/surgery)
"daT" = (
@@ -63580,7 +63580,7 @@
/turf/simulated/floor/plasteel/dark,
/area/medical/medbay)
"dbG" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel/dark,
/area/maintenance/abandonedbar)
@@ -63610,7 +63610,7 @@
/turf/simulated/floor/plasteel,
/area/maintenance/apmaint)
"dbJ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/sign/poster/contraband/random{
pixel_x = 32
},
@@ -63663,7 +63663,7 @@
},
/area/toxins/lab)
"dbV" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/disposalpipe/segment,
/obj/effect/decal/warning_stripes/yellow,
/turf/simulated/floor/plasteel{
@@ -64225,7 +64225,7 @@
/turf/simulated/floor/plasteel/dark,
/area/maintenance/abandonedbar)
"dcY" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plating,
/area/maintenance/port2)
"dcZ" = (
@@ -64241,7 +64241,7 @@
/turf/simulated/floor/plasteel/white,
/area/maintenance/port2)
"ddc" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 1
},
@@ -64487,13 +64487,13 @@
/turf/simulated/floor/plasteel/white,
/area/maintenance/port2)
"ddJ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "purplefull"
},
/area/hallway/primary/aft)
"ddK" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "orangefull"
},
@@ -65666,7 +65666,7 @@
},
/area/medical/genetics_cloning)
"dgL" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "whitepurplecorner"
@@ -65739,7 +65739,7 @@
},
/area/maintenance/apmaint)
"dgS" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "whitebluefull"
},
@@ -67026,7 +67026,7 @@
/turf/simulated/floor/plasteel/white,
/area/maintenance/port2)
"dky" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small,
/obj/effect/decal/warning_stripes/yellow,
/turf/simulated/floor/plasteel/white,
@@ -67294,7 +67294,7 @@
},
/area/medical/medbay)
"dli" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "whitepurplecorner"
@@ -67509,7 +67509,7 @@
name = "west bump";
pixel_x = -24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4
@@ -67690,7 +67690,7 @@
dir = 4;
network = list("Medical","SS13")
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 1
},
@@ -67837,7 +67837,7 @@
/turf/simulated/floor/wood,
/area/maintenance/abandonedbar)
"dmR" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light_switch{
dir = 8;
name = "east bump";
@@ -67913,7 +67913,7 @@
},
/area/maintenance/port)
"dnd" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/camera{
c_tag = "Brig - Hallway South-East";
dir = 4;
@@ -68139,7 +68139,7 @@
/turf/simulated/floor/plasteel,
/area/medical/genetics)
"dnO" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "whiteblue"
@@ -69146,7 +69146,7 @@
/turf/simulated/floor/plating,
/area/crew_quarters/hor)
"dqi" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 8;
name = "west bump";
@@ -69362,7 +69362,7 @@
/turf/simulated/floor/plating,
/area/medical/cmo)
"dqH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/medical/cmo)
"dqI" = (
@@ -69564,7 +69564,7 @@
/turf/simulated/floor/plating,
/area/maintenance/port)
"drp" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/ntrep)
"drs" = (
@@ -69743,7 +69743,7 @@
/turf/simulated/floor/plasteel/white,
/area/medical/genetics)
"drR" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "whitepurplecorner"
},
@@ -69860,7 +69860,7 @@
},
/area/medical/cmo)
"dsh" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/power/apc{
dir = 4;
name = "east bump";
@@ -70176,7 +70176,7 @@
/turf/simulated/floor/plasteel,
/area/medical/genetics)
"dsW" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/alarm{
dir = 1;
name = "south bump";
@@ -70259,7 +70259,7 @@
},
/area/medical/medbay)
"dte" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/alarm{
dir = 1;
name = "south bump";
@@ -71061,7 +71061,7 @@
/turf/simulated/floor/plating,
/area/maintenance/port2)
"duR" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/sign/poster/random{
pixel_y = -32
},
@@ -71736,7 +71736,7 @@
/turf/simulated/floor/wood,
/area/crew_quarters/theatre)
"dwW" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood{
broken = 1;
icon_state = "wood-broken"
@@ -72159,7 +72159,7 @@
/turf/simulated/floor/plasteel/dark,
/area/medical/medbay)
"dyl" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 8
},
@@ -72599,7 +72599,7 @@
name = "south bump";
pixel_y = -24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/camera{
c_tag = "Morgue West";
dir = 1;
@@ -73021,7 +73021,7 @@
/turf/simulated/floor/plasteel/airless,
/area/toxins/test_area)
"dBH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow,
/turf/simulated/floor/plasteel,
/area/hallway/primary/aft)
@@ -73318,7 +73318,7 @@
/turf/simulated/floor/plasteel,
/area/maintenance/aft)
"dCh" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "whitegreencorner"
@@ -73338,7 +73338,7 @@
},
/area/medical/medbay)
"dCj" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "whitegreencorner"
@@ -73824,11 +73824,11 @@
/turf/simulated/floor/plating,
/area/crew_quarters/theatre)
"dDJ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/crew_quarters/theatre)
"dDK" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/alarm{
dir = 1;
name = "south bump";
@@ -74051,7 +74051,7 @@
name = "north bump";
pixel_y = 24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/newscaster{
dir = 8;
name = "east bump";
@@ -74060,7 +74060,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/primary/aft)
"dFc" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small,
/turf/simulated/floor/plasteel{
dir = 8;
@@ -74339,7 +74339,7 @@
/turf/simulated/floor/plating,
/area/maintenance/starboardsolar)
"dGt" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4
},
@@ -74349,7 +74349,7 @@
},
/area/medical/virology)
"dGu" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable{
d1 = 1;
d2 = 2;
@@ -74367,7 +74367,7 @@
},
/area/medical/virology)
"dGv" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
@@ -74418,7 +74418,7 @@
},
/area/medical/virology)
"dGA" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 4
},
@@ -74809,7 +74809,7 @@
/obj/machinery/light{
dir = 8
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/hallway/primary/aft)
"dHQ" = (
@@ -75280,7 +75280,7 @@
/turf/simulated/floor/plasteel/dark,
/area/chapel/office)
"dJw" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/chapel/office)
"dJx" = (
@@ -75348,7 +75348,7 @@
},
/area/hallway/secondary/exit)
"dJH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow,
/turf/simulated/floor/plasteel,
/area/hallway/secondary/exit)
@@ -75483,7 +75483,7 @@
/turf/simulated/floor/plasteel/dark,
/area/chapel/office)
"dKe" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 4
},
@@ -75521,7 +75521,7 @@
/turf/simulated/floor/plasteel/dark,
/area/chapel/main)
"dKi" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/chapel/main)
"dKj" = (
@@ -75535,7 +75535,7 @@
/turf/simulated/floor/plasteel/dark,
/area/chapel/main)
"dKk" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/item/radio/intercom{
name = "north bump";
pixel_y = 28
@@ -76226,7 +76226,7 @@
},
/area/chapel/main)
"dMn" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "chapel"
@@ -76558,7 +76558,7 @@
/turf/simulated/floor/grass/no_creep,
/area/hallway/secondary/exit)
"dNa" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow,
/turf/simulated/floor/plasteel{
icon_state = "neutralfull"
@@ -76833,7 +76833,7 @@
/obj/machinery/light{
dir = 1
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow/hollow,
/turf/simulated/floor/plasteel{
dir = 4;
@@ -77087,7 +77087,7 @@
},
/area/hallway/secondary/exit)
"dOv" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 8
},
@@ -77361,7 +77361,7 @@
},
/area/medical/virology)
"dPj" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4
},
@@ -78065,7 +78065,7 @@
/turf/simulated/floor/plating,
/area/maintenance/apmaint)
"dQP" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 1
},
@@ -78132,7 +78132,7 @@
/turf/simulated/floor/plasteel/grimy,
/area/chapel/main)
"dRa" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 4
},
@@ -78363,7 +78363,7 @@
/turf/simulated/floor/plasteel/dark,
/area/chapel/main)
"dRA" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light_switch{
dir = 8;
name = "east bump";
@@ -78781,7 +78781,7 @@
/turf/simulated/floor/plasteel/grimy,
/area/chapel/office)
"dSN" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light_switch{
dir = 8;
name = "east bump";
@@ -78954,7 +78954,7 @@
/turf/simulated/floor/plasteel/grimy,
/area/chapel/office)
"dTp" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/camera{
c_tag = "Chaplain's Quarters"
},
@@ -79042,7 +79042,7 @@
},
/area/hallway/secondary/exit)
"dTC" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/decal/warning_stripes/yellow,
@@ -79206,7 +79206,7 @@
/turf/simulated/floor/carpet,
/area/chapel/office)
"dUi" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable{
d1 = 1;
d2 = 2;
@@ -79245,7 +79245,7 @@
/turf/simulated/floor/plasteel,
/area/maintenance/apmaint)
"dUm" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
@@ -79592,7 +79592,7 @@
},
/area/maintenance/portsolar)
"dVo" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable{
d1 = 1;
d2 = 2;
@@ -79751,7 +79751,7 @@
/turf/simulated/floor/plasteel/white,
/area/toxins/xenobiology)
"dWm" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow/hollow,
/turf/simulated/floor/plasteel/white,
/area/toxins/xenobiology)
@@ -79914,7 +79914,7 @@
},
/area/hallway/primary/central)
"dWS" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow/hollow,
/turf/simulated/floor/plasteel{
icon_state = "whitegreen"
@@ -80219,7 +80219,7 @@
},
/area/medical/surgery1)
"dXx" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/camera{
c_tag = "Chapel West";
dir = 4;
@@ -80602,13 +80602,13 @@
/turf/simulated/floor/plasteel/white,
/area/medical/virology)
"dYG" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel/white,
/area/maintenance/port2)
"dYH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/sign/poster/random{
pixel_y = -32
},
@@ -80853,7 +80853,7 @@
/turf/simulated/floor/plating,
/area/crew_quarters/arcade)
"eas" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 4
},
@@ -81141,7 +81141,7 @@
},
/area/crew_quarters/fitness)
"esa" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/power/apc{
name = "south bump";
pixel_y = -24
@@ -81425,7 +81425,7 @@
},
/area/crew_quarters/fitness)
"eLI" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "neutralfull"
},
@@ -82418,7 +82418,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/primary/aft)
"fOy" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow/hollow,
/obj/item/radio/intercom{
name = "south bump";
@@ -82896,7 +82896,7 @@
/turf/simulated/floor/plating,
/area/maintenance/apmaint)
"gwZ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/item/radio/intercom{
name = "east bump";
pixel_x = 28
@@ -85025,7 +85025,7 @@
/turf/simulated/floor/plasteel,
/area/engine/engineering)
"iUc" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "red"
@@ -86257,7 +86257,7 @@
/turf/space,
/area/space)
"koC" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 4
},
@@ -86898,7 +86898,7 @@
/turf/simulated/wall,
/area/maintenance/fsmaint)
"los" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "whitebluecorner"
},
@@ -87200,7 +87200,7 @@
/obj/machinery/light{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "darkred"
@@ -87740,7 +87740,7 @@
/obj/structure/window/reinforced{
dir = 8
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "grimy"
},
@@ -90090,7 +90090,7 @@
name = "west bump";
pixel_x = -24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "barber"
},
@@ -90491,7 +90491,7 @@
/turf/simulated/floor/plasteel,
/area/toxins/storage)
"puH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/item/radio/intercom{
name = "east bump";
pixel_x = 28
@@ -90689,7 +90689,7 @@
pixel_x = 6;
pixel_y = -4
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
pixel_y = 7
},
/obj/structure/railing/corner{
@@ -91838,7 +91838,7 @@
/turf/simulated/floor/plasteel/dark,
/area/maintenance/fore2)
"qWx" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/newscaster{
name = "north bump";
pixel_y = 28
@@ -91859,7 +91859,7 @@
},
/area/security/execution)
"qYC" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable{
d1 = 4;
d2 = 8;
@@ -92185,7 +92185,7 @@
/turf/simulated/floor/plating,
/area/maintenance/port)
"rlI" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plating,
/area/maintenance/abandonedbar)
"rlQ" = (
@@ -92342,7 +92342,7 @@
},
/area/toxins/explab)
"rsX" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/maintenance/library)
"rtG" = (
@@ -93077,7 +93077,7 @@
},
/area/security/evidence)
"spS" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
},
@@ -94362,7 +94362,7 @@
},
/area/maintenance/port)
"tJc" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/warning_stripes/yellow/hollow,
/obj/item/radio/intercom{
name = "north bump";
@@ -97453,7 +97453,7 @@
pixel_x = -6;
pixel_y = -4
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
pixel_y = 7
},
/obj/structure/railing/corner{
@@ -97610,7 +97610,7 @@
},
/area/security/processing)
"xIJ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "darkred"
@@ -97744,7 +97744,7 @@
network = list("Experimentator");
pixel_y = 32
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/white,
/area/toxins/explab)
"xPJ" = (
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index ba080e494ab..0e93b323f7f 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -971,7 +971,7 @@
/turf/simulated/wall,
/area/crew_quarters/arcade)
"ajb" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-20"
},
/obj/machinery/computer/mob_battle_terminal/red{
@@ -3620,7 +3620,7 @@
},
/area/crew_quarters/recreation)
"auV" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "bluefull"
},
@@ -3974,7 +3974,7 @@
/turf/simulated/floor/plating,
/area/maintenance/fpmaint)
"awb" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel,
@@ -4271,7 +4271,7 @@
/turf/simulated/floor/plating,
/area/maintenance/fpmaint)
"awZ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
name = "north bump";
pixel_y = 24
@@ -4480,7 +4480,7 @@
c_tag = "Detective's Office";
dir = 8
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-24"
},
/turf/simulated/floor/carpet,
@@ -7252,7 +7252,7 @@
"aHH" = (
/obj/effect/decal/cleanable/cobweb,
/obj/effect/turf_decal/bot,
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-20"
},
/turf/simulated/floor/plasteel,
@@ -8988,7 +8988,7 @@
name = "west bump";
pixel_x = -24
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-25"
},
/turf/simulated/floor/plasteel,
@@ -10436,7 +10436,7 @@
/obj/structure/sign/kiddieplaque{
pixel_y = 32
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
pixel_y = 10
},
/obj/structure/table/wood/fancy/green,
@@ -12624,7 +12624,7 @@
name = "east bump";
pixel_x = 27
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-11"
},
/turf/simulated/floor/wood,
@@ -13279,7 +13279,7 @@
name = "west bump";
pixel_x = -27
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "neutralcorner"
@@ -14413,7 +14413,7 @@
name = "north bump";
pixel_y = 24
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "applebush"
},
/turf/simulated/floor/plasteel{
@@ -14606,7 +14606,7 @@
/turf/simulated/floor/plating,
/area/security/checkpoint2)
"bbM" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-18"
},
/obj/structure/sign/electricshock{
@@ -15892,7 +15892,7 @@
},
/area/engine/chiefs_office)
"beP" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/turf_decal/stripes/line{
dir = 10
},
@@ -15919,7 +15919,7 @@
name = "east bump";
pixel_x = 27
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-16"
},
/obj/item/radio/intercom{
@@ -16040,7 +16040,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
level = 4.1
},
/turf/simulated/floor/plasteel,
@@ -20720,7 +20720,7 @@
pixel_x = -32;
pixel_y = -32
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
@@ -23064,7 +23064,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/primary/central)
"bwp" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
level = 4.1
},
/turf/simulated/floor/wood,
@@ -24415,7 +24415,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"bzA" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-18"
},
/obj/effect/turf_decal/stripes/line{
@@ -24425,7 +24425,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"bzB" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-10"
},
/turf/simulated/floor/plasteel{
@@ -25063,7 +25063,7 @@
},
/area/hallway/primary/port)
"bBr" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-20"
},
/obj/effect/turf_decal/stripes/line{
@@ -27049,7 +27049,7 @@
/turf/simulated/floor/plasteel,
/area/bridge/hall)
"bHx" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/wood,
@@ -27136,7 +27136,7 @@
/turf/simulated/floor/carpet,
/area/crew_quarters/captain)
"bHI" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
level = 4.1
},
/obj/machinery/light,
@@ -27360,7 +27360,7 @@
},
/area/tcommsat/computer)
"bIA" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel{
@@ -27376,7 +27376,7 @@
},
/area/tcommsat/computer)
"bID" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-10"
},
/obj/structure/disposalpipe/segment,
@@ -30865,7 +30865,7 @@
icon_state = "map-right-MS";
pixel_y = -32
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
},
@@ -31753,7 +31753,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 6
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-16"
},
/obj/machinery/light{
@@ -32357,7 +32357,7 @@
name = "west bump";
pixel_x = -28
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-10"
},
/turf/simulated/floor/plasteel{
@@ -32391,7 +32391,7 @@
/area/quartermaster/office)
"bXF" = (
/obj/effect/turf_decal/stripes/corner,
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-10"
},
/obj/machinery/door_control{
@@ -34701,7 +34701,7 @@
name = "east bump";
pixel_x = 24
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-10"
},
/turf/simulated/floor/plasteel{
@@ -34975,7 +34975,7 @@
name = "west bump";
pixel_x = -27
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "applebush"
},
/turf/simulated/floor/plasteel{
@@ -39992,7 +39992,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/primary/aft)
"cvJ" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-20"
},
/turf/simulated/floor/plasteel{
@@ -40344,7 +40344,7 @@
name = "west bump";
pixel_x = -24
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-11"
},
/obj/machinery/light{
@@ -40605,7 +40605,7 @@
},
/area/medical/medbay)
"cxL" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-10"
},
/turf/simulated/floor/plasteel{
@@ -44525,7 +44525,7 @@
},
/area/medical/genetics_cloning)
"cKA" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-18"
},
/turf/simulated/floor/plasteel{
@@ -44758,7 +44758,7 @@
/turf/simulated/floor/grass,
/area/maintenance/aft2)
"cLm" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-18"
},
/obj/machinery/light/small{
@@ -45274,7 +45274,7 @@
/turf/simulated/floor/plating,
/area/maintenance/medmaint)
"cNy" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
@@ -45556,7 +45556,7 @@
/turf/simulated/floor/plating,
/area/maintenance/aft2)
"cOk" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-18"
},
/obj/machinery/light/small{
@@ -46881,7 +46881,7 @@
/obj/machinery/light{
dir = 8
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-24"
},
/obj/effect/turf_decal/stripes/line{
@@ -47050,7 +47050,7 @@
name = "east bump";
pixel_x = 27
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-14"
},
/obj/effect/turf_decal/stripes/line{
@@ -47107,7 +47107,7 @@
/turf/simulated/floor/plating,
/area/ntrep)
"cUq" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
@@ -50324,7 +50324,7 @@
/turf/simulated/floor/engine,
/area/toxins/explab_chamber)
"drv" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
level = 4.1
},
/obj/structure/disposalpipe/segment{
@@ -52777,7 +52777,7 @@
name = "Emergency NanoMed";
pixel_y = -28
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "whiteblue"
},
@@ -53699,7 +53699,7 @@
/turf/simulated/floor/plasteel,
/area/security/brig)
"fdz" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-11"
},
/turf/simulated/floor/plasteel,
@@ -53818,7 +53818,7 @@
},
/area/atmos)
"fhC" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel{
@@ -55558,7 +55558,7 @@
/obj/machinery/light{
dir = 8
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/hallway/secondary/exit)
"fVB" = (
@@ -55806,7 +55806,7 @@
},
/area/crew_quarters/courtroom)
"gbz" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 8;
name = "custom placement";
@@ -55952,7 +55952,7 @@
/turf/simulated/floor/plating,
/area/engine/engineering)
"geC" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-24"
},
/obj/machinery/camera{
@@ -56669,7 +56669,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"gzt" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-16"
},
/obj/structure/cable/yellow{
@@ -56687,7 +56687,7 @@
/obj/structure/window/reinforced{
dir = 8
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-10"
},
/turf/simulated/floor/plasteel{
@@ -56780,7 +56780,7 @@
},
/area/security/permabrig)
"gCX" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "whitebluecorner"
@@ -58046,7 +58046,7 @@
/area/medical/cmo)
"hjr" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -62037,7 +62037,7 @@
},
/area/security/execution)
"iTN" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 1
},
@@ -64451,7 +64451,7 @@
},
/area/medical/research)
"kiq" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -65884,7 +65884,7 @@
/turf/simulated/floor/plating/airless,
/area/space/nearstation)
"kQx" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-11"
},
/turf/simulated/floor/wood,
@@ -66514,7 +66514,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "applebush"
},
/obj/effect/turf_decal/stripes/line{
@@ -67289,7 +67289,7 @@
},
/area/security/main)
"lvB" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable/yellow{
d1 = 4;
d2 = 8;
@@ -75266,7 +75266,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/effect/turf_decal/stripes/line{
@@ -76251,7 +76251,7 @@
dir = 2;
icon_state = "pipe-c"
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel,
@@ -77991,7 +77991,7 @@
},
/area/assembly/robotics)
"qFz" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/maintenance/apmaint)
"qFI" = (
@@ -80321,7 +80321,7 @@
/obj/structure/sign/poster/random{
pixel_y = 32
},
-/obj/item/twohanded/staff/broom,
+/obj/item/staff/broom,
/obj/item/wrench,
/obj/machinery/alarm{
dir = 8;
@@ -83866,7 +83866,7 @@
},
/area/hallway/primary/central)
"tyW" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "applebush"
},
/obj/effect/turf_decal/stripes/corner{
@@ -84353,7 +84353,7 @@
},
/area/security/armoury)
"tKL" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-24"
},
/obj/machinery/light_switch{
@@ -85815,7 +85815,7 @@
/turf/simulated/floor/plating,
/area/maintenance/xenobio_south)
"uBK" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 4
},
@@ -89195,7 +89195,7 @@
/turf/simulated/floor/engine,
/area/engine/engineering)
"wkL" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable/yellow{
d1 = 2;
d2 = 4;
@@ -91541,7 +91541,7 @@
},
/area/hallway/secondary/exit)
"xtP" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/structure/sign/botany{
@@ -93066,7 +93066,7 @@
/turf/simulated/floor/plasteel,
/area/security/permabrig)
"yeR" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/newscaster{
name = "north bump";
pixel_y = 28
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm
index 102d87cb8c1..13db53afa1a 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm
@@ -259,7 +259,7 @@
/turf/simulated/floor/plating/ice/smooth,
/area/ruin/powered/snow_biodome)
"cv" = (
-/obj/item/twohanded/required/chainsaw,
+/obj/item/chainsaw,
/turf/simulated/floor/plating/asteroid/snow/atmosphere,
/area/ruin/powered/snow_biodome)
"dS" = (
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm
index f81700c9e0c..0f05d567702 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm
@@ -536,7 +536,7 @@
/turf/simulated/floor/plasteel,
/area/ruin/powered/animal_hospital)
"bt" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/ruin/powered/animal_hospital)
"bu" = (
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm
index 8120a34652b..43f7a869753 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm
@@ -703,7 +703,7 @@
/area/lavaland/surface/outdoors)
"bP" = (
/obj/structure/stone_tile/block,
-/obj/item/twohanded/spear,
+/obj/item/spear,
/obj/effect/mapping_helpers/no_lava,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
@@ -875,7 +875,7 @@
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"ck" = (
-/obj/item/twohanded/spear,
+/obj/item/spear,
/obj/structure/stone_tile{
dir = 4
},
@@ -889,7 +889,7 @@
/obj/structure/stone_tile/cracked{
dir = 8
},
-/obj/item/twohanded/spear,
+/obj/item/spear,
/obj/effect/mapping_helpers/no_lava,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
@@ -993,7 +993,7 @@
/obj/structure/stone_tile/cracked{
dir = 1
},
-/obj/item/twohanded/spear,
+/obj/item/spear,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"cA" = (
@@ -1036,7 +1036,7 @@
dir = 1
},
/obj/structure/table/wood,
-/obj/item/twohanded/spear,
+/obj/item/spear,
/obj/item/storage/belt/utility,
/turf/simulated/floor/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
@@ -1079,7 +1079,7 @@
dir = 4
},
/obj/structure/table/wood,
-/obj/item/twohanded/spear,
+/obj/item/spear,
/obj/item/scythe,
/turf/simulated/floor/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
@@ -1092,7 +1092,7 @@
dir = 8
},
/obj/structure/table/wood,
-/obj/item/twohanded/spear,
+/obj/item/spear,
/turf/simulated/floor/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
"cN" = (
@@ -1107,7 +1107,7 @@
dir = 4
},
/obj/structure/table/wood,
-/obj/item/twohanded/spear,
+/obj/item/spear,
/obj/item/clothing/head/helmet/roman/legionaire,
/turf/simulated/floor/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm
index 782e15a3089..b7b7e3bc184 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm
@@ -143,7 +143,7 @@
/turf/simulated/floor/plasteel,
/area/ruin/space/unpowered)
"sd" = (
-/obj/item/twohanded/required/kirbyplants/dead,
+/obj/item/kirbyplants/dead,
/turf/simulated/floor/plasteel,
/area/ruin/space/unpowered)
"vg" = (
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm b/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm
index b1b02348e97..c633cc96f1d 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm
@@ -419,7 +419,7 @@
name = "north bump";
pixel_y = 24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
icon_state = "bar"
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm
index dfc608a1ca5..276b3d8a977 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm
@@ -2878,7 +2878,7 @@
/turf/simulated/floor/plating,
/area/ruin/space/unpowered)
"fC" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
desc = "A plastic potted plant.";
pixel_y = 3
},
@@ -4943,7 +4943,7 @@
/turf/simulated/floor/plating/airless,
/area/ruin/space/unpowered)
"km" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
desc = "A plastic potted plant.";
pixel_y = 3
},
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
index 74e21958058..faa64ac4f4d 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
@@ -524,7 +524,7 @@
d2 = 4;
icon_state = "2-4"
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-dead"
},
/obj/effect/decal/cleanable/dirt,
@@ -566,7 +566,7 @@
/turf/simulated/floor/plasteel,
/area/ruin/ancientstation)
"bK" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-dead"
},
/obj/effect/decal/cleanable/dirt,
@@ -813,7 +813,7 @@
/turf/simulated/floor/plasteel,
/area/ruin/ancientstation/thetacorridor)
"ct" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-dead"
},
/obj/effect/decal/cleanable/dirt,
@@ -1308,7 +1308,7 @@
d2 = 4;
icon_state = "2-4"
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-dead"
},
/obj/effect/decal/cleanable/dirt,
@@ -1546,7 +1546,7 @@
name = "west bump";
pixel_x = -24
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-dead"
},
/obj/effect/decal/cleanable/dirt,
@@ -1715,7 +1715,7 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-dead"
},
/obj/effect/decal/cleanable/dirt,
@@ -3864,7 +3864,7 @@
icon_state = "1-4"
},
/obj/effect/decal/cleanable/dirt,
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-dead"
},
/turf/simulated/floor/plasteel,
@@ -3891,7 +3891,7 @@
/area/ruin/ancientstation)
"jg" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-dead"
},
/turf/simulated/floor/plasteel,
@@ -3904,7 +3904,7 @@
tag = "90Curve"
},
/obj/effect/decal/cleanable/dirt,
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-dead"
},
/turf/simulated/floor/plasteel,
@@ -3961,7 +3961,7 @@
/area/ruin/ancientstation/thetacorridor)
"jo" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-dead"
},
/turf/simulated/floor/plasteel,
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm
index a681f5e92cb..63e6e3def6a 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm
@@ -3286,7 +3286,7 @@
},
/area/ruin/unpowered/syndicate_space_base/medbay)
"Ji" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel{
@@ -3366,7 +3366,7 @@
},
/area/ruin/unpowered/syndicate_space_base/main)
"Ki" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/obj/structure/cable{
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm
index 64a2e85eaff..f5ad3f8b9a7 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm
@@ -1255,7 +1255,7 @@
/turf/simulated/floor/engine,
/area/ruin/space/unpowered)
"YE" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/grass,
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm
index 4245e638eff..ab834b5b2ea 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm
@@ -221,7 +221,7 @@
/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
/area/ruin/space/derelict/bridge)
"aF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/ruin/space/derelict/bridge)
"aG" = (
@@ -774,7 +774,7 @@
},
/area/ruin/space/derelict/bridge)
"bZ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "darkblue"
},
@@ -1166,7 +1166,7 @@
},
/area/ruin/space/derelict/bridge)
"cW" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 6;
@@ -1216,7 +1216,7 @@
},
/area/ruin/space/derelict/crew_quarters)
"dd" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 9;
@@ -1691,7 +1691,7 @@
dir = 1
},
/obj/effect/decal/cleanable/dirt,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "darkblue"
@@ -2920,7 +2920,7 @@
},
/area/ruin/space/derelict/solar_control)
"ha" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "darkred"
@@ -3012,7 +3012,7 @@
},
/area/ruin/space/derelict/hallway/primary)
"hm" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/ruin/space/derelict/crew_quarters)
"hn" = (
@@ -3814,7 +3814,7 @@
/turf/simulated/floor/plasteel,
/area/ruin/space/derelict/arrival)
"jr" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "brown"
@@ -7149,7 +7149,7 @@
},
/area/ruin/space/derelict/arrival)
"rw" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "redfull"
},
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/ussp_tele.dmm b/_maps/map_files/RandomRuins/SpaceRuins/ussp_tele.dmm
index 8d34b90f7bd..9f24bfbf844 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/ussp_tele.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/ussp_tele.dmm
@@ -154,7 +154,7 @@
/area/ruin/space/derelict/teleporter)
"z" = (
/obj/effect/landmark/damageturf,
-/obj/item/twohanded/required/kirbyplants/dead{
+/obj/item/kirbyplants/dead{
desc = "A dead potted plant. Must have died from lack of EVA equipment.";
item_state = "plant-dead";
name = "potted plant"
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/voyager.dmm b/_maps/map_files/RandomRuins/SpaceRuins/voyager.dmm
index 386cf126ad3..28328faafbf 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/voyager.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/voyager.dmm
@@ -18,7 +18,7 @@
/area/template_noop)
"q" = (
/obj/structure/safe/floor,
-/obj/item/twohanded/required/golden_record,
+/obj/item/golden_record,
/turf/simulated/satellite,
/area/template_noop)
"O" = (
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm
index b1c6c8b13ab..1a8d777b24a 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm
@@ -376,7 +376,7 @@
/area/ruin/space/unpowered)
"bp" = (
/obj/structure/rack,
-/obj/item/twohanded/staff,
+/obj/item/staff,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "chapel"
@@ -400,7 +400,7 @@
/area/ruin/space/unpowered)
"bu" = (
/obj/structure/rack,
-/obj/item/twohanded/staff/broom,
+/obj/item/staff/broom,
/turf/simulated/floor/plasteel{
icon_state = "chapel"
},
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm
index 8244677f266..22f544f2da6 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm
@@ -34,7 +34,7 @@
/area/template_noop)
"ca" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "caution"
@@ -745,7 +745,7 @@
dir = 4
},
/obj/effect/decal/cleanable/cobweb2,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "caution"
@@ -793,7 +793,7 @@
/obj/structure/railing{
dir = 9
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/ruin/space/wreck_cargoship)
"Ih" = (
diff --git a/_maps/map_files/cerestation/cerestation.dmm b/_maps/map_files/cerestation/cerestation.dmm
index ef8d4d9f2c1..7cf34ae1590 100644
--- a/_maps/map_files/cerestation/cerestation.dmm
+++ b/_maps/map_files/cerestation/cerestation.dmm
@@ -884,7 +884,7 @@
/turf/simulated/floor/plating,
/area/hallway/primary/central)
"aeM" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "bcircuit"
@@ -1674,7 +1674,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/flasher{
id = "AI";
pixel_y = 21
@@ -3214,7 +3214,7 @@
/turf/simulated/floor/plating,
/area/security/hos)
"ata" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/security/hos)
"atc" = (
@@ -4424,7 +4424,7 @@
/turf/simulated/wall,
/area/security/hos)
"azX" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/item/radio/intercom{
@@ -5427,7 +5427,7 @@
},
/area/bridge)
"aHL" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -5566,7 +5566,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
@@ -5842,7 +5842,7 @@
},
/area/security/main)
"aKx" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel{
@@ -6714,7 +6714,7 @@
},
/area/atmos)
"aPA" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel{
@@ -6800,7 +6800,7 @@
/area/security/lobby)
"aPW" = (
/obj/machinery/light,
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel{
@@ -7103,7 +7103,7 @@
/area/crew_quarters/locker)
"aSf" = (
/obj/machinery/light,
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel{
@@ -9081,7 +9081,7 @@
c_tag = "Rehabilitation Dome Lobby East";
dir = 8
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel{
@@ -9238,7 +9238,7 @@
/turf/simulated/floor/grass/jungle,
/area/hallway/secondary/garden)
"bcy" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/obj/machinery/light/small{
@@ -9334,7 +9334,7 @@
/turf/simulated/floor/carpet,
/area/medical/psych)
"bcO" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/carpet,
/area/medical/psych)
"bcP" = (
@@ -10027,7 +10027,7 @@
c_tag = "Rehabilitation Dome Lobby South";
dir = 1
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel{
@@ -10321,7 +10321,7 @@
c_tag = "Dorm Commons North";
dir = 4
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/obj/machinery/economy/vending/wallmed{
@@ -11432,7 +11432,7 @@
pixel_x = 24;
name = "east bump"
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel{
@@ -11839,7 +11839,7 @@
},
/area/security/main)
"bol" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "redcorner"
},
@@ -12541,7 +12541,7 @@
},
/area/quartermaster/office)
"brs" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel{
@@ -14028,7 +14028,7 @@
},
/area/engine/break_room)
"bxv" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel{
@@ -14108,7 +14108,7 @@
/area/crew_quarters/heads/hop)
"bxG" = (
/obj/structure/disposalpipe/segment,
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel{
@@ -16055,7 +16055,7 @@
},
/area/engine/engineering)
"bFo" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -16870,7 +16870,7 @@
name = "Atmospherics Desk Shutters";
pixel_x = 24
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-13"
},
/turf/simulated/floor/plasteel{
@@ -18517,7 +18517,7 @@
/turf/simulated/floor/plasteel,
/area/engine/chiefs_office)
"bPE" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-25"
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -19640,7 +19640,7 @@
},
/area/chapel/main)
"bTX" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/machinery/recharger/wallcharger{
@@ -20695,7 +20695,7 @@
},
/area/maintenance/fore2)
"bYn" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -20711,7 +20711,7 @@
/turf/simulated/wall,
/area/maintenance/disposal/south)
"bYG" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/structure/cable/orange{
@@ -21616,7 +21616,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/exit)
"ceR" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel{
@@ -23086,7 +23086,7 @@
/turf/simulated/wall/mineral/titanium,
/area/shuttle/pod_2)
"cnT" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel{
@@ -23731,7 +23731,7 @@
},
/area/toxins/hallway)
"cry" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-25"
},
/turf/simulated/floor/plasteel{
@@ -25006,7 +25006,7 @@
pixel_y = 24;
name = "north bump"
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel{
@@ -32227,7 +32227,7 @@
},
/area/teleporter/quantum/cargo)
"dkK" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -33782,7 +33782,7 @@
},
/area/hallway/primary/fore)
"duc" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "floorgrime"
},
@@ -33933,7 +33933,7 @@
},
/area/hallway/primary/fore)
"duL" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plating,
/area/security/permabrig)
"duM" = (
@@ -36057,7 +36057,7 @@
},
/area/hallway/primary/fore/west)
"dKY" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/machinery/light/small{
@@ -39057,7 +39057,7 @@
},
/area/hallway/spacebridge/scidock)
"eQt" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel{
@@ -39203,7 +39203,7 @@
/turf/simulated/floor/grass,
/area/hallway/spacebridge/scidock)
"eTJ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -39357,7 +39357,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel{
@@ -39659,7 +39659,7 @@
dir = 8;
pixel_x = 32
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/carpet,
/area/hallway/primary/port/east)
"fdD" = (
@@ -41664,7 +41664,7 @@
},
/area/medical/genetics_cloning)
"fUT" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/effect/spawner/random_spawners/dirt_often,
@@ -42968,7 +42968,7 @@
c_tag = "Telecomms Control Room";
dir = 6
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel{
@@ -43549,7 +43549,7 @@
},
/area/hallway/primary/fore/east)
"gEb" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 4
},
@@ -44304,7 +44304,7 @@
},
/area/hallway/primary/fore)
"gQP" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/machinery/light_switch{
@@ -44469,7 +44469,7 @@
/turf/simulated/floor/plating,
/area/maintenance/disposal/external/southeast)
"gTe" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "whitepurplefull"
@@ -44988,7 +44988,7 @@
d2 = 8;
icon_state = "0-8"
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/blueshield)
"hcb" = (
@@ -45382,7 +45382,7 @@
/turf/simulated/floor/plating,
/area/maintenance/storage)
"hkr" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/carpet/black,
/area/chapel/main)
"hkx" = (
@@ -45393,7 +45393,7 @@
layer = 4;
pixel_y = 32
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/power/apc{
dir = 4;
name = "east bump";
@@ -45598,7 +45598,7 @@
},
/area/medical/medbay)
"hoM" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/wood,
@@ -45877,7 +45877,7 @@
/turf/simulated/floor/plating,
/area/hallway/secondary/entry/north)
"htq" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/obj/structure/cable/orange{
@@ -46380,7 +46380,7 @@
},
/area/quartermaster/office)
"hDf" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-25"
},
/turf/simulated/floor/plasteel{
@@ -53554,8 +53554,8 @@
/area/crew_quarters/fitness)
"jRi" = (
/obj/structure/table,
-/obj/item/twohanded/rcl/pre_loaded,
-/obj/item/twohanded/rcl/pre_loaded,
+/obj/item/rcl/pre_loaded,
+/obj/item/rcl/pre_loaded,
/obj/item/flashlight,
/turf/simulated/floor/plasteel{
icon_state = "dark"
@@ -53960,7 +53960,7 @@
/turf/simulated/floor/plasteel/white,
/area/toxins/xenobiology)
"jXC" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small{
dir = 8
},
@@ -54421,7 +54421,7 @@
/turf/simulated/floor/engine,
/area/engine/engineering)
"kgd" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "applebush"
},
/turf/simulated/floor/plasteel{
@@ -54782,7 +54782,7 @@
/turf/simulated/floor/transparent/glass/reinforced,
/area/maintenance/fsmaint)
"knB" = (
-/obj/item/twohanded/required/kirbyplants/dead,
+/obj/item/kirbyplants/dead,
/turf/simulated/floor/plasteel{
icon_state = "cafeteria"
},
@@ -54844,7 +54844,7 @@
/turf/simulated/floor/engine,
/area/toxins/xenobiology)
"koT" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plating,
/area/mine/unexplored/cere/orbiting)
"koU" = (
@@ -56600,7 +56600,7 @@
/turf/simulated/floor/plating,
/area/maintenance/fore)
"kPx" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/wood,
@@ -56632,7 +56632,7 @@
/turf/simulated/floor/wood,
/area/ntrep)
"kQz" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel{
@@ -59087,7 +59087,7 @@
"lBJ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel,
@@ -61064,7 +61064,7 @@
/obj/structure/disposalpipe/junction/reversed{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "redcorner"
},
@@ -62064,7 +62064,7 @@
pixel_y = 24;
name = "north bump"
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/wood,
@@ -68409,7 +68409,7 @@
},
/area/atmos/distribution)
"oNY" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 8
},
@@ -71501,7 +71501,7 @@
/area/security/hos)
"pOk" = (
/obj/item/razor,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "barber"
},
@@ -71532,7 +71532,7 @@
/turf/space,
/area/space/nearstation)
"pOU" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 9;
icon_state = "whitepurple"
@@ -71552,7 +71552,7 @@
/turf/simulated/floor/plating,
/area/maintenance/port)
"pOY" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/plasteel{
@@ -71736,7 +71736,7 @@
},
/area/chapel/office)
"pSr" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/crew_quarters/fitness)
"pSE" = (
@@ -76820,7 +76820,7 @@
/turf/simulated/floor/wood,
/area/crew_quarters/theatre)
"rGm" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/obj/machinery/light_switch{
@@ -76954,7 +76954,7 @@
},
/area/maintenance/asmaint)
"rIq" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -77202,7 +77202,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -77411,7 +77411,7 @@
},
/area/medical/cmo)
"rOY" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "cafeteria"
},
@@ -80944,7 +80944,7 @@
/obj/machinery/light{
dir = 8
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/effect/spawner/random_spawners/dirt_often,
@@ -82680,7 +82680,7 @@
},
/area/engine/gravitygenerator)
"tCV" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -85406,7 +85406,7 @@
},
/area/toxins/xenobiology)
"uBY" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-25"
},
/turf/simulated/floor/plasteel{
@@ -88320,7 +88320,7 @@
/turf/simulated/floor/plating,
/area/maintenance/fore2)
"vwo" = (
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/machinery/light{
@@ -89075,7 +89075,7 @@
pixel_y = 24;
name = "north bump"
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/turf/simulated/floor/wood,
@@ -91552,7 +91552,7 @@
},
/area/medical/cmostore)
"wvs" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/button/windowtint{
id = "chaplain";
pixel_y = 24
@@ -92033,7 +92033,7 @@
pixel_x = -28;
name = "custom placement"
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-25"
},
/turf/simulated/floor/plasteel{
@@ -92086,7 +92086,7 @@
pixel_x = 24;
name = "east bump"
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-22"
},
/turf/simulated/floor/plasteel{
@@ -93785,7 +93785,7 @@
/area/hallway/primary/central)
"xcX" = (
/obj/effect/turf_decal/stripes/line,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "whitepurple"
},
@@ -93925,7 +93925,7 @@
},
/area/hallway/primary/port/east)
"xfK" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/library)
"xfM" = (
@@ -95527,7 +95527,7 @@
c_tag = "Primary Tool Storage South";
dir = 5
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "neutral"
@@ -95680,7 +95680,7 @@
pixel_y = 24;
name = "north bump"
},
-/obj/item/twohanded/required/kirbyplants{
+/obj/item/kirbyplants{
icon_state = "plant-21"
},
/obj/item/radio/intercom{
@@ -96248,7 +96248,7 @@
/turf/simulated/floor/engine,
/area/medical/chemistry)
"xVF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "darkblue"
diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 62c744368ce..992f399abac 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -6828,7 +6828,7 @@
/turf/simulated/floor/plating,
/area/security/processing)
"auF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "red"
@@ -6880,7 +6880,7 @@
/turf/simulated/floor/plating,
/area/maintenance/fore)
"auL" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "red"
@@ -10923,7 +10923,7 @@
name = "west bump";
pixel_x = -24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 1;
name = "south bump";
@@ -11358,7 +11358,7 @@
/turf/simulated/floor/wood,
/area/crew_quarters/courtroom)
"aGu" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/crew_quarters/courtroom)
"aGw" = (
@@ -11759,7 +11759,7 @@
},
/area/crew_quarters/courtroom)
"aHH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "redcorner"
@@ -12384,7 +12384,7 @@
/turf/simulated/floor/plating,
/area/maintenance/fore)
"aJu" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "barber"
},
@@ -12487,7 +12487,7 @@
/turf/simulated/floor/plating,
/area/maintenance/fsmaint)
"aJO" = (
-/obj/item/twohanded/garrote/improvised,
+/obj/item/garrote/improvised,
/turf/simulated/floor/plating,
/area/maintenance/fpmaint)
"aJP" = (
@@ -12687,7 +12687,7 @@
},
/area/magistrateoffice)
"aKy" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "darkred"
},
@@ -14527,7 +14527,7 @@
},
/area/crew_quarters/courtroom)
"aPH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "bluecorner"
@@ -14767,7 +14767,7 @@
},
/area/crew_quarters/dorms)
"aQs" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "whitecorner"
@@ -18306,7 +18306,7 @@
name = "east bump";
pixel_x = 24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/sign/bobross{
pixel_y = 32
},
@@ -20980,7 +20980,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/primary/port)
"bgs" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/camera{
c_tag = "Office Supplies";
dir = 4
@@ -22307,7 +22307,7 @@
/turf/simulated/floor/plating,
/area/hydroponics)
"bjD" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -22321,7 +22321,7 @@
/turf/simulated/floor/wood,
/area/library)
"bjI" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light_switch{
name = "north bump";
pixel_y = 24
@@ -23887,7 +23887,7 @@
name = "north bump";
pixel_y = 28
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"bnm" = (
@@ -27930,7 +27930,7 @@
/obj/machinery/economy/atm{
pixel_x = 32
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"bxF" = (
@@ -29931,7 +29931,7 @@
/turf/simulated/floor/carpet,
/area/crew_quarters/captain)
"bCR" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/library)
"bCS" = (
@@ -30052,7 +30052,7 @@
},
/area/medical/reception)
"bDk" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light,
/turf/simulated/floor/wood,
/area/crew_quarters/courtroom)
@@ -36524,7 +36524,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/primary/central/se)
"bUH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 1;
name = "south bump";
@@ -37142,7 +37142,7 @@
/turf/simulated/wall,
/area/assembly/chargebay)
"bWk" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "whitepurple"
},
@@ -38219,7 +38219,7 @@
c_tag = "Head of Personnel's Office";
dir = 1
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/crew_quarters/heads)
"bYT" = (
@@ -38819,7 +38819,7 @@
name = "west bump";
pixel_x = -24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable{
d2 = 2;
icon_state = "0-2"
@@ -41398,7 +41398,7 @@
/turf/simulated/floor/wood,
/area/blueshield)
"chJ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/sign/poster/official/random{
pixel_y = -32
},
@@ -41649,7 +41649,7 @@
/obj/machinery/light{
dir = 1
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/blueshield)
"ciM" = (
@@ -43160,7 +43160,7 @@
/turf/simulated/floor/plating,
/area/medical/medbay)
"coa" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "whitebluefull"
},
@@ -43189,7 +43189,7 @@
/turf/simulated/wall/r_wall,
/area/toxins/explab)
"coe" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/power/apc{
name = "south bump";
pixel_y = -24
@@ -43410,7 +43410,7 @@
name = "east bump";
pixel_x = 24
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "whiteblue"
},
@@ -47451,7 +47451,7 @@
/turf/simulated/floor/plasteel,
/area/engine/controlroom)
"cAS" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "whitepurplecorner"
@@ -47905,7 +47905,7 @@
/turf/simulated/floor/plating,
/area/toxins/misc_lab)
"cCf" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "whitepurplecorner"
@@ -55140,7 +55140,7 @@
/turf/simulated/floor/plating,
/area/storage/secure)
"cYH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/item/radio/intercom{
name = "west bump";
pixel_x = -28
@@ -57893,7 +57893,7 @@
},
/area/hallway/primary/central/north)
"dix" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/alarm{
name = "north bump";
pixel_y = 24
@@ -58103,7 +58103,7 @@
/turf/space,
/area/space/nearstation)
"dje" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/power/apc{
dir = 1;
name = "north bump";
@@ -61823,7 +61823,7 @@
/turf/simulated/floor/engine,
/area/engine/engineering)
"dQe" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/cable{
d1 = 2;
d2 = 4;
@@ -64130,7 +64130,7 @@
d2 = 4;
icon_state = "2-4"
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "darkred"
@@ -71050,7 +71050,7 @@
/turf/simulated/floor/plasteel,
/area/hallway/primary/aft)
"jtP" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood{
icon_state = "wood-broken5"
},
@@ -72993,7 +72993,7 @@
},
/area/security/permabrig)
"kDY" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light/small,
/obj/machinery/atmospherics/pipe/simple/hidden/cyan{
dir = 4
@@ -75188,7 +75188,7 @@
/area/maintenance/aft)
"mba" = (
/obj/effect/decal/cleanable/blood/splatter,
-/obj/item/twohanded/garrote/improvised,
+/obj/item/garrote/improvised,
/turf/simulated/floor/plating,
/area/maintenance/aft)
"mcw" = (
@@ -75234,7 +75234,7 @@
/turf/simulated/floor/plating,
/area/maintenance/apmaint2)
"mdg" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 1;
pixel_y = -24;
@@ -75794,7 +75794,7 @@
},
/area/maintenance/asmaint)
"mxH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 4;
name = "east bump";
@@ -80655,7 +80655,7 @@
/turf/simulated/floor/plating,
/area/maintenance/asmaint)
"pAp" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "yellowcorner"
},
@@ -82137,7 +82137,7 @@
},
/area/toxins/xenobiology)
"qyq" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/newscaster{
dir = 1;
name = "south bump";
@@ -83154,7 +83154,7 @@
/turf/simulated/floor/plating,
/area/maintenance/fsmaint)
"raH" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/maintenance/asmaint)
"raL" = (
@@ -83284,7 +83284,7 @@
},
/area/medical/reception)
"rdL" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/extinguisher_cabinet{
name = "west bump";
pixel_x = -27
@@ -83911,7 +83911,7 @@
/turf/simulated/floor/carpet/arcade,
/area/crew_quarters/arcade)
"rCT" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 8
},
@@ -86850,7 +86850,7 @@
/turf/simulated/floor/grass,
/area/security/permabrig)
"twv" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/firealarm{
dir = 8;
name = "west bump";
@@ -88495,7 +88495,7 @@
},
/area/quartermaster/qm)
"uuo" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "purplecorner"
@@ -89832,7 +89832,7 @@
/turf/simulated/floor/wood,
/area/maintenance/aft)
"vnZ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "brown"
@@ -90422,7 +90422,7 @@
/turf/simulated/floor/plating,
/area/maintenance/fpmaint)
"vFk" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light,
/turf/simulated/floor/plasteel,
/area/hallway/secondary/exit)
@@ -90605,7 +90605,7 @@
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "bluecorner"
@@ -90696,7 +90696,7 @@
/turf/simulated/floor/plating,
/area/maintenance/aft)
"vOq" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "whitepurple"
diff --git a/_maps/map_files/generic/centcomm.dmm b/_maps/map_files/generic/centcomm.dmm
index 4851380b914..d598acbb594 100644
--- a/_maps/map_files/generic/centcomm.dmm
+++ b/_maps/map_files/generic/centcomm.dmm
@@ -1741,7 +1741,7 @@
/turf/simulated/floor/plating/abductor,
/area/abductor_ship)
"gY" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/centcom/specops)
"ha" = (
@@ -1940,7 +1940,7 @@
/area/shuttle/administration)
"hy" = (
/obj/effect/decal/cleanable/cobweb2,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/window/reinforced/clockwork{
dir = 4
},
@@ -3615,7 +3615,7 @@
/obj/item/radio/intercom/syndicate{
pixel_y = 25
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "bar"
},
@@ -3746,7 +3746,7 @@
/turf/simulated/floor/plasteel,
/area/admin)
"ni" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/tdome/tdomeadmin)
"nj" = (
@@ -3790,7 +3790,7 @@
/obj/structure/mirror/magic/nuclear{
pixel_x = 28
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/freezer,
/area/syndicate_mothership)
"np" = (
@@ -4027,7 +4027,7 @@
/turf/simulated/floor/plasteel/freezer,
/area/admin)
"nW" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "bar"
},
@@ -4558,7 +4558,7 @@
/turf/simulated/floor/transparent/glass,
/area/centcom/specops)
"qg" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/item/storage/secure/safe{
pixel_x = 32
},
@@ -4692,7 +4692,7 @@
pixel_y = -2;
req_access_txt = "151"
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "bar"
},
@@ -4732,7 +4732,7 @@
/turf/simulated/floor/mineral/plastitanium/red,
/area/shuttle/assault_pod)
"qS" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/centcom/control)
"qT" = (
@@ -4843,7 +4843,7 @@
/area/admin)
"rl" = (
/obj/structure/railing,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/centcom/evac)
"rn" = (
@@ -4944,7 +4944,7 @@
/turf/simulated/floor/plasteel/freezer,
/area/admin)
"rx" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/railing,
/turf/simulated/floor/plasteel,
/area/centcom/evac)
@@ -5424,7 +5424,7 @@
/turf/simulated/floor/mineral/plastitanium/red,
/area/shuttle/syndicate)
"tA" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/trader_station/sol)
"tB" = (
@@ -6115,7 +6115,7 @@
/turf/simulated/floor/plasteel/freezer,
/area/admin)
"vQ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/tdome/tdomeobserve)
"vT" = (
@@ -6313,12 +6313,12 @@
/area/tdome/tdomeobserve)
"wH" = (
/obj/structure/rack,
-/obj/item/twohanded/knighthammer{
+/obj/item/knighthammer{
pixel_x = -3;
pixel_y = 3
},
-/obj/item/twohanded/mjollnir,
-/obj/item/twohanded/singularityhammer{
+/obj/item/mjollnir,
+/obj/item/singularityhammer{
pixel_x = 3;
pixel_y = -3
},
@@ -6550,10 +6550,10 @@
/obj/structure/rack,
/obj/item/clothing/suit/wizrobe/magusblue,
/obj/item/clothing/head/wizard/magus,
-/obj/item/twohanded/staff,
+/obj/item/staff,
/obj/item/clothing/suit/wizrobe/magusred,
/obj/item/clothing/head/wizard/magus,
-/obj/item/twohanded/staff,
+/obj/item/staff,
/turf/simulated/floor/carpet/black,
/area/wizard_station)
"xP" = (
@@ -6781,7 +6781,7 @@
/turf/simulated/floor/plasteel/dark,
/area/centcom/specops)
"Ai" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/computer/cryopod{
pixel_y = 32
},
@@ -6970,7 +6970,7 @@
/turf/simulated/floor/plasteel/dark,
/area/centcom/gamma)
"AV" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel/dark,
/area/centcom/specops)
"AX" = (
@@ -6982,7 +6982,7 @@
/obj/item/clothing/suit/wizrobe/marisa,
/obj/item/clothing/shoes/sandal/marisa,
/obj/item/clothing/head/wizard/marisa,
-/obj/item/twohanded/staff/broom,
+/obj/item/staff/broom,
/turf/simulated/floor/carpet/black,
/area/wizard_station)
"Bb" = (
@@ -7079,7 +7079,7 @@
},
/obj/structure/window/reinforced,
/obj/structure/table/wood,
-/obj/item/twohanded/bostaff,
+/obj/item/bostaff,
/turf/simulated/floor/plasteel/dark,
/area/admin)
"Br" = (
@@ -7713,7 +7713,7 @@
/obj/structure/extinguisher_cabinet{
pixel_y = -32
},
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "vault"
@@ -9324,7 +9324,7 @@
/turf/simulated/floor/plasteel/dark,
/area/centcom/control)
"Ke" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/carpet/black,
/area/centcom/evac)
"Kg" = (
@@ -10120,7 +10120,7 @@
/turf/simulated/floor/wood,
/area/wizard_station)
"MV" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/wizard_station)
"MX" = (
@@ -10392,7 +10392,7 @@
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"Of" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "vault"
@@ -10514,7 +10514,7 @@
/turf/simulated/floor/wood,
/area/centcom/evac)
"OF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "green"
@@ -10583,7 +10583,7 @@
/turf/simulated/floor/mineral/plastitanium/red/brig,
/area/shuttle/escape)
"OO" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "redcorner"
@@ -10622,7 +10622,7 @@
},
/area/holodeck/source_desert)
"OV" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/door_control/no_emag{
id = "CCDOCK2";
name = "Special Operations Secondary Dock";
@@ -10642,7 +10642,7 @@
/turf/simulated/floor/plasteel,
/area/tdome/arena)
"OX" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/extinguisher_cabinet{
pixel_x = 28
},
@@ -10889,7 +10889,7 @@
/turf/simulated/floor/transparent/glass,
/area/tdome/tdomeobserve)
"PY" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/centcom/evac)
"Qa" = (
@@ -11090,7 +11090,7 @@
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"QN" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "green"
@@ -11423,7 +11423,7 @@
/turf/simulated/floor/plasteel/dark,
/area/centcom/evac)
"Sf" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "red"
@@ -11456,7 +11456,7 @@
/turf/simulated/floor/transparent/glass/reinforced,
/area/centcom/specops)
"Sn" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "green"
@@ -11536,7 +11536,7 @@
/turf/simulated/floor/mineral/plastitanium/red,
/area/shuttle/administration)
"SF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 8
},
@@ -11549,7 +11549,7 @@
/turf/simulated/floor/mineral/plastitanium/red,
/area/shuttle/administration)
"SJ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"SK" = (
@@ -12333,7 +12333,7 @@
/turf/simulated/floor/grass/jungle,
/area/wizard_station)
"Wl" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/door_control/no_emag{
id = "CCcustoms1";
name = "CentCom Outer Customs Shutters";
@@ -12552,14 +12552,14 @@
/turf/simulated/floor/wood,
/area/centcom/control)
"WW" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "vault"
},
/area/centcom/specops)
"WX" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/transparent/glass/reinforced,
/area/centcom/control)
"WZ" = (
@@ -12819,7 +12819,7 @@
/turf/simulated/floor/mineral/plastitanium/red,
/area/shuttle/administration)
"XY" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/wood,
/area/tdome/tdomeobserve)
"XZ" = (
@@ -13199,7 +13199,7 @@
},
/area/centcom/specops)
"Zl" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/mirror{
pixel_y = 30
},
diff --git a/_maps/map_files/shuttles/emergency_bar.dmm b/_maps/map_files/shuttles/emergency_bar.dmm
index 3d34829b0d2..b4d7ad0bd69 100644
--- a/_maps/map_files/shuttles/emergency_bar.dmm
+++ b/_maps/map_files/shuttles/emergency_bar.dmm
@@ -101,7 +101,7 @@
/turf/simulated/floor/mineral/plastitanium/red/brig,
/area/shuttle/escape)
"az" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
icon_state = "cafeteria"
},
@@ -112,7 +112,7 @@
},
/area/shuttle/escape)
"aB" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/carpet/royalblack,
/area/shuttle/escape)
"aC" = (
diff --git a/_maps/map_files/shuttles/emergency_cyb.dmm b/_maps/map_files/shuttles/emergency_cyb.dmm
index 780ce93fb1e..3b0593a252a 100644
--- a/_maps/map_files/shuttles/emergency_cyb.dmm
+++ b/_maps/map_files/shuttles/emergency_cyb.dmm
@@ -414,7 +414,7 @@
/turf/simulated/floor/mineral/plastitanium/red/brig,
/area/shuttle/escape)
"br" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "redcorner"
@@ -432,7 +432,7 @@
/turf/simulated/floor/plating/airless,
/area/shuttle/escape)
"bx" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/structure/extinguisher_cabinet{
pixel_x = 28
},
@@ -544,14 +544,14 @@
},
/area/shuttle/escape)
"bJ" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 8
},
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"bK" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/obj/machinery/light{
dir = 4
},
@@ -673,7 +673,7 @@
},
/area/shuttle/escape)
"cb" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"cc" = (
diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm
index 750fae056ea..ffed3297f2f 100644
--- a/_maps/map_files/shuttles/emergency_dept.dmm
+++ b/_maps/map_files/shuttles/emergency_dept.dmm
@@ -285,7 +285,7 @@
},
/area/shuttle/escape)
"aT" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "neutralfull"
diff --git a/_maps/map_files/templates/shelter_2.dmm b/_maps/map_files/templates/shelter_2.dmm
index b3339378957..a5d11498f77 100644
--- a/_maps/map_files/templates/shelter_2.dmm
+++ b/_maps/map_files/templates/shelter_2.dmm
@@ -114,7 +114,7 @@
/area/survivalpod)
"u" = (
/obj/structure/tubes,
-/obj/item/twohanded/required/kirbyplants,
+/obj/item/kirbyplants,
/turf/simulated/floor/pod,
/area/survivalpod)
"v" = (
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 93fbd1a8cb2..71e7b565327 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -390,9 +390,13 @@
#define COMPONENT_BLOCK_EMOTE_ACTION (1<<2)
///from base of mob/swap_hand(): (obj/item)
-#define COMSIG_MOB_SWAP_HANDS "mob_swap_hands"
+#define COMSIG_MOB_SWAPPING_HANDS "mob_swapping_hands"
+ /// Prevent the mob from changing hands
#define COMPONENT_BLOCK_SWAP (1<<0)
+/// Performed after the hands are swapped.
+#define COMSIG_MOB_SWAPPED_HANDS "mob_swap_hands"
+
#define COMSIG_MOB_AUTOMUTE_CHECK "automute_check"
#define WAIVE_AUTOMUTE_CHECK (1<<0)
@@ -481,6 +485,8 @@
#define COMSIG_CARBON_THROWN_ITEM_CAUGHT "carbon_thrown_item_caught"
/// From /mob/living/carbon/flash_eyes()
#define COMSIG_CARBON_FLASH_EYES "carbon_flash_eyes"
+/// From /mob/living/carbon/update_handcuffed()
+#define COMSIG_CARBON_UPDATE_HANDCUFFED "carbon_update_handcuff"
/// From /mob/living/carbon/regenerate_icons()
#define COMSIG_CARBON_REGENERATE_ICONS "carbon_regen_icons"
@@ -560,7 +566,7 @@
#define COMSIG_ITEM_MICROWAVE_ACT "microwave_act"
///from base of item/sharpener/attackby(): (amount, max)
#define COMSIG_ITEM_SHARPEN_ACT "sharpen_act"
- #define COMPONENT_BLOCK_SHARPEN_APPLIED (1<<0)
+ #define COMPONENT_SHARPEN_APPLIED (1<<0)
#define COMPONENT_BLOCK_SHARPEN_BLOCKED (1<<1)
#define COMPONENT_BLOCK_SHARPEN_ALREADY (1<<2)
#define COMPONENT_BLOCK_SHARPEN_MAXED (1<<3)
diff --git a/code/__HELPERS/trait_helpers.dm b/code/__HELPERS/trait_helpers.dm
index 0ac08613ebd..47bbaeb1a1c 100644
--- a/code/__HELPERS/trait_helpers.dm
+++ b/code/__HELPERS/trait_helpers.dm
@@ -215,6 +215,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
//***** ITEM TRAITS *****//
#define TRAIT_BUTCHERS_HUMANS "butchers_humans"
#define TRAIT_CMAGGED "cmagged"
+/// An item that is being wielded.
+#define TRAIT_WIELDED "wielded"
/// Wires on this will have their titles randomized for those with SHOW_WIRES
#define TRAIT_OBSCURED_WIRES "obscured_wires"
/// Forces open doors after a delay specific to the item
diff --git a/code/datums/components/two_handed.dm b/code/datums/components/two_handed.dm
new file mode 100644
index 00000000000..114bc3d1b0a
--- /dev/null
+++ b/code/datums/components/two_handed.dm
@@ -0,0 +1,420 @@
+#define NO_CHANGE -1
+
+/**
+ * Two Handed Component
+ *
+ * When applied to an item it will make it two handed
+ *
+ */
+/datum/component/two_handed
+ dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS // Only one of the component can exist on an item
+ /// Are we holding the two handed item properly
+ var/wielded = FALSE
+ /// The multiplier applied to force when wielded, does not work with force_wielded, and force_unwielded
+ var/force_multiplier = 0
+ /// The force of the item when weilded
+ var/force_wielded = 0
+ /// The force of the item when unweilded
+ var/force_unwielded = 0
+ /// Play sound when wielded
+ var/wieldsound = FALSE
+ /// Play sound when unwielded
+ var/unwieldsound = FALSE
+ /// Play sound on attack when wielded
+ var/attacksound = FALSE
+ /// Does it have to be held in both hands
+ var/require_twohands = FALSE
+ /// The icon that will be used when wielded
+ var/icon_wielded = FALSE
+ /// Reference to the offhand created for the item
+ var/obj/item/offhand/offhand_item = null
+ /// The amount of increase recived from sharpening the item
+ var/sharpened_increase = 0
+ /// A callback on the parent to be called when the item is wielded
+ var/datum/callback/wield_callback
+ /// A callback on the parent to be called when the item is unwielded
+ var/datum/callback/unwield_callback
+ /// Whether or not the object is only sharp when wielded. If it's never sharp, ignore this.
+ var/only_sharp_when_wielded = FALSE
+
+/**
+
+ * Two Handed component
+ *
+ * vars:
+ * * require_twohands (optional) Does the item need both hands to be carried
+ * * wieldsound (optional) The sound to play when wielded
+ * * unwieldsound (optional) The sound to play when unwielded
+ * * attacksound (optional) The sound to play when wielded and attacking
+ * * force_multiplier (optional) The force multiplier when wielded, do not use with force_wielded, and force_unwielded
+ * * force_wielded (optional) The force setting when the item is wielded, do not use with force_multiplier
+ * * force_unwielded (optional) The force setting when the item is unwielded, do not use with force_multiplier
+ * * icon_wielded (optional) The icon to be used when wielded
+ * * only_sharp_when_wielded (optional) Is the item only sharp when held in both hands?
+ */
+/datum/component/two_handed/Initialize(require_twohands = FALSE, wieldsound = FALSE, unwieldsound = FALSE, attacksound = FALSE, \
+ force_multiplier = 0, force_wielded = 0, force_unwielded = 0, icon_wielded = FALSE, \
+ only_sharp_when_wielded = FALSE, datum/callback/wield_callback, datum/callback/unwield_callback)
+ if(!isitem(parent))
+ return COMPONENT_INCOMPATIBLE
+
+ src.require_twohands = require_twohands
+ src.wieldsound = wieldsound
+ src.unwieldsound = unwieldsound
+ src.attacksound = attacksound
+ src.force_multiplier = force_multiplier
+ src.force_wielded = force_wielded
+ src.force_unwielded = force_unwielded
+ src.icon_wielded = icon_wielded
+ src.wield_callback = wield_callback
+ src.unwield_callback = unwield_callback
+ src.only_sharp_when_wielded = only_sharp_when_wielded
+
+
+// Inherit the new values passed to the component
+/datum/component/two_handed/InheritComponent(datum/component/two_handed/new_comp, original, require_twohands = NO_CHANGE, wieldsound = NO_CHANGE, unwieldsound = NO_CHANGE, \
+ force_multiplier = NO_CHANGE, force_wielded = NO_CHANGE, force_unwielded = NO_CHANGE, icon_wielded = NO_CHANGE, \
+ only_sharp_when_wielded = NO_CHANGE, datum/callback/wield_callback = NO_CHANGE, datum/callback/unwield_callback = NO_CHANGE)
+ if(!original)
+ return
+ if(require_twohands != NO_CHANGE)
+ src.require_twohands = require_twohands
+ if(wieldsound != NO_CHANGE)
+ src.wieldsound = wieldsound
+ if(unwieldsound != NO_CHANGE)
+ src.unwieldsound = unwieldsound
+ if(attacksound != NO_CHANGE)
+ src.attacksound = attacksound
+ if(force_multiplier != NO_CHANGE)
+ src.force_multiplier = force_multiplier
+ if(force_wielded != NO_CHANGE)
+ src.force_wielded = force_wielded
+ if(force_unwielded != NO_CHANGE)
+ src.force_unwielded = force_unwielded
+ if(icon_wielded != NO_CHANGE)
+ src.icon_wielded = icon_wielded
+ if(wield_callback != NO_CHANGE)
+ src.wield_callback = wield_callback
+ if(unwield_callback != NO_CHANGE)
+ src.unwield_callback = unwield_callback
+ if(only_sharp_when_wielded != NO_CHANGE)
+ src.only_sharp_when_wielded = only_sharp_when_wielded
+
+// register signals withthe parent item
+/datum/component/two_handed/RegisterWithParent()
+ RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equip))
+ RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_drop))
+ RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_attack_self))
+ RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(on_attack))
+ RegisterSignal(parent, COMSIG_ATOM_UPDATE_ICON, PROC_REF(on_update_icon))
+ RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved))
+ RegisterSignal(parent, COMSIG_ITEM_SHARPEN_ACT, PROC_REF(on_sharpen))
+ RegisterSignal(parent, COMSIG_CARBON_UPDATE_HANDCUFFED, PROC_REF(on_handcuff_user))
+ RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand))
+
+// Remove all siginals registered to the parent item
+/datum/component/two_handed/UnregisterFromParent()
+ UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED,
+ COMSIG_ITEM_DROPPED,
+ COMSIG_ITEM_ATTACK_SELF,
+ COMSIG_ITEM_ATTACK,
+ COMSIG_ATOM_UPDATE_ICON,
+ COMSIG_MOVABLE_MOVED,
+ COMSIG_ITEM_SHARPEN_ACT))
+
+/// Triggered on equip of the item containing the component
+/datum/component/two_handed/proc/on_equip(datum/source, mob/user, slot)
+ SIGNAL_HANDLER // COMSIG_ITEM_EQUIPPED
+
+ if(require_twohands && (slot == slot_l_hand || slot == slot_r_hand)) // force equip the item
+ INVOKE_ASYNC(src, PROC_REF(wield), user)
+ if(!user.is_holding(parent) && wielded && !require_twohands)
+ INVOKE_ASYNC(src, PROC_REF(unwield), user)
+
+/// Triggered on drop of item containing the component
+/datum/component/two_handed/proc/on_drop(datum/source, mob/user)
+ SIGNAL_HANDLER // COMSIG_ITEM_DROPPED
+
+ if(require_twohands) //Don't let the item fall to the ground and cause bugs if it's actually being equipped on another slot.
+ INVOKE_ASYNC(src, PROC_REF(unwield), user, FALSE, FALSE)
+ if(wielded)
+ INVOKE_ASYNC(src, PROC_REF(unwield), user)
+ if(source == offhand_item && !QDELETED(source))
+ offhand_item = null
+ qdel(source)
+
+/// Triggered on destroy of the component's offhand
+/datum/component/two_handed/proc/on_destroy(datum/source)
+ SIGNAL_HANDLER
+ offhand_item = null
+
+
+/// Triggered on attack self of the item containing the component
+/datum/component/two_handed/proc/on_attack_self(datum/source, mob/user)
+ SIGNAL_HANDLER // COMSIG_ITEM_ATTACK_SELF
+
+ if(require_twohands)
+ return
+ if(wielded)
+ INVOKE_ASYNC(src, PROC_REF(unwield), user)
+ else if(user.is_holding(parent))
+ INVOKE_ASYNC(src, PROC_REF(wield), user)
+
+/datum/component/two_handed/proc/on_attack_hand(datum/source, mob/user)
+ SIGNAL_HANDLER // COMSIG_ATOM_ATTACK_HAND if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
+ if(require_twohands && user.get_inactive_hand())
+ to_chat(user, "[parent] is too cumbersome to carry in one hand!")
+ return COMPONENT_CANCEL_ATTACK_CHAIN
+
+/**
+ * Wield the two handed item in both hands
+ *
+ * vars:
+ * * user The mob/living/carbon that is wielding the item
+ */
+/datum/component/two_handed/proc/wield(mob/living/carbon/user)
+ if(wielded)
+ return
+ if(ismonkeybasic(user))
+ if(require_twohands)
+ to_chat(user, "[parent] is too heavy and cumbersome for you to carry!")
+ user.unEquip(parent, force = TRUE)
+ else
+ to_chat(user, "[parent] too heavy for you to wield fully.")
+ return
+ if(user.get_inactive_hand())
+ if(require_twohands)
+ to_chat(user, "[parent] is too cumbersome to carry in one hand!")
+ user.unEquip(parent, force = TRUE)
+ else
+ to_chat(user, "You need your other hand to be empty!")
+ return
+ if(!user.has_both_hands())
+ if(require_twohands)
+ user.unEquip(parent, force = TRUE)
+ to_chat(user, "You don't have enough intact hands.")
+ return
+
+ // wield update status
+ if(SEND_SIGNAL(parent, COMSIG_TWOHANDED_WIELD, user) & COMPONENT_TWOHANDED_BLOCK_WIELD)
+ return // blocked wield from item
+ wielded = TRUE
+ ADD_TRAIT(parent, TRAIT_WIELDED, "[\ref(src)]")
+ RegisterSignal(user, COMSIG_MOB_SWAPPING_HANDS, PROC_REF(on_swapping_hands))
+ if(only_sharp_when_wielded)
+ var/obj/O = parent
+ O.set_sharpness(TRUE)
+ wield_callback?.Invoke(parent, user)
+
+ // update item stats and name
+ var/obj/item/parent_item = parent
+ if(force_multiplier)
+ parent_item.force *= force_multiplier
+ else if(force_wielded)
+ parent_item.force = force_wielded
+ if(sharpened_increase && only_sharp_when_wielded)
+ parent_item.force += sharpened_increase
+ parent_item.name = "[parent_item.name] (Wielded)"
+ parent_item.update_appearance()
+
+ if(isrobot(user))
+ to_chat(user, "You dedicate your module to [parent].")
+ else
+ to_chat(user, "You grab [parent] with both hands.")
+
+ // Play sound if one is set
+ if(wieldsound)
+ playsound(parent_item.loc, wieldsound, 50, TRUE)
+
+ // Let's reserve the other hand
+ offhand_item = new(user)
+ offhand_item.name = "[parent_item.name] - offhand"
+ offhand_item.desc = "Your second grip on [parent_item]."
+ offhand_item.wielded = TRUE
+ RegisterSignal(offhand_item, COMSIG_ITEM_DROPPED, PROC_REF(on_drop))
+ RegisterSignal(offhand_item, COMSIG_PARENT_QDELETING, PROC_REF(on_destroy))
+ user.put_in_inactive_hand(offhand_item)
+
+/**
+ * Unwield the two handed item
+ *
+ * vars:
+ * * user The mob/living/carbon that is unwielding the item
+ * * show_message (option) show a message to chat on unwield
+ * * can_drop (option) whether 'dropItemToGround' can be called or not.
+ */
+/datum/component/two_handed/proc/unwield(mob/living/carbon/user, show_message=TRUE, can_drop=TRUE)
+ if(!wielded)
+ return
+
+ // wield update status
+ wielded = FALSE
+ UnregisterSignal(user, COMSIG_MOB_SWAPPING_HANDS)
+ SEND_SIGNAL(parent, COMSIG_TWOHANDED_UNWIELD, user)
+ REMOVE_TRAIT(parent, TRAIT_WIELDED, "[\ref(src)]")
+ unwield_callback?.Invoke(parent, user)
+ if(only_sharp_when_wielded)
+ var/obj/O = parent
+ O.set_sharpness(FALSE)
+
+ // update item stats
+ var/obj/item/parent_item = parent
+ if(sharpened_increase && only_sharp_when_wielded)
+ parent_item.force -= sharpened_increase
+ if(force_multiplier)
+ parent_item.force /= force_multiplier
+ else if(force_unwielded)
+ parent_item.force = force_unwielded
+
+ // update the items name to remove the wielded status
+ var/sf = findtext(parent_item.name, " (Wielded)", -10) // 10 == length(" (Wielded)")
+ if(sf)
+ parent_item.name = copytext(parent_item.name, 1, sf)
+ else
+ parent_item.name = "[initial(parent_item.name)]"
+
+ // Update icons
+ parent_item.update_appearance()
+
+ if(istype(user)) // tk showed that we might not have a mob here
+ if(user.get_item_by_slot(slot_back) == parent)
+ user.update_inv_back()
+ else
+ user.update_inv_l_hand()
+ user.update_inv_r_hand()
+
+ // if the item requires two handed drop the item on unwield
+ if(require_twohands && can_drop)
+ user.unEquip(parent, force = TRUE)
+
+ // Show message if requested
+ if(show_message)
+ if(isrobot(user))
+ to_chat(user, "You free up your module.")
+ else if(require_twohands)
+ to_chat(user, "You drop [parent].")
+ else
+ to_chat(user, "You are now carrying [parent] with one hand.")
+
+ // Play sound if set
+ if(unwieldsound)
+ playsound(parent_item.loc, unwieldsound, 50, TRUE)
+
+ // Remove the object in the offhand
+ if(offhand_item)
+ UnregisterSignal(offhand_item, list(COMSIG_ITEM_DROPPED, COMSIG_PARENT_QDELETING))
+ qdel(offhand_item)
+ // Clear any old refrence to an item that should be gone now
+ offhand_item = null
+
+/**
+ * on_attack triggers on attack with the parent item
+ */
+/datum/component/two_handed/proc/on_attack(obj/item/source, mob/living/target, mob/living/user)
+ SIGNAL_HANDLER // COMSIG_ITEM_ATTACK
+ if(wielded && attacksound)
+ var/obj/item/parent_item = parent
+ playsound(parent_item.loc, attacksound, 50, TRUE)
+
+/**
+ * on_update_icon triggers on call to update parent items icon
+ *
+ * Updates the icon using icon_wielded if set
+ */
+/datum/component/two_handed/proc/on_update_icon(obj/item/source)
+ SIGNAL_HANDLER
+ if(!wielded)
+ return NONE
+ if(!icon_wielded)
+ return NONE
+ source.icon_state = icon_wielded
+ return COMSIG_ATOM_NO_UPDATE_ICON_STATE
+
+/**
+ * on_moved Triggers on item moved
+ */
+/datum/component/two_handed/proc/on_moved(datum/source, mob/user, dir)
+ SIGNAL_HANDLER
+
+ INVOKE_ASYNC(src, PROC_REF(unwield), user, FALSE, FALSE)
+
+/**
+ * on_swap_hands Triggers on swapping hands, blocks swap if the other hand is busy
+ */
+/datum/component/two_handed/proc/on_swapping_hands(mob/user, obj/item/held_item)
+ SIGNAL_HANDLER
+
+ if(!held_item)
+ return
+ if(held_item == parent)
+ return COMPONENT_BLOCK_SWAP
+
+/**
+ * on_sharpen Triggers on usage of a sharpening stone on the item
+ */
+/datum/component/two_handed/proc/on_sharpen(obj/item/item, amount, max_amount)
+ SIGNAL_HANDLER
+
+ if(!item)
+ return COMPONENT_BLOCK_SHARPEN_BLOCKED
+ if(sharpened_increase)
+ return COMPONENT_BLOCK_SHARPEN_ALREADY
+ if(force_wielded >= max_amount)
+ return COMPONENT_BLOCK_SHARPEN_MAXED
+ var/wielded_val = 0
+ if(force_multiplier)
+ var/obj/item/parent_item = parent
+ if(wielded)
+ wielded_val = parent_item.force
+ else
+ wielded_val = parent_item.force * force_multiplier
+ else
+ wielded_val = force_wielded
+ if(wielded_val > max_amount)
+ return COMPONENT_BLOCK_SHARPEN_MAXED
+ sharpened_increase = min(amount, (max_amount - wielded_val))
+ var/obj/item/I = parent
+ if(!only_sharp_when_wielded)
+ force_unwielded += sharpened_increase
+ I.force += sharpened_increase // todo double check this logic is correct
+ else if(wielded)
+ I.force += sharpened_increase
+ // also update force_wielded so this still gets applied after re-wielding
+ force_wielded += sharpened_increase
+ return COMPONENT_SHARPEN_APPLIED // don't return the "sharpened applied" signal since we probably wanna sharpen the base form too
+
+/datum/component/two_handed/proc/on_handcuff_user(mob/user, handcuff_status)
+ SIGNAL_HANDLER // COMSIG_CARBON_UPDATE_HANDCUFFED
+ if(handcuff_status)
+ if(require_twohands)
+ INVOKE_ASYNC(src, PROC_REF(try_drop_item), user)
+ else
+ user.visible_message("[user] unwields [parent] as the handcuffs make it too hard to hold properly.")
+ INVOKE_ASYNC(src, PROC_REF(unwield), user)
+
+/datum/component/two_handed/proc/try_drop_item(mob/user)
+ if(user.unEquip(parent))
+ user.visible_message("[user] loses [user.p_their()] grip on [parent]!")
+
+/**
+ * The offhand dummy item for two handed items
+ *
+ */
+/obj/item/offhand
+ name = "offhand"
+ icon_state = "offhand"
+ w_class = WEIGHT_CLASS_HUGE
+ flags = ABSTRACT | NODROP
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
+ var/wielded = FALSE // Off Hand tracking of wielded status
+
+/obj/item/offhand/Destroy()
+ wielded = FALSE
+ return ..()
+
+/obj/item/offhand/equipped(mob/user, slot)
+ . = ..()
+ if(wielded && !user.is_holding(src) && !QDELETED(src))
+ qdel(src)
+
+#undef NO_CHANGE
diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm
index 353ba38ce74..6ce443d2a63 100644
--- a/code/datums/diseases/wizarditis.dm
+++ b/code/datums/diseases/wizarditis.dm
@@ -79,9 +79,9 @@ STI KALY - blind
else
var/mob/living/carbon/H = affected_mob
if(prob(chance))
- if(!istype(H.r_hand, /obj/item/twohanded/staff))
+ if(!istype(H.r_hand, /obj/item/staff))
H.drop_r_hand()
- H.put_in_r_hand( new /obj/item/twohanded/staff(H) )
+ H.put_in_r_hand( new /obj/item/staff(H) )
return
return
diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm
index a9cb163ff99..88e63e9539c 100644
--- a/code/datums/outfits/outfit_admin.dm
+++ b/code/datums/outfits/outfit_admin.dm
@@ -372,7 +372,7 @@
id = /obj/item/card/id
l_pocket = /obj/item/reagent_containers/food/snacks/grown/banana
r_pocket = /obj/item/bikehorn
- r_hand = /obj/item/twohanded/fireaxe
+ r_hand = /obj/item/fireaxe
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/flashlight = 1,
@@ -1061,7 +1061,7 @@
id = /obj/item/card/id/syndicate
l_pocket = /obj/item/kitchen/knife
r_pocket = /obj/item/scalpel
- r_hand = /obj/item/twohanded/fireaxe
+ r_hand = /obj/item/fireaxe
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/flashlight = 1
@@ -1087,7 +1087,7 @@
uniform = /obj/item/clothing/under/syndicate/combat
suit = /obj/item/clothing/suit/space/hardsuit/singuloth
back = /obj/item/storage/backpack/satchel
- l_hand = /obj/item/twohanded/knighthammer
+ l_hand = /obj/item/knighthammer
belt = /obj/item/claymore/ceremonial
gloves = /obj/item/clothing/gloves/combat
shoes = /obj/item/clothing/shoes/magboots
@@ -1120,7 +1120,7 @@
shoes = /obj/item/clothing/shoes/chameleon/noslip
l_ear = /obj/item/radio/headset/syndicate
id = /obj/item/card/id/syndicate
- l_hand = /obj/item/twohanded/dualsaber/red
+ l_hand = /obj/item/dualsaber/red
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/flashlight = 1,
@@ -1195,7 +1195,7 @@
l_ear = /obj/item/radio/headset
id = /obj/item/card/id
r_pocket = /obj/item/teleportation_scroll
- l_hand = /obj/item/twohanded/staff
+ l_hand = /obj/item/staff
r_hand = /obj/item/spellbook
backpack_contents = list(
/obj/item/storage/box/engineer = 1
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 870cfdfc5fe..01dd5d8f3de 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -49,9 +49,9 @@
status_type = STATUS_EFFECT_REPLACE
alert_type = null
var/mutable_appearance/marked_underlay
- var/obj/item/twohanded/kinetic_crusher/hammer_synced
+ var/obj/item/kinetic_crusher/hammer_synced
-/datum/status_effect/crusher_mark/on_creation(mob/living/new_owner, obj/item/twohanded/kinetic_crusher/new_hammer_synced)
+/datum/status_effect/crusher_mark/on_creation(mob/living/new_owner, obj/item/kinetic_crusher/new_hammer_synced)
. = ..()
if(.)
hammer_synced = new_hammer_synced
diff --git a/code/datums/uplink_items/uplink_general.dm b/code/datums/uplink_items/uplink_general.dm
index 9a603e992a9..6acc801f2b0 100644
--- a/code/datums/uplink_items/uplink_general.dm
+++ b/code/datums/uplink_items/uplink_general.dm
@@ -207,7 +207,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "Chainsaw"
desc = "A high powered chainsaw for cutting up ...you know...."
reference = "CH"
- item = /obj/item/twohanded/chainsaw
+ item = /obj/item/butcher_chainsaw
cost = 65
/datum/uplink_item/dangerous/universal_gun_kit
@@ -274,12 +274,10 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "Fiber Wire Garrote"
desc = "A length of fiber wire between two wooden handles, perfect for the discrete assassin. This weapon, when used on a target from behind \
will instantly put them in your grasp and silence them, as well as causing rapid suffocation. Does not work on those who do not need to breathe."
+ item = /obj/item/garrote
reference = "GAR"
- item = /obj/item/twohanded/garrote
cost = 30
-
-
/datum/uplink_item/stealthy_weapons/cameraflash
name = "Camera Flash"
desc = "A flash disguised as a camera with a self-charging safety system preventing the flash from burning out. \
diff --git a/code/datums/uplink_items/uplink_traitor.dm b/code/datums/uplink_items/uplink_traitor.dm
index 61f723c271a..4d6fdaf5116 100644
--- a/code/datums/uplink_items/uplink_traitor.dm
+++ b/code/datums/uplink_items/uplink_traitor.dm
@@ -138,7 +138,7 @@
desc = "A push broom with a reinforced handle and a metal wire brush, perfect for giving yourself more work by beating up assistants. \
When wielded, you will reflect projectiles, and hitting people will have different effects based on your intent."
reference = "TPBR"
- item = /obj/item/twohanded/push_broom/traitor
+ item = /obj/item/push_broom/traitor
cost = 60
job = list("Janitor")
surplus = 0 //no reflect memes
@@ -265,7 +265,7 @@
name = "Energized Fire Axe"
desc = "A fire axe with a massive energy charge built into it. Upon striking someone while charged it will throw them backwards while stunning them briefly, but will take some time to charge up again. It is also much sharper than a regular axe and can pierce light armor."
reference = "EFA"
- item = /obj/item/twohanded/fireaxe/energized
+ item = /obj/item/fireaxe/energized
cost = 40
job = list("Life Support Specialist")
diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm
index 988aa0f37a8..acabe00ccaf 100644
--- a/code/datums/wires/explosive.dm
+++ b/code/datums/wires/explosive.dm
@@ -25,7 +25,7 @@
..()
/datum/wires/explosive/gibtonite
- holder_type = /obj/item/twohanded/required/gibtonite
+ holder_type = /obj/item/gibtonite
/datum/wires/explosive/gibtonite/interactable(mob/user)
return TRUE
@@ -34,5 +34,5 @@
return
/datum/wires/explosive/gibtonite/explode()
- var/obj/item/twohanded/required/gibtonite/P = holder
+ var/obj/item/gibtonite/P = holder
P.GibtoniteReaction(null, 2)
diff --git a/code/game/gamemodes/cult/blood_magic.dm b/code/game/gamemodes/cult/blood_magic.dm
index 147aee15600..27dd136900b 100644
--- a/code/game/gamemodes/cult/blood_magic.dm
+++ b/code/game/gamemodes/cult/blood_magic.dm
@@ -945,7 +945,7 @@
var/turf/T = get_turf(user)
qdel(src)
var/datum/action/innate/cult/spear/S = new(user)
- var/obj/item/twohanded/cult_spear/rite = new(T)
+ var/obj/item/cult_spear/rite = new(T)
S.Grant(user, rite)
rite.spear_act = S
if(user.put_in_hands(rite))
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index ea763e44ebf..88efad6762a 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -558,15 +558,14 @@
return TRUE
return FALSE
-/obj/item/twohanded/cult_spear
+/obj/item/cult_spear
name = "blood halberd"
desc = "A sickening spear composed entirely of crystallized blood. Will stun people who have been recently marked if the spear is wielded."
icon = 'icons/obj/cult.dmi'
+ base_icon_state = "bloodspear"
icon_state = "bloodspear0"
slot_flags = 0
force = 17
- force_unwielded = 17
- force_wielded = 24
throwforce = 30
throw_speed = 2
armour_penetration_percentage = 50
@@ -577,19 +576,20 @@
needs_permit = TRUE
var/datum/action/innate/cult/spear/spear_act
-/obj/item/twohanded/cult_spear/Initialize(mapload)
+/obj/item/cult_spear/Initialize(mapload)
. = ..()
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.4, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (2 / 3) SECONDS ) // 0.666667 seconds for 60% uptime.
+ AddComponent(/datum/component/two_handed, force_wielded = 24, force_unwielded = force, icon_wielded = "[base_icon_state]1")
-/obj/item/twohanded/cult_spear/Destroy()
+/obj/item/cult_spear/Destroy()
if(spear_act)
qdel(spear_act)
return ..()
-/obj/item/twohanded/cult_spear/update_icon_state()
- icon_state = "bloodspear[wielded]"
+/obj/item/cult_spear/update_icon_state()
+ icon_state = "[base_icon_state]0"
-/obj/item/twohanded/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
+/obj/item/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
var/turf/T = get_turf(hit_atom)
if(isliving(hit_atom))
var/mob/living/L = hit_atom
@@ -621,7 +621,7 @@
else
..()
-/obj/item/twohanded/cult_spear/proc/break_spear(turf/T)
+/obj/item/cult_spear/proc/break_spear(turf/T)
if(!T)
T = get_turf(src)
if(T)
@@ -631,10 +631,10 @@
playsound(T, 'sound/effects/glassbr3.ogg', 100)
qdel(src)
-/obj/item/twohanded/cult_spear/attack(mob/living/M, mob/living/user, def_zone)
+/obj/item/cult_spear/attack(mob/living/M, mob/living/user, def_zone)
. = ..()
var/datum/status_effect/cult_stun_mark/S = M.has_status_effect(STATUS_EFFECT_CULT_STUN)
- if(S && wielded)
+ if(S && HAS_TRAIT(src, TRAIT_WIELDED))
S.trigger()
/datum/action/innate/cult/spear
@@ -642,7 +642,7 @@
desc = "Call the blood spear back to your hand!"
background_icon_state = "bg_cult"
button_icon_state = "bloodspear"
- var/obj/item/twohanded/cult_spear/spear
+ var/obj/item/cult_spear/spear
var/cooldown = 0
/datum/action/innate/cult/spear/Grant(mob/user, obj/blood_spear)
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index c455274c408..d79a807b9c5 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -745,7 +745,7 @@ GLOBAL_LIST_EMPTY(multiverse)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/shield/riot/roman(H), slot_l_hand)
H.equip_to_slot_or_del(new /obj/item/claymore(H), slot_r_hand)
- H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/spear(H), slot_back)
if("pirate")
H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/pirate(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/pirate_brown(H), slot_wear_suit)
@@ -753,7 +753,7 @@ GLOBAL_LIST_EMPTY(multiverse)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(H), slot_glasses)
H.equip_to_slot_or_del(new /obj/item/claymore(H), slot_r_hand)
- H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/spear(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/shield/riot/roman(H), slot_l_hand)
if("yand")//mine is an evil laugh
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes)
@@ -762,7 +762,7 @@ GLOBAL_LIST_EMPTY(multiverse)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/katana(H), slot_r_hand)
H.equip_to_slot_or_del(new /obj/item/shield/riot/roman(H), slot_l_hand)
- H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/spear(H), slot_back)
if("clown")
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/civilian/clown(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes)
@@ -771,7 +771,7 @@ GLOBAL_LIST_EMPTY(multiverse)
H.equip_to_slot_or_del(new /obj/item/bikehorn(H), slot_l_store)
H.equip_to_slot_or_del(new /obj/item/claymore(H), slot_r_hand)
H.equip_to_slot_or_del(new /obj/item/shield/riot/roman(H), slot_l_hand)
- H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/spear(H), slot_back)
/obj/item/necromantic_stone/proc/spawnheresy(mob/living/carbon/human/H as mob)
H.set_species(/datum/species/human)
@@ -797,7 +797,7 @@ GLOBAL_LIST_EMPTY(multiverse)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/katana(H), slot_r_hand)
H.equip_to_slot_or_del(new /obj/item/shield/riot/roman(H), slot_l_hand)
- H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/spear(H), slot_back)
if(!H.real_name || H.real_name == "unknown")
H.real_name = "Neko-chan"
else
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index 776ba3ce025..c4c248f145f 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -483,13 +483,13 @@
/datum/spellbook_entry/item/mjolnir
name = "Mjolnir"
desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power."
- item_path = /obj/item/twohanded/mjollnir
+ item_path = /obj/item/mjollnir
category = "Weapons and Armors"
/datum/spellbook_entry/item/singularity_hammer
name = "Singularity Hammer"
desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact."
- item_path = /obj/item/twohanded/singularityhammer
+ item_path = /obj/item/singularityhammer
category = "Weapons and Armors"
/datum/spellbook_entry/item/cursed_katana
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index b4da8047b4d..a96eb647862 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1223,16 +1223,14 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays)
to_chat(user, "Despite your attempts, [src] refuses to open.")
/obj/machinery/door/airlock/proc/force_open_with_item(mob/living/user, obj/item/I)
- /// Used with an istype check to find out if it's a wielded item or not
- var/obj/item/twohanded/twohanded_item = I
/// Time it takes to open an airlock with an item with the TRAIT_FORCES_OPEN_DOORS_ITEM trait, 5 seconds for wielded items, 10 seconds for nonwielded items
var/time_to_open_airlock = 10 SECONDS
/// Can we open the airlock while unpowered? Wielded item's can't, but unwielded items can
var/can_force_open_while_unpowered = TRUE
- if(istype(twohanded_item))
+ if(I.GetComponent(/datum/component/two_handed))
can_force_open_while_unpowered = FALSE
time_to_open_airlock = 5 SECONDS
- if(!twohanded_item.wielded)
+ if(!HAS_TRAIT(I, TRAIT_WIELDED))
to_chat(user, "You need to be wielding [I] to do that!")
return
if(!density || prying_so_hard)
diff --git a/code/game/machinery/vendors/contraband_vendors.dm b/code/game/machinery/vendors/contraband_vendors.dm
index eeeff27c0ae..4467846879d 100644
--- a/code/game/machinery/vendors/contraband_vendors.dm
+++ b/code/game/machinery/vendors/contraband_vendors.dm
@@ -108,7 +108,7 @@
/obj/item/gun/projectile/automatic/sniper_rifle/toy = 10,
/obj/item/ammo_box/foambox/riot = 20,
/obj/item/toy/katana = 10,
- /obj/item/twohanded/dualsaber/toy = 5,
+ /obj/item/dualsaber/toy = 5,
/obj/item/deck/cards/syndicate = 10) //Gambling and it hurts, making it a +18 item
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
diff --git a/code/game/machinery/vendors/generic_vendors.dm b/code/game/machinery/vendors/generic_vendors.dm
index 51cb6f9c31a..554e5e34714 100644
--- a/code/game/machinery/vendors/generic_vendors.dm
+++ b/code/game/machinery/vendors/generic_vendors.dm
@@ -456,7 +456,7 @@
/obj/item/clothing/head/wizard/mime = 1,
/obj/item/clothing/mask/gas/mime/wizard = 1,
/obj/item/clothing/shoes/sandal/marisa = 1,
- /obj/item/twohanded/staff = 2)
+ /obj/item/staff = 2)
contraband = list(/obj/item/reagent_containers/glass/bottle/wizarditis = 1)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
@@ -516,10 +516,10 @@
/obj/item/clothing/suit/wizrobe/marisa/fake = 1,
/obj/item/clothing/under/dress/sundress = 1,
/obj/item/clothing/head/witchwig = 1,
- /obj/item/twohanded/staff/broom = 1,
+ /obj/item/staff/broom = 1,
/obj/item/clothing/suit/wizrobe/fake = 1,
/obj/item/clothing/head/wizard/fake = 1,
- /obj/item/twohanded/staff = 3,
+ /obj/item/staff = 3,
/obj/item/clothing/mask/gas/clown_hat/sexy = 1,
/obj/item/clothing/under/rank/civilian/clown/sexy = 1,
/obj/item/clothing/mask/gas/sexymime = 1,
@@ -629,10 +629,10 @@
/obj/item/clothing/suit/wizrobe/marisa/fake = 100,
/obj/item/clothing/under/dress/sundress = 75,
/obj/item/clothing/head/witchwig = 50,
- /obj/item/twohanded/staff/broom = 50,
+ /obj/item/staff/broom = 50,
/obj/item/clothing/suit/wizrobe/fake = 75,
/obj/item/clothing/head/wizard/fake = 75,
- /obj/item/twohanded/staff = 50,
+ /obj/item/staff = 50,
/obj/item/clothing/mask/gas/clown_hat/sexy = 100,
/obj/item/clothing/under/rank/civilian/clown/sexy = 100,
/obj/item/clothing/mask/gas/sexymime = 100,
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index b7234399fe5..b24df2ead97 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -559,14 +559,14 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/awaystart) //Without this away mission
. = ..()
new /obj/item/clothing/under/dress/sundress(src.loc)
new /obj/item/clothing/head/witchwig(src.loc)
- new /obj/item/twohanded/staff/broom(src.loc)
+ new /obj/item/staff/broom(src.loc)
return INITIALIZE_HINT_QDEL
/obj/effect/landmark/costume/fakewizard/Initialize(mapload)
. = ..()
new /obj/item/clothing/suit/wizrobe/fake(src.loc)
new /obj/item/clothing/head/wizard/fake(src.loc)
- new /obj/item/twohanded/staff/(src.loc)
+ new /obj/item/staff/(src.loc)
return INITIALIZE_HINT_QDEL
/obj/effect/landmark/costume/sexyclown/Initialize(mapload)
diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm
index 06e5e23ac2d..bcdee3932af 100644
--- a/code/game/objects/effects/mines.dm
+++ b/code/game/objects/effects/mines.dm
@@ -134,13 +134,12 @@
new /obj/effect/hallucination/delusion(get_turf(victim), victim, 'icons/mob/mob.dmi', "daemon")
- var/obj/item/twohanded/required/chainsaw/doomslayer/chainsaw = new(victim.loc)
+ var/obj/item/chainsaw/doomslayer/chainsaw = new(victim.loc)
chainsaw.flags |= NODROP | DROPDEL
victim.drop_l_hand()
victim.drop_r_hand()
victim.put_in_hands(chainsaw)
chainsaw.attack_self(victim)
- chainsaw.wield(victim)
victim.reagents.add_reagent("adminordrazine", 25)
victim.flash_screen_color(red_splash, 10)
diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm
index 0020b554e20..9b2f387ec46 100644
--- a/code/game/objects/effects/spawners/random_spawners.dm
+++ b/code/game/objects/effects/spawners/random_spawners.dm
@@ -347,9 +347,9 @@
/obj/item/gun/energy/kinetic_accelerator/crossbow = 1,
/obj/item/gun/projectile/revolver = 1,
/obj/item/clothing/gloves/color/yellow/power = 1,
- /obj/item/twohanded/chainsaw = 1,
+ /obj/item/butcher_chainsaw = 1,
/obj/item/bee_briefcase = 1,
- /obj/item/twohanded/fireaxe/energized = 1,
+ /obj/item/fireaxe/energized = 1,
/obj/item/clothing/glasses/thermal = 1,
/obj/item/chameleon = 1,
/obj/item/reagent_containers/hypospray/autoinjector/stimulants = 1,
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 10533366a0e..976cc2fb32f 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -216,7 +216,7 @@
to_chat(user, "\the [flags & NODROP ? src : W] is stuck to your hand, you can't attach it to \the [flags & NODROP ? W : src]!")
else
to_chat(user, "You attach the ends of the two plastic swords, making a single double-bladed toy! You're fake-cool.")
- new /obj/item/twohanded/dualsaber/toy(user.loc)
+ new /obj/item/dualsaber/toy(user.loc)
user.unEquip(W)
user.unEquip(src)
qdel(W)
@@ -225,26 +225,27 @@
/*
* Subtype of Double-Bladed Energy Swords
*/
-/obj/item/twohanded/dualsaber/toy
+/obj/item/dualsaber/toy
name = "double-bladed toy sword"
desc = "A cheap, plastic replica of TWO energy swords. Double the fun!"
force = 0
throwforce = 0
throw_speed = 3
throw_range = 5
- force_unwielded = 0
- force_wielded = 0
origin_tech = null
attack_verb = list("attacked", "struck", "hit")
brightness_on = 0
- sharp_when_wielded = FALSE // It's a toy
needs_permit = FALSE
-/obj/item/twohanded/dualsaber/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
+/obj/item/dualsaber/toy/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, only_sharp_when_wielded = FALSE, force_wielded = 0, force_unwielded = 0)
+
+/obj/item/dualsaber/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return 0
-/obj/item/twohanded/dualsaber/toy/IsReflect()
- if(wielded)
+/obj/item/dualsaber/toy/IsReflect()
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
return 2
/obj/item/toy/katana
@@ -1237,22 +1238,24 @@
/*
* Rubber Chainsaw
*/
-/obj/item/twohanded/toy/chainsaw
+/obj/item/toy/chainsaw
name = "Toy Chainsaw"
desc = "A toy chainsaw with a rubber edge. Ages 8 and up"
icon_state = "chainsaw0"
+ base_icon_state = "chainsaw"
force = 0
throwforce = 0
throw_speed = 4
throw_range = 20
- wieldsound = 'sound/weapons/chainsawstart.ogg'
attack_verb = list("sawed", "cut", "hacked", "carved", "cleaved", "butchered", "felled", "timbered")
-/obj/item/twohanded/toy/chainsaw/update_icon_state()
- if(wielded)
- icon_state = "chainsaw[wielded]"
- else
- icon_state = "chainsaw0"
+/obj/item/toy/chainsaw/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, wieldsound = 'sound/weapons/chainsawstart.ogg', icon_wielded = "[base_icon_state]1")
+
+
+/obj/item/toy/chainsaw/update_icon_state()
+ icon_state = "[base_icon_state]0"
/*
* Cat Toy
diff --git a/code/game/objects/items/weapons/RCL.dm b/code/game/objects/items/weapons/RCL.dm
index 0309a28a0c7..6b71865b801 100644
--- a/code/game/objects/items/weapons/RCL.dm
+++ b/code/game/objects/items/weapons/RCL.dm
@@ -1,4 +1,4 @@
-/obj/item/twohanded/rcl
+/obj/item/rcl
name = "rapid cable layer (RCL)"
desc = "A device used to rapidly deploy cables. It has screws on the side which can be removed to slide off the cables."
icon = 'icons/obj/tools.dmi'
@@ -16,7 +16,11 @@
var/obj/structure/cable/last = null
var/obj/item/stack/cable_coil/loaded = null
-/obj/item/twohanded/rcl/attackby(obj/item/W, mob/user)
+/obj/item/rcl/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed)
+
+/obj/item/rcl/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
if(!loaded)
@@ -39,7 +43,7 @@
else
..()
-/obj/item/twohanded/rcl/screwdriver_act(mob/user, obj/item/I)
+/obj/item/rcl/screwdriver_act(mob/user, obj/item/I)
if(!loaded)
return
. = TRUE
@@ -60,18 +64,18 @@
loaded = null
update_icon(UPDATE_ICON_STATE)
-/obj/item/twohanded/rcl/examine(mob/user)
+/obj/item/rcl/examine(mob/user)
. = ..()
if(loaded)
. += "It contains [loaded.amount]/[max_amount] cables."
-/obj/item/twohanded/rcl/Destroy()
+/obj/item/rcl/Destroy()
QDEL_NULL(loaded)
last = null
active = FALSE
return ..()
-/obj/item/twohanded/rcl/update_icon_state()
+/obj/item/rcl/update_icon_state()
if(!loaded)
icon_state = "rcl-0"
item_state = "rcl-0"
@@ -90,7 +94,7 @@
icon_state = "rcl-0"
item_state = "rcl-0"
-/obj/item/twohanded/rcl/proc/is_empty(mob/user, loud = 1)
+/obj/item/rcl/proc/is_empty(mob/user, loud = 1)
update_icon(UPDATE_ICON_STATE)
if(!loaded || !loaded.amount)
if(loud)
@@ -98,19 +102,17 @@
if(loaded)
qdel(loaded)
loaded = null
- unwield(user)
- active = wielded
- return 1
- return 0
+ return TRUE
+ return FALSE
-/obj/item/twohanded/rcl/dropped(mob/wearer)
+/obj/item/rcl/dropped(mob/wearer)
..()
active = FALSE
last = null
-/obj/item/twohanded/rcl/attack_self(mob/user)
+/obj/item/rcl/attack_self(mob/user)
..()
- active = wielded
+ active = HAS_TRAIT(src, TRAIT_WIELDED)
if(!active)
last = null
else if(!last)
@@ -119,11 +121,11 @@
last = C
break
-/obj/item/twohanded/rcl/on_mob_move(direct, mob/user)
+/obj/item/rcl/on_mob_move(direct, mob/user)
if(active)
trigger(user)
-/obj/item/twohanded/rcl/proc/trigger(mob/user)
+/obj/item/rcl/proc/trigger(mob/user)
if(is_empty(user, 0))
to_chat(user, "\The [src] is empty!")
return
@@ -145,7 +147,7 @@
last = loaded.place_turf(get_turf(loc), user, turn(user.dir, 180))
is_empty(user) //If we've run out, display message
-/obj/item/twohanded/rcl/pre_loaded/New() //Comes preloaded with cable, for testing stuff
+/obj/item/rcl/pre_loaded/New() //Comes preloaded with cable, for testing stuff
..()
loaded = new()
loaded.max_amount = max_amount
diff --git a/code/game/objects/items/weapons/cash.dm b/code/game/objects/items/weapons/cash.dm
index d68ce9df54f..b059c003b8e 100644
--- a/code/game/objects/items/weapons/cash.dm
+++ b/code/game/objects/items/weapons/cash.dm
@@ -78,5 +78,9 @@
/obj/item/stack/spacecash/c10000
amount = 10000
-/obj/item/twohanded/required/cash_pile
+/obj/item/cash_pile
name = "Pile of Cash"
+
+/obj/item/cash_pile/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, require_twohands = TRUE)
diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm
index 12504841467..387cf92d5cb 100644
--- a/code/game/objects/items/weapons/defib.dm
+++ b/code/game/objects/items/weapons/defib.dm
@@ -22,7 +22,7 @@
/// if there's a cell in the defib with enough power for a revive; blocks paddles from reviving otherwise
var/powered = FALSE
/// Ref to attached paddles
- var/obj/item/twohanded/shockpaddles/paddles
+ var/obj/item/shockpaddles/paddles
/// Ref to internal power cell.
var/obj/item/stock_parts/cell/high/cell = null
/// If false, using harm intent will let you zap people. Note that any updates to this after init will only impact icons.
@@ -38,7 +38,7 @@
base_icon_state = "defibpaddles"
/// Type of paddles that should be attached to this defib.
- var/obj/item/twohanded/shockpaddles/paddle_type = /obj/item/twohanded/shockpaddles
+ var/obj/item/shockpaddles/paddle_type = /obj/item/shockpaddles
/obj/item/defibrillator/get_cell()
return cell
@@ -225,7 +225,7 @@
desc = "A belt-mounted blood-red defibrillator that can be rapidly deployed. Does not have the restrictions or safeties of conventional defibrillators and can revive through space suits."
icon_state = "defibcombat"
item_state = "defibcombat"
- paddle_type = /obj/item/twohanded/shockpaddles/syndicate
+ paddle_type = /obj/item/shockpaddles/syndicate
combat = TRUE
safety = FALSE
heart_attack_probability = 100
@@ -240,7 +240,7 @@
desc = "A belt-mounted state-of-the-art defibrillator that can be rapidly deployed in all environments. Uses an experimental self-charging cell, meaning that it will (probably) never stop working. Can be used to defibrillate through space suits. It is impossible to damage."
icon_state = "defibnt"
item_state = "defibnt"
- paddle_type = /obj/item/twohanded/shockpaddles/advanced
+ paddle_type = /obj/item/shockpaddles/advanced
combat = TRUE
safety = TRUE
hardened = TRUE // emp-proof (on the component), but not emag-proof.
@@ -254,7 +254,6 @@
/obj/item/defibrillator/compact/advanced/attackby(obj/item/W, mob/user, params)
if(W == paddles)
- paddles.unwield()
toggle_paddles()
update_icon(UPDATE_OVERLAYS)
@@ -272,7 +271,7 @@
//paddles
-/obj/item/twohanded/shockpaddles
+/obj/item/shockpaddles
name = "defibrillator paddles"
desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks."
icon = 'icons/obj/defib.dmi'
@@ -291,9 +290,11 @@
/// Whether or not the paddles are on cooldown. Used for tracking icon states.
var/on_cooldown = FALSE
-/obj/item/twohanded/shockpaddles/New(mainunit)
+
+/obj/item/shockpaddles/New(mainunit)
. = ..()
- if(check_defib_exists(mainunit, src))
+
+ if(check_defib_exists(mainunit, null, src))
defib = mainunit
loc = defib
update_icon(UPDATE_ICON_STATE)
@@ -303,22 +304,25 @@
RegisterSignal(src, COMSIG_DEFIB_READY, PROC_REF(on_cooldown_expire))
RegisterSignal(src, COMSIG_DEFIB_SHOCK_APPLIED, PROC_REF(after_shock))
RegisterSignal(src, COMSIG_DEFIB_PADDLES_APPLIED, PROC_REF(on_application))
+ AddComponent(/datum/component/two_handed)
-/obj/item/twohanded/shockpaddles/Destroy()
+/obj/item/shockpaddles/Destroy()
defib = null
return ..()
/// Check to see if we should abort this before we've even gotten started
-/obj/item/twohanded/shockpaddles/proc/on_application(obj/item/paddles, mob/living/user, mob/living/carbon/human/target, should_cause_harm)
+/obj/item/shockpaddles/proc/on_application(obj/item/paddles, mob/living/user, mob/living/carbon/human/target, should_cause_harm)
SIGNAL_HANDLER // COMSIG_DEFIB_PADDLES_APPLIED
- if(!wielded)
+ if(!HAS_TRAIT(src, TRAIT_WIELDED))
to_chat(user, "You need to wield the paddles in both hands before you can use them on someone!")
return COMPONENT_BLOCK_DEFIB_MISC
if(!defib.powered)
return COMPONENT_BLOCK_DEFIB_DEAD
-/obj/item/twohanded/shockpaddles/proc/on_cooldown_expire(obj/item/paddles)
+ return
+
+/obj/item/shockpaddles/proc/on_cooldown_expire(obj/item/paddles)
SIGNAL_HANDLER // COMSIG_DEFIB_READY
on_cooldown = FALSE
if(defib.cell)
@@ -331,46 +335,43 @@
update_icon(UPDATE_ICON_STATE)
defib.update_icon(UPDATE_ICON_STATE)
-/obj/item/twohanded/shockpaddles/proc/after_shock()
+/obj/item/shockpaddles/proc/after_shock()
SIGNAL_HANDLER // COMSIG_DEFIB_SHOCK_APPLIED
on_cooldown = TRUE
defib.deductcharge(revivecost)
update_icon(UPDATE_ICON_STATE)
-/obj/item/twohanded/shockpaddles/update_icon_state()
+/obj/item/shockpaddles/update_icon_state()
+ var/wielded = HAS_TRAIT(src, TRAIT_WIELDED)
icon_state = "[base_icon_state][wielded]"
item_state = "[base_icon_state][wielded]"
if(on_cooldown)
icon_state = "[base_icon_state][wielded]_cooldown"
-/obj/item/twohanded/shockpaddles/suicide_act(mob/user)
+/obj/item/shockpaddles/suicide_act(mob/user)
user.visible_message("[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide.")
defib.deductcharge(revivecost)
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
return OXYLOSS
-/obj/item/twohanded/shockpaddles/dropped(mob/user)
+/obj/item/shockpaddles/dropped(mob/user)
..()
if(user)
- var/obj/item/twohanded/offhand/O = user.get_inactive_hand()
- if(istype(O))
- O.unwield()
to_chat(user, "The paddles snap back into the main unit.")
defib.paddles_on_defib = TRUE
loc = defib
defib.update_icon(UPDATE_OVERLAYS)
update_icon(UPDATE_ICON_STATE)
- unwield(user)
-/obj/item/twohanded/shockpaddles/on_mob_move(dir, mob/user)
+/obj/item/shockpaddles/on_mob_move(dir, mob/user)
if(defib)
var/turf/t = get_turf(defib)
if(!t.Adjacent(user))
defib.remove_paddles(user)
-/obj/item/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/human/M, obj/O)
+/obj/item/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/human/M, obj/O)
if(!mainunit || !istype(mainunit, /obj/item/defibrillator)) //To avoid weird issues from admin spawns
- M.unEquip(O)
+ M?.unEquip(O)
qdel(O)
return FALSE
else
@@ -409,14 +410,14 @@
playsound(get_turf(src), 'sound/machines/defib_ready.ogg', 50, 0)
update_icon(UPDATE_ICON_STATE)
-/obj/item/twohanded/shockpaddles/syndicate
+/obj/item/shockpaddles/syndicate
name = "combat defibrillator paddles"
desc = "A pair of high-tech paddles with flat plasteel surfaces to revive deceased operatives (unless they exploded). They possess both the ability to penetrate armor and to deliver powerful or disabling shocks offensively."
icon_state = "syndiepaddles0"
item_state = "syndiepaddles0"
base_icon_state = "syndiepaddles"
-/obj/item/twohanded/shockpaddles/advanced
+/obj/item/shockpaddles/advanced
name = "advanced defibrillator paddles"
desc = "A pair of high-tech paddles with flat plasteel surfaces that are used to deliver powerful electric shocks. They possess the ability to penetrate armor to deliver shock."
icon_state = "ntpaddles0"
diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm
index a48fd064f74..32ad45ba87c 100644
--- a/code/game/objects/items/weapons/garrote.dm
+++ b/code/game/objects/items/weapons/garrote.dm
@@ -4,7 +4,7 @@
* Improvised garrotes
*/
-/obj/item/twohanded/garrote // 12TC traitor item
+/obj/item/garrote // 12TC traitor item
name = "fiber wire"
desc = "A length of razor-thin wire with an elegant wooden handle on either end.
You suspect you'd have to be behind the target to use this weapon effectively."
icon_state = "garrot_wrap"
@@ -13,35 +13,43 @@
var/improvised = FALSE
var/garrote_time
-/obj/item/twohanded/garrote/Destroy()
+/obj/item/garrote/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed)
+
+/obj/item/garrote/Destroy()
strangling = null
return ..()
-/obj/item/twohanded/garrote/update_icon_state()
+/obj/item/garrote/update_icon_state()
if(strangling) // If we're strangling someone we want our icon to stay wielded
icon_state = "garrot_[improvised ? "I_" : ""]unwrap"
else
- icon_state = "garrot_[improvised ? "I_" : ""][wielded ? "un" : ""]wrap"
+ icon_state = "garrot_[improvised ? "I_" : ""][HAS_TRAIT(src, TRAIT_WIELDED) ? "un" : ""]wrap"
-/obj/item/twohanded/garrote/improvised // Made via tablecrafting
+/obj/item/garrote/improvised // Made via tablecrafting
name = "garrote"
desc = "A length of cable with a shoddily-carved wooden handle tied to either end.
You suspect you'd have to be behind the target to use this weapon effectively."
icon_state = "garrot_I_wrap"
improvised = TRUE
-/obj/item/twohanded/garrote/wield(mob/living/carbon/user)
- if(strangling)
- user.visible_message("[user] removes [src] from [strangling]'s neck.",
- "You remove [src] from [strangling]'s neck.")
+/obj/item/garrote/improvised/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, wield_callback = CALLBACK(src, PROC_REF(wield)))
- strangling = null
- update_icon(UPDATE_ICON_STATE)
- STOP_PROCESSING(SSobj, src)
- else
- ..()
+/obj/item/garrote/proc/wield(obj/item/source, mob/living/carbon/user)
+ if(!strangling)
+ return
+ user.visible_message("[user] removes [src] from [strangling]'s neck.",
+ "You remove [src] from [strangling]'s neck.")
-/obj/item/twohanded/garrote/attack(mob/living/carbon/M as mob, mob/user as mob)
+ strangling = null
+ update_icon(UPDATE_ICON_STATE)
+ STOP_PROCESSING(SSobj, src)
+
+
+/obj/item/garrote/attack(mob/living/carbon/M as mob, mob/user as mob)
if(garrote_time > world.time) // Cooldown
return
@@ -50,7 +58,7 @@
var/mob/living/carbon/human/U = user
- if(!wielded)
+ if(!HAS_TRAIT(src, TRAIT_WIELDED))
to_chat(user, "You must use both hands to garrote [M]!")
return
@@ -73,7 +81,7 @@
to_chat(user, "You cannot use [src] on two people at once!")
return
- unwield(U)
+ attack_self(user)
U.swap_hand() // For whatever reason the grab will not properly work if we don't have the free hand active.
var/obj/item/grab/G = M.grabbedby(U, 1)
@@ -101,7 +109,7 @@
return
-/obj/item/twohanded/garrote/process()
+/obj/item/garrote/process()
if(!strangling)
// Our mark got gibbed or similar
update_icon(UPDATE_ICON_STATE)
@@ -160,7 +168,7 @@
strangling.apply_damage(4, OXY, "head")
-/obj/item/twohanded/garrote/suicide_act(mob/user)
+/obj/item/garrote/suicide_act(mob/user)
user.visible_message("[user] is wrapping [src] around [user.p_their()] neck and pulling the handles! It looks like [user.p_theyre()] trying to commit suicide.")
playsound(loc, 'sound/weapons/cablecuff.ogg', 15, 1, -10, ignore_walls = FALSE)
return OXYLOSS
diff --git a/code/game/objects/items/weapons/melee/energy_melee_weapons.dm b/code/game/objects/items/weapons/melee/energy_melee_weapons.dm
index a4d6eea631a..42470a44215 100644
--- a/code/game/objects/items/weapons/melee/energy_melee_weapons.dm
+++ b/code/game/objects/items/weapons/melee/energy_melee_weapons.dm
@@ -201,7 +201,7 @@
user.adjustBrainLoss(10)
else
to_chat(user, "You attach the ends of the two energy swords, making a single double-bladed weapon! You're cool.")
- var/obj/item/twohanded/dualsaber/newSaber = new /obj/item/twohanded/dualsaber(user.loc)
+ var/obj/item/dualsaber/newSaber = new /obj/item/dualsaber(user.loc)
if(src.hacked) // That's right, we'll only check the "original" esword.
newSaber.hacked = TRUE
newSaber.item_color = "rainbow"
diff --git a/code/game/objects/items/weapons/staff.dm b/code/game/objects/items/weapons/staff.dm
index 7bc970d2189..d86da1bc56a 100644
--- a/code/game/objects/items/weapons/staff.dm
+++ b/code/game/objects/items/weapons/staff.dm
@@ -1,4 +1,4 @@
-/obj/item/twohanded/staff
+/obj/item/staff
name = "wizards staff"
desc = "Apparently a staff used by the wizard."
icon = 'icons/obj/wizard.dmi'
@@ -12,61 +12,66 @@
attack_verb = list("bludgeoned", "whacked", "disciplined")
resistance_flags = FLAMMABLE
-/obj/item/twohanded/staff/broom
+/obj/item/staff/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed)
+
+/obj/item/staff/broom
name = "broom"
desc = "Used for sweeping, and flying into the night while cackling. Black cat not included."
icon = 'icons/obj/wizard.dmi'
icon_state = "broom"
item_state = "broom0"
-/obj/item/twohanded/staff/broom/attack_self(mob/user as mob)
- ..()
- item_state = "broom[wielded ? 1 : 0]"
- force = wielded ? 5 : 3
- attack_verb = wielded ? list("rammed into", "charged at") : list("bludgeoned", "whacked", "cleaned")
- if(user)
- user.update_inv_l_hand()
- user.update_inv_r_hand()
- if(user.mind in SSticker.mode.wizards)
- user.flying = wielded ? 1 : 0
- if(wielded)
- to_chat(user, "You hold \the [src] between your legs.")
- user.say("QUID 'ITCH")
- animate(user, pixel_y = pixel_y + 10 , time = 10, loop = 1, easing = SINE_EASING)
- else
- animate(user, pixel_y = pixel_y + 10 , time = 1, loop = 1)
- animate(user, pixel_y = pixel_y, time = 10, loop = 1, easing = SINE_EASING)
- animate(user)
- else
- if(wielded)
- to_chat(user, "You hold \the [src] between your legs.")
+/obj/item/staff/broom/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, force_wielded = 5, force_unwielded = 3, wield_callback = CALLBACK(src, PROC_REF(wield)), unwield_callback = CALLBACK(src, PROC_REF(unwield)))
-/obj/item/twohanded/staff/broom/attackby(obj/O, mob/user)
+/obj/item/staff/broom/proc/wield(obj/item/source, mob/user)
+ attack_verb = list("rammed into", "charged at")
+ user.update_inv_l_hand()
+ user.update_inv_r_hand()
+ if(iswizard(user))
+ user.flying = TRUE
+ user.say("QUID 'ITCH")
+ animate(user, pixel_y = pixel_y + 10 , time = 10, loop = 1, easing = SINE_EASING)
+ to_chat(user, "You hold [src] between your legs.")
+
+/obj/item/staff/broom/proc/unwield(obj/item/source, mob/user)
+ attack_verb = list("bludgeoned", "whacked", "cleaned")
+ user.update_inv_l_hand()
+ user.update_inv_r_hand()
+ if(iswizard(user))
+ animate(user, pixel_y = pixel_y + 10 , time = 1, loop = 1)
+ animate(user, pixel_y = pixel_y, time = 10, loop = 1, easing = SINE_EASING)
+ animate(user)
+
+/obj/item/staff/broom/attackby(obj/O, mob/user)
if(istype(O, /obj/item/clothing/mask/horsehead))
- new/obj/item/twohanded/staff/broom/horsebroom(get_turf(src))
+ new/obj/item/staff/broom/horsebroom(get_turf(src))
user.unEquip(O)
qdel(O)
qdel(src)
return
..()
-/obj/item/twohanded/staff/broom/dropped(mob/user)
+/obj/item/staff/broom/dropped(mob/user)
if((user.mind in SSticker.mode.wizards) && user.flying)
user.flying = FALSE
..()
-/obj/item/twohanded/staff/broom/horsebroom
+/obj/item/staff/broom/horsebroom
name = "broomstick horse"
desc = "Saddle up!"
icon = 'icons/obj/wizard.dmi'
icon_state = "horsebroom"
item_state = "horsebroom0"
-/obj/item/twohanded/staff/broom/horsebroom/attack_self(mob/user as mob)
+/obj/item/staff/broom/horsebroom/attack_self(mob/user as mob)
..()
- item_state = "horsebroom[wielded ? 1 : 0]"
+ item_state = "horsebroom[HAS_TRAIT(src, TRAIT_WIELDED) ? 1 : 0]"
-/obj/item/twohanded/staff/stick
+/obj/item/staff/stick
name = "stick"
desc = "A great tool to drag someone else's drinks across the bar."
icon_state = "stick"
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index e328bc1bae0..ffa96c3d8b8 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -636,10 +636,10 @@
new /obj/item/organ/internal/cyberimp/arm/katana(src)
value += 1
if(3)
- new /obj/item/twohanded/mjollnir(src)
+ new /obj/item/mjollnir(src)
value += 2
if(4)
- new /obj/item/twohanded/singularityhammer(src)
+ new /obj/item/singularityhammer(src)
value += 2
if(5)
new /obj/item/katana(src)
@@ -648,13 +648,13 @@
new /obj/item/claymore(src)
value += 2 //force 40 this is value 2
if(7)
- new /obj/item/twohanded/spear/grey_tide(src)
+ new /obj/item/spear/grey_tide(src)
value += 2 //Value 2, clones are strong
if(8)
if(prob(50))
new /obj/item/sord(src)
value -= 1 //Useless joke, might as well give them a value point back.
- new /obj/item/twohanded/bostaff(src) //Funky item, not really worth a point, but good to balance sord's free point out
+ new /obj/item/bostaff(src) //Funky item, not really worth a point, but good to balance sord's free point out
//Wands
var/wands = 0
while(wands < 2)
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 4b854603312..c72b51df345 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -515,7 +515,7 @@
/obj/item/holosign_creator/janitor,
/obj/item/melee/flyswatter,
/obj/item/storage/bag/trash,
- /obj/item/twohanded/push_broom,
+ /obj/item/push_broom,
/obj/item/door_remote/janikeyring
)
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 0183e3fa685..a27d3415cf3 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -25,7 +25,7 @@
/obj/item/suppressor, // 1TC
/obj/item/ammo_box/magazine/m10mm, // 1TC
/obj/item/ammo_box/magazine/m10mm/hp, // 2TC
- /obj/item/twohanded/garrote, // 6TC
+ /obj/item/garrote, // 6TC
/obj/item/door_remote/omni/access_tuner, // 6TC
/obj/item/clothing/glasses/chameleon/thermal, // 6TC
/obj/item/implanter/freedom, // 5TC
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index 9dced8ee527..79f4f5ce274 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -1,191 +1,8 @@
-/* Two-handed Weapons
- * Contains:
- * Twohanded
- * Fireaxe
- * Double-Bladed Energy Swords
- * Spears
- * Kidan spear
- * Chainsaw
- * Singularity hammer
- * Mjolnnir
- * Knighthammer
- * Pyro Claws
- * Push Broom
- */
-
-/*##################################################################
-##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ########
-####################################################################*/
-
-//Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn
-//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons.
-//It also tidies stuff up elsewhere.
-
-/*
- * Twohanded
- */
-/obj/item/twohanded
- var/wielded = FALSE
- var/force_unwielded = 0
- var/force_wielded = 0
- var/wieldsound = null
- var/unwieldsound = null
- var/sharp_when_wielded = FALSE
-
-/obj/item/twohanded/proc/unwield(mob/living/carbon/user)
- if(!wielded || !user)
- return FALSE
- wielded = FALSE
- force = force_unwielded
- if(sharp_when_wielded)
- set_sharpness(FALSE)
- var/sf = findtext(name," (Wielded)")
- if(sf)
- name = copytext(name, 1, sf)
- else //something wrong
- name = "[initial(name)]"
- update_icon()
- if(user)
- user.update_inv_r_hand()
- user.update_inv_l_hand()
- if(!(flags & ABSTRACT))
- if(isrobot(user))
- to_chat(user, "You free up your module.")
- else
- to_chat(user, "You are now carrying [name] with one hand.")
- if(unwieldsound)
- playsound(loc, unwieldsound, 50, 1)
- var/obj/item/twohanded/offhand/O = user.get_inactive_hand()
- if(O && istype(O))
- O.unwield()
- return TRUE
-
-/obj/item/twohanded/proc/wield(mob/living/carbon/user)
- if(wielded)
- return FALSE
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.dna.species.is_small)
- to_chat(user, "It's too heavy for you to wield fully.")
- return FALSE
- if(user.get_inactive_hand())
- to_chat(user, "You need your other hand to be empty!")
- return FALSE
- if(!user.has_both_hands())
- to_chat(user, "You need both hands to wield this!")
- return FALSE
- wielded = TRUE
- force = force_wielded
- if(sharp_when_wielded)
- set_sharpness(TRUE)
- name = "[name] (Wielded)"
- update_icon()
- if(user)
- user.update_inv_r_hand()
- user.update_inv_l_hand()
- if(!(flags & ABSTRACT))
- if(isrobot(user))
- to_chat(user, "You dedicate your module to [src].")
- else
- to_chat(user, "You grab [src] with both hands.")
- if(wieldsound)
- playsound(loc, wieldsound, 50, 1)
- var/obj/item/twohanded/offhand/O = new(user) ////Let's reserve his other hand~
- O.name = "[name] - offhand"
- O.desc = "Your second grip on [src]"
- user.put_in_inactive_hand(O)
- return TRUE
-
-/obj/item/twohanded/mob_can_equip(mob/M, slot) //Unwields twohanded items when they're attempted to be equipped to another slot
- if(wielded)
- unwield(M)
- return ..()
-
-/obj/item/twohanded/dropped(mob/user)
- ..()
- //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
- if(user)
- var/obj/item/twohanded/O = user.get_inactive_hand()
- if(istype(O))
- O.unwield(user)
- return unwield(user)
-
-/obj/item/twohanded/attack_self(mob/user)
- ..()
- if(wielded) //Trying to unwield it
- unwield(user)
- else //Trying to wield it
- wield(user)
-
-
-/obj/item/twohanded/equip_to_best_slot(mob/M)
- if(..())
- unwield(M)
- return
-
-///////////OFFHAND///////////////
-/obj/item/twohanded/offhand
- w_class = WEIGHT_CLASS_HUGE
- icon_state = "offhand"
- name = "offhand"
- flags = ABSTRACT
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
-
-/obj/item/twohanded/offhand/unwield()
- if(!QDELETED(src))
- qdel(src)
-
-/obj/item/twohanded/offhand/wield()
- if(!QDELETED(src))
- qdel(src)
-
-///////////Two hand required objects///////////////
-//This is for objects that require two hands to even pick up
-/obj/item/twohanded/required
- w_class = WEIGHT_CLASS_HUGE
-
-/obj/item/twohanded/required/attack_self()
- return
-
-/obj/item/twohanded/required/mob_can_equip(mob/M, slot)
- if(wielded && !slot_flags)
- to_chat(M, "[src] is too cumbersome to carry with anything but your hands!")
- return FALSE
- return ..()
-
-/obj/item/twohanded/required/attack_hand(mob/user)//Can't even pick it up without both hands empty
- var/obj/item/twohanded/required/H = user.get_inactive_hand()
- if(get_dist(src, user) > 1)
- return FALSE
- if(H != null)
- to_chat(user, "[src] is too cumbersome to carry in one hand!")
- return
- if(loc != user)
- wield(user)
- ..()
-
-/obj/item/twohanded/required/on_give(mob/living/carbon/giver, mob/living/carbon/receiver)
- var/obj/item/twohanded/required/H = receiver.get_inactive_hand()
- if(H != null) //Check if he can wield it
- receiver.drop_item() //Can't wear it so drop it
- to_chat(receiver, "[src] is too cumbersome to carry in one hand!")
- return
- equipped(receiver,receiver.hand ? slot_l_hand : slot_r_hand)
-
-/obj/item/twohanded/required/equipped(mob/user, slot)
- ..()
- if(slot == slot_l_hand || slot == slot_r_hand)
- wield(user)
- if(!wielded) // Drop immediately if we couldn't wield
- user.unEquip(src)
- to_chat(user, "[src] is too cumbersome to carry in one hand!")
- else
- unwield(user)
-
/*
* Fireaxe
*/
-/obj/item/twohanded/fireaxe // DEM AXES MAN, marker -Agouri
+/obj/item/fireaxe // DEM AXES MAN, marker -Agouri
+ base_icon_state = "fireaxe"
icon_state = "fireaxe0"
name = "fire axe"
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
@@ -194,8 +11,6 @@
sharp = TRUE
w_class = WEIGHT_CLASS_BULKY
slot_flags = SLOT_BACK
- force_unwielded = 5
- force_wielded = 24
toolspeed = 0.25
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -204,32 +19,39 @@
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 100, ACID = 30)
resistance_flags = FIRE_PROOF
-/obj/item/twohanded/fireaxe/Initialize(mapload)
+ var/force_unwielded = 5
+ var/force_wielded = 24
+
+/obj/item/fireaxe/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_FORCES_OPEN_DOORS_ITEM, ROUNDSTART_TRAIT)
+ AddComponent(/datum/component/two_handed, force_unwielded = force_unwielded, force_wielded = force_wielded, icon_wielded = "[base_icon_state]1")
-/obj/item/twohanded/fireaxe/update_icon_state() //Currently only here to fuck with the on-mob icons.
- icon_state = "fireaxe[wielded]"
+/obj/item/fireaxe/update_icon_state() //Currently only here to fuck with the on-mob icons.
+ icon_state = "[base_icon_state]0"
+ return ..()
-/obj/item/twohanded/fireaxe/afterattack(atom/A, mob/user, proximity)
+/obj/item/fireaxe/afterattack(atom/A, mob/user, proximity)
if(!proximity)
return
- if(wielded) //destroys windows and grilles in one hit
+ if(HAS_TRAIT(src, TRAIT_WIELDED)) //destroys windows and grilles in one hit
if(istype(A, /obj/structure/window) || istype(A, /obj/structure/grille))
var/obj/structure/W = A
W.obj_destruction("fireaxe")
-/obj/item/twohanded/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone.
+/obj/item/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone.
icon_state = "bone_axe0"
+ base_icon_state = "bone_axe"
name = "bone axe"
desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters."
force_wielded = 23
needs_permit = TRUE
-/obj/item/twohanded/fireaxe/boneaxe/update_icon_state()
- icon_state = "bone_axe[wielded]"
+/obj/item/fireaxe/boneaxe/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, force_wielded = force_wielded, icon_wielded = "[base_icon_state]1")
-/obj/item/twohanded/fireaxe/energized
+/obj/item/fireaxe/energized
desc = "Someone with a love for fire axes decided to turn this one into a high-powered energy weapon. Seems excessive."
force_wielded = 35
armour_penetration_flat = 10
@@ -237,26 +59,25 @@
var/charge = 20
var/max_charge = 20
-/obj/item/twohanded/fireaxe/energized/update_icon_state()
- if(wielded)
- icon_state = "fireaxe2"
- else
- icon_state = "fireaxe0"
+/obj/item/fireaxe/energized/Initialize(mapload)
+ . = ..()
+ // only update the new args
+ AddComponent(/datum/component/two_handed, force_wielded = force_wielded, icon_wielded = "[base_icon_state]2")
-/obj/item/twohanded/fireaxe/energized/New()
+/obj/item/fireaxe/energized/New()
..()
START_PROCESSING(SSobj, src)
-/obj/item/twohanded/fireaxe/energized/Destroy()
+/obj/item/fireaxe/energized/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
-/obj/item/twohanded/fireaxe/energized/process()
+/obj/item/fireaxe/energized/process()
charge = min(charge + 1, max_charge)
-/obj/item/twohanded/fireaxe/energized/attack(mob/M, mob/user)
+/obj/item/fireaxe/energized/attack(mob/M, mob/user)
. = ..()
- if(wielded && charge == max_charge)
+ if(HAS_TRAIT(src, TRAIT_WIELDED) && charge == max_charge)
if(isliving(M))
var/mob/living/target = M
charge = 0
@@ -270,71 +91,74 @@
/*
* Double-Bladed Energy Swords - Cheridan
*/
-/obj/item/twohanded/dualsaber
- var/hacked = FALSE
- var/blade_color
- icon_state = "dualsaber0"
+/obj/item/dualsaber
name = "double-bladed energy sword"
desc = "Handle with care."
+ icon_state = "dualsaber0"
force = 3
throwforce = 5
throw_speed = 1
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
var/w_class_on = WEIGHT_CLASS_BULKY
- force_unwielded = 3
- force_wielded = 34
- wieldsound = 'sound/weapons/saberon.ogg'
- unwieldsound = 'sound/weapons/saberoff.ogg'
- armour_penetration_percentage = 50
+
armour_penetration_flat = 10
origin_tech = "magnets=4;syndicate=5"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
- sharp_when_wielded = TRUE // only sharp when wielded
max_integrity = 200
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 100, ACID = 70)
resistance_flags = FIRE_PROOF
light_power = 2
needs_permit = TRUE
+ var/hacked = FALSE
+ var/blade_color
var/brightness_on = 2
- var/colormap = list(red=LIGHT_COLOR_RED, blue=LIGHT_COLOR_LIGHTBLUE, green=LIGHT_COLOR_GREEN, purple=LIGHT_COLOR_PURPLE, rainbow=LIGHT_COLOR_WHITE)
+ var/colormap = list(red = LIGHT_COLOR_RED, blue = LIGHT_COLOR_LIGHTBLUE, green = LIGHT_COLOR_GREEN, purple = LIGHT_COLOR_PURPLE, rainbow = LIGHT_COLOR_WHITE)
-/obj/item/twohanded/dualsaber/New()
- ..()
+
+ var/force_unwielded = 3
+ var/force_wielded = 34
+ var/wieldsound = 'sound/weapons/saberon.ogg'
+ var/unwieldsound = 'sound/weapons/saberoff.ogg'
+
+/obj/item/dualsaber/Initialize(mapload)
+ . = ..()
if(!blade_color)
blade_color = pick("red", "blue", "green", "purple")
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (1 / 3) SECONDS) // 0.3333 seconds of cooldown for 75% uptime
+ AddComponent(/datum/component/two_handed, force_wielded = force_wielded, force_unwielded = force_unwielded, wieldsound = wieldsound, unwieldsound = unwieldsound, wield_callback = CALLBACK(src, PROC_REF(on_wield)), unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), only_sharp_when_wielded = TRUE)
-/obj/item/twohanded/dualsaber/update_icon_state()
- if(wielded)
- icon_state = "dualsaber[blade_color][wielded]"
+/obj/item/dualsaber/update_icon_state()
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
+ icon_state = "dualsaber[blade_color]1"
set_light(brightness_on, l_color=colormap[blade_color])
else
icon_state = "dualsaber0"
set_light(0)
-/obj/item/twohanded/dualsaber/attack(mob/target, mob/living/user)
+/obj/item/dualsaber/attack(mob/target, mob/living/user)
if(HAS_TRAIT(user, TRAIT_HULK))
- to_chat(user, "You grip the blade too hard and accidentally close it!")
- unwield()
- return
+ to_chat(user, "You grip the blade too hard and accidentally drop it!")
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
+ user.unEquip(src)
+ return
..()
- if(HAS_TRAIT(user, TRAIT_CLUMSY) && (wielded) && prob(40) && force)
+ if(HAS_TRAIT(user, TRAIT_CLUMSY) && HAS_TRAIT(src, TRAIT_WIELDED) && prob(40) && force)
to_chat(user, "You twirl around a bit before losing your balance and impaling yourself on [src].")
user.take_organ_damage(20, 25)
return
- if((wielded) && prob(50))
+ if((HAS_TRAIT(src, TRAIT_WIELDED)) && prob(50))
INVOKE_ASYNC(src, PROC_REF(jedi_spin), user)
-/obj/item/twohanded/dualsaber/proc/jedi_spin(mob/living/user)
+/obj/item/dualsaber/proc/jedi_spin(mob/living/user)
for(var/i in list(NORTH, SOUTH, EAST, WEST, EAST, SOUTH, NORTH, SOUTH, EAST, WEST, EAST, SOUTH))
user.setDir(i)
if(i == WEST)
user.SpinAnimation(7, 1)
sleep(1)
-/obj/item/twohanded/dualsaber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
- if(!wielded)
+/obj/item/dualsaber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
+ if(!HAS_TRAIT(src, TRAIT_WIELDED))
return FALSE
. = ..()
if(!.) // they did not block the attack
@@ -352,45 +176,42 @@
melee_attack_chain(owner, hitby)
return TRUE
-/obj/item/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up
- if(wielded)
+/obj/item/dualsaber/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
to_chat(user, "You can't pick up such a dangerous item with your meaty hands without losing fingers, better not to!")
return TRUE
-/obj/item/twohanded/dualsaber/green
+/obj/item/dualsaber/green
blade_color = "green"
-/obj/item/twohanded/dualsaber/red
+/obj/item/dualsaber/red
blade_color = "red"
-/obj/item/twohanded/dualsaber/purple
+/obj/item/dualsaber/purple
blade_color = "purple"
-/obj/item/twohanded/dualsaber/blue
+/obj/item/dualsaber/blue
blade_color = "blue"
-/obj/item/twohanded/dualsaber/unwield()
- . = ..()
- if(!.)
- return
- hitsound = "swing_hit"
- w_class = initial(w_class)
-/obj/item/twohanded/dualsaber/IsReflect()
- if(wielded)
- return TRUE
+/obj/item/dualsaber/proc/on_wield(obj/item/source, mob/living/carbon/user)
+ if(user && HAS_TRAIT(user, TRAIT_HULK))
+ to_chat(user, "You lack the grace to wield this!")
+ return COMPONENT_TWOHANDED_BLOCK_WIELD
-/obj/item/twohanded/dualsaber/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflection chance for balance issues and switches hitsounds.
- if(HAS_TRAIT(M, TRAIT_HULK))
- to_chat(M, "You lack the grace to wield this!")
- return
- . = ..()
- if(!.)
- return
hitsound = 'sound/weapons/blade1.ogg'
w_class = w_class_on
-/obj/item/twohanded/dualsaber/multitool_act(mob/user, obj/item/I)
+
+/obj/item/dualsaber/proc/on_unwield()
+ hitsound = "swing_hit"
+ w_class = initial(w_class)
+
+/obj/item/dualsaber/IsReflect()
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
+ return TRUE
+
+/obj/item/dualsaber/multitool_act(mob/user, obj/item/I)
. = TRUE
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
@@ -403,15 +224,15 @@
to_chat(user, "It's starting to look like a triple rainbow - no, nevermind.")
//spears
-/obj/item/twohanded/spear
+/obj/item/spear
icon_state = "spearglass0"
name = "spear"
desc = "A haphazardly-constructed yet still deadly weapon of ancient design."
force = 10
w_class = WEIGHT_CLASS_BULKY
slot_flags = SLOT_BACK
- force_unwielded = 10
- force_wielded = 18
+ var/force_unwielded = 10
+ var/force_wielded = 18
throwforce = 20
throw_speed = 4
armour_penetration_flat = 5
@@ -424,62 +245,83 @@
max_integrity = 200
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 50, ACID = 30)
needs_permit = TRUE
- var/icon_prefix = "spearglass"
+ base_icon_state = "spearglass"
-/obj/item/twohanded/spear/update_icon_state()
- icon_state = "[icon_prefix][wielded]"
+/obj/item/spear/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, \
+ force_wielded = force_wielded, \
+ force_unwielded = force_unwielded, \
+ icon_wielded = "[base_icon_state]1")
-/obj/item/twohanded/spear/CheckParts(list/parts_list)
+/obj/item/spear/update_icon_state()
+ icon_state = "[base_icon_state]0"
+
+/obj/item/spear/proc/add_plasmaglass()
+ // re-add the component to reset the stats
+ force_wielded = 19
+ force_unwielded = 11
+ throwforce = 21
+ base_icon_state = "spearplasma"
+ AddComponent(/datum/component/two_handed, \
+ force_wielded = force_wielded, \
+ force_unwielded = force_unwielded, \
+ icon_wielded = "[base_icon_state]1")
+
+ update_icon()
+
+/obj/item/spear/CheckParts(list/parts_list)
var/obj/item/shard/tip = locate() in parts_list
if(istype(tip, /obj/item/shard/plasma))
- force_wielded = 19
- force_unwielded = 11
- throwforce = 21
- icon_prefix = "spearplasma"
+ // re-add the component to reset the stats
+ add_plasmaglass()
+
update_icon()
qdel(tip)
..()
-/obj/item/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity)
+/obj/item/spear/afterattack(atom/movable/AM, mob/user, proximity)
if(!proximity)
return
if(isturf(AM)) //So you can actually melee with it
return
- if(explosive && wielded)
+ if(explosive && HAS_TRAIT(src, TRAIT_WIELDED))
explosive.forceMove(AM)
explosive.prime()
qdel(src)
-/obj/item/twohanded/spear/throw_impact(atom/target)
+/obj/item/spear/throw_impact(atom/target)
. = ..()
if(explosive)
explosive.prime()
qdel(src)
-/obj/item/twohanded/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification.
- icon_state = "bone_spear0"
+/obj/item/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification.
name = "bone spear"
desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology."
+ base_icon_state = "bone_spear"
+ icon_state = "bone_spear0"
force = 11
force_unwielded = 11
force_wielded = 20 //I have no idea how to balance
throwforce = 22
armour_penetration_percentage = 15 //Enhanced armor piercing
- icon_prefix = "bone_spear"
+
//GREY TIDE
-/obj/item/twohanded/spear/grey_tide
- icon_state = "spearglass0"
+/obj/item/spear/grey_tide
name = "\improper Grey Tide"
desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Nanotrasen military forces."
+ base_icon_state = "spearglass"
+ icon_state = "spearglass0"
force_unwielded = 15
force_wielded = 25
throwforce = 20
throw_speed = 4
attack_verb = list("gored")
-/obj/item/twohanded/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity)
+/obj/item/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity)
..()
if(!proximity)
return
@@ -496,7 +338,7 @@
M.GiveTarget(L)
//Putting heads on spears
-/obj/item/twohanded/spear/attackby(obj/item/I, mob/living/user)
+/obj/item/spear/attackby(obj/item/I, mob/living/user)
if(istype(I, /obj/item/organ/external/head))
if(user.unEquip(src) && user.drop_item())
to_chat(user, "You stick [I] onto the spear and stand it upright on the ground.")
@@ -520,7 +362,7 @@
density = FALSE
anchored = TRUE
var/obj/item/organ/external/head/mounted_head = null
- var/obj/item/twohanded/spear/contained_spear = null
+ var/obj/item/spear/contained_spear = null
/obj/structure/headspear/Destroy()
QDEL_NULL(mounted_head)
@@ -539,13 +381,15 @@
mounted_head = null
qdel(src)
-/obj/item/twohanded/spear/kidan
- icon_state = "kidanspear0"
+/obj/item/spear/kidan
name = "\improper Kidan spear"
desc = "A spear brought over from the Kidan homeworld."
+ base_icon_state = "kindanspear"
+ icon_state = "kidanspear0"
+
// DIY CHAINSAW
-/obj/item/twohanded/required/chainsaw
+/obj/item/chainsaw
name = "chainsaw"
desc = "A versatile power tool. Useful for limbing trees and delimbing humans."
icon_state = "gchainsaw_off"
@@ -564,7 +408,12 @@
actions_types = list(/datum/action/item_action/startchainsaw)
var/on = FALSE
-/obj/item/twohanded/required/chainsaw/attack_self(mob/user)
+/obj/item/chainsaw/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, require_twohands = TRUE)
+
+
+/obj/item/chainsaw/attack_self(mob/user)
on = !on
to_chat(user, "As you pull the starting cord dangling from [src], [on ? "it begins to whirr." : "the chain stops moving."]")
if(on)
@@ -585,23 +434,23 @@
var/datum/action/A = X
A.UpdateButtonIcon()
-/obj/item/twohanded/required/chainsaw/attack_hand(mob/user)
+/obj/item/chainsaw/attack_hand(mob/user)
. = ..()
force = on ? force_on : initial(force)
throwforce = on ? force_on : initial(throwforce)
-/obj/item/twohanded/required/chainsaw/on_give(mob/living/carbon/giver, mob/living/carbon/receiver)
+/obj/item/chainsaw/on_give(mob/living/carbon/giver, mob/living/carbon/receiver)
. = ..()
force = on ? force_on : initial(force)
throwforce = on ? force_on : initial(throwforce)
-/obj/item/twohanded/required/chainsaw/doomslayer
+/obj/item/chainsaw/doomslayer
name = "OOOH BABY"
desc = "VRRRRRRR!!!"
armour_penetration_percentage = 100
force_on = 30
-/obj/item/twohanded/required/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
+/obj/item/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(attack_type == PROJECTILE_ATTACK)
owner.visible_message("Ranged attacks just make [owner] angrier!")
playsound(src, pick('sound/weapons/bulletflyby.ogg','sound/weapons/bulletflyby2.ogg','sound/weapons/bulletflyby3.ogg'), 75, 1)
@@ -610,20 +459,17 @@
///CHAINSAW///
-/obj/item/twohanded/chainsaw
- icon_state = "chainsaw0"
+/obj/item/butcher_chainsaw
name = "chainsaw"
desc = "Perfect for felling trees or fellow spacemen."
+ base_icon_state = "chainsaw"
+ icon_state = "chainsaw0"
force = 15
throwforce = 15
throw_speed = 1
throw_range = 5
w_class = WEIGHT_CLASS_BULKY // can't fit in backpacks
- force_unwielded = 15 //still pretty robust
- force_wielded = 40 //you'll gouge their eye out! Or a limb...maybe even their entire body!
hitsound = null // Handled in the snowflaked attack proc
- wieldsound = 'sound/weapons/chainsawstart.ogg'
- hitsound = null
armour_penetration_percentage = 50
armour_penetration_flat = 10
origin_tech = "materials=6;syndicate=4"
@@ -631,23 +477,31 @@
sharp = TRUE
flags_2 = RANDOM_BLOCKER_2
-/obj/item/twohanded/chainsaw/update_icon_state()
- if(wielded)
- icon_state = "chainsaw[wielded]"
- else
- icon_state = "chainsaw0"
-
-/obj/item/twohanded/chainsaw/attack(mob/living/target, mob/living/user)
+/obj/item/butcher_chainsaw/Initialize(mapload)
. = ..()
- if(wielded)
+ ADD_TRAIT(src, TRAIT_BUTCHERS_HUMANS, ROUNDSTART_TRAIT)
+ AddComponent(/datum/component/two_handed, \
+ force_wielded = 40, \
+ force_unwielded = force, \
+ icon_wielded = "[base_icon_state]1", \
+ wieldsound = 'sound/weapons/chainsawstart.ogg', \
+ wield_callback = CALLBACK(src, PROC_REF(wield)), \
+ unwield_callback = CALLBACK(src, PROC_REF(unwield)))
+
+/obj/item/butcher_chainsaw/update_icon_state()
+ icon_state = "[base_icon_state]0"
+
+/obj/item/butcher_chainsaw/attack(mob/living/target, mob/living/user)
+ . = ..()
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
playsound(loc, 'sound/weapons/chainsaw.ogg', 100, 1, -1) //incredibly loud; you ain't goin' for stealth with this thing. Credit to Lonemonk of Freesound for this sound.
if(isnull(.)) //necessary check, successful attacks return null, without it target will drop any shields they may have before they get a chance to block
target.KnockDown(8 SECONDS)
-/obj/item/twohanded/chainsaw/afterattack(mob/living/target, mob/living/user, proximity)
+/obj/item/butcher_chainsaw/afterattack(mob/living/target, mob/living/user, proximity)
if(!proximity) //only works on adjacent targets, no telekinetic chainsaws
return
- if(!wielded)
+ if(!HAS_TRAIT(src, TRAIT_WIELDED))
return
if(isrobot(target)) //no buff from attacking robots
return
@@ -656,37 +510,28 @@
if(target.stat != DEAD) //no buff from attacking dead targets
user.apply_status_effect(STATUS_EFFECT_CHAINSAW_SLAYING)
-/obj/item/twohanded/chainsaw/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
+/obj/item/butcher_chainsaw/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(attack_type == PROJECTILE_ATTACK)
final_block_chance = 0 //It's a chainsaw, you try blocking bullets with it
else if(owner.has_status_effect(STATUS_EFFECT_CHAINSAW_SLAYING))
final_block_chance = 80 //Need to be ready to ruuuummbllleeee
return ..()
-/obj/item/twohanded/chainsaw/wield() //you can't disarm an active chainsaw, you crazy person.
- . = ..()
- if(.)
- flags |= NODROP
+/obj/item/butcher_chainsaw/proc/wield() //you can't disarm an active chainsaw, you crazy person.
+ flags |= NODROP
-/obj/item/twohanded/chainsaw/unwield()
- . = ..()
- if(.)
- flags &= ~NODROP
-
-/obj/item/twohanded/chainsaw/Initialize(mapload)
- . = ..()
- ADD_TRAIT(src, TRAIT_BUTCHERS_HUMANS, ROUNDSTART_TRAIT)
+/obj/item/butcher_chainsaw/proc/unwield()
+ flags &= ~NODROP
// SINGULOHAMMER
-/obj/item/twohanded/singularityhammer
+/obj/item/singularityhammer
name = "singularity hammer"
desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows."
icon_state = "singulohammer0"
+ base_icon_state = "singulohammer"
flags = CONDUCT
slot_flags = SLOT_BACK
force = 5
- force_unwielded = 5
- force_wielded = 40
throwforce = 15
throw_range = 1
w_class = WEIGHT_CLASS_HUGE
@@ -695,22 +540,26 @@
var/charged = 2
origin_tech = "combat=4;bluespace=4;plasmatech=7"
-/obj/item/twohanded/singularityhammer/New()
+/obj/item/singularityhammer/Initialize(mapload)
..()
+ AddComponent(/datum/component/two_handed, \
+ force_wielded = 40, \
+ force_unwielded = force, \
+ icon_wielded = "[base_icon_state]1")
START_PROCESSING(SSobj, src)
-/obj/item/twohanded/singularityhammer/Destroy()
+/obj/item/singularityhammer/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
-/obj/item/twohanded/singularityhammer/process()
+/obj/item/singularityhammer/process()
if(charged < 2)
charged++
-/obj/item/twohanded/singularityhammer/update_icon_state() //Currently only here to fuck with the on-mob icons.
- icon_state = "singulohammer[wielded]"
+/obj/item/singularityhammer/update_icon_state() //Currently only here to fuck with the on-mob icons.
+ icon_state = "singulohammer0"
-/obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder)
+/obj/item/singularityhammer/proc/vortex(turf/pull, mob/wielder)
for(var/atom/movable/X in orange(5, pull))
if(X.move_resist == INFINITY)
continue
@@ -731,10 +580,10 @@
step_towards(H, pull)
step_towards(H, pull)
-/obj/item/twohanded/singularityhammer/afterattack(atom/A, mob/user, proximity)
+/obj/item/singularityhammer/afterattack(atom/A, mob/user, proximity)
if(!proximity)
return
- if(wielded)
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
if(charged == 2)
charged = 0
if(isliving(A))
@@ -744,22 +593,27 @@
var/turf/target = get_turf(A)
vortex(target, user)
-/obj/item/twohanded/mjollnir
+/obj/item/mjollnir
name = "Mjolnir"
desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy."
icon_state = "mjollnir0"
+ base_icon_state = "mjollnir"
flags = CONDUCT
slot_flags = SLOT_BACK
force = 5
- force_unwielded = 5
- force_wielded = 25
throwforce = 30
throw_range = 7
w_class = WEIGHT_CLASS_HUGE
- //var/charged = 5
origin_tech = "combat=4;powerstorage=7"
-/obj/item/twohanded/mjollnir/proc/shock(mob/living/target)
+/obj/item/mjollnir/Initialize(mapload)
+ ..()
+ AddComponent(/datum/component/two_handed, \
+ force_wielded = 25, \
+ force_unwielded = force, \
+ icon_wielded = "[base_icon_state]1")
+
+/obj/item/mjollnir/proc/shock(mob/living/target)
do_sparks(5, 1, target.loc)
target.visible_message("[target] was shocked by [src]!",
"You feel a powerful shock course through your body sending you flying!",
@@ -767,56 +621,57 @@
var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
target.throw_at(throw_target, 200, 4)
-/obj/item/twohanded/mjollnir/attack(mob/living/M, mob/user)
+/obj/item/mjollnir/attack(mob/living/M, mob/user)
..()
- if(wielded)
- //if(charged == 5)
- //charged = 0
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
M.Stun(6 SECONDS)
shock(M)
-/obj/item/twohanded/mjollnir/throw_impact(atom/target)
+/obj/item/mjollnir/throw_impact(atom/target)
. = ..()
if(isliving(target))
var/mob/living/L = target
L.Stun(6 SECONDS)
shock(L)
-/obj/item/twohanded/mjollnir/update_icon_state() //Currently only here to fuck with the on-mob icons.
- icon_state = "mjollnir[wielded]"
+/obj/item/mjollnir/update_icon_state() //Currently only here to fuck with the on-mob icons.
+ icon_state = "mjollnir0"
-/obj/item/twohanded/knighthammer
+/obj/item/knighthammer
name = "singuloth knight's hammer"
desc = "A hammer made of sturdy metal with a golden skull adorned with wings on either side of the head.
This weapon causes devastating damage to those it hits due to a power field sustained by a mini-singularity inside of the hammer."
icon_state = "knighthammer0"
+ base_icon_state = "knighthammer"
flags = CONDUCT
slot_flags = SLOT_BACK
force = 5
- force_unwielded = 5
- force_wielded = 30
throwforce = 15
throw_range = 1
w_class = WEIGHT_CLASS_HUGE
var/charged = 5
origin_tech = "combat=5;bluespace=4"
-/obj/item/twohanded/knighthammer/New()
- ..()
+/obj/item/knighthammer/Initialize(mapload)
+ . = ..()
START_PROCESSING(SSobj, src)
+ AddComponent(/datum/component/two_handed, \
+ force_wielded = 30, \
+ force_unwielded = force, \
+ icon_wielded = "[base_icon_state]1")
-/obj/item/twohanded/knighthammer/Destroy()
+/obj/item/knighthammer/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
-/obj/item/twohanded/knighthammer/process()
+/obj/item/knighthammer/process()
if(charged < 5)
charged++
-/obj/item/twohanded/knighthammer/update_icon_state() //Currently only here to fuck with the on-mob icons.
- icon_state = "knighthammer[wielded]"
+/obj/item/knighthammer/update_icon_state() //Currently only here to fuck with the on-mob icons.
+ icon_state = "knighthammer0"
-/obj/item/twohanded/knighthammer/afterattack(atom/A, mob/user, proximity)
+/obj/item/knighthammer/afterattack(atom/A, mob/user, proximity)
if(!proximity)
return
if(charged == 5)
@@ -830,13 +685,13 @@
var/atom/throw_target = get_edge_target_turf(Z, get_dir(src, get_step_away(Z, src)))
Z.throw_at(throw_target, 200, 4)
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
- else if(wielded && Z.health < 1)
+ else if(HAS_TRAIT(src, TRAIT_WIELDED) && Z.health < 1)
Z.visible_message("[Z.name] was blown to pieces by the power of [src]!",
"You feel a powerful blow rip you apart!",
"You hear a heavy impact and the sound of ripping flesh!.")
Z.gib()
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
- if(wielded)
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
if(iswallturf(A))
var/turf/simulated/wall/Z = A
Z.ex_act(2)
@@ -849,13 +704,12 @@
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
// PYRO CLAWS
-/obj/item/twohanded/required/pyro_claws
+/obj/item/pyro_claws
name = "hardplasma energy claws"
desc = "The power of the sun, in the claws of your hand."
icon_state = "pyro_claws"
flags = ABSTRACT | NODROP | DROPDEL
force = 22
- force_wielded = 22
damtype = BURN
armour_penetration_percentage = 50
sharp = TRUE
@@ -866,16 +720,17 @@
toolspeed = 0.5
var/lifetime = 60 SECONDS
-/obj/item/twohanded/required/pyro_claws/Initialize(mapload)
+/obj/item/pyro_claws/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = ALL_ATTACK_TYPES)
+ AddComponent(/datum/component/two_handed, require_twohands = TRUE)
-/obj/item/twohanded/required/pyro_claws/Destroy()
+/obj/item/pyro_claws/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
-/obj/item/twohanded/required/pyro_claws/process()
+/obj/item/pyro_claws/process()
lifetime -= 2 SECONDS
if(lifetime <= 0)
visible_message("[src] slides back into the depths of [loc]'s wrists.")
@@ -885,7 +740,7 @@
if(prob(15))
do_sparks(rand(1,6), 1, loc)
-/obj/item/twohanded/required/pyro_claws/afterattack(atom/target, mob/user, proximity)
+/obj/item/pyro_claws/afterattack(atom/target, mob/user, proximity)
if(!proximity)
return
if(prob(60))
@@ -946,7 +801,7 @@
if(!user.drop_l_hand() || !user.drop_r_hand())
to_chat(user, "[src] are unable to deploy the blades with the items in your hands!")
return
- var/obj/item/W = new /obj/item/twohanded/required/pyro_claws
+ var/obj/item/W = new /obj/item/pyro_claws
user.visible_message("[user] deploys [W] from [user.p_their()] wrists in a shower of sparks!", "You deploy [W] from your wrists!", "You hear the shower of sparks!")
user.put_in_hands(W)
on_cooldown = TRUE
@@ -976,11 +831,12 @@
/// Max number of atoms a broom can sweep at once
#define BROOM_PUSH_LIMIT 20
-/obj/item/twohanded/push_broom
+/obj/item/push_broom
name = "push broom"
desc = "This is my BROOMSTICK! It can be used manually or braced with two hands to sweep items as you move. It has a telescopic handle for compact storage."
icon = 'icons/obj/janitor.dmi'
icon_state = "broom0"
+ base_icon_state = "broom"
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
force = 8
@@ -988,32 +844,35 @@
throw_speed = 3
throw_range = 7
w_class = WEIGHT_CLASS_NORMAL
- force_unwielded = 8
- force_wielded = 12
attack_verb = list("swept", "brushed off", "bludgeoned", "whacked")
resistance_flags = FLAMMABLE
-/obj/item/twohanded/push_broom/update_icon_state()
- icon_state = "broom[wielded]"
-
-/obj/item/twohanded/push_broom/wield(mob/user)
+/obj/item/push_broom/Initialize(mapload)
. = ..()
- if(!.)
- return
+ AddComponent(/datum/component/two_handed, \
+ force_wielded = 12, \
+ force_unwielded = force, \
+ icon_wielded = "[base_icon_state]1", \
+ wield_callback = CALLBACK(src, PROC_REF(wield)), \
+ unwield_callback = CALLBACK(src, PROC_REF(unwield)))
+
+/obj/item/push_broom/update_icon_state()
+ icon_state = "broom0"
+
+/obj/item/push_broom/proc/wield(obj/item/source, mob/user)
to_chat(user, "You brace [src] against the ground in a firm sweeping stance.")
RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(sweep))
-/obj/item/twohanded/push_broom/unwield(mob/user)
- . = ..()
+/obj/item/push_broom/proc/unwield(obj/item/source, mob/user)
UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
-/obj/item/twohanded/push_broom/afterattack(atom/A, mob/user, proximity)
+/obj/item/push_broom/afterattack(atom/A, mob/user, proximity)
. = ..()
if(!proximity)
return
sweep(user, A, FALSE)
-/obj/item/twohanded/push_broom/proc/sweep(mob/user, atom/A, moving = TRUE)
+/obj/item/push_broom/proc/sweep(mob/user, atom/A, moving = TRUE)
SIGNAL_HANDLER
var/turf/current_item_loc = moving ? user.loc : (isturf(A) ? A : A.loc)
if(!isturf(current_item_loc))
@@ -1039,47 +898,45 @@
if(trash_amount > 1)
playsound(loc, 'sound/weapons/sweeping.ogg', 70, TRUE, -1)
-/obj/item/twohanded/push_broom/proc/move_into_storage(mob/user, obj/storage, obj/trash)
+/obj/item/push_broom/proc/move_into_storage(mob/user, obj/storage, obj/trash)
trash.forceMove(storage)
storage.update_icon()
to_chat(user, "You sweep the pile of garbage into [storage].")
-/obj/item/twohanded/push_broom/proc/janicart_insert(mob/user, obj/structure/janitorialcart/cart)
+/obj/item/push_broom/proc/janicart_insert(mob/user, obj/structure/janitorialcart/cart)
cart.mybroom = src
cart.put_in_cart(src, user)
-/obj/item/twohanded/push_broom/traitor
+/obj/item/push_broom/traitor
name = "titanium push broom"
desc = "This is my BROOMSTICK! All of the functionality of a normal broom, but at least half again more robust."
attack_verb = list("smashed", "slammed", "whacked", "thwacked", "swept")
force = 10
- force_unwielded = 10
- force_wielded = 25
-/obj/item/twohanded/push_broom/traitor/Initialize(mapload)
+/obj/item/push_broom/traitor/Initialize(mapload)
. = ..()
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = NON_PROJECTILE_ATTACKS)
+ // parent component handles this
+ AddComponent(/datum/component/two_handed, force_wielded = 25, force_unwielded = force)
-/obj/item/twohanded/push_broom/traitor/examine(mob/user)
+/obj/item/push_broom/traitor/examine(mob/user)
. = ..()
if(isAntag(user))
. += "When wielded, the broom has different effects depending on your intent, similar to a martial art. \
Help intent will sweep foes away from you, disarm intent sweeps their legs from under them, grab intent confuses \
and minorly fatigues them, and harm intent hits them normally."
-/obj/item/twohanded/push_broom/traitor/wield(mob/user)
- . = ..()
+/obj/item/push_broom/traitor/wield(obj/item/source, mob/user)
ADD_TRAIT(user, TRAIT_DEFLECTS_PROJECTILES, "pushbroom")
to_chat(user, "Your sweeping stance allows you to deflect projectiles.")
-/obj/item/twohanded/push_broom/traitor/unwield(mob/user)
- . = ..()
+/obj/item/push_broom/traitor/unwield(obj/item/source, mob/user)
if(HAS_TRAIT_FROM(user, TRAIT_DEFLECTS_PROJECTILES, "pushbroom")) //this check is needed because obj/item/twohanded calls unwield() on drop and you'd get the message even if you weren't wielding it before
REMOVE_TRAIT(user, TRAIT_DEFLECTS_PROJECTILES, "pushbroom")
to_chat(user, "You stop reflecting projectiles.")
-/obj/item/twohanded/push_broom/traitor/attack(mob/target, mob/living/user)
- if(!wielded || !ishuman(target))
+/obj/item/push_broom/traitor/attack(mob/target, mob/living/user)
+ if(!HAS_TRAIT(src, TRAIT_WIELDED) || !ishuman(target))
return ..()
var/mob/living/carbon/human/H = target
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index a2efc7eb617..4b08bbf605d 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -125,12 +125,9 @@
/obj/item/wirerod/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/shard))
- var/obj/item/twohanded/spear/S = new /obj/item/twohanded/spear
+ var/obj/item/spear/S = new /obj/item/spear
if(istype(I, /obj/item/shard/plasma))
- S.force_wielded = 19
- S.force_unwielded = 11
- S.throwforce = 21
- S.icon_prefix = "spearplasma"
+ S.add_plasmaglass()
S.update_icon()
if(!remove_item_from_storage(user))
user.unEquip(src)
diff --git a/code/game/objects/items/weapons/whetstone.dm b/code/game/objects/items/weapons/whetstone.dm
index dbf3e0773bf..23df94c2cf5 100644
--- a/code/game/objects/items/weapons/whetstone.dm
+++ b/code/game/objects/items/weapons/whetstone.dm
@@ -17,20 +17,22 @@
if(used)
to_chat(user, "The whetstone is too worn to use again!")
return
- if(I.force >= max || I.throwforce >= max)//no esword sharpening
- to_chat(user, "[I] is much too powerful to sharpen further!")
- return
if(requires_sharpness && !I.sharp)
to_chat(user, "You can only sharpen items that are already sharp, such as knives!")
return
- if(istype(I, /obj/item/twohanded))//some twohanded items should still be sharpenable, but handle force differently. therefore i need this stuff
- var/obj/item/twohanded/TH = I
- if(TH.force_wielded >= max || TH.force_wielded > initial(TH.force_wielded))
- to_chat(user, "[TH] is much too powerful to sharpen further!")
- return
- TH.force_wielded = clamp(TH.force_wielded + increment, 0, max)//wieldforce is increased since normal force wont stay
- TH.force_unwielded = clamp(TH.force_unwielded + increment, 0, max)
+ var/signal_out = SEND_SIGNAL(I, COMSIG_ITEM_SHARPEN_ACT, increment, max)
+ if((signal_out & COMPONENT_BLOCK_SHARPEN_MAXED) || I.force >= max || I.throwforce >= max) //If the item's components enforce more limits on maximum power from sharpening, we fail
+ to_chat(user, "[I] is much too powerful to sharpen further!")
+ return
+ if(signal_out & COMPONENT_BLOCK_SHARPEN_BLOCKED)
+ to_chat(user, "[I] is not able to be sharpened right now!")
+ return
+ if((signal_out & COMPONENT_BLOCK_SHARPEN_ALREADY) || (I.force > initial(I.force) && !(signal_out & COMPONENT_SHARPEN_APPLIED))) //No sharpening stuff twice
+ to_chat(user, "[I] has already been refined before. It cannot be sharpened further!")
+ return
+ if(!(signal_out & COMPONENT_SHARPEN_APPLIED)) //If the item has a relevant component and COMPONENT_BLOCK_SHARPEN_APPLIED is returned, the item only gets the throw force increase
+ I.force = clamp(I.force + increment, 0, max)
if(istype(I, /obj/item/melee/energy))
var/obj/item/melee/energy/E = I
if(E.force_on > initial(E.force_on) || (E.force > initial(E.force)))
@@ -41,13 +43,9 @@
E.force_on = clamp(E.force_on + increment, 0, max)
E.force_off = clamp(E.force_off + increment, 0, max)
- if(I.force > initial(I.force))
- to_chat(user, "[I] has already been refined before. It cannot be sharpened further!")
- return
user.visible_message("[user] sharpens [I] with [src]!", "You sharpen [I], making it much more deadly than before.")
if(!requires_sharpness)
set_sharpness(TRUE)
- I.force = clamp(I.force + increment, 0, max)
I.throwforce = clamp(I.throwforce + increment, 0, max)
I.name = "[prefix] [I.name]"
playsound(get_turf(src), usesound, 50, 1)
diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
index a672138a635..36463ea6ac8 100644
--- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
@@ -2,7 +2,7 @@
/obj/structure/closet/fireaxecabinet
name = "fire axe cabinet"
desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if."
- var/obj/item/twohanded/fireaxe/fireaxe
+ var/obj/item/fireaxe/fireaxe
icon_state = "fireaxe_full_0hits"
icon_closed = "fireaxe_full_0hits"
icon_opened = "fireaxe_full_open"
@@ -18,7 +18,7 @@
var/has_axe = null // Use a string over a boolean value to make the sprite names more readable
/obj/structure/closet/fireaxecabinet/populate_contents()
- fireaxe = new/obj/item/twohanded/fireaxe(src)
+ fireaxe = new/obj/item/fireaxe(src)
has_axe = "full"
update_icon(UPDATE_ICON_STATE) // So its initial icon doesn't show it without the fireaxe
@@ -60,10 +60,10 @@
localopened = TRUE
update_icon(UPDATE_ICON_STATE)
return
- if(istype(O, /obj/item/twohanded/fireaxe) && localopened)
+ if(istype(O, /obj/item/fireaxe) && localopened)
if(!fireaxe)
- var/obj/item/twohanded/fireaxe/F = O
- if(F.wielded)
+ var/obj/item/fireaxe/F = O
+ if(HAS_TRAIT(F, TRAIT_WIELDED))
to_chat(user, "Unwield \the [F] first.")
return
if(!user.unEquip(F, FALSE))
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 3c940c1f72c..62ee9ecaaf7 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -83,8 +83,8 @@
new /obj/item/caution(src)
new /obj/item/caution(src)
new /obj/item/caution(src)
- new /obj/item/twohanded/push_broom(src)
- new /obj/item/twohanded/push_broom(src)
+ new /obj/item/push_broom(src)
+ new /obj/item/push_broom(src)
new /obj/item/storage/bag/trash(src)
new /obj/item/storage/bag/trash(src)
new /obj/item/lightreplacer(src)
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 46134ecda00..7aa4cf708df 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -116,7 +116,7 @@
to_chat(user, "You must wait until the door has stopped moving.")
return
- if(istype(W, /obj/item/gun/energy/plasmacutter) || istype(W, /obj/item/pickaxe/drill/diamonddrill) || istype(W, /obj/item/pickaxe/drill/jackhammer) || istype(W, /obj/item/melee/energy/blade) || istype(W, /obj/item/twohanded/required/pyro_claws))
+ if(istype(W, /obj/item/gun/energy/plasmacutter) || istype(W, /obj/item/pickaxe/drill/diamonddrill) || istype(W, /obj/item/pickaxe/drill/jackhammer) || istype(W, /obj/item/melee/energy/blade) || istype(W, /obj/item/pyro_claws))
dismantle(user, TRUE)
/obj/structure/falsewall/attack_animal(mob/living/simple_animal/M)
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index a1f13c82e8b..01c0099884b 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -254,7 +254,7 @@
icon_state = "fullgrass_[rand(1, 3)]"
-/obj/item/twohanded/required/kirbyplants
+/obj/item/kirbyplants
name = "potted plant"
icon = 'icons/obj/flora/plants.dmi'
icon_state = "plant-1"
@@ -262,59 +262,59 @@
layer = ABOVE_MOB_LAYER
w_class = WEIGHT_CLASS_HUGE
force = 10
- force_wielded = 10
throwforce = 13
throw_speed = 2
throw_range = 4
/// Method to track plant overlay on mob for later removal
var/mutable_appearance/mob_overlay
-/obj/item/twohanded/required/kirbyplants/Initialize(mapload)
+/obj/item/kirbyplants/Initialize(mapload)
. = ..()
icon_state = "plant-[rand(1,35)]"
if(prob(1))
icon_state = "plant-36"
+ AddComponent(/datum/component/two_handed, require_twohands = TRUE)
-/obj/item/twohanded/required/kirbyplants/Destroy()
+/obj/item/kirbyplants/Destroy()
if(iscarbon(loc))
unhide_user(loc)
QDEL_NULL(mob_overlay)
return ..()
-/obj/item/twohanded/required/kirbyplants/equipped(mob/living/carbon/user)
+/obj/item/kirbyplants/equipped(mob/living/carbon/user)
. = ..()
- if(wielded)
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
hide_user(user)
return
unhide_user(user)
/// User has decided to hold a plant, apply stealth.
-/obj/item/twohanded/required/kirbyplants/proc/hide_user(mob/living/carbon/user)
+/obj/item/kirbyplants/proc/hide_user(mob/living/carbon/user)
RegisterSignal(user, COMSIG_CARBON_REGENERATE_ICONS, PROC_REF(reapply_hide))
mob_overlay = mutable_appearance(icon, icon_state, user.layer, user.plane, 255, appearance_flags = RESET_COLOR | RESET_TRANSFORM | RESET_ALPHA | KEEP_APART)
user.add_overlay(mob_overlay)
user.alpha = 0
/// User has either dropped the plant, or plant is being destroyed, restore user to normal.
-/obj/item/twohanded/required/kirbyplants/proc/unhide_user(mob/living/carbon/user)
+/obj/item/kirbyplants/proc/unhide_user(mob/living/carbon/user)
UnregisterSignal(user, COMSIG_CARBON_REGENERATE_ICONS)
user.cut_overlay(mob_overlay)
user.alpha = initial(user.alpha)
QDEL_NULL(mob_overlay)
/// Icon operation has occured, time to make sure we're showing a plant again if we need to be.
-/obj/item/twohanded/required/kirbyplants/proc/reapply_hide(mob/living/carbon/user)
+/obj/item/kirbyplants/proc/reapply_hide(mob/living/carbon/user)
SIGNAL_HANDLER
// Reset the state of the user
unhide_user(user)
hide_user(user)
-/obj/item/twohanded/required/kirbyplants/dropped(mob/living/carbon/user)
+/obj/item/kirbyplants/dropped(mob/living/carbon/user)
..()
unhide_user(user)
-/obj/item/twohanded/required/kirbyplants/dead
+/obj/item/kirbyplants/dead
name = "\improper RD's potted plant"
desc = "A gift from the botanical staff, presented after the RD's reassignment. There's a tag on it that says \"Y'all come back now, y'hear?\"\nIt doesn't look very healthy..."
icon_state = "plant-dead"
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 6ea253e12f1..43545ae2fb7 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -64,7 +64,7 @@
refundMetal(metalUsed)
qdel(src)
- else if(istype(W, /obj/item/twohanded/required/pyro_claws))
+ else if(istype(W, /obj/item/pyro_claws))
playsound(loc, W.usesound, 100, 1)
to_chat(user, "You melt the girder!")
refundMetal(metalUsed)
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index 210027d7c72..fdc0065efac 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -15,7 +15,7 @@
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
var/obj/item/storage/bag/trash/mybag = null
var/obj/item/mop/mymop = null
- var/obj/item/twohanded/push_broom/mybroom = null
+ var/obj/item/push_broom/mybroom = null
var/obj/item/reagent_containers/spray/cleaner/myspray = null
var/obj/item/lightreplacer/myreplacer = null
var/signs = 0
@@ -59,9 +59,9 @@
m.janicart_insert(user, src)
else
to_chat(user, fail_msg)
- else if(istype(I, /obj/item/twohanded/push_broom))
+ else if(istype(I, /obj/item/push_broom))
if(!mybroom)
- var/obj/item/twohanded/push_broom/B = I
+ var/obj/item/push_broom/B = I
B.janicart_insert(user, src)
else
to_chat(user, fail_msg)
diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm
index b6ece4cae74..b593aad49e1 100644
--- a/code/game/turfs/simulated/minerals.dm
+++ b/code/game/turfs/simulated/minerals.dm
@@ -559,7 +559,7 @@
stage = GIBTONITE_DETONATE
explosion(bombturf,1,2,5, adminlog = 0)
if(stage == GIBTONITE_STABLE) //Gibtonite deposit is now benign and extractable. Depending on how close you were to it blowing up before defusing, you get better quality ore.
- var/obj/item/twohanded/required/gibtonite/G = new(src)
+ var/obj/item/gibtonite/G = new(src)
if(det_time <= 0)
G.quality = 3
G.icon_state = "Gibtonite ore 3"
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index bc11c3e3533..5923238257d 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -453,7 +453,7 @@
visible_message("[user] disintegrates [src]!","You hear the grinding of metal.")
return TRUE
- else if(istype(I, /obj/item/twohanded/required/pyro_claws))
+ else if(istype(I, /obj/item/pyro_claws))
to_chat(user, "You begin to melt the wall.")
if(do_after(user, isdiamond ? 60 * I.toolspeed : 30 * I.toolspeed, target = src)) // claws has 0.5 toolspeed, so 3/1.5 seconds
diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm
index 77e19908964..5f7bb041f3a 100644
--- a/code/game/turfs/simulated/walls_mineral.dm
+++ b/code/game/turfs/simulated/walls_mineral.dm
@@ -174,7 +174,7 @@
/turf/simulated/wall/mineral/wood/attackby(obj/item/W, mob/user)
if(W.sharp && W.force)
var/duration = (48 / W.force) * 2 //In seconds, for now.
- if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/twohanded/fireaxe))
+ if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/fireaxe))
duration /= 4 //Much better with hatchets and axes.
if(do_after(user, duration * 10, target = src)) //Into deciseconds.
dismantle_wall(FALSE, FALSE)
diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm
index d0e4761f255..3bf8b040979 100644
--- a/code/game/turfs/simulated/walls_reinforced.dm
+++ b/code/game/turfs/simulated/walls_reinforced.dm
@@ -202,7 +202,7 @@
dismantle_wall()
return TRUE
- if(istype(I, /obj/item/twohanded/required/pyro_claws))
+ if(istype(I, /obj/item/pyro_claws))
to_chat(user, "You begin to melt the wall...")
if(do_after(user, 50 * I.toolspeed, target = src)) // claws has 0.5 toolspeed, so 2.5 seconds
to_chat(user, "Your [I] melt the reinforced plating.")
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 042102b13a9..0563340fdf7 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -445,8 +445,8 @@
return
C.place_turf(src, user)
return TRUE
- else if(istype(I, /obj/item/twohanded/rcl))
- var/obj/item/twohanded/rcl/R = I
+ else if(istype(I, /obj/item/rcl))
+ var/obj/item/rcl/R = I
if(R.loaded)
for(var/obj/structure/cable/LC in src)
if(LC.d1 == 0 || LC.d2 == 0)
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index b6eabd3a5d7..c8a3dab3239 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -509,7 +509,7 @@
// snowflake checks my beloved
// this will become tooltype checks I swear
- if(!istype(I, /obj/item/circular_saw) && !istype(I, /obj/item/twohanded/required/chainsaw) && !istype(I, /obj/item/twohanded/chainsaw))
+ if(!istype(I, /obj/item/circular_saw) && !istype(I, /obj/item/chainsaw) && !istype(I, /obj/item/butcher_chainsaw))
return
user.visible_message(
diff --git a/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm b/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm
index 9737d5d37a3..ff76e602221 100644
--- a/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm
+++ b/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm
@@ -13,7 +13,7 @@
user.drop_r_hand()
else
to_chat(user, "Large blades of blood spring from your fingers!")
- var/obj/item/twohanded/required/vamp_claws/claws = new /obj/item/twohanded/required/vamp_claws(user.loc, src)
+ var/obj/item/vamp_claws/claws = new /obj/item/vamp_claws(user.loc, src)
RegisterSignal(user, COMSIG_MOB_WILLINGLY_DROP, PROC_REF(dispel))
user.put_in_hands(claws)
@@ -23,9 +23,9 @@
if(user.mind.has_antag_datum(/datum/antagonist/vampire))
return
var/current
- if(istype(user.l_hand, /obj/item/twohanded/required/vamp_claws))
+ if(istype(user.l_hand, /obj/item/vamp_claws))
current = user.l_hand
- if(istype(user.r_hand, /obj/item/twohanded/required/vamp_claws))
+ if(istype(user.r_hand, /obj/item/vamp_claws))
current = user.r_hand
if(current)
qdel(current)
@@ -36,7 +36,7 @@
if(L.canUnEquip(L.l_hand) && L.canUnEquip(L.r_hand))
return ..()
-/obj/item/twohanded/required/vamp_claws
+/obj/item/vamp_claws
name = "vampiric claws"
desc = "A pair of eldritch claws made of living blood, they seem to flow yet they are solid"
icon = 'icons/effects/vampire_effects.dmi'
@@ -44,7 +44,6 @@
w_class = WEIGHT_CLASS_BULKY
flags = ABSTRACT | NODROP | DROPDEL
force = 10
- force_wielded = 10
armour_penetration_flat = 20
sharp = TRUE
attack_effect_override = ATTACK_EFFECT_CLAW
@@ -56,17 +55,18 @@
var/blood_absorbed_amount = 5
var/obj/effect/proc_holder/spell/vampire/self/vamp_claws/parent_spell
-/obj/item/twohanded/required/vamp_claws/Initialize(mapload, new_parent_spell)
+/obj/item/vamp_claws/Initialize(mapload, new_parent_spell)
. = ..()
+ AddComponent(/datum/component/two_handed, require_twohands = TRUE)
parent_spell = new_parent_spell
-/obj/item/twohanded/required/vamp_claws/Destroy()
+/obj/item/vamp_claws/Destroy()
if(parent_spell)
parent_spell.UnregisterSignal(parent_spell.action.owner, COMSIG_MOB_WILLINGLY_DROP)
parent_spell = null
return ..()
-/obj/item/twohanded/required/vamp_claws/afterattack(atom/target, mob/user, proximity)
+/obj/item/vamp_claws/afterattack(atom/target, mob/user, proximity)
if(!proximity)
return
@@ -91,12 +91,12 @@
qdel(src)
to_chat(user, "Your claws shatter!")
-/obj/item/twohanded/required/vamp_claws/melee_attack_chain(mob/user, atom/target, params)
+/obj/item/vamp_claws/melee_attack_chain(mob/user, atom/target, params)
..()
- if(wielded)
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
user.changeNext_move(CLICK_CD_MELEE * 0.5)
-/obj/item/twohanded/required/vamp_claws/attack_self(mob/user)
+/obj/item/vamp_claws/attack_self(mob/user)
qdel(src)
to_chat(user, "You dispel your claws!")
diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm
index 325a284b60f..89ee8029fa1 100644
--- a/code/modules/arcade/prize_datums.dm
+++ b/code/modules/arcade/prize_datums.dm
@@ -386,7 +386,7 @@ GLOBAL_DATUM_INIT(global_prizes, /datum/prizes, new())
/datum/prize_item/chainsaw
name = "Toy Chainsaw"
desc = "A full-scale model chainsaw, based on that massacre in Space Texas."
- typepath = /obj/item/twohanded/toy/chainsaw
+ typepath = /obj/item/toy/chainsaw
cost = 200
/datum/prize_item/bike
diff --git a/code/modules/clothing/suits/armor_suits.dm b/code/modules/clothing/suits/armor_suits.dm
index 0b802239031..703dbe083c2 100644
--- a/code/modules/clothing/suits/armor_suits.dm
+++ b/code/modules/clothing/suits/armor_suits.dm
@@ -774,7 +774,7 @@
icon_state = "dragon"
item_state = "dragon"
desc = "A suit of armour fashioned from the remains of an ash drake."
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/spear)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/spear)
armor = list(MELEE = 115, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 150, RAD = 25, FIRE = INFINITY, ACID = INFINITY)
hoodtype = /obj/item/clothing/head/hooded/drake
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
@@ -799,7 +799,7 @@
icon_state = "goliath_cloak"
item_state = "goliath_cloak"
desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits."
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/organ/internal/regenerative_core/legion, /obj/item/kitchen/knife/combat/survival)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/organ/internal/regenerative_core/legion, /obj/item/kitchen/knife/combat/survival)
armor = list(MELEE = 25, BULLET = 5, LASER = 15, ENERGY = 5, BOMB = 15, RAD = 0, FIRE = 75, ACID = 75) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot
hoodtype = /obj/item/clothing/head/hooded/goliath
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index 7a59fab5977..62920cbf20a 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -448,7 +448,7 @@
/datum/crafting_recipe/chainsaw
name = "Chainsaw"
- result = list(/obj/item/twohanded/required/chainsaw)
+ result = list(/obj/item/chainsaw)
reqs = list(/obj/item/circular_saw = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/stack/sheet/plasteel = 1)
@@ -460,7 +460,7 @@
/datum/crafting_recipe/spear
name = "Spear"
- result = list(/obj/item/twohanded/spear)
+ result = list(/obj/item/spear)
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
/obj/item/shard = 1,
/obj/item/stack/rods = 1)
@@ -519,7 +519,7 @@
/datum/crafting_recipe/garrote
name = "Makeshift Garrote"
- result = list(/obj/item/twohanded/garrote/improvised)
+ result = list(/obj/item/garrote/improvised)
time = 15
reqs = list(/obj/item/stack/sheet/wood = 1,
/obj/item/stack/cable_coil = 5)
@@ -671,7 +671,7 @@
result = list(/obj/item/bombcore/chemical)
reqs = list(
/obj/item/stock_parts/matter_bin = 1,
- /obj/item/twohanded/required/gibtonite = 1,
+ /obj/item/gibtonite = 1,
/obj/item/grenade/chem_grenade = 2
)
parts = list(/obj/item/stock_parts/matter_bin = 1, /obj/item/grenade/chem_grenade = 2)
@@ -771,7 +771,7 @@
/datum/crafting_recipe/bonespear
name = "Bone Spear"
- result = list(/obj/item/twohanded/spear/bonespear)
+ result = list(/obj/item/spear/bonespear)
time = 30
reqs = list(/obj/item/stack/sheet/bone = 4,
/obj/item/stack/sheet/sinew = 1)
@@ -795,7 +795,7 @@
/datum/crafting_recipe/boneaxe
name = "Bone Axe"
- result = list(/obj/item/twohanded/fireaxe/boneaxe)
+ result = list(/obj/item/fireaxe/boneaxe)
time = 50
reqs = list(/obj/item/stack/sheet/bone = 6,
/obj/item/stack/sheet/sinew = 3)
diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm
index f2f00b43271..53d7da1032a 100644
--- a/code/modules/martial_arts/martial.dm
+++ b/code/modules/martial_arts/martial.dm
@@ -370,27 +370,27 @@
new /obj/effect/decal/cleanable/ash(get_turf(src))
qdel(src)
-/obj/item/twohanded/bostaff
+/obj/item/bostaff
name = "bo staff"
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts. Can be wielded to both kill and incapacitate."
force = 10
w_class = WEIGHT_CLASS_BULKY
slot_flags = SLOT_BACK
- force_unwielded = 10
- force_wielded = 24
throwforce = 20
throw_speed = 2
attack_verb = list("smashed", "slammed", "whacked", "thwacked")
icon_state = "bostaff0"
+ base_icon_state = "bostaff"
-/obj/item/twohanded/bostaff/Initialize(mapload)
+/obj/item/bostaff/Initialize(mapload)
. = ..()
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = ALL_ATTACK_TYPES)
+ AddComponent(/datum/component/two_handed, force_wielded = 24, force_unwielded = force, icon_wielded = "[base_icon_state]1")
-/obj/item/twohanded/bostaff/update_icon_state()
- icon_state = "bostaff[wielded]"
+/obj/item/bostaff/update_icon_state()
+ icon_state = "[base_icon_state]0"
-/obj/item/twohanded/bostaff/attack(mob/target, mob/living/user)
+/obj/item/bostaff/attack(mob/target, mob/living/user)
add_fingerprint(user)
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
to_chat(user, "You club yourself over the head with [src].")
@@ -414,7 +414,7 @@
return
switch(user.a_intent)
if(INTENT_DISARM)
- if(!wielded)
+ if(!HAS_TRAIT(src, TRAIT_WIELDED))
return ..()
if(!ishuman(target))
return ..()
@@ -445,8 +445,8 @@
else
return ..()
-/obj/item/twohanded/bostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
- if(wielded)
+/obj/item/bostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
+ if(HAS_TRAIT(src, TRAIT_WIELDED))
return ..()
return 0
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index 3cd2c42dc5e..1fb1e5a6d90 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -1,16 +1,15 @@
/*********************Mining Hammer****************/
-/obj/item/twohanded/kinetic_crusher
- icon = 'icons/obj/mining.dmi'
- icon_state = "crusher"
- item_state = "crusher0"
+/obj/item/kinetic_crusher
name = "proto-kinetic crusher"
desc = "An early design of the proto-kinetic accelerator, it is little more than a combination of various mining tools cobbled together, forming a high-tech club. \
While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna."
+ icon = 'icons/obj/mining.dmi'
+ base_icon_state = "crusher"
+ icon_state = "crusher"
+ item_state = "crusher0"
force = 0 //You can't hit stuff unless wielded
w_class = WEIGHT_CLASS_BULKY
slot_flags = SLOT_BACK
- force_unwielded = 0
- force_wielded = 20
throwforce = 5
throw_speed = 4
armour_penetration_flat = 10
@@ -27,16 +26,22 @@
var/light_on = FALSE
var/brightness_on = 5
var/adaptive_damage_bonus = 0
+ /// Amount of force typically assigned when wielded
+ var/base_force_wielded = 20
+ /// Tracker for the current amount of force used when the item is wielded.
+ /// Note that this isn't wired to anything, and must be updated with AddComponent to have value.
+ var/force_wielded = 20
-/obj/item/twohanded/kinetic_crusher/Initialize(mapload)
+/obj/item/kinetic_crusher/Initialize(mapload)
. = ..()
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.7, _parryable_attack_types = MELEE_ATTACK, _parry_cooldown = (7 / 3) SECONDS ) // 2.3333 seconds of cooldown for 30% uptime
+ AddComponent(/datum/component/two_handed, force_wielded = force_wielded, force_unwielded = force)
-/obj/item/twohanded/kinetic_crusher/Destroy()
+/obj/item/kinetic_crusher/Destroy()
QDEL_LIST_CONTENTS(trophies)
return ..()
-/obj/item/twohanded/kinetic_crusher/examine(mob/living/user)
+/obj/item/kinetic_crusher/examine(mob/living/user)
. = ..()
. += "Mark a large creature with the destabilizing force, then hit them in melee to do [force + detonation_damage] damage."
. += "Does [force + detonation_damage + backstab_bonus] damage if the target is backstabbed, instead of [force + detonation_damage]."
@@ -44,14 +49,14 @@
var/obj/item/crusher_trophy/T = t
. += "It has \a [T] attached, which causes [T.effect_desc()]."
-/obj/item/twohanded/kinetic_crusher/attackby(obj/item/I, mob/living/user)
+/obj/item/kinetic_crusher/attackby(obj/item/I, mob/living/user)
if(istype(I, /obj/item/crusher_trophy))
var/obj/item/crusher_trophy/T = I
T.add_to(src, user)
else
return ..()
-/obj/item/twohanded/kinetic_crusher/crowbar_act(mob/user, obj/item/I)
+/obj/item/kinetic_crusher/crowbar_act(mob/user, obj/item/I)
. = TRUE
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
@@ -63,9 +68,9 @@
else
to_chat(user, "There are no trophies on [src].")
-/obj/item/twohanded/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user)
- if(!wielded)
- to_chat(user, "[src] is too heavy to use with one hand. You fumble and drop everything.")
+/obj/item/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user)
+ if(!HAS_TRAIT(src, TRAIT_WIELDED))
+ to_chat(user, "[src] is too heavy to use with one hand. You fumble and drop everything.")
user.drop_r_hand()
user.drop_l_hand()
return
@@ -90,9 +95,9 @@
if(!QDELETED(C) && !QDELETED(target))
C.total_damage += target_health - target.health //we did some damage, but let's not assume how much we did
-/obj/item/twohanded/kinetic_crusher/afterattack(atom/target, mob/living/user, proximity_flag, clickparams)
+/obj/item/kinetic_crusher/afterattack(atom/target, mob/living/user, proximity_flag, clickparams)
. = ..()
- if(!wielded)
+ if(!HAS_TRAIT(src, TRAIT_WIELDED))
return
if(user.has_status_effect(STATUS_EFFECT_DASH) && user.a_intent == INTENT_HELP)
if(user.throw_at(target, range = 3, speed = 3, spin = FALSE, diagonals_first = TRUE))
@@ -148,28 +153,28 @@
C.total_damage += detonation_damage
L.apply_damage(detonation_damage, BRUTE, blocked = def_check)
-/obj/item/twohanded/kinetic_crusher/proc/Recharge()
+/obj/item/kinetic_crusher/proc/Recharge()
if(!charged)
charged = TRUE
update_icon()
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
-/obj/item/twohanded/kinetic_crusher/ui_action_click(mob/user, actiontype)
+/obj/item/kinetic_crusher/ui_action_click(mob/user, actiontype)
light_on = !light_on
playsound(user, 'sound/weapons/empty.ogg', 100, TRUE)
update_brightness(user)
update_icon()
-/obj/item/twohanded/kinetic_crusher/proc/update_brightness(mob/user = null)
+/obj/item/kinetic_crusher/proc/update_brightness(mob/user = null)
if(light_on)
set_light(brightness_on)
else
set_light(0)
-/obj/item/twohanded/kinetic_crusher/update_icon_state()
- item_state = "crusher[wielded]"
+/obj/item/kinetic_crusher/update_icon_state()
+ item_state = "crusher[HAS_TRAIT(src, TRAIT_WIELDED)]"
-/obj/item/twohanded/kinetic_crusher/update_overlays()
+/obj/item/kinetic_crusher/update_overlays()
. = ..()
if(!charged)
. += "[icon_state]_uncharged"
@@ -190,7 +195,7 @@
flag = BOMB
range = 6
log_override = TRUE
- var/obj/item/twohanded/kinetic_crusher/hammer_synced
+ var/obj/item/kinetic_crusher/hammer_synced
/obj/item/projectile/destabilizer/Destroy()
hammer_synced = null
@@ -232,12 +237,12 @@
return "errors"
/obj/item/crusher_trophy/attackby(obj/item/A, mob/living/user)
- if(istype(A, /obj/item/twohanded/kinetic_crusher))
+ if(istype(A, /obj/item/kinetic_crusher))
add_to(A, user)
else
..()
-/obj/item/crusher_trophy/proc/add_to(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
+/obj/item/crusher_trophy/proc/add_to(obj/item/kinetic_crusher/H, mob/living/user)
for(var/t in H.trophies)
var/obj/item/crusher_trophy/T = t
if(istype(T, denied_type) || istype(src, T.denied_type))
@@ -250,14 +255,14 @@
to_chat(user, "You attach [src] to [H].")
return TRUE
-/obj/item/crusher_trophy/proc/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
+/obj/item/crusher_trophy/proc/remove_from(obj/item/kinetic_crusher/H, mob/living/user)
forceMove(get_turf(H))
H.trophies -= src
return TRUE
/obj/item/crusher_trophy/Destroy()
- if(istype(loc, /obj/item/twohanded/kinetic_crusher))
- var/obj/item/twohanded/kinetic_crusher/crusher = loc
+ if(istype(loc, /obj/item/kinetic_crusher))
+ var/obj/item/kinetic_crusher/crusher = loc
crusher.trophies -= src
return ..()
@@ -353,12 +358,12 @@
/obj/item/crusher_trophy/legion_skull/effect_desc()
return "a kinetic crusher to recharge [bonus_value*0.1] second\s faster"
-/obj/item/crusher_trophy/legion_skull/add_to(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
+/obj/item/crusher_trophy/legion_skull/add_to(obj/item/kinetic_crusher/H, mob/living/user)
. = ..()
if(.)
H.charge_time -= bonus_value
-/obj/item/crusher_trophy/legion_skull/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
+/obj/item/crusher_trophy/legion_skull/remove_from(obj/item/kinetic_crusher/H, mob/living/user)
. = ..()
if(.)
H.charge_time += bonus_value
@@ -425,20 +430,21 @@
/obj/item/crusher_trophy/demon_claws/effect_desc()
return "melee hits to do [bonus_value * 0.2] more damage and heal you for [bonus_value * 0.1], with 5X effect on mark detonation"
-/obj/item/crusher_trophy/demon_claws/add_to(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
+/obj/item/crusher_trophy/demon_claws/add_to(obj/item/kinetic_crusher/H, mob/living/user)
. = ..()
if(.)
H.force += bonus_value * 0.2
- H.force_unwielded += bonus_value * 0.2
H.force_wielded += bonus_value * 0.2
+ // don't update force since KCs have 0 force by default
+ H.AddComponent(/datum/component/two_handed, force_wielded = H.force_wielded, force_unwielded = H.force)
H.detonation_damage += bonus_value * 0.8
-/obj/item/crusher_trophy/demon_claws/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
+/obj/item/crusher_trophy/demon_claws/remove_from(obj/item/kinetic_crusher/H, mob/living/user)
. = ..()
if(.)
H.force -= bonus_value * 0.2
- H.force_unwielded -= bonus_value * 0.2
H.force_wielded -= bonus_value * 0.2
+ H.AddComponent(/datum/component/two_handed, force_wielded = H.force_wielded, force_unwielded = H.force)
H.detonation_damage -= bonus_value * 0.8
/obj/item/crusher_trophy/demon_claws/on_melee_hit(mob/living/target, mob/living/user)
@@ -504,12 +510,12 @@
/obj/item/crusher_trophy/adaptive_intelligence_core/effect_desc()
return "melee hits deal [bonus_value] more damage per hit after hitting a target, up to [bonus_value * 10] extra damage to that target"
-/obj/item/crusher_trophy/adaptive_intelligence_core/add_to(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
+/obj/item/crusher_trophy/adaptive_intelligence_core/add_to(obj/item/kinetic_crusher/H, mob/living/user)
. = ..()
if(.)
H.adaptive_damage_bonus += bonus_value
-/obj/item/crusher_trophy/adaptive_intelligence_core/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
+/obj/item/crusher_trophy/adaptive_intelligence_core/remove_from(obj/item/kinetic_crusher/H, mob/living/user)
. = ..()
if(.)
H.adaptive_damage_bonus -= bonus_value
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 2e4396f739b..4a4ba56ea2e 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -151,7 +151,7 @@
name = "champion's hardsuit"
desc = "Voices echo from the hardsuit, driving the user insane. Is not space-proof."
icon_state = "hardsuit-berserker"
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/spear)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/spear)
armor = list(MELEE = 30, BULLET = 15, LASER = 10, ENERGY = 10, BOMB = 150, RAD = 0, FIRE = INFINITY, ACID = INFINITY)
hoodtype = /obj/item/clothing/head/hooded/berserker
flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT | HIDETAIL
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 90b40677010..3a92de585ac 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -69,7 +69,7 @@
prize_list["Digging Tools"] = list(
EQUIPMENT("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
EQUIPMENT("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
- EQUIPMENT("Kinetic Crusher", /obj/item/twohanded/kinetic_crusher, 750),
+ EQUIPMENT("Kinetic Crusher", /obj/item/kinetic_crusher, 750),
EQUIPMENT("Resonator", /obj/item/resonator, 800),
EQUIPMENT("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
EQUIPMENT("Super Resonator", /obj/item/resonator/upgraded, 2500),
@@ -261,7 +261,7 @@
new /obj/item/stack/marker_beacon/thirty(drop_location)
if("Crusher Kit")
new /obj/item/extinguisher/mini(drop_location)
- new /obj/item/twohanded/kinetic_crusher(drop_location)
+ new /obj/item/kinetic_crusher(drop_location)
if("Mining Conscription Kit")
new /obj/item/storage/backpack/duffel/mining_conscript(drop_location)
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index 728c1f7ecc7..836d504dad7 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -221,7 +221,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
icon_state = "slag"
singular_name = "slag chunk"
-/obj/item/twohanded/required/gibtonite
+/obj/item/gibtonite
name = "gibtonite ore"
desc = "Extremely explosive if struck with mining equipment, Gibtonite is often used by miners to speed up their work by using it as a mining charge. This material is illegal to possess by unauthorized personnel under space law."
icon = 'icons/obj/mining.dmi'
@@ -236,13 +236,17 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
var/attacher = "UNKNOWN"
var/datum/wires/explosive/gibtonite/wires
-/obj/item/twohanded/required/gibtonite/Destroy()
+/obj/item/gibtonite/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, require_twohands = TRUE)
+
+/obj/item/gibtonite/Destroy()
if(wires)
SStgui.close_uis(wires)
QDEL_NULL(wires)
return ..()
-/obj/item/twohanded/required/gibtonite/attackby(obj/item/I, mob/user, params)
+/obj/item/gibtonite/attackby(obj/item/I, mob/user, params)
if(!wires && istype(I, /obj/item/assembly/igniter))
user.visible_message("[user] attaches [I] to [src].", "You attach [I] to [src].")
wires = new(src)
@@ -268,24 +272,24 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
return
..()
-/obj/item/twohanded/required/gibtonite/attack_ghost(mob/user)
+/obj/item/gibtonite/attack_ghost(mob/user)
if(wires)
wires.Interact(user)
-/obj/item/twohanded/required/gibtonite/attack_self(mob/user)
+/obj/item/gibtonite/attack_self(mob/user)
if(wires)
wires.Interact(user)
else
..()
-/obj/item/twohanded/required/gibtonite/bullet_act(obj/item/projectile/P)
+/obj/item/gibtonite/bullet_act(obj/item/projectile/P)
GibtoniteReaction(P.firer)
..()
-/obj/item/twohanded/required/gibtonite/ex_act()
+/obj/item/gibtonite/ex_act()
GibtoniteReaction(null, 1)
-/obj/item/twohanded/required/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by = 0)
+/obj/item/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by = 0)
if(!primed)
playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1)
primed = 1
diff --git a/code/modules/mob/inventory_procs.dm b/code/modules/mob/inventory_procs.dm
index 4af21dea2b4..e1771feafa6 100644
--- a/code/modules/mob/inventory_procs.dm
+++ b/code/modules/mob/inventory_procs.dm
@@ -28,6 +28,10 @@
return item_to_test && item_to_test.is_equivalent(I)
+/// Check if an item is in one of our hands
+/mob/proc/is_holding(obj/item/I)
+ return istype(I) && (I == r_hand || I == l_hand)
+
//Returns the thing in our inactive hand
/mob/proc/get_inactive_hand()
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 7a0df362104..a29ed432899 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -192,12 +192,8 @@
KnockDown(6 SECONDS)
/mob/living/carbon/swap_hand()
- var/obj/item/item_in_hand = get_active_hand()
- if(item_in_hand) //this segment checks if the item in your hand is twohanded.
- if(istype(item_in_hand,/obj/item/twohanded))
- if(item_in_hand:wielded == 1)
- to_chat(usr, "Your other hand is too busy holding the [item_in_hand.name]")
- return
+ if(SEND_SIGNAL(src, COMSIG_MOB_SWAPPING_HANDS, get_active_hand()) == COMPONENT_BLOCK_SWAP)
+ return
hand = !hand
update_hands_hud()
SEND_SIGNAL(src, COMSIG_CARBON_SWAP_HANDS)
@@ -627,8 +623,8 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
hit_atom.hit_by_thrown_carbon(src, throwingdatum, damage, FALSE, FALSE)
/mob/living/carbon/hit_by_thrown_carbon(mob/living/carbon/human/C, datum/thrownthing/throwingdatum, damage, mob_hurt, self_hurt)
- for(var/obj/item/twohanded/dualsaber/D in contents)
- if(D.wielded && D.force)
+ for(var/obj/item/dualsaber/D in contents)
+ if(HAS_TRAIT(src, TRAIT_WIELDED) && D.force)
visible_message("[src] impales [C] with [D], before dropping them on the ground!")
C.apply_damage(100, BRUTE, "chest", sharp = TRUE, used_weapon = "Impaled on [D].")
C.Stun(2 SECONDS) //Punishment. This could also be used by a traitor to throw someone into a dsword to kill them, but hey, teamwork!
@@ -1029,13 +1025,8 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
//called when we get cuffed/uncuffed
/mob/living/carbon/proc/update_handcuffed()
+ SEND_SIGNAL(src, COMSIG_CARBON_UPDATE_HANDCUFFED, handcuffed)
if(handcuffed)
- //we don't want problems with nodrop shit if there ever is more than one nodrop twohanded
- var/obj/item/I = get_active_hand()
- if(istype(I, /obj/item/twohanded))
- var/obj/item/twohanded/TH = I //FML
- if(TH.wielded)
- TH.unwield()
drop_r_hand()
drop_l_hand()
stop_pulling()
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 0b94acb2c1a..2d446a7e1ec 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -5,7 +5,7 @@
return FALSE
if(get_active_hand())
return FALSE
- if(istype(AM, /obj/item/twohanded))
+ if(AM.GetComponent(/datum/component/two_handed))
if(get_inactive_hand())
return FALSE
put_in_active_hand(AM)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm
index 8eaaa54f53d..da037e8375d 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm
@@ -370,7 +370,7 @@
suit = /obj/item/clothing/suit/armor/bone
gloves = /obj/item/clothing/gloves/bracer
if(prob(5))
- back = pickweight(list(/obj/item/twohanded/spear/bonespear = 3, /obj/item/twohanded/fireaxe/boneaxe = 2))
+ back = pickweight(list(/obj/item/spear/bonespear = 3, /obj/item/fireaxe/boneaxe = 2))
if(prob(10))
belt = /obj/item/storage/belt/mining/primitive
if(prob(30))
diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton_mob.dm b/code/modules/mob/living/simple_animal/hostile/skeleton_mob.dm
index 128a3cfab25..e2baff75166 100644
--- a/code/modules/mob/living/simple_animal/hostile/skeleton_mob.dm
+++ b/code/modules/mob/living/simple_animal/hostile/skeleton_mob.dm
@@ -45,6 +45,6 @@
melee_damage_upper = 20
deathmessage = "collapses into a pile of bones, its gear falling to the floor!"
loot = list(/obj/effect/decal/remains/human,
- /obj/item/twohanded/spear,
+ /obj/item/spear,
/obj/item/clothing/shoes/winterboots,
/obj/item/clothing/suit/hooded/wintercoat)
diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm
index 8032c07639e..113a28ef86e 100644
--- a/code/modules/mod/mod_theme.dm
+++ b/code/modules/mod/mod_theme.dm
@@ -129,7 +129,7 @@
slowdown_active = 0.75
allowed_suit_storage = list(
/obj/item/rcd,
- /obj/item/twohanded/fireaxe,
+ /obj/item/fireaxe,
)
skins = list(
"engineering" = list(
@@ -181,7 +181,7 @@
slowdown_active = 0.75
allowed_suit_storage = list(
/obj/item/rcd,
- /obj/item/twohanded/fireaxe/,
+ /obj/item/fireaxe/,
/obj/item/rpd,
/obj/item/t_scanner,
/obj/item/analyzer
@@ -239,7 +239,7 @@
allowed_suit_storage = list(
/obj/item/analyzer,
/obj/item/rcd,
- /obj/item/twohanded/fireaxe,
+ /obj/item/fireaxe,
/obj/item/melee/classic_baton/telescopic,
/obj/item/rpd,
/obj/item/t_scanner,
@@ -309,7 +309,7 @@
/obj/item/mining_scanner,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/pickaxe,
- /obj/item/twohanded/kinetic_crusher,
+ /obj/item/kinetic_crusher,
/obj/item/stack/ore/plasma,
/obj/item/storage/bag/ore,
/obj/item/gun/energy/kinetic_accelerator,
diff --git a/code/modules/power/cables/cable.dm b/code/modules/power/cables/cable.dm
index bf0bfcfb030..ff91ec6b020 100644
--- a/code/modules/power/cables/cable.dm
+++ b/code/modules/power/cables/cable.dm
@@ -96,8 +96,8 @@ By design, d1 is the smallest direction and d2 is the highest
return
coil.cable_join(src, user)
- else if(istype(W, /obj/item/twohanded/rcl))
- var/obj/item/twohanded/rcl/R = W
+ else if(istype(W, /obj/item/rcl))
+ var/obj/item/rcl/R = W
if(R.loaded)
R.loaded.cable_join(src, user)
R.is_empty(user)
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index b6a66781525..3bc3a19c1c5 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -148,7 +148,7 @@
amount = 25
max_amount = 25
resistance_flags = FLAMMABLE
- var/static/list/no_wrap = list(/obj/item/smallDelivery, /obj/structure/bigDelivery, /obj/item/evidencebag, /obj/structure/closet/body_bag, /obj/item/twohanded/required)
+ var/static/list/no_wrap = list(/obj/item/smallDelivery, /obj/structure/bigDelivery, /obj/item/evidencebag, /obj/structure/closet/body_bag)
/obj/item/stack/packageWrap/pre_attack(atom/A, mob/living/user, params)
. = ..()
@@ -198,6 +198,9 @@
return FALSE
D.init_welded = C.welded
C.welded = TRUE
+ else if (target.GetComponent(/datum/component/two_handed))
+ to_chat(user, "[target] is too unwieldy to wrap effectively.")
+ return FALSE
else
to_chat(user, "The object you are trying to wrap is unsuitable for the sorting machinery.")
return FALSE
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index cf6faf757da..49ccab63937 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -692,7 +692,7 @@
id = "rcl"
build_type = AUTOLATHE
materials = list(MAT_METAL = 5000)
- build_path = /obj/item/twohanded/rcl
+ build_path = /obj/item/rcl
category = list("initial", "Construction")
//hacked autolathe recipes
diff --git a/code/modules/response_team/ert_outfits.dm b/code/modules/response_team/ert_outfits.dm
index 5e1aef24a3e..bfd2e3daddc 100644
--- a/code/modules/response_team/ert_outfits.dm
+++ b/code/modules/response_team/ert_outfits.dm
@@ -497,7 +497,7 @@
/obj/item/grenade/chem_grenade/antiweed = 2,
/obj/item/lightreplacer = 1,
/obj/item/storage/bag/trash = 1,
- /obj/item/twohanded/push_broom,
+ /obj/item/push_broom,
/obj/item/storage/box/lights/mixed = 1,
/obj/item/melee/flyswatter = 1)
diff --git a/code/modules/ruins/spaceruin_code/voyager.dm b/code/modules/ruins/spaceruin_code/voyager.dm
index 31fa9012cff..8dde5e094e1 100644
--- a/code/modules/ruins/spaceruin_code/voyager.dm
+++ b/code/modules/ruins/spaceruin_code/voyager.dm
@@ -1,4 +1,4 @@
-/obj/item/twohanded/required/golden_record
+/obj/item/golden_record
name = "Golden Record"
desc = "A relic of the past, you don't know what lies inside, but you remember someone talking about it arriving in 250356 years"
icon = 'icons/obj/space/voyager.dmi'
@@ -12,6 +12,10 @@
resistance_flags = FIRE_PROOF | ACID_PROOF
origin_tech = "programming=6;biotech=6"
+/obj/item/golden_record/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, require_twohands = TRUE)
+
/turf/simulated/satellite
name = "satellite components storage"
desc = "There is plate covering inside storage, its wide and it have engraved 'Voyager' on it."
diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm
index 98bea054d3b..6a2fa561349 100644
--- a/code/modules/station_goals/bluespace_tap.dm
+++ b/code/modules/station_goals/bluespace_tap.dm
@@ -102,7 +102,7 @@
/obj/item/gun/projectile/shotgun/toy/crossbow = 1,
/obj/item/gun/projectile/shotgun/toy/tommygun = 1,
/obj/item/gun/projectile/automatic/sniper_rifle/toy = 1,
- /obj/item/twohanded/dualsaber/toy = 5,
+ /obj/item/dualsaber/toy = 5,
/obj/machinery/snow_machine = 10,
/obj/item/clothing/head/kitty = 5,
/obj/item/coin/antagtoken = 5,
diff --git a/code/modules/supply/supply_packs/pack_miscellaneous.dm b/code/modules/supply/supply_packs/pack_miscellaneous.dm
index c30be35071e..d6647d42023 100644
--- a/code/modules/supply/supply_packs/pack_miscellaneous.dm
+++ b/code/modules/supply/supply_packs/pack_miscellaneous.dm
@@ -151,7 +151,7 @@
/obj/item/reagent_containers/glass/bucket,
/obj/item/reagent_containers/glass/bucket,
/obj/item/mop,
- /obj/item/twohanded/push_broom,
+ /obj/item/push_broom,
/obj/item/caution,
/obj/item/caution,
/obj/item/caution,
@@ -225,7 +225,7 @@
/datum/supply_packs/misc/costume
name = "Costume Crate"
- contains = list(/obj/item/twohanded/staff,
+ contains = list(/obj/item/staff,
/obj/item/clothing/suit/wizrobe/fake,
/obj/item/clothing/shoes/sandal,
/obj/item/clothing/head/wizard/fake,
@@ -441,12 +441,12 @@
/datum/supply_packs/misc/polo //For space polo! Or horsehead Quiditch
name = "Polo Supply Crate"
// 6 brooms, 6 horse masks for the brooms, and 1 beach ball
- contains = list(/obj/item/twohanded/staff/broom,
- /obj/item/twohanded/staff/broom,
- /obj/item/twohanded/staff/broom,
- /obj/item/twohanded/staff/broom,
- /obj/item/twohanded/staff/broom,
- /obj/item/twohanded/staff/broom,
+ contains = list(/obj/item/staff/broom,
+ /obj/item/staff/broom,
+ /obj/item/staff/broom,
+ /obj/item/staff/broom,
+ /obj/item/staff/broom,
+ /obj/item/staff/broom,
/obj/item/clothing/mask/horsehead,
/obj/item/clothing/mask/horsehead,
/obj/item/clothing/mask/horsehead,
diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm
index d2af34214f8..4070b6fc2d0 100644
--- a/code/modules/surgery/generic.dm
+++ b/code/modules/surgery/generic.dm
@@ -14,7 +14,7 @@
/obj/item/kitchen/knife = 90,
/obj/item/shard = 60,
/obj/item/scissors = 12,
- /obj/item/twohanded/chainsaw = 1,
+ /obj/item/butcher_chainsaw = 1,
/obj/item/claymore = 6,
/obj/item/melee/energy = 6,
/obj/item/pen/edagger = 6,
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index 7a96f0e532b..7f70d8cb807 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -117,7 +117,7 @@
var/obj/item/arm_item = owner.get_item_by_slot(arm_slot)
if(arm_item)
- if(istype(arm_item, /obj/item/twohanded/offhand))
+ if(istype(arm_item, /obj/item/offhand))
var/obj/item/offhand_arm_item = owner.get_active_hand()
to_chat(owner, "Your hands are too encumbered wielding [offhand_arm_item] to deploy [src]!")
return
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 600a350f81f..2f1c0da66b8 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -714,7 +714,7 @@
/obj/item/kitchen/knife = 90,
/obj/item/shard = 60,
/obj/item/scissors = 12,
- /obj/item/twohanded/chainsaw = 1,
+ /obj/item/butcher_chainsaw = 1,
/obj/item/claymore = 6,
/obj/item/melee/energy = 6,
/obj/item/pen/edagger = 6
diff --git a/paradise.dme b/paradise.dme
index 6a3213e0e73..cce7f6aff08 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -386,6 +386,7 @@
#include "code\datums\components\sticky.dm"
#include "code\datums\components\surgery_initiator.dm"
#include "code\datums\components\swarming.dm"
+#include "code\datums\components\two_handed.dm"
#include "code\datums\discord\discord_manager.dm"
#include "code\datums\discord\discord_webhook.dm"
#include "code\datums\diseases\_disease.dm"
diff --git a/tools/UpdatePaths/Scripts/21619_twohanded.txt b/tools/UpdatePaths/Scripts/21619_twohanded.txt
new file mode 100644
index 00000000000..c60d099b33d
--- /dev/null
+++ b/tools/UpdatePaths/Scripts/21619_twohanded.txt
@@ -0,0 +1,18 @@
+/obj/item/twohanded/required/kirbyplants/@SUBTYPES : /obj/item/kirbyplants/@SUBTYPES{@OLD}
+/obj/item/twohanded/chainsaw : /obj/item/butcher_chainsaw{@OLD}
+/obj/item/twohanded/required/chainsaw/@SUBTYPES : /obj/item/chainsaw/@SUBTYPES{@OLD}
+/obj/item/twohanded/dualsaber/@SUBTYPES : /obj/item/dualsaber/@SUBTYPES{@OLD}
+/obj/item/twohanded/push_broom : /obj/item/push_broom{@OLD}
+/obj/item/twohanded/spear/@SUBTYPES : /obj/item/spear/@SUBTYPES{@OLD}
+/obj/item/twohanded/fireaxe/@SUBTYPES : /obj/item/fireaxe/@SUBTYPES{@OLD}
+/obj/item/twohanded/required/gibtonite : /obj/item/gibtonite{@OLD}
+/obj/item/twohanded/singularityhammer : /obj/item/singularityhammer{@OLD}
+/obj/item/twohanded/mjollnir : /obj/item/mjollnir{@OLD}
+/obj/item/twohanded/knighthammer : /obj/item/knighthammer{@OLD}
+/obj/item/twohanded/required/golden_record : /obj/item/golden_record{@OLD}
+/obj/item/twohanded/rcl/@SUBTYPES : /obj/item/rcl/@SUBTYPES{@OLD}
+/obj/item/twohanded/staff/@SUBTYPES : /obj/item/staff/@SUBTYPES{@OLD}
+/obj/item/twohanded/garrote/@SUBTYPES : /obj/item/garrote/@SUBTYPES{@OLD}
+/obj/item/twohanded/bostaff : /obj/item/bostaff{@OLD}
+/obj/item/twohanded/kinetic_crusher : /obj/item/kinetic_crusher{@OLD}
+/obj/item/twohanded/staff/@SUBTYPES : /obj/item/staff/@SUBTYPES{@OLD}